Isis 3 Programmer Reference
RingPlaneProjection.h
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.
static double ToClockwise(const double ringLongitude, const int domain)
This method converts an ring longitude into the clockwise direction.
double m_minimumRingLongitude
Contains the minimum longitude for the entire ground range.
bool Has360Domain() const
This indicates if the ring longitude domain is 0 to 360 (as opposed to -180 to 180).
double UniversalRingLongitude()
This returns a universal ring longitude (clockwise in 0 to 360 domain).
static double To360Domain(const double lon)
This method converts an ring longitude into the 0 to 360 domain.
double MaximumRingLongitude() const
This returns the maximum ring longitude of the area of interest.
double RingRadius() const
This returns a radius.
virtual PvlGroup MappingRingLongitudes()
This function returns the ring longitude keywords that this projection uses.
double UniversalRingRadius()
This returns a universal radius, which is just the radius in meters.
RingPlaneProjection(Pvl &label)
Constructs an empty RingPlaneProjection object.
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.
virtual ~RingPlaneProjection()
Destroys the Projection object.
bool IsClockwise() const
This indicates if the longitude direction type is positive west (as opposed to postive east).
int m_ringLongitudeDomain
This integer is either 180 or 360 and is read from the labels.
virtual PvlGroup Mapping()
This method is used to find the XY range for oblique aspect projections (non-polar projections) by "w...
virtual bool operator==(const Projection &proj)
This method determines whether two map projection objects are equal by comparing the ring longitude d...
double m_maximumRingRadius
Contains the maximum ring radius for the entire ground range.
double LocalRadius() const
This returns a local radius.
static double To180Domain(const double lon)
This method converts a ring longitude into the -180 to 180 domain.
bool IsCounterClockwise() const
This indicates if the longitude direction type is positive east (as opposed to postive west).
double m_maximumRingLongitude
Contains the maximum longitude for the entire ground range.
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.
void XYRangeCheck(const double ringRadius, const double ringLongitude)
This convience function is established to assist in the development of the XYRange virtual method.
double m_ringRadius
This contain a ring radius value in m.
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...
virtual PvlGroup MappingRingRadii()
This function returns the ring radius keywords that this projection uses.
virtual bool SetCoordinate(const double x, const double y)
This method is used to set the projection x/y.
double m_ringLongitude
This contain a ring longitude value.
static double ToCounterClockwise(const double ringLongitude, const int domain)
This method converts an ring longitude into the counterclockwise direction.
double Scale() const
This method returns the scale for mapping world coordinates into projection coordinates.
double MaximumRingRadius() const
This returns the maximum radius of the area of interest.
std::string RingLongitudeDomainString() const
This method returns the ring longitude domain as a string.
RingLongitudeDirection
This enum defines the types of ring longitude directions supported in this class.
@ Clockwise
Ring longitude values increase in the clockwise direction.
@ CounterClockwise
Ring longitude values increase in the counterclockwise direction.
RingLongitudeDirection m_ringLongitudeDirection
An enumerated type indicating the LongitudeDirection read from the labels.
bool Has180Domain() const
This indicates if the longitude domain is -180 to 180 (as opposed to 0 to 360).
double MinimumRingLongitude() const
This returns the minimum ring longitude of the area of interest.
double MinimumRingRadius() const
This returns the minimum radius of the area of interest.
double RingLongitude() const
This returns a ring longitude with correct ring longitude direction and domain as specified in the la...
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 m_minimumRingRadius
Contains the minimum ring radius for the entire ground range.
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,...
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16