Isis 3 Programmer Reference
Projection.h
1#ifndef Projection_h
2#define Projection_h
8/* SPDX-License-Identifier: CC0-1.0 */
9#include <string>
10#include <vector>
11
12#include "PvlGroup.h" // protected data member object (m_mappingGrp)
13
14namespace Isis {
15 class Displacement;
16 class Pvl;
17 class WorldMapper;
156 public:
157 // constructor
158 Projection(Pvl &label);
159 virtual ~Projection();
160 virtual bool operator== (const Projection &proj);
161 bool operator!= (const Projection &proj);
162
171
172 // These are the accessors for the projection type
173 void setProjectionType(const ProjectionType ptype);
174 ProjectionType projectionType() const;
175
176 // These return properties of the target
177 bool IsSky() const;
178
179 // These return or change properties of the projection, independent of calculations
186 virtual QString Name() const = 0;
187
188 // These return properties of the target
189 virtual double LocalRadius() const = 0; // requires SetGround or SetCoordinate
190
197 virtual QString Version() const = 0;
198 virtual bool IsEquatorialCylindrical();
199
200 // Check azimuth /longitude domain or get domain as a string
201 // TODO** check implementation to see if this can be generalized to
202 // work for azimuth and longitude and go in Projection
203
204 // Check longitude domain or get longitude domain as a string
205 /* bool Has180Domain() const;
206 bool Has360Domain() const;
207 QString LongitudeDomainString() const;
208 */
209
210 // Check if labels contain min/max lat/lon or comparable
211 virtual bool HasGroundRange() const;
212
213 // get rotation
214 double Rotation() const;
215
216 // Set world mapper
217 void SetWorldMapper(WorldMapper *mapper);
218
219 // Calculations
220 // Set ground position or x/y coordinate
221 virtual bool SetGround(const double lat, const double lon) = 0;
222 virtual bool SetCoordinate(const double x, const double y) = 0;
223 bool IsGood() const;
224
225 // Methods that depend on successful completion
226 // of SetCoordinate Get x,y
227 double XCoord() const;
228 double YCoord() const;
229
230 // Set the universal ground coordinate (calls SetGround)
231 virtual bool SetUniversalGround(const double coord1, const double coord2);
232 virtual bool SetUnboundUniversalGround(const double coord1, const double coord2);
233
234 // Set world position (calls SetCoordinate on projected x/y)
235 virtual bool SetWorld(const double x, const double y);
236
237 // Get computed world X/Y after successful SetGround
238 virtual double WorldX() const;
239 virtual double WorldY() const;
240
241 // convert from projected coordinate to world coordinate
242 double ToWorldX(const double projectionX) const;
243 double ToWorldY(const double projectionY) const;
244
245 // convert from world coordinate to projected coordinate
246 double ToProjectionX(const double worldX) const;
247 double ToProjectionY(const double worldY) const;
248
249 // get resolution and scale for mapping world coordinates
250 double Resolution() const;
251 virtual double Scale() const = 0;
252
253 // Return the x/y range which covers the lat/lon range in the labels
254 virtual bool XYRange(double &minX, double &maxX,
255 double &minY, double &maxY) = 0;
256
257 // set UpperLeftCornerX and UpperLeftCornerY in mapping group
258 void SetUpperLeftCorner(const Displacement &x, const Displacement &y);
259
260 // get mapping information
261 virtual PvlGroup Mapping() = 0;
262
263 // Static conversion methods
264 static double ToHours(double angle);
265 static QString ToDMS(double angle);
266 static QString ToHMS(double angle);
267
268 protected:
269 virtual void XYRangeCheck(const double latitude, const double longitude) = 0;
270 // bool xyRangeOblique(double &minX, double &maxX,
271 // double &minY, double &maxY);
272 void SetXY(double x, double y);
273 void SetComputedXY(double x, double y);
274 double GetX() const;
275 double GetY() const;
276 double PixelResolution() const;
277
278 private:
279 // This is currently only used in triaxial projections. In the future it may be needed by other types
280 /* virtual void doSearch(double minBorder, double maxBorder,
281 double &extremeVal, const double constBorder,
282 bool searchX, bool searchLongitude, bool findMin) = 0;
283 virtual void findExtreme(double &minBorder, double &maxBorder,
284 double &minBorderX, double &minBorderY,
285 double &maxBorderX, double &maxBorderY,
286 const double constBorder, bool searchX,
287 bool searchLongitude, bool findMin) = 0;
288 virtual void setSearchGround(const double variableBorder,
289 const double constBorder, bool variableIsLat) = 0;
290 */
291 protected:
300 bool m_good;
303 // TODO** Can this be generalized for both longitude and azimuth???
304 // int m_longitudeDomain; /**< This integer is either 180 or 360 and is read
305 // from the labels. It represents the longitude
306 // domain when returning values through Longitude
307 // method. The domain is either -180 to 180 or
308 // 0 to 360.**/
309
310 bool m_sky;
316 // Convenience data for XYRange virtual function
317 double m_minimumX;
326 double m_maximumX;
327 double m_minimumY;
328 double m_maximumY;
330
331 private:
332 ProjectionType m_projectionType;
333 double m_rotation;
334
335 double m_x;
339 double m_y;
346 };
347};
348#endif
Displacement is a signed length, usually in meters.
Base class for Map Projections.
Definition Projection.h:155
double m_y
This contains the rotated Y coordinate for a specific projection at the position indicated by m_latit...
Definition Projection.h:339
static double ToHours(double angle)
Converts the given angle (in degrees) to hours by using the ratio 15 degrees per hour.
double ToWorldY(const double projectionY) const
This method converts a projection y value to a world y value.
virtual bool SetUniversalGround(const double coord1, const double coord2)
This method is used to set the lat/lon or radius/azimuth (i.e.
void SetWorldMapper(WorldMapper *mapper)
If desired the programmer can use this method to set a world mapper to be used in the SetWorld,...
double m_rotation
Rotation of map (usually zero)
Definition Projection.h:333
ProjectionType
This enum defines the subclasses of Projection supported in Isis.
Definition Projection.h:166
@ Triaxial
These projections are used to map triaxial and irregular-shaped bodies.
Definition Projection.h:166
@ RingPlane
These projections are used to map ring planes.
Definition Projection.h:168
WorldMapper * m_mapper
This points to a mapper passed into the SetWorldMapper method.
Definition Projection.h:292
double Resolution() const
This method returns the resolution for mapping world coordinates into projection coordinates.
virtual bool operator==(const Projection &proj)
This method determines whether two map projection objects are equal by comparing the resolution,...
double XCoord() const
This returns the projection X provided SetGround, SetCoordinate, SetUniversalGround,...
double m_maximumX
See minimumX description.
Definition Projection.h:326
virtual bool SetWorld(const double x, const double y)
This method is used to set a world coordinate.
virtual ~Projection()
Destroys the Projection object.
bool IsSky() const
Returns true if projection is sky and false if it is land.
virtual bool HasGroundRange() const
This indicates if the longitude direction type is positive west (as opposed to postive east).
double ToWorldX(const double projectionX) const
This method converts a projection x value to a world x value.
double m_pixelResolution
Pixel resolution value from the PVL mapping group, in meters/pixel.
Definition Projection.h:344
void SetUpperLeftCorner(const Displacement &x, const Displacement &y)
This method searches for extreme (min/max/discontinuity) coordinate values along the constBorder line...
bool m_groundRangeGood
Indicates if the ground range (min/max lat/lons) were read from the labels.
Definition Projection.h:313
double PixelResolution() const
Returns the pixel resolution value from the PVL mapping group in meters/pixel.
virtual bool SetUnboundUniversalGround(const double coord1, const double coord2)
This method is used to set the lat/lon or radius/azimuth (i.e.
virtual double WorldY() const
This returns the world Y coordinate provided SetGround, SetCoordinate, SetUniversalGround,...
double YCoord() const
This returns the projection Y provided SetGround, SetCoordinate, SetUniversalGround,...
virtual double WorldX() const
This returns the world X coordinate provided SetGround, SetCoordinate, SetUniversalGround,...
double ToProjectionY(const double worldY) const
This method converts a world y value to a projection y value.
virtual QString Name() const =0
This method returns the name of the map projection.
double GetX() const
Calculates the unrotated form of current x value.
bool operator!=(const Projection &proj)
This method determines whether two map projection objects are not equal.
bool m_good
Indicates if the contents of m_x, m_y, m_latitude, and m_longitude are valid.
Definition Projection.h:300
double m_minimumX
The data elements m_minimumX, m_minimumY, m_maximumX, and m_maximumY are convience data elements when...
Definition Projection.h:317
Projection(Pvl &label)
Constructs an empty Projection object.
PvlGroup m_mappingGrp
Mapping group that created this projection.
Definition Projection.h:329
static QString ToHMS(double angle)
Converts the given angle (in degrees) to hours, minutes, seconds.
double m_minimumY
See minimumX description.
Definition Projection.h:327
bool m_sky
Indicates whether projection is sky or land.
Definition Projection.h:310
double Rotation() const
Returns the value of the Rotation keyword from the mapping group.
double ToProjectionX(const double worldX) const
This method converts a world x value to a projection x value.
double GetY() const
Calculates the unrotated form of the current y value.
virtual bool IsEquatorialCylindrical()
This method returns true if the projection is equatorial cylindrical.
virtual QString Version() const =0
This method returns the Version of the map projection.
void SetXY(double x, double y)
This protected method is a helper for derived classes.
bool IsGood() const
This indicates if the last invocation of SetGround, SetCoordinate, SetUniversalGround,...
double m_x
This contains the rotated X coordinate for a specific projection at theposition indicated by m_latitu...
Definition Projection.h:335
ProjectionType projectionType() const
Returns an enum value for the projection type.
void setProjectionType(const ProjectionType ptype)
Sets the projection subclass type.
double m_maximumY
See minimumX description.
Definition Projection.h:328
void SetComputedXY(double x, double y)
This protected method is a helper for derived classes.
static QString ToDMS(double angle)
Converts the given angle (in degrees) to degrees, minutes, seconds.
Contains multiple PvlContainers.
Definition PvlGroup.h:41
Container for cube-like labels.
Definition Pvl.h:119
Create a mapping between a projection and other coordinate system.
Definition WorldMapper.h:38
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16