Isis Developer Reference
RingPlaneProjection.h
Go to the documentation of this file.
1#ifndef RingPlaneProjection_h
2#define RingPlaneProjection_h
8/* SPDX-License-Identifier: CC0-1.0 */
9#include <string>
10#include <vector>
11
12#include "Projection.h"
13#include "PvlGroup.h" // protected data member object (m_mappingGrp)
14
15namespace Isis {
16 class Displacement;
17 class Pvl;
18 class WorldMapper;
148 public:
149 // constructor
150 RingPlaneProjection(Pvl &label);
151 virtual ~RingPlaneProjection();
152 virtual bool operator== (const Projection &proj);
153
154 // These return properties of the target
155 double LocalRadius() const; // requires SetGround or SetCoordinate
156
157 // These return or change properties of the projection, independent of calculations
164 virtual QString Name() const = 0;
171 virtual QString Version() const = 0;
172 virtual double TrueScaleRingRadius() const;
173
183
184 // Check ring longitude direction or get ring longitude direction as a string
185 bool IsClockwise() const;
186 bool IsCounterClockwise() const;
187 std::string RingLongitudeDirectionString() const;
188
189 // Check ring longitude domain or get ring longitude domain as a string TODO** check implementation to see if this can go in Projection
190 bool Has180Domain() const;
191 bool Has360Domain() const;
192 std::string RingLongitudeDomainString() const;
193
194 // Get min/max ring rad/lon
195 double MinimumRingRadius() const;
196 double MaximumRingRadius() const;
197 double MinimumRingLongitude() const;
198 double MaximumRingLongitude() const;
199
200 // Calculations
201 // Set ground position or x/y coordinate
202 virtual bool SetGround(const double ringRadius, const double ringLongitude);
203 virtual bool SetCoordinate(const double x, const double y);
204
205 // Methods that depend on successful completion
206 // of SetGround/SetCoordinate Get ring rad,ring
207 // lon, x,y
208 double RingRadius() const;
209 double RingLongitude() const;
210
211 // Set the universal ground coordinate (calls SetGround)
212 bool SetUniversalGround(const double ringRadius, const double ringLongitude);
213
214 // Return the universal ground coordinate after successful SetCoordinate
215 double UniversalRingRadius();
216 double UniversalRingLongitude();
217
218 // convert from world coordinate to projected coordinate
219 // double ToProjectionX(const double worldX) const;
220 // double ToProjectionY(const double worldY) const;
221
222 // get resolution and scale for mapping world coordinates
223 double Scale() const;
224
225 // Return the x/y range which covers the ring rad/lon range in the labels
226 virtual bool XYRange(double &minX, double &maxX,
227 double &minY, double &maxY);
228
229 // get mapping information
230 virtual PvlGroup Mapping();
231 virtual PvlGroup MappingRingRadii();
233
234 // change ring longitude direction
235 static double ToClockwise(const double ringLongitude, const int domain);
236 static double ToCounterClockwise(const double ringLongitude, const int domain);
237
238 // change ring longitude domain
239 static double To180Domain(const double lon);
240 static double To360Domain(const double lon);
241
242 protected:
243 void XYRangeCheck(const double ringRadius, const double ringLongitude);
244 // bool xyRangeOblique(double &minX, double &maxX,
245 // double &minY, double &maxY);
246
247 private:
248 // These methods are not currectly being used by the ring plane projections
249 /* void doSearch(double minBorder, double maxBorder,
250 double &extremeVal, const double constBorder,
251 bool searchX, bool searchRingLongitude, bool findMin);
252 void findExtreme(double &minBorder, double &maxBorder,
253 double &minBorderX, double &minBorderY,
254 double &maxBorderX, double &maxBorderY,
255 const double constBorder, bool searchX,
256 bool searchRingLongitude, bool findMin);
257 void setSearchGround(const double variableBorder,
258 const double constBorder, bool variableIsRad);
259 */
260 protected:
274 // TODO** Can this be generalized for both longitude and ring longitude???
294 private:
295 };
296};
297#endif
298
Base class for Map Projections.
Definition Projection.h:155
Contains multiple PvlContainers.
Definition PvlGroup.h:41
Container for cube-like labels.
Definition Pvl.h:119
Base class for Map Projections of plane shapes.
Definition RingPlaneProjection.h:147
static double ToClockwise(const double ringLongitude, const int domain)
This method converts an ring longitude into the clockwise direction.
Definition RingPlaneProjection.cpp:240
double m_minimumRingLongitude
Contains the minimum longitude for the entire ground range.
Definition RingPlaneProjection.h:287
bool Has360Domain() const
This indicates if the ring longitude domain is 0 to 360 (as opposed to -180 to 180).
Definition RingPlaneProjection.cpp:337
double UniversalRingLongitude()
This returns a universal ring longitude (clockwise in 0 to 360 domain).
Definition RingPlaneProjection.cpp:589
static double To360Domain(const double lon)
This method converts an ring longitude into the 0 to 360 domain.
Definition RingPlaneProjection.cpp:370
double MaximumRingLongitude() const
This returns the maximum ring longitude of the area of interest.
Definition RingPlaneProjection.cpp:438
double RingRadius() const
This returns a radius.
Definition RingPlaneProjection.cpp:506
virtual PvlGroup MappingRingLongitudes()
This function returns the ring longitude keywords that this projection uses.
Definition RingPlaneProjection.cpp:1313
double UniversalRingRadius()
This returns a universal radius, which is just the radius in meters.
Definition RingPlaneProjection.cpp:575
RingPlaneProjection(Pvl &label)
Constructs an empty RingPlaneProjection object.
Definition RingPlaneProjection.cpp:69
virtual QString Name() const =0
This method returns the name of the map projection.
virtual double TrueScaleRingRadius() const
This method returns the radius of true scale.
Definition RingPlaneProjection.cpp:199
virtual ~RingPlaneProjection()
Destroys the Projection object.
Definition RingPlaneProjection.cpp:169
bool IsClockwise() const
This indicates if the longitude direction type is positive west (as opposed to postive east).
Definition RingPlaneProjection.cpp:211
int m_ringLongitudeDomain
This integer is either 180 or 360 and is read from the labels.
Definition RingPlaneProjection.h:275
virtual PvlGroup Mapping()
This method is used to find the XY range for oblique aspect projections (non-polar projections) by "w...
Definition RingPlaneProjection.cpp:1253
virtual bool operator==(const Projection &proj)
This method determines whether two map projection objects are equal by comparing the ring longitude d...
Definition RingPlaneProjection.cpp:181
double m_maximumRingRadius
Contains the maximum ring radius for the entire ground range.
Definition RingPlaneProjection.h:284
double LocalRadius() const
This returns a local radius.
Definition RingPlaneProjection.cpp:518
static double To180Domain(const double lon)
This method converts a ring longitude into the -180 to 180 domain.
Definition RingPlaneProjection.cpp:352
bool IsCounterClockwise() const
This indicates if the longitude direction type is positive east (as opposed to postive west).
Definition RingPlaneProjection.cpp:222
double m_maximumRingLongitude
Contains the maximum longitude for the entire ground range.
Definition RingPlaneProjection.h:290
virtual QString Version() const =0
This method returns the Version of the map projection.
std::string RingLongitudeDirectionString() const
This method returns the ring longitude direction as a string.
Definition RingPlaneProjection.cpp:314
void XYRangeCheck(const double ringRadius, const double ringLongitude)
This convience function is established to assist in the development of the XYRange virtual method.
Definition RingPlaneProjection.cpp:709
double m_ringRadius
This contain a ring radius value in m.
Definition RingPlaneProjection.h:261
bool SetUniversalGround(const double ringRadius, const double ringLongitude)
This method is used to set the ring radius/longitude which must be PositiveEast/Domain360 (ring longi...
Definition RingPlaneProjection.cpp:546
virtual PvlGroup MappingRingRadii()
This function returns the ring radius keywords that this projection uses.
Definition RingPlaneProjection.cpp:1296
virtual bool SetCoordinate(const double x, const double y)
This method is used to set the projection x/y.
Definition RingPlaneProjection.cpp:485
double m_ringLongitude
This contain a ring longitude value.
Definition RingPlaneProjection.h:263
static double ToCounterClockwise(const double ringLongitude, const int domain)
This method converts an ring longitude into the counterclockwise direction.
Definition RingPlaneProjection.cpp:280
double Scale() const
This method returns the scale for mapping world coordinates into projection coordinates.
Definition RingPlaneProjection.cpp:607
double MaximumRingRadius() const
This returns the maximum radius of the area of interest.
Definition RingPlaneProjection.cpp:416
std::string RingLongitudeDomainString() const
This method returns the ring longitude domain as a string.
Definition RingPlaneProjection.cpp:393
RingLongitudeDirection
This enum defines the types of ring longitude directions supported in this class.
Definition RingPlaneProjection.h:178
@ Clockwise
Ring longitude values increase in the clockwise direction.
Definition RingPlaneProjection.h:178
@ CounterClockwise
Ring longitude values increase in the counterclockwise direction.
Definition RingPlaneProjection.h:180
RingLongitudeDirection m_ringLongitudeDirection
An enumerated type indicating the LongitudeDirection read from the labels.
Definition RingPlaneProjection.h:267
bool Has180Domain() const
This indicates if the longitude domain is -180 to 180 (as opposed to 0 to 360).
Definition RingPlaneProjection.cpp:326
double MinimumRingLongitude() const
This returns the minimum ring longitude of the area of interest.
Definition RingPlaneProjection.cpp:427
double MinimumRingRadius() const
This returns the minimum radius of the area of interest.
Definition RingPlaneProjection.cpp:405
double RingLongitude() const
This returns a ring longitude with correct ring longitude direction and domain as specified in the la...
Definition RingPlaneProjection.cpp:530
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...
Definition RingPlaneProjection.cpp:656
double m_minimumRingRadius
Contains the minimum ring radius for the entire ground range.
Definition RingPlaneProjection.h:281
virtual bool SetGround(const double ringRadius, const double ringLongitude)
This method is used to set the ring radius/longitude (assumed to be of the correct LatitudeType,...
Definition RingPlaneProjection.cpp:456
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16