USGS

Isis 3.0 Developer's Reference (API)

Home

Isis::Latitude Class Reference
[Utility]

This class is designed to encapsulate the concept of a Latitude. More...

#include <Latitude.h>

Inherits Isis::Angle.

List of all members.

Public Types

enum  ErrorChecking { ThrowAllErrors = 0, AllowPastPole }
 

Some user-configurable error checking parameters.

More...
enum  CoordinateType { Planetocentric, Planetographic }
 

These are the latitude coordinate systems.

More...
enum  Units { Degrees, Radians }
 

The set of usable angle measurement units.

More...

Public Member Functions

 Latitude ()
 Create a blank Latitude object without Planetographic support.
 Latitude (double latitude, Angle::Units latitudeUnits, ErrorChecking errors=AllowPastPole)
 Create and initialize a Latitude value without planetographic support.
 Latitude (Angle latitude, ErrorChecking errors=AllowPastPole)
 Create and initialize a Latitude value in the planetocentric domain within the given angle.
 Latitude (Angle latitude, PvlGroup mapping, ErrorChecking errors=ThrowAllErrors)
 Create and initialize a Latitude value using the mapping group's latitude units and radii.
 Latitude (double latitude, PvlGroup mapping, Angle::Units latitudeUnits, ErrorChecking errors=ThrowAllErrors)
 Create and initialize a Latitude value using the mapping group's latitude units and radii.
 Latitude (double latitude, Distance equatorialRadius, Distance polarRadius, CoordinateType latType=Planetocentric, Angle::Units latitudeUnits=Angle::Radians, ErrorChecking errors=ThrowAllErrors)
 Create and initialize a Latitude value with planetographic support.
 Latitude (const Latitude &latitudeToCopy)
 This copies the given latitude exactly.
 ~Latitude ()
 This cleans up the Latitude class.
double planetocentric (Angle::Units units=Angle::Radians) const
 Get the latitude in the planetocentric (universal) coordinate system.
void setPlanetocentric (double latitude, Angle::Units units=Angle::Radians)
 Set the latitude given a value in the Planetocentric coordinate system.
double planetographic (Angle::Units units=Angle::Radians) const
 Get the latitude in the planetographic coordinate system.
void setPlanetographic (double latitude, Angle::Units units=Angle::Radians)
 Set the latitude given a value in the Planetographic coordinate system.
bool inRange (Latitude min, Latitude max) const
 Checks if this latitude value is within the given range.
Latitudeoperator= (const Latitude &latitudeToCopy)
 This assigns another latitude to this one - making this latitude an exact duplicate of the other.
Latitude add (Angle angleToAdd, PvlGroup mapping)
 Adds an angle to this latitude.
Latitude add (Angle angleToAdd, Distance equatorialRadius, Distance polarRadius, CoordinateType latType)
 Adds another latitude to this one.
bool isValid () const
 This indicates whether we have a legitimate angle stored or are in an unset, or invalid, state.
Angle operator+ (const Angle &angle2) const
 Add angle value to another.
Angle operator- (const Angle &angle2) const
 Subtract angle value from another and return the resulting angle.
Angle operator* (double value) const
 Multiply this angle by a double and return the resulting angle.
Angle operator* (int value) const
 Multiply this angle by an integer and return the resulting angle.
Angle operator/ (double value) const
 Divide this angle by a double.
double operator/ (Angle value) const
 Divide this angle by another angle and return the ratio.
Angle operator/ (int value) const
 Divide this angle by an integer and return the resulting angle.
bool operator< (const Angle &angle2) const
 Test if the other angle is less than the current angle.
bool operator> (const Angle &angle2) const
 Test if the other angle is greater than the current angle.
void operator+= (const Angle &angle2)
 Add angle value to another as double and replace original.
void operator-= (const Angle &angle2)
 Subtract angle value from another and set this instance to the resulting angle.
void operator*= (double value)
 Multiply this angle by a double and set this instance to the resulting angle.
void operator/= (double value)
 Divide this angle by a double and return the resulting angle.
bool operator== (const Angle &angle2) const
 Test if another angle is equal to this angle.
bool operator!= (const Angle &angle2) const
 Test if another angle is not equal to this angle.
bool operator<= (const Angle &angle2) const
 Test if the other angle is less than or equal to the current angle.
bool operator>= (const Angle &angle2) const
 Test if the other angle is greater than or equal to the current angle.
double radians () const
 Convert an angle to a double.
double degrees () const
 Get the angle in units of Degrees.
void setRadians (double radians)
 Set the angle in units of Radians.
void setDegrees (double degrees)
 Set the angle in units of Degrees.
virtual QString toString (bool includeUnits=true) const
 Get the angle in human-readable form.

Static Public Member Functions

static Angle fullRotation ()
 Makes an angle to represent a full rotation (0-360 or 0-2pi).

Protected Member Functions

virtual void setAngle (double angle, const Angle::Units &units)
 Same as planetocentric.
double unitWrapValue (const Units &unit) const
 Return wrap value in desired units.
virtual double angle (const Units &unit) const
 Return angle value in desired units.
virtual void setAngle (const double &angle, const Units &unit)
 Set angle value in desired units.

Friends

Angle operator* (double mult, Angle angle)

Detailed Description

This class is designed to encapsulate the concept of a Latitude.

This is used primary for surface points but is also a general purpose class. This class has error checking for past the poles. This adds the concept of 90/-90 and planetographic to the Angle class.

Author:
2010-10-13 Steven Lambright

Member Enumeration Documentation

These are the latitude coordinate systems.

The universal system is Planetocentric and this class is heavily geared towards using them. If you wish to use Planetographic, planetary radii must be provided and at the moment latitudes past 90 aren't supported in Planetographic.

Enumerator:
Planetocentric 

This is the universal (and default) latitude coordinate system.

Latitudes in this system are the angle from the the equatorial plane (the line at 0 degrees latitude) to the requested latitude.

Planetographic 

This is a secondary coordinate system for latitudes.

Latitudes in this system are angle between the equatorial plane and the perpendicular to the surface at the point. Conceptually you draw the perpendicular to the surface back to the equatorial plane and the angle created is the planetographic latitude. This doesn't differ from Planetocentric on a sphere. These latitudes require the planetary radii to work with them at all, since the radii affect the latitude values themselves.

Some user-configurable error checking parameters.

This is meant to be used as a bit flag.

Example: Latitude(95, Angle::Degrees, Latitude::AllowPastPole) This will allow latitudes past 90 and not throw an exception.

Latitude(95, Angle::Degrees, Latitude::AllowPastPole | Latitude::ThrowAllErrors) This will allow latitudes past 90 still and not throw an exception.

Latitude(95, Angle::Degrees, Latitude::ThrowAllErrors) This will throw an exception.

Latitude(95, Angle::Degrees) This will throw an exception.

Enumerator:
ThrowAllErrors 

Throw an exception if any problems are found.

AllowPastPole 

Don't throw an exception if a latitude beyond -90/90 is found.

enum Isis::Angle::Units [inherited]

The set of usable angle measurement units.

Enumerator:
Degrees 

Degrees are generally considered more human readable, 0-360 is one circle, however most math does not use this unit.

Use these for displaying to the user and accepting input from the user.

Radians 

Radians are generally used in mathematical equations, 0-2*PI is one circle, however these are more difficult for users to understand when displayed since they have PI in them.

This is the default unit and is necessary for most math library calls.


Constructor & Destructor Documentation

Isis::Latitude::Latitude (  ) 

Create a blank Latitude object without Planetographic support.

References AllowPastPole.

Referenced by add(), and planetographic().

Isis::Latitude::Latitude ( double  latitude,
Angle::Units  latitudeUnits,
ErrorChecking  errors = AllowPastPole 
)

Create and initialize a Latitude value without planetographic support.

See also:
ErrorChecking
CoordinateType
Parameters:
latitude The latitude value this instance will represent, in the planetocentric coordinate system
latitudeUnits The angular units of the latitude value (degs, rads)
errors Error checking conditions

References setPlanetocentric().

Isis::Latitude::Latitude ( Angle  latitude,
ErrorChecking  errors = AllowPastPole 
)

Create and initialize a Latitude value in the planetocentric domain within the given angle.

Parameters:
latitude The latitude value this instance will represent
errors Error checking conditions

References Isis::Angle::Radians, Isis::Angle::radians(), and setPlanetocentric().

Isis::Latitude::Latitude ( Angle  latitude,
PvlGroup  mapping,
ErrorChecking  errors = ThrowAllErrors 
)

Create and initialize a Latitude value using the mapping group's latitude units and radii.

See also:
ErrorChecking
CoordinateType
Parameters:
latitude The latitude value this instance will represent, in the mapping group's units
mapping A mapping group
latitudeUnits The angular units of the latitude value (degs, rads)
errors Error checking conditions

References _FILEINFO_, Isis::PvlContainer::hasKeyword(), Isis::Distance::Meters, Isis::IException::Programmer, Isis::Angle::Radians, Isis::Angle::radians(), setPlanetocentric(), setPlanetographic(), Isis::TProjection::TargetRadii(), and Isis::toDouble().

Isis::Latitude::Latitude ( double  latitude,
PvlGroup  mapping,
Angle::Units  latitudeUnits,
ErrorChecking  errors = ThrowAllErrors 
)

Create and initialize a Latitude value using the mapping group's latitude units and radii.

See also:
ErrorChecking
CoordinateType
Parameters:
latitude The latitude value this instance will represent, in the mapping group's units
mapping A mapping group
latitudeUnits The angular units of the latitude value (degs, rads)
errors Error checking conditions

References _FILEINFO_, Isis::PvlContainer::hasKeyword(), Isis::Distance::Meters, Isis::IException::Programmer, setPlanetocentric(), setPlanetographic(), Isis::TProjection::TargetRadii(), and Isis::toDouble().

Isis::Latitude::Latitude ( double  latitude,
Distance  equatorialRadius,
Distance  polarRadius,
CoordinateType  latType = Planetocentric,
Angle::Units  latitudeUnits = Angle::Radians,
ErrorChecking  errors = ThrowAllErrors 
)

Create and initialize a Latitude value with planetographic support.

See also:
ErrorChecking
CoordinateType
Parameters:
latitude The latitude value this instance will represent, in planetocentric
equatorialRadius Radius of the target (planet) at the equator
polarRadius Radius of the target (planet) at the poles
latType The coordinate system of the latitude parameter
latitudeUnits The angular units of the latitude value (degs, rads)
errors Error checking conditions

References _FILEINFO_, Planetocentric, Planetographic, Isis::IException::Programmer, setPlanetocentric(), and setPlanetographic().

Isis::Latitude::Latitude ( const Latitude latitudeToCopy  ) 

This copies the given latitude exactly.

Parameters:
latitudeToCopy The latitude we're duplicating
Isis::Latitude::~Latitude (  ) 

This cleans up the Latitude class.


Member Function Documentation

Latitude Isis::Latitude::add ( Angle  angleToAdd,
Distance  equatorialRadius,
Distance  polarRadius,
CoordinateType  latType 
)

Adds another latitude to this one.

Handles planetographic latitudes.

Parameters:
angleToAdd the latitude being added to this one
equatorialRadius 
polarRadius 
latType 
Returns:
The result

References Latitude(), planetocentric(), Planetocentric, planetographic(), Planetographic, Isis::Angle::Radians, and Isis::Angle::radians().

Latitude Isis::Latitude::add ( Angle  angleToAdd,
PvlGroup  mapping 
)

Adds an angle to this latitude.

The adding method is determined by the latitude type.

Parameters:
angleToAdd the latitude being added to this one
mapping the mapping group from a projection
Returns:
The result

References _FILEINFO_, Isis::PvlContainer::hasKeyword(), Isis::Distance::Meters, Planetocentric, Planetographic, Isis::IException::Programmer, Isis::TProjection::TargetRadii(), and Isis::toDouble().

Referenced by Isis::GridGraphicsItem::GridGraphicsItem().

double Isis::Angle::angle ( const Units unit  )  const [protected, virtual, inherited]
double Isis::Angle::degrees (  )  const [inline, inherited]
Angle Isis::Angle::fullRotation (  )  [static, inherited]

Makes an angle to represent a full rotation (0-360 or 0-2pi).

Returns:
the angle of 1 full rotation

References Isis::Angle::Angle(), and Isis::Angle::Degrees.

Referenced by Isis::Hillshade::shadedValue(), and Isis::Longitude::to360Range().

bool Isis::Latitude::inRange ( Latitude  min,
Latitude  max 
) const

Checks if this latitude value is within the given range.

Defines the range as the change from the minimum latitude to the maximum latitude (an angle), and returns whether the change from the minimum latitude to this latitude is less than or equal to the maximum change allowed (the range).

Parameters:
min The beginning of the valid latitude range
max The end of the valid latitude range
Returns:
Whether the latitude is in the given range

References _FILEINFO_, Isis::Angle::Degrees, Isis::Angle::degrees(), and Isis::IException::User.

Referenced by Isis::QnetPointRangeFilter::filter().

bool Isis::Angle::isValid (  )  const [inherited]
bool Isis::Angle::operator!= ( const Angle angle2  )  const [inline, inherited]

Test if another angle is not equal to this angle.

Takes the negated result of the '==' operator.

Parameters:
angle2 The comparison angle (on right-hand-side of != operator)
Returns:
true if the angle does not equal the comparision angle
Angle Isis::Angle::operator* ( int  value  )  const [inline, inherited]

Multiply this angle by an integer and return the resulting angle.

Parameters:
value The integer value to multiply with this angle
Returns:
Product of the angles
Angle Isis::Angle::operator* ( double  value  )  const [inherited]

Multiply this angle by a double and return the resulting angle.

If this is an invalid angle, then the result will be an invalid angle.

Parameters:
value The value to multiply to this angle
Returns:
Multiplied angle

References Isis::Angle::Angle(), Isis::Angle::isValid(), Isis::Angle::Radians, and Isis::Angle::radians().

void Isis::Angle::operator*= ( double  value  )  [inline, inherited]

Multiply this angle by a double and set this instance to the resulting angle.

Parameters:
value The double value to multiply with this angle
Angle Isis::Angle::operator+ ( const Angle angle2  )  const [inherited]

Add angle value to another.

If either of these are invalid angles, then the result will be an invalid angle.

Parameters:
angle2 The angle to add to this angle
Returns:
sum angle

References Isis::Angle::Angle(), Isis::Angle::isValid(), Isis::Angle::Radians, and Isis::Angle::radians().

void Isis::Angle::operator+= ( const Angle angle2  )  [inline, inherited]

Add angle value to another as double and replace original.

Parameters:
angle2 The angle to add to this angle
Returns:
sum angle, replaces original
Angle Isis::Angle::operator- ( const Angle angle2  )  const [inherited]

Subtract angle value from another and return the resulting angle.

If either of these are invalid angles, then the result will be an invalid angle.

Parameters:
angle2 The angle to subtract from this angle
Returns:
difference angle

References Isis::Angle::Angle(), Isis::Angle::isValid(), Isis::Angle::Radians, and Isis::Angle::radians().

void Isis::Angle::operator-= ( const Angle angle2  )  [inline, inherited]

Subtract angle value from another and set this instance to the resulting angle.

Parameters:
angle2 The angle to subtract from this angle
Angle Isis::Angle::operator/ ( int  value  )  const [inline, inherited]

Divide this angle by an integer and return the resulting angle.

Parameters:
value The double value to use as the divisor
Returns:
Quotient of the angles
double Isis::Angle::operator/ ( Angle  value  )  const [inherited]

Divide this angle by another angle and return the ratio.

Parameters:
value The ratio, Null if invalid
Returns:
Quotient of the angles

References Isis::Angle::isValid(), Isis::Null, and Isis::Angle::radians().

Angle Isis::Angle::operator/ ( double  value  )  const [inherited]

Divide this angle by a double.

Parameters:
value The double value to use as the divisor
Returns:
Quotient of the angles

References Isis::Angle::Angle(), Isis::Angle::isValid(), Isis::Angle::Radians, and Isis::Angle::radians().

void Isis::Angle::operator/= ( double  value  )  [inline, inherited]

Divide this angle by a double and return the resulting angle.

Parameters:
value The double value to use as the divisor
bool Isis::Angle::operator< ( const Angle angle2  )  const [inherited]

Test if the other angle is less than the current angle.

If either is invalid, then an exception will be thrown.

Parameters:
angle2 The comparison angle (on right-hand-side of < operator)
Returns:
True if the angle is less than the comparision angle

References _FILEINFO_, Isis::Angle::angle(), Isis::Angle::isValid(), Isis::IException::Programmer, and Isis::Angle::Radians.

bool Isis::Angle::operator<= ( const Angle angle2  )  const [inline, inherited]

Test if the other angle is less than or equal to the current angle.

Parameters:
angle2 The comparison angle (on right-hand-side of < operator)
Returns:
true if the angle is less than or equal to the comparision angle
Latitude & Isis::Latitude::operator= ( const Latitude latitudeToCopy  ) 

This assigns another latitude to this one - making this latitude an exact duplicate of the other.

Parameters:
latitudeToCopy The latitude we are assigning from
Returns:
The result, a reference to this

Reimplemented from Isis::Angle.

References planetocentric(), and setPlanetocentric().

bool Isis::Angle::operator== ( const Angle angle2  )  const [inline, inherited]

Test if another angle is equal to this angle.

This does not compensate for going around a circle: Angle(360, Angle::Degrees) does not equal Angle(0, Angle::Degrees)

Invalid angles are equal to each other.

Parameters:
angle2 The comparison angle (on right-hand-side of == operator)
Returns:
true if the angle equals the comparision angle

References Isis::Angle::angle(), and Isis::Angle::Radians.

bool Isis::Angle::operator> ( const Angle angle2  )  const [inherited]

Test if the other angle is greater than the current angle.

If either is invalid, then an exception will be thrown.

Parameters:
angle2 The comparison angle (on right-hand-side of > operator)
Returns:
True if the angle is greater than the comparision angle

References _FILEINFO_, Isis::Angle::angle(), Isis::Angle::isValid(), Isis::IException::Programmer, and Isis::Angle::Radians.

bool Isis::Angle::operator>= ( const Angle angle2  )  const [inline, inherited]

Test if the other angle is greater than or equal to the current angle.

Parameters:
angle2 The comparison angle (on right-hand-side of < operator)
Returns:
true if the angle is greater than or equal to the comparision angle
double Isis::Latitude::planetocentric ( Angle::Units  units = Angle::Radians  )  const

Get the latitude in the planetocentric (universal) coordinate system.

See also:
CoordinateType
Parameters:
units The angular units to get the latitude in
Returns:
The Planetocentric latitude value

References Isis::Angle::angle().

Referenced by add(), and operator=().

double Isis::Latitude::planetographic ( Angle::Units  units = Angle::Radians  )  const

Get the latitude in the planetographic coordinate system.

If this instance was not constructed with the planetary radii, then an exception will be thrown.

See also:
CoordinateType
Parameters:
units The angular units to get the latitude in
Returns:
The Planetographic latitude value

References _FILEINFO_, Isis::Angle::Angle(), Isis::Angle::Degrees, Isis::Angle::degrees(), Isis::Angle::isValid(), Latitude(), Isis::IException::Programmer, Isis::Angle::Radians, and Isis::Angle::radians().

Referenced by add(), Isis::MosaicGridTool::autoGrid(), Isis::GridGraphicsItem::GridGraphicsItem(), and Isis::MosaicGridToolConfigDialog::readSettings().

double Isis::Angle::radians (  )  const [inline, inherited]
void Isis::Angle::setAngle ( const double &  angle,
const Units unit 
) [protected, virtual, inherited]

Set angle value in desired units.

Parameters:
angle The angle value in units of the unit parameter
unit Desired units of the angle (see Angle::Units)

References _FILEINFO_, Isis::DEG2RAD(), Isis::Angle::Degrees, Isis::IsSpecial(), Isis::Null, Isis::IException::Programmer, and Isis::Angle::Radians.

Referenced by Isis::Angle::Angle(), Isis::Angle::operator=(), Isis::Angle::setDegrees(), Isis::Longitude::setPositiveEast(), Isis::Longitude::setPositiveWest(), and Isis::Angle::setRadians().

void Isis::Latitude::setAngle ( double  angle,
const Angle::Units units 
) [protected, virtual]

Same as planetocentric.

We're overriding this method in order to do -90/90 degree checking.

See also:
planetocentric

operator double() const { return planetocentric(); }

Parameters:
angle The numeric value of the angle
units The units angle is in (radians or degrees typically)

References _FILEINFO_, AllowPastPole, Isis::Angle::Angle(), Isis::Angle::degrees(), Isis::Angle::Degrees, Isis::IsSpecial(), and Isis::IException::Programmer.

Referenced by setPlanetocentric(), and setPlanetographic().

void Isis::Angle::setDegrees ( double  degrees  )  [inline, inherited]

Set the angle in units of Degrees.

Parameters:
degrees The new angle value, Null for invalid angle

References Isis::Angle::Degrees, and Isis::Angle::setAngle().

void Isis::Latitude::setPlanetocentric ( double  latitude,
Angle::Units  units = Angle::Radians 
)

Set the latitude given a value in the Planetocentric coordinate system.

Parameters:
latitude The planetographic latitude to set ourselves to
units The angular units latitude is in

References setAngle().

Referenced by Latitude(), and operator=().

void Isis::Latitude::setPlanetographic ( double  latitude,
Angle::Units  units = Angle::Radians 
)

Set the latitude given a value in the Planetographic coordinate system.

Parameters:
latitude The planetographic latitude to set ourselves to
units The angular units latitude is in

References _FILEINFO_, Isis::Angle::Angle(), Isis::Angle::Degrees, Isis::IsSpecial(), Isis::IException::Programmer, Isis::Angle::Radians, Isis::Angle::radians(), and setAngle().

Referenced by Latitude().

void Isis::Angle::setRadians ( double  radians  )  [inline, inherited]

Set the angle in units of Radians.

Parameters:
radians The new angle value, Null for invalid angle

References Isis::Angle::Radians, and Isis::Angle::setAngle().

QString Isis::Angle::toString ( bool  includeUnits = true  )  const [virtual, inherited]
double Isis::Angle::unitWrapValue ( const Units unit  )  const [protected, inherited]

Return wrap value in desired units.

The 'wrap' value is the value where one circle occurs - angles greater than this are conceptually 'wrapping' back to zero. For example, this is 2*PI in radians because 2*PI == 0 on a circle. Please keep in mind we still differentiate those two angles.

Parameters:
unit Desired units of the Angle wrap constant (see Angle::Units)
Returns:
Wrap value in specified units

References _FILEINFO_, Isis::Angle::Degrees, Isis::PI(), Isis::IException::Programmer, and Isis::Angle::Radians.

Referenced by Isis::Longitude::positiveWest(), and Isis::Longitude::setPositiveWest().


Friends And Related Function Documentation

Angle operator* ( double  mult,
Angle  angle 
) [friend, inherited]

The documentation for this class was generated from the following files: