Isis 3 Programmer Reference
TProjection.h
Go to the documentation of this file.
1 #ifndef TProjection_h
2 #define TProjection_h
3 
25 #include <string>
26 #include <vector>
27 
28 #include "Projection.h"
29 #include "PvlGroup.h" // protected data member object (m_mappingGrp)
30 
31 namespace Isis {
32  class Displacement;
33  class Pvl;
34  class WorldMapper;
182  class TProjection : public Projection {
183  public:
184  // constructor
185  TProjection(Pvl &label);
186  virtual ~TProjection();
187  virtual bool operator== (const Projection &proj);
188 
189  double EquatorialRadius() const;
190  double PolarRadius() const;
191  double Eccentricity() const;
192  double LocalRadius(double lat) const;
193  double LocalRadius() const; // requires SetGround or SetCoordinate
194 
195  // These return or change properties of the projection, independent of calculations
202  virtual QString Name() const = 0;
203 
204 
211  virtual QString Version() const = 0;
212  virtual double TrueScaleLatitude() const;
213  virtual bool IsEquatorialCylindrical();
214 
215 
219  enum LatitudeType {
225  };
226 
227 
228  // Check latitude type or get latitude type as a string
229  bool IsPlanetocentric() const;
230  bool IsPlanetographic() const;
231  QString LatitudeTypeString() const;
232  // change latitude type
233  double ToPlanetocentric(const double lat) const;
234  double ToPlanetographic(const double lat) const;
235 
243  };
244 
245  // Check longitude direction or get longitude direction as a string
246  bool IsPositiveEast() const;
247  bool IsPositiveWest() const;
248  QString LongitudeDirectionString() const;
249 
250  // Check longitude domain or get longitude domain as a string
251  bool Has180Domain() const;
252  bool Has360Domain() const;
253  QString LongitudeDomainString() const;
254 
255  // Get min/max lat/lon
256  double MinimumLatitude() const;
257  double MaximumLatitude() const;
258  double MinimumLongitude() const;
259  double MaximumLongitude() const;
260 
261  // Calculations
262  // Set ground position or x/y coordinate
263  virtual bool SetGround(const double lat, const double lon);
264  virtual bool SetCoordinate(const double x, const double y);
265 
266  // Methods that depend on successful completion
267  // of SetGround/SetCoordinate Get lat,lon, x,y
268  double Latitude() const;
269  double Longitude() const;
270 
271  // Set the universal ground coordinate (calls SetGround)
272  bool SetUniversalGround(const double lat, const double lon);
273  bool SetUnboundUniversalGround(const double coord1, const double coord2);
274 
275  // Return the universal ground coordinate after successful SetCoordinate
276  double UniversalLatitude();
277  double UniversalLongitude();
278 
279  // get scale for mapping world coordinates
280  double Scale() const;
281 
282  // Return the x/y range which covers the lat/lon range in the labels
283  virtual bool XYRange(double &minX, double &maxX,
284  double &minY, double &maxY);
285 
286  // get mapping information
287  virtual PvlGroup Mapping();
288  virtual PvlGroup MappingLatitudes();
289  virtual PvlGroup MappingLongitudes();
290 
291  // change latitude type
292  static double ToPlanetocentric(double lat,
293  double eRadius, double pRadius);
294  static double ToPlanetographic(double lat,
295  double eRadius, double pRadius);
296  // change longitude direction
297  static double ToPositiveEast(const double lon, const int domain);
298  static double ToPositiveWest(const double lon, const int domain);
299 
300  // change longitude domain
301  static double To180Domain(const double lon);
302  static double To360Domain(const double lon);
303 
304  protected:
305  void XYRangeCheck(const double latitude, const double longitude);
306  bool inLongitudeRange(double longitude);
307  bool inLongitudeRange(double minLon, double maxLon, double longitude);
308  bool inLatitudeRange(double latitude);
309  bool xyRangeOblique(double &minX, double &maxX,
310  double &minY, double &maxY);
311 
312  // Convience methods for typical projection computations from Snyder
313  double qCompute(const double sinPhi) const; // page 16
314  double phi2Compute(const double t) const; // page 44
315  double mCompute(const double sinphi, const double cosphi) const; // page 101
316  double tCompute(const double phi, const double sinphi) const; //page 108
317  double e4Compute() const; // page 161
318 
319  private:
320  void doSearch(double minBorder, double maxBorder,
321  double &extremeVal, const double constBorder,
322  bool searchX, bool searchLongitude, bool findMin);
323  void findExtreme(double &minBorder, double &maxBorder,
324  double &minBorderX, double &minBorderY,
325  double &maxBorderX, double &maxBorderY,
326  const double constBorder, bool searchX,
327  bool searchLongitude, bool findMin);
328  void setSearchGround(const double variableBorder,
329  const double constBorder, bool variableIsLat);
330 
331  protected:
332  double m_latitude;
334  double m_longitude;
346  // TODO** Can this be generalized for both longitude and azimuth???
358  double m_polarRadius;
368  double m_eccentricity;
369 
378  private:
379  // These are necessary for calculating oblique X/Y range with
380  // discontinuity
381  std::vector<double> m_specialLatCases;
383  std::vector<double> m_specialLonCases;
385  };
386 };
387 #endif
388 
double EquatorialRadius() const
This returns the equatorial radius of the target.
virtual ~TProjection()
Destroys the TProjection object.
bool inLatitudeRange(double latitude)
Determine whether the given latitude is within the range of the MinimumLatitude and MaximumLatitude r...
double MaximumLongitude() const
This returns the maximum longitude of the area of interest.
std::vector< double > m_specialLonCases
Constant Longitudes that intersect a discontinuity.
Definition: TProjection.h:383
double mCompute(const double sinphi, const double cosphi) const
A convience method to compute Snyder&#39;s m equation (14-15) for a given latitude, . ...
double tCompute(const double phi, const double sinphi) const
A convience method to compute Snyder&#39;s t equation (15-9) for a given latitude, .
bool xyRangeOblique(double &minX, double &maxX, double &minY, double &maxY)
This method is used to find the XY range for oblique aspect projections (non-polar projections) by "w...
bool SetUniversalGround(const double lat, const double lon)
This method is used to set the latitude/longitude which must be Planetocentric (latitude) and Positiv...
double Scale() const
This method returns the scale for mapping world coordinates into projection coordinates.
bool IsPositiveEast() const
This indicates if the longitude direction type is positive west (as opposed to postive east)...
Longitude values increase in the westerly direction.
Definition: TProjection.h:241
Base class for Map TProjections.
Definition: TProjection.h:182
QString LatitudeTypeString() const
This method returns the latitude type as a string.
virtual bool operator==(const Projection &proj)
This method determines whether two map projection objects are equal by comparing the equatorial radiu...
virtual bool IsEquatorialCylindrical()
This method returns true if the projection is equatorial cylindrical.
std::vector< double > m_specialLatCases
Constant Latitudes that intersect a discontinuity.
Definition: TProjection.h:381
Latitudes are measured as the angle from the equatorial plane to the normal to the surface of the pla...
Definition: TProjection.h:223
virtual QString Version() const =0
This method returns the Version of the map projection.
double UniversalLongitude()
This returns a universal longitude (positive east in 0 to 360 domain).
double m_polarRadius
Polar radius of the target.
Definition: TProjection.h:358
bool inLongitudeRange(double longitude)
Determine whether the given longitude is within the range of the MinimumLongitude and MaximumLongitud...
Latitudes are measured as the angle from the equatorial plane to the plane through the center of the ...
Definition: TProjection.h:220
double m_latitude
This contains the currently set latitude value.
Definition: TProjection.h:332
void setSearchGround(const double variableBorder, const double constBorder, bool variableIsLat)
This function sets the ground for the given border values.
virtual PvlGroup MappingLatitudes()
This function returns the latitude keywords that this projection uses.
double MinimumLongitude() const
This returns the minimum longitude of the area of interest.
LongitudeDirection
This enum defines the types of Longitude directions supported in this class.
Definition: TProjection.h:239
double m_longitude
This contains the currently set longitude value.
Definition: TProjection.h:334
virtual QString Name() const =0
This method returns the name of the map projection.
bool IsPlanetocentric() const
This indicates if the latitude type is planetocentric (as opposed to planetographic).
double m_maximumLongitude
Contains the maximum longitude for the entire ground range.
Definition: TProjection.h:376
double m_minimumLatitude
Contains the minimum latitude for the entire ground range.
Definition: TProjection.h:370
static double ToPositiveWest(const double lon, const int domain)
This method converts a longitude into the positive west direction.
double m_maximumLatitude
Contains the maximum latitude for the entire ground range.
Definition: TProjection.h:372
Base class for Map Projections.
Definition: Projection.h:171
double Eccentricity() const
This returns the eccentricity of the target,.
double m_equatorialRadius
Polar radius of the target.
Definition: TProjection.h:351
int m_longitudeDomain
This integer is either 180 or 360 and is read from the labels.
Definition: TProjection.h:347
static double To180Domain(const double lon)
This method converts a longitude into the -180 to 180 domain.
bool Has180Domain() const
This indicates if the longitude domain is -180 to 180 (as opposed to 0 to 360).
void findExtreme(double &minBorder, double &maxBorder, double &minBorderX, double &minBorderY, double &maxBorderX, double &maxBorderY, const double constBorder, bool searchX, bool searchLongitude, bool findMin)
Searches for extreme (min/max/discontinuity) coordinate values across latitudes/longitudes.
bool IsPlanetographic() const
This indicates if the latitude type is planetographic (as opposed to planetocentric).
double Longitude() const
This returns a longitude with correct longitude direction and domain as specified in the label object...
Contains multiple PvlContainers.
Definition: PvlGroup.h:57
TProjection(Pvl &label)
Constructs an empty TProjection object.
double LocalRadius() const
This method returns the local radius in meters at the current latitude position.
virtual bool SetGround(const double lat, const double lon)
This method is used to set the latitude/longitude (assumed to be of the correct LatitudeType, LongitudeDirection, and LongitudeDomain.
QString LongitudeDirectionString() const
This method returns the longitude direction as a string.
bool Has360Domain() const
This indicates if the longitude domain is 0 to 360 (as opposed to -180 to 180).
Container for cube-like labels.
Definition: Pvl.h:135
double ToPlanetographic(const double lat) const
This method converts a planetocentric latitude to a planetographic latitude.
double phi2Compute(const double t) const
A convience method to compute latitude angle phi2 given small t, from Syder&#39;s recursive equation (7-9...
double MinimumLatitude() const
This returns the minimum latitude of the area of interest.
virtual PvlGroup Mapping()
This function returns the keywords that this projection uses.
double UniversalLatitude()
This returns a universal latitude (planetocentric).
static double To360Domain(const double lon)
This method converts a longitude into the 0 to 360 domain.
double e4Compute() const
A convience method to compute.
LongitudeDirection m_longitudeDirection
An enumerated type indicating the LongitudeDirection read from the labels.
Definition: TProjection.h:340
bool IsPositiveWest() const
This indicates if the longitude direction type is positive east (as opposed to postive west)...
virtual bool SetCoordinate(const double x, const double y)
This method is used to set the projection x/y.
double PolarRadius() const
This returns the polar radius of the target.
LatitudeType m_latitudeType
An enumerated type indicating the LatitudeType read from the labels.
Definition: TProjection.h:337
double Latitude() const
This returns a latitude with correct latitude type as specified in the label object.
double m_eccentricity
The eccentricity of the target body.
Definition: TProjection.h:368
Namespace for ISIS/Bullet specific routines.
Definition: Apollo.h:31
double ToPlanetocentric(const double lat) const
This method converts a planetographic latitude to a planetocentric latitude.
QString LongitudeDomainString() const
This method returns the longitude domain as a string.
virtual PvlGroup MappingLongitudes()
This function returns the longitude keywords that this projection uses.
void XYRangeCheck(const double latitude, const double longitude)
This convience function is established to assist in the development of the XYRange virtual method...
double m_minimumLongitude
Contains the minimum longitude for the entire ground range.
Definition: TProjection.h:374
bool SetUnboundUniversalGround(const double coord1, const double coord2)
This method is used to set the latitude/longitude.
void doSearch(double minBorder, double maxBorder, double &extremeVal, const double constBorder, bool searchX, bool searchLongitude, bool findMin)
This method searches for extreme (min/max/discontinuity) coordinate values along the constBorder line...
double qCompute(const double sinPhi) const
A convience method to compute Snyder&#39;s q equation (3-12) for a given latitude, .
static double ToPositiveEast(const double lon, const int domain)
This method converts a longitude into the positive east direction.
Longitude values increase in the easterly direction.
Definition: TProjection.h:239
LatitudeType
This enum defines the types of Latitude supported in this class.
Definition: TProjection.h:219
virtual double TrueScaleLatitude() const
This method returns the latitude of true scale.
virtual bool XYRange(double &minX, double &maxX, double &minY, double &maxY)
This method is used to determine the x/y range which completely covers the area of interest specified...
double MaximumLatitude() const
This returns the maximum latitude of the area of interest.