Isis 3 Programmer Reference
CameraPointInfo.cpp
Go to the documentation of this file.
1 
23 #include "CameraPointInfo.h"
24 
25 #include <QDebug>
26 
27 #include <iomanip>
28 
29 #include "Brick.h"
30 #include "Camera.h"
31 #include "CameraFocalPlaneMap.h"
32 #include "Cube.h"
33 #include "CubeManager.h"
34 #include "Distance.h"
35 #include "IException.h"
36 #include "iTime.h"
37 #include "Longitude.h"
38 #include "PvlGroup.h"
39 #include "SpecialPixel.h"
40 #include "TProjection.h"
41 
42 using namespace Isis;
43 using namespace std;
44 
45 namespace Isis {
46 
47 
53  m_usedCubes = NULL;
54  m_usedCubes = new CubeManager();
55  m_usedCubes->SetNumOpenCubes(50);
56  m_currentCube = NULL;
57  m_camera = NULL;
58  m_csvOutput = false;
59  }
60 
66  void CameraPointInfo::SetCSVOutput(bool csvOutput) {
67 
68  m_csvOutput = csvOutput;
69 
70  }
71 
77  if (m_usedCubes) {
78  delete m_usedCubes;
79  m_usedCubes = NULL;
80  }
81  }
82 
83 
91  void CameraPointInfo::SetCube(const QString &cubeFileName) {
92  m_currentCube = m_usedCubes->OpenCube(cubeFileName);
93  m_camera = m_currentCube->camera();
94  }
95 
96 
110  PvlGroup *CameraPointInfo::SetImage(const double sample, const double line,
111  const bool allowOutside, const bool allowErrors) {
112  if (CheckCube()) {
113  bool passed = m_camera->SetImage(sample, line);
114  return GetPointInfo(passed, allowOutside, allowErrors);
115  }
116  // Should never get here, error will be thrown in CheckCube()
117  return NULL;
118  }
119 
120 
131  PvlGroup *CameraPointInfo::SetCenter(const bool allowOutside, const bool allowErrors) {
132  if (CheckCube()) {
133  bool passed = m_camera->SetImage(m_currentCube->sampleCount() / 2.0,
134  m_currentCube->lineCount() / 2.0);
135  return GetPointInfo(passed, allowOutside, allowErrors);
136  }
137  // Should never get here, error will be thrown in CheckCube()
138  return NULL;
139  }
140 
141 
154  PvlGroup *CameraPointInfo::SetSample(const double sample,
155  const bool allowOutside,
156  const bool allowErrors) {
157  if (CheckCube()) {
158  bool passed = m_camera->SetImage(sample, m_currentCube->lineCount() / 2.0);
159  return GetPointInfo(passed, allowOutside, allowErrors);
160  }
161  // Should never get here, error will be thrown in CheckCube()
162  return NULL;
163  }
164 
165 
178  PvlGroup *CameraPointInfo::SetLine(const double line,
179  const bool allowOutside,
180  const bool allowErrors) {
181  if (CheckCube()) {
182  bool passed = m_camera->SetImage(m_currentCube->sampleCount() / 2.0, line);
183  return GetPointInfo(passed, allowOutside, allowErrors);
184  }
185  // Should never get here, error will be thrown in CheckCube()
186  return NULL;
187  }
188 
189 
203  PvlGroup *CameraPointInfo::SetGround(const double latitude, const double longitude,
204  const bool allowOutside, const bool allowErrors) {
205  if (CheckCube()) {
206  bool passed = m_camera->SetUniversalGround(latitude, longitude);
207  return GetPointInfo(passed, allowOutside, allowErrors);
208  }
209  // Should never get here, error will be thrown in CheckCube()
210  return NULL;
211  }
212 
213 
221  if (m_currentCube == NULL) {
222  string msg = "Please set a cube before setting parameters";
224  return false;
225  }
226  return true;
227  }
228 
229 
243  PvlGroup *CameraPointInfo::GetPointInfo(bool passed, bool allowOutside, bool allowErrors) {
244  PvlGroup *gp = new PvlGroup("GroundPoint");
245 
246  //Outputting in PVL format
247  if(!m_csvOutput)
248  {
249  gp->addKeyword(PvlKeyword("Filename"));
250  gp->addKeyword(PvlKeyword("Sample"));
251  gp->addKeyword(PvlKeyword("Line"));
252  gp->addKeyword(PvlKeyword("PixelValue"));
253  gp->addKeyword(PvlKeyword("RightAscension"));
254  gp->addKeyword(PvlKeyword("Declination"));
255  gp->addKeyword(PvlKeyword("PlanetocentricLatitude"));
256  gp->addKeyword(PvlKeyword("PlanetographicLatitude"));
257  gp->addKeyword(PvlKeyword("PositiveEast360Longitude"));
258  gp->addKeyword(PvlKeyword("PositiveEast180Longitude"));
259  gp->addKeyword(PvlKeyword("PositiveWest360Longitude"));
260  gp->addKeyword(PvlKeyword("PositiveWest180Longitude"));
261  gp->addKeyword(PvlKeyword("BodyFixedCoordinate"));
262  gp->addKeyword(PvlKeyword("LocalRadius"));
263  gp->addKeyword(PvlKeyword("SampleResolution"));
264  gp->addKeyword(PvlKeyword("LineResolution"));
265  gp->addKeyword(PvlKeyword("ObliqueDetectorResolution"));
266  gp->addKeyword(PvlKeyword("ObliquePixelResolution"));
267  gp->addKeyword(PvlKeyword("ObliqueLineResolution"));
268  gp->addKeyword(PvlKeyword("ObliqueSampleResolution"));
269  gp->addKeyword(PvlKeyword("SpacecraftPosition"));
270  gp->addKeyword(PvlKeyword("SpacecraftAzimuth"));
271  gp->addKeyword(PvlKeyword("SlantDistance"));
272  gp->addKeyword(PvlKeyword("TargetCenterDistance"));
273  gp->addKeyword(PvlKeyword("SubSpacecraftLatitude"));
274  gp->addKeyword(PvlKeyword("SubSpacecraftLongitude"));
275  gp->addKeyword(PvlKeyword("SpacecraftAltitude"));
276  gp->addKeyword(PvlKeyword("OffNadirAngle"));
277  gp->addKeyword(PvlKeyword("SubSpacecraftGroundAzimuth"));
278  gp->addKeyword(PvlKeyword("SunPosition"));
279  gp->addKeyword(PvlKeyword("SubSolarAzimuth"));
280  gp->addKeyword(PvlKeyword("SolarDistance"));
281  gp->addKeyword(PvlKeyword("SubSolarLatitude"));
282  gp->addKeyword(PvlKeyword("SubSolarLongitude"));
283  gp->addKeyword(PvlKeyword("SubSolarGroundAzimuth"));
284  gp->addKeyword(PvlKeyword("Phase"));
285  gp->addKeyword(PvlKeyword("Incidence"));
286  gp->addKeyword(PvlKeyword("Emission"));
287  gp->addKeyword(PvlKeyword("NorthAzimuth"));
288  gp->addKeyword(PvlKeyword("EphemerisTime"));
289  gp->addKeyword(PvlKeyword("UTC"));
290  gp->addKeyword(PvlKeyword("LocalSolarTime"));
291  gp->addKeyword(PvlKeyword("SolarLongitude"));
292  gp->addKeyword(PvlKeyword("LookDirectionBodyFixed"));
293  gp->addKeyword(PvlKeyword("LookDirectionJ2000"));
294  gp->addKeyword(PvlKeyword("LookDirectionCamera"));
295 
296  if (allowErrors) gp->addKeyword(PvlKeyword("Error"));
297  }
298 
299  else {
300 
301  gp->addKeyword(PvlKeyword("Filename"));
302  gp->addKeyword(PvlKeyword("Sample"));
303  gp->addKeyword(PvlKeyword("Line"));
304  gp->addKeyword(PvlKeyword("PixelValue"));
305  gp->addKeyword(PvlKeyword("RightAscension"));
306  gp->addKeyword(PvlKeyword("Declination"));
307  gp->addKeyword(PvlKeyword("PlanetocentricLatitude"));
308  gp->addKeyword(PvlKeyword("PlanetographicLatitude"));
309  gp->addKeyword(PvlKeyword("PositiveEast360Longitude"));
310  gp->addKeyword(PvlKeyword("PositiveEast180Longitude"));
311  gp->addKeyword(PvlKeyword("PositiveWest360Longitude"));
312  gp->addKeyword(PvlKeyword("PositiveWest180Longitude"));
313  gp->addKeyword(PvlKeyword("BodyFixedCoordinate"));
314  gp->addKeyword(PvlKeyword("LocalRadius"));
315  gp->addKeyword(PvlKeyword("SampleResolution"));
316  gp->addKeyword(PvlKeyword("LineResolution"));
317  gp->addKeyword(PvlKeyword("SpacecraftPosition"));
318  gp->addKeyword(PvlKeyword("SpacecraftAzimuth"));
319  gp->addKeyword(PvlKeyword("SlantDistance"));
320  gp->addKeyword(PvlKeyword("TargetCenterDistance"));
321  gp->addKeyword(PvlKeyword("SubSpacecraftLatitude"));
322  gp->addKeyword(PvlKeyword("SubSpacecraftLongitude"));
323  gp->addKeyword(PvlKeyword("SpacecraftAltitude"));
324  gp->addKeyword(PvlKeyword("OffNadirAngle"));
325  gp->addKeyword(PvlKeyword("SubSpacecraftGroundAzimuth"));
326  gp->addKeyword(PvlKeyword("SunPosition"));
327  gp->addKeyword(PvlKeyword("SubSolarAzimuth"));
328  gp->addKeyword(PvlKeyword("SolarDistance"));
329  gp->addKeyword(PvlKeyword("SubSolarLatitude"));
330  gp->addKeyword(PvlKeyword("SubSolarLongitude"));
331  gp->addKeyword(PvlKeyword("SubSolarGroundAzimuth"));
332  gp->addKeyword(PvlKeyword("Phase"));
333  gp->addKeyword(PvlKeyword("Incidence"));
334  gp->addKeyword(PvlKeyword("Emission"));
335  gp->addKeyword(PvlKeyword("NorthAzimuth"));
336  gp->addKeyword(PvlKeyword("EphemerisTime"));
337  gp->addKeyword(PvlKeyword("UTC"));
338  gp->addKeyword(PvlKeyword("LocalSolarTime"));
339  gp->addKeyword(PvlKeyword("SolarLongitude"));
340  gp->addKeyword(PvlKeyword("LookDirectionBodyFixed"));
341  gp->addKeyword(PvlKeyword("LookDirectionJ2000"));
342  gp->addKeyword(PvlKeyword("LookDirectionCamera"));
343  gp->addKeyword(PvlKeyword("ObliqueDetectorResolution"));
344  gp->addKeyword(PvlKeyword("ObliquePixelResolution"));
345  gp->addKeyword(PvlKeyword("ObliqueLineResolution"));
346  gp->addKeyword(PvlKeyword("ObliqueSampleResolution"));
347  if (allowErrors) gp->addKeyword(PvlKeyword("Error"));
348 
349 
350 
351 
352  }
353 
354 
355 
356  bool noErrors = passed;
357  QString error = "";
358  if (!m_camera->HasSurfaceIntersection()) {
359  error = "Requested position does not project in camera model; no surface intersection";
360  noErrors = false;
361  if (!allowErrors) throw IException(IException::Unknown, error, _FILEINFO_);
362  }
363  if (!m_camera->InCube() && !allowOutside) {
364  error = "Requested position does not project in camera model; not inside cube";
365  noErrors = false;
366  if (!allowErrors) throw IException(IException::Unknown, error, _FILEINFO_);
367  }
368 
369  if (!noErrors) {
370  for (int i = 0; i < gp->keywords(); i++) {
371  QString name = (*gp)[i].name();
372  // These three keywords have 3 values, so they must have 3 NULLs
373  if (name == "BodyFixedCoordinate" || name == "SpacecraftPosition" ||
374  name == "SunPosition") {
375  (*gp)[i].addValue("NULL");
376  (*gp)[i].addValue("NULL");
377  (*gp)[i].addValue("NULL");
378  }
379  else {
380  (*gp)[i].setValue("NULL");
381  }
382  }
383  // Set all keywords that still have valid information
384  gp->findKeyword("Error").setValue(error);
385  gp->findKeyword("FileName").setValue(m_currentCube->fileName());
386  gp->findKeyword("Sample").setValue(toString(m_camera->Sample()));
387  gp->findKeyword("Line").setValue(toString(m_camera->Line()));
388  gp->findKeyword("EphemerisTime").setValue(
389  toString(m_camera->time().Et()), "seconds");
390  gp->findKeyword("EphemerisTime").addComment("Time");
391  QString utc = m_camera->time().UTC();
392  gp->findKeyword("UTC").setValue(utc);
393  gp->findKeyword("SpacecraftPosition").addComment("Spacecraft Information");
394  gp->findKeyword("SunPosition").addComment("Sun Information");
395  gp->findKeyword("Phase").addComment("Illumination and Other");
396  }
397  else {
398 
399  Brick b(3, 3, 1, m_currentCube->pixelType());
400 
401  int intSamp = (int)(m_camera->Sample() + 0.5);
402  int intLine = (int)(m_camera->Line() + 0.5);
403  b.SetBasePosition(intSamp, intLine, 1);
404  m_currentCube->read(b);
405 
406  double pB[3], spB[3], sB[3];
407  QString utc;
408  double ssplat, ssplon, sslat, sslon, ocentricLat, ographicLat, pe360Lon, pw360Lon;
409 
410  {
411  gp->findKeyword("FileName").setValue(m_currentCube->fileName());
412  gp->findKeyword("Sample").setValue(toString(m_camera->Sample()));
413  gp->findKeyword("Line").setValue(toString(m_camera->Line()));
414  gp->findKeyword("PixelValue").setValue(PixelToString(b[0]));
415  gp->findKeyword("RightAscension").setValue(toString(
416  m_camera->RightAscension()), "DEGREE");
417  gp->findKeyword("Declination").setValue(toString(
418  m_camera->Declination()), "DEGREE");
419  ocentricLat = m_camera->UniversalLatitude();
420  gp->findKeyword("PlanetocentricLatitude").setValue(toString(ocentricLat), "DEGREE");
421 
422  // Convert lat to planetographic
423  Distance radii[3];
424  m_camera->radii(radii);
425  ographicLat = TProjection::ToPlanetographic(ocentricLat,
426  radii[0].kilometers(),
427  radii[2].kilometers());
428  gp->findKeyword("PlanetographicLatitude").setValue(toString(ographicLat), "DEGREE");
429 
430  pe360Lon = m_camera->UniversalLongitude();
431  gp->findKeyword("PositiveEast360Longitude").setValue(toString(pe360Lon), "DEGREE");
432 
433  //Convert lon to -180 - 180 range
434  gp->findKeyword("PositiveEast180Longitude").setValue(toString(
435  TProjection::To180Domain(pe360Lon)), "DEGREE");
436 
437  //Convert lon to positive west
438  pw360Lon = TProjection::ToPositiveWest(pe360Lon, 360);
439  gp->findKeyword("PositiveWest360Longitude").setValue(toString(pw360Lon), "DEGREE");
440 
441  //Convert pwlon to -180 - 180 range
442  gp->findKeyword("PositiveWest180Longitude").setValue(
443  toString( TProjection::To180Domain(pw360Lon)), "DEGREE");
444 
445  m_camera->Coordinate(pB);
446  gp->findKeyword("BodyFixedCoordinate").addValue(toString(pB[0]), "km");
447  gp->findKeyword("BodyFixedCoordinate").addValue(toString(pB[1]), "km");
448  gp->findKeyword("BodyFixedCoordinate").addValue(toString(pB[2]), "km");
449 
450  gp->findKeyword("LocalRadius").setValue(toString(
451  m_camera->LocalRadius().meters()), "meters");
452  gp->findKeyword("SampleResolution").setValue(toString(
453  m_camera->SampleResolution()), "meters/pixel");
454  gp->findKeyword("LineResolution").setValue(toString(
455  m_camera->LineResolution()), "meters/pixel");
456 
457  gp->findKeyword("ObliqueDetectorResolution").setValue(
458  toString(m_camera->ObliqueDetectorResolution()),"meters");
459  gp->findKeyword("ObliqueLineResolution").setValue(
460  toString(m_camera->ObliqueLineResolution()),"meters");
461  gp->findKeyword("ObliqueSampleResolution").setValue(
462  toString(m_camera->ObliqueSampleResolution()),"meters");
463  gp->findKeyword("ObliquePixelResolution").setValue(
464  toString(m_camera->ObliquePixelResolution()), "meters/pix");
465 
466 
467  //body fixed
468  m_camera->instrumentPosition(spB);
469  gp->findKeyword("SpacecraftPosition").addValue(toString(spB[0]), "km");
470  gp->findKeyword("SpacecraftPosition").addValue(toString(spB[1]), "km");
471  gp->findKeyword("SpacecraftPosition").addValue(toString(spB[2]), "km");
472  gp->findKeyword("SpacecraftPosition").addComment("Spacecraft Information");
473 
474  double spacecraftAzi = m_camera->SpacecraftAzimuth();
475  if (Isis::IsValidPixel(spacecraftAzi)) {
476  gp->findKeyword("SpacecraftAzimuth").setValue(toString(spacecraftAzi), "DEGREE");
477  }
478  else {
479  gp->findKeyword("SpacecraftAzimuth").setValue("NULL");
480  }
481 
482  gp->findKeyword("SlantDistance").setValue(toString(
483  m_camera->SlantDistance()), "km");
484  gp->findKeyword("TargetCenterDistance").setValue(toString(
485  m_camera->targetCenterDistance()), "km");
486  m_camera->subSpacecraftPoint(ssplat, ssplon);
487  gp->findKeyword("SubSpacecraftLatitude").setValue(toString(ssplat), "DEGREE");
488  gp->findKeyword("SubSpacecraftLongitude").setValue(toString(ssplon), "DEGREE");
489  gp->findKeyword("SpacecraftAltitude").setValue(toString(
490  m_camera->SpacecraftAltitude()), "km");
491  gp->findKeyword("OffNadirAngle").setValue(toString(
492  m_camera->OffNadirAngle()), "DEGREE");
493  double subspcgrdaz = m_camera->GroundAzimuth(m_camera->UniversalLatitude(),
494  m_camera->UniversalLongitude(),
495  ssplat, ssplon);
496  gp->findKeyword("SubSpacecraftGroundAzimuth").setValue(
497  toString(subspcgrdaz), "DEGREE");
498 
499  m_camera->sunPosition(sB);
500  gp->findKeyword("SunPosition").addValue(toString(sB[0]), "km");
501  gp->findKeyword("SunPosition").addValue(toString(sB[1]), "km");
502  gp->findKeyword("SunPosition").addValue(toString(sB[2]), "km");
503  gp->findKeyword("SunPosition").addComment("Sun Information");
504 
505  double sunAzi = m_camera->SunAzimuth();
506  if (Isis::IsValidPixel(sunAzi)) {
507  gp->findKeyword("SubSolarAzimuth").setValue(toString(sunAzi), "DEGREE");
508  }
509  else {
510  gp->findKeyword("SubSolarAzimuth").setValue("NULL");
511  }
512 
513  gp->findKeyword("SolarDistance").setValue(toString(
514  m_camera->SolarDistance()), "AU");
515  m_camera->subSolarPoint(sslat, sslon);
516  gp->findKeyword("SubSolarLatitude").setValue(toString(sslat), "DEGREE");
517  gp->findKeyword("SubSolarLongitude").setValue(toString(sslon), "DEGREE");
518  double subsolgrdaz = m_camera->GroundAzimuth(m_camera->UniversalLatitude(),
519  m_camera->UniversalLongitude(),
520  sslat, sslon);
521  gp->findKeyword("SubSolarGroundAzimuth").setValue(
522  toString(subsolgrdaz), "DEGREE");
523 
524  gp->findKeyword("Phase").setValue(toString(m_camera->PhaseAngle()), "DEGREE");
525  gp->findKeyword("Phase").addComment("Illumination and Other");
526  gp->findKeyword("Incidence").setValue(toString(
527  m_camera->IncidenceAngle()), "DEGREE");
528  gp->findKeyword("Emission").setValue(toString(
529  m_camera->EmissionAngle()), "DEGREE");
530 
531  double northAzi = m_camera->NorthAzimuth();
532  if (Isis::IsValidPixel(northAzi)) {
533  gp->findKeyword("NorthAzimuth").setValue(toString(northAzi), "DEGREE");
534  }
535  else {
536  gp->findKeyword("NorthAzimuth").setValue("NULL");
537  }
538 
539  gp->findKeyword("EphemerisTime").setValue(toString(
540  m_camera->time().Et()), "seconds");
541  gp->findKeyword("EphemerisTime").addComment("Time");
542  utc = m_camera->time().UTC();
543  gp->findKeyword("UTC").setValue(utc);
544  gp->findKeyword("LocalSolarTime").setValue(toString(
545  m_camera->LocalSolarTime()), "hour");
546  gp->findKeyword("SolarLongitude").setValue(toString(
547  m_camera->solarLongitude().degrees()), "DEGREE");
548 
549  std::vector<double>lookB = m_camera->lookDirectionBodyFixed();
550  gp->findKeyword("LookDirectionBodyFixed").addValue(toString(lookB[0]), "DEGREE");
551  gp->findKeyword("LookDirectionBodyFixed").addValue(toString(lookB[1]), "DEGREE");
552  gp->findKeyword("LookDirectionBodyFixed").addValue(toString(lookB[2]), "DEGREE");
553  gp->findKeyword("LookDirectionBodyFixed").addComment("Look Direction Unit Vectors in Body Fixed, J2000, and Camera Coordinate Systems.");
554 
555  std::vector<double>lookJ = m_camera->lookDirectionJ2000();
556  gp->findKeyword("LookDirectionJ2000").addValue(toString(lookJ[0]), "DEGREE");
557  gp->findKeyword("LookDirectionJ2000").addValue(toString(lookJ[1]), "DEGREE");
558  gp->findKeyword("LookDirectionJ2000").addValue(toString(lookJ[2]), "DEGREE");
559 
560  double lookC[3];
561  m_camera->LookDirection(lookC);
562  gp->findKeyword("LookDirectionCamera").addValue(toString(lookC[0]), "DEGREE");
563  gp->findKeyword("LookDirectionCamera").addValue(toString(lookC[1]), "DEGREE");
564  gp->findKeyword("LookDirectionCamera").addValue(toString(lookC[2]), "DEGREE");
565 
566 
567 
568  if (allowErrors) gp->findKeyword("Error").setValue("NULL");
569  }
570  }
571  return gp;
572  }
573 
574 
581  return m_camera;
582  }
583 
584 
591  return m_currentCube;
592  }
593 }
594 
int keywords() const
Returns the number of keywords contained in the PvlContainer.
Definition: PvlContainer.h:100
Cube * cube()
Retrieves a pointer to the current cube.
CameraPointInfo()
Constructor, initializes CubeManager and other variables for use.
Camera * camera()
Retrieves a pointer to the camera.
Buffer for containing a three dimensional section of an image.
Definition: Brick.h:61
Namespace for the standard library.
void SetBasePosition(const int start_sample, const int start_line, const int start_band)
This method is used to set the base position of the shape buffer.
Definition: Brick.h:136
QString toString(bool boolToConvert)
Global function to convert a boolean to a string.
Definition: IString.cpp:226
virtual ~CameraPointInfo()
Destructor, deletes CubeManager object used.
void addKeyword(const PvlKeyword &keyword, const InsertMode mode=Append)
Add a keyword to the container.
bool IsValidPixel(const double d)
Returns if the input pixel is valid.
Definition: SpecialPixel.h:238
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
This error is for when a programmer made an API call that was illegal.
Definition: IException.h:162
Distance measurement, usually in meters.
Definition: Distance.h:47
void addComment(QString comment)
Add a comment to the PvlKeyword.
Definition: PvlKeyword.cpp:392
static double ToPositiveWest(const double lon, const int domain)
This method converts a longitude into the positive west direction.
static double To180Domain(const double lon)
This method converts a longitude into the -180 to 180 domain.
void SetCube(const QString &cubeFileName)
SetCube opens the given cube in a CubeManager.
PvlGroup * SetImage(const double sample, const double line, const bool outside=false, const bool error=false)
SetImage sets a sample, line image coordinate in the camera so data can be accessed.
bool CheckCube()
CheckCube checks that a cube has been set before the data for a point is accessed.
Contains multiple PvlContainers.
Definition: PvlGroup.h:57
#define _FILEINFO_
Macro for the filename and line number.
Definition: IException.h:40
A single keyword-value pair.
Definition: PvlKeyword.h:98
A type of error that cannot be classified as any of the other error types.
Definition: IException.h:134
void SetCSVOutput(bool csvOutput)
Set the output format (true is CSV, false is PVL)
PvlGroup * SetLine(const double line, const bool outside=false, const bool error=false)
SetLine sets the image coordinates to the center sample and the given line.
double ToPlanetographic(const double lat) const
This method converts a planetocentric latitude to a planetographic latitude.
Class for quick re-accessing of cubes based on file name.
Definition: CubeManager.h:64
PvlKeyword & findKeyword(const QString &name)
Find a keyword with a specified name.
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
QString PixelToString(double d)
Takes a double pixel value and returns the name of the pixel type as a string.
Definition: SpecialPixel.h:386
Isis exception class.
Definition: IException.h:107
Namespace for ISIS/Bullet specific routines.
Definition: Apollo.h:31
virtual PvlGroup * GetPointInfo(bool passed, bool outside, bool errors)
GetPointInfo builds the PvlGroup containing all the important information derived from the Camera...
void setValue(QString value, QString unit="")
Sets new values.
Definition: PvlKeyword.cpp:171
PvlGroup * SetSample(const double sample, const bool outside=false, const bool error=false)
SetSample sets the image coordinates to the center line and the given sample.
PvlGroup * SetGround(const double latitude, const double longitude, const bool outside=false, const bool error=false)
SetGround sets a latitude, longitude grrund coordinate in the camera so data can be accessed...
PvlGroup * SetCenter(const bool outside=false, const bool error=false)
SetCenter sets the image coordinates to the center of the image.
void addValue(QString value, QString unit="")
Adds a value with units.
Definition: PvlKeyword.cpp:268
IO Handler for Isis Cubes.
Definition: Cube.h:170