Isis Developer Reference
|
This class is designed to encapsulate the concept of a Latitude. More...
#include <Latitude.h>
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 latitude units and the mapping group's 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. | |
ErrorChecking | errorChecking () const |
Get the error checking status. | |
void | setErrorChecking (ErrorChecking errors) |
Set the error checking status. | |
bool | inRange (Latitude min, Latitude max) const |
Checks if this latitude value is within the given range. | |
Latitude & | operator= (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. | |
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. | |
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 (const double &angle, const Angle::Units &units) |
Same as planetocentric. | |
This class is designed to encapsulate the concept of a Latitude.
This is used primarily 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.
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.
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. |
|
inherited |
The set of usable angle measurement units.
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.
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.
latitude | The latitude value this instance will represent |
errors | Error checking conditions |
References 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.
latitude | The latitude value this instance will represent, in the mapping group's units |
mapping | A mapping group |
errors | Error checking conditions |
IException::Unknown | "Unable to create Latitude object from given mapping group." |
IException::Programmer | "Latitude type is not recognized" |
References _FILEINFO_, Isis::Distance::Meters, Isis::IException::Programmer, Isis::Angle::Radians, Isis::Target::radiiGroup(), setPlanetocentric(), setPlanetographic(), Isis::toDouble(), and Isis::IException::Unknown.
Isis::Latitude::Latitude | ( | double | latitude, |
PvlGroup | mapping, | ||
Angle::Units | latitudeUnits, | ||
ErrorChecking | errors = ThrowAllErrors ) |
Create and initialize a latitude value using the latitude units and the mapping group's radii.
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 |
IException::Unknown | "Unable to create Latitude object from given mapping group." |
IException::Programmer | "Latitude type is not recognized" |
References _FILEINFO_, Isis::Distance::Meters, Isis::IException::Programmer, Isis::Target::radiiGroup(), setPlanetocentric(), setPlanetographic(), Isis::toDouble(), and Isis::IException::Unknown.
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.
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 |
IException::Programmer | "Enumeration value [latType] is not a valid CoordinateType" |
References _FILEINFO_, Planetocentric, Planetographic, Isis::IException::Programmer, setPlanetocentric(), setPlanetographic(), and Isis::Angle::toString().
Isis::Latitude::Latitude | ( | const Latitude & | latitudeToCopy | ) |
This copies the given latitude exactly.
latitudeToCopy | The latitude we're duplicating |
Isis::Latitude::~Latitude | ( | ) |
This cleans up the Latitude class.
Latitude Isis::Latitude::add | ( | Angle | angleToAdd, |
Distance | equatorialRadius, | ||
Distance | polarRadius, | ||
CoordinateType | latType ) |
Adds another latitude to this one.
Handles planetographic latitudes.
angleToAdd | the latitude being added to this one |
equatorialRadius | Radius of the target (planet) at the equator |
polarRadius | Radius of the target (planet) at the poles |
latType | Planetocentric or Planetographic |
References Latitude(), Planetocentric, planetocentric(), Planetographic, planetographic(), and Isis::Angle::Radians.
Adds an angle to this latitude.
The adding method is determined by the latitude type.
angleToAdd | the latitude being added to this one |
mapping | the mapping group from a projection |
IException::Unknown | "Unable to add angle to Latitude object from given mapping group." |
IException::Programmer | "Latitude type is not recognized" |
References _FILEINFO_, add(), Isis::Distance::Meters, Planetocentric, Planetographic, Isis::IException::Programmer, Isis::Target::radiiGroup(), Isis::toDouble(), and Isis::IException::Unknown.
Referenced by add(), and Isis::GridGraphicsItem::GridGraphicsItem().
|
virtualinherited |
Return angle value in desired units.
unit | Desired units of the angle (see Angle::Units) |
References _FILEINFO_, Isis::Angle::Degrees, Isis::Null, Isis::IException::Programmer, Isis::RAD2DEG, and Isis::Angle::Radians.
Referenced by Isis::Angle::Angle(), Isis::Angle::Angle(), Isis::Angle::degrees(), Isis::Longitude::force360Domain(), Isis::Angle::operator<(), Isis::Angle::operator==(), Isis::Angle::operator>(), planetocentric(), Isis::Longitude::positiveEast(), Isis::Longitude::positiveWest(), Isis::Angle::radians(), setAngle(), and Isis::Angle::setAngle().
|
inlineinherited |
Get the angle in units of Degrees.
References Isis::Angle::angle(), and Isis::Angle::Degrees.
Referenced by Isis::Angle::Angle(), Isis::MosaicGridTool::autoGrid(), Isis::PhotometricFunction::compute(), Isis::MosaicGridTool::drawGrid(), Isis::AdjustedLatitudeFilter::evaluate(), Isis::AdjustedLongitudeFilter::evaluate(), Isis::APrioriLatitudeFilter::evaluate(), Isis::APrioriLongitudeFilter::evaluate(), Isis::Longitude::force360Domain(), Isis::BundleControlPoint::formatBundleLatitudinalOutputDetailString(), Isis::BundleControlPoint::formatBundleRectangularOutputDetailString(), Isis::AbstractPointItem::getData(), Isis::GridGraphicsItem::GridGraphicsItem(), Isis::ImageTreeWidgetItem::ImageTreeWidgetItem(), Isis::SurfacePoint::LatToDouble(), Isis::SurfacePoint::LonToDouble(), Isis::Camera::ObliqueDetectorResolution(), Isis::ControlNetFilter::PointLatLonFilter(), Isis::MosaicGridToolConfigDialog::readSettings(), Isis::Angle::setDegrees(), Isis::CSMCamera::subSpacecraftPoint(), Isis::RingPlaneProjection::To180Domain(), Isis::TProjection::To180Domain(), Isis::RingPlaneProjection::To360Domain(), Isis::TProjection::To360Domain(), Isis::ControlNetVersioner::toPvl(), Isis::MosaicGridTool::toPvl(), Isis::Angle::toString(), Isis::Sensor::UniversalLatitude(), and Isis::Sensor::UniversalLongitude().
Latitude::ErrorChecking Isis::Latitude::errorChecking | ( | ) | const |
Get the error checking status.
This indicates if the Latitude object will throw an error when set to an angle less than -90 degrees or greater than 90 degrees.
|
staticinherited |
Makes an angle to represent a full rotation (0-360 or 0-2pi).
References Isis::Angle::Angle(), and Isis::Angle::Degrees.
Referenced by Isis::Hillshade::shadedValue(), and Isis::Longitude::to360Range().
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).
min | The beginning of the valid latitude range |
max | The end of the valid latitude range |
IException::User | "The minimum latitude degrees is greater than the maximum latitude degrees" |
References _FILEINFO_, Isis::Angle::Degrees, and Isis::IException::User.
|
inherited |
This indicates whether we have a legitimate angle stored or are in an unset, or invalid, state.
References Isis::Null.
Referenced by Isis::GroundGrid::CreateGrid(), Isis::Longitude::force180Domain(), Isis::Longitude::force360Domain(), Isis::GroundGrid::GroundGrid(), Isis::UniversalGroundMap::GroundRange(), Isis::SunShadowTool::mouseMove(), Isis::Angle::operator*(), Isis::Angle::operator+(), Isis::Angle::operator-(), Isis::Angle::operator/(), Isis::Angle::operator/(), Isis::Angle::operator<(), Isis::Angle::operator>(), planetographic(), Isis::Image::save(), Isis::Shape::save(), Isis::Hillshade::setAzimuth(), Isis::GroundGrid::SetGroundLimits(), Isis::Hillshade::setZenith(), and Isis::Angle::toString().
|
inlineinherited |
Test if another angle is not equal to this angle.
Takes the negated result of the '==' operator.
angle2 | The comparison angle (on right-hand-side of != operator) |
|
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.
value | The value to multiply to this angle |
References Isis::Angle::Angle(), Isis::Angle::isValid(), Isis::Angle::Radians, and Isis::Angle::radians().
|
inlineinherited |
Multiply this angle by an integer and return the resulting angle.
value | The integer value to multiply with this angle |
|
inlineinherited |
Multiply this angle by a double and set this instance to the resulting angle.
value | The double value to multiply with this angle |
Add angle value to another.
If either of these are invalid angles, then the result will be an invalid angle.
angle2 | The angle to add to this angle |
References Isis::Angle::Angle(), Isis::Angle::isValid(), Isis::Angle::Radians, and Isis::Angle::radians().
|
inlineinherited |
Add angle value to another as double and replace original.
angle2 | The angle to add to this angle |
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.
angle2 | The angle to subtract from this angle |
References Isis::Angle::Angle(), Isis::Angle::isValid(), Isis::Angle::Radians, and Isis::Angle::radians().
|
inlineinherited |
Subtract angle value from another and set this instance to the resulting angle.
angle2 | The angle to subtract from this angle |
|
inherited |
Divide this angle by another angle and return the ratio.
value | The ratio, Null if invalid |
References Isis::Angle::isValid(), Isis::Null, and Isis::Angle::radians().
|
inherited |
Divide this angle by a double.
value | The double value to use as the divisor |
References Isis::Angle::Angle(), Isis::Angle::isValid(), Isis::Angle::Radians, and Isis::Angle::radians().
|
inlineinherited |
Divide this angle by an integer and return the resulting angle.
value | The double value to use as the divisor |
|
inlineinherited |
Divide this angle by a double and return the resulting angle.
value | The double value to use as the divisor |
|
inherited |
Test if the other angle is less than the current angle.
If either is invalid, then an exception will be thrown.
angle2 | The comparison angle (on right-hand-side of < operator) |
References _FILEINFO_, Isis::Angle::angle(), Isis::Angle::isValid(), Isis::IException::Programmer, and Isis::Angle::Radians.
|
inlineinherited |
Test if the other angle is less than or equal to the current angle.
angle2 | The comparison angle (on right-hand-side of < operator) |
This assigns another latitude to this one - making this latitude an exact duplicate of the other.
latitudeToCopy | The latitude we are assigning from |
References setPlanetocentric().
|
inlineinherited |
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.
angle2 | The comparison angle (on right-hand-side of == operator) |
References Isis::Angle::angle(), and Isis::Angle::Radians.
|
inherited |
Test if the other angle is greater than the current angle.
If either is invalid, then an exception will be thrown.
angle2 | The comparison angle (on right-hand-side of > operator) |
References _FILEINFO_, Isis::Angle::angle(), Isis::Angle::isValid(), Isis::IException::Programmer, and Isis::Angle::Radians.
|
inlineinherited |
Test if the other angle is greater than or equal to the current angle.
angle2 | The comparison angle (on right-hand-side of < operator) |
double Isis::Latitude::planetocentric | ( | Angle::Units | units = Angle::Radians | ) | const |
Get the latitude in the planetocentric (universal) coordinate system.
units | The angular units to get the latitude in |
References Isis::Angle::angle().
Referenced by add(), and Isis::LidarData::write().
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.
units | The angular units to get the latitude in |
IException::Programmer | "The latitude cannot be converted to Planetographic without the planetary radii, please use the other Latitude constructor" |
IException::Programmer | "Latitudes outside of the -90/90 range cannot be converted between Planetographic and Planetocentric" |
IException::Programmer | "Invalid planetographic latitudes are not currently supported" |
References _FILEINFO_, Isis::Angle::Angle(), Isis::Angle::Degrees, Isis::Angle::isValid(), Latitude(), Isis::IException::Programmer, Isis::Angle::Radians, Isis::Angle::radians(), and Isis::Angle::toString().
Referenced by add(), Isis::MosaicGridTool::autoGrid(), Isis::GridGraphicsItem::GridGraphicsItem(), and Isis::MosaicGridToolConfigDialog::readSettings().
|
inlineinherited |
Convert an angle to a double.
This will return the radians version of the angle.
operator double() const { return angle(Radians); } Get the angle in units of Radians.
References Isis::Angle::angle(), and Isis::Angle::Radians.
Referenced by Isis::BundleLidarRangeConstraint::applyConstraint(), Isis::SurfacePoint::GetLatWeight(), Isis::SurfacePoint::GetLonWeight(), Isis::GridGraphicsItem::GridGraphicsItem(), Isis::SurfacePoint::LatitudinalDerivative(), Isis::SurfacePoint::LatToDouble(), Isis::SurfacePoint::LonToDouble(), Isis::SunShadowTool::mouseMove(), Isis::Angle::operator*(), Isis::Angle::operator+(), Isis::Angle::operator-(), Isis::Angle::operator/(), Isis::Angle::operator/(), planetographic(), Isis::SurfacePoint::ResetLocalRadius(), Isis::LinearAlgebra::rotate(), Isis::Image::save(), Isis::Shape::save(), Isis::Angle::setRadians(), Isis::SurfacePoint::SetSphericalMatrix(), and Isis::Hillshade::shadedValue().
|
protectedvirtual |
Same as planetocentric.
We're overriding this method in order to do -90/90 degree checking.
operator double() const { return planetocentric(); }
angle | The numeric value of the angle |
units | The units the angle is in (radians or degrees typically) |
IException::Programmer | "Latitudes past 90 degrees are not valid. The latitude is not allowed" |
Reimplemented from Isis::Angle.
References _FILEINFO_, AllowPastPole, Isis::Angle::Angle(), Isis::Angle::angle(), Isis::Angle::Degrees, Isis::IsSpecial(), Isis::IException::Programmer, Isis::Angle::setAngle(), and Isis::toString().
Referenced by setPlanetocentric(), and setPlanetographic().
|
inlineinherited |
Set the angle in units of Degrees.
degrees | The new angle value, Null for invalid angle |
References Isis::Angle::Degrees, Isis::Angle::degrees(), and Isis::Angle::setAngle().
void Isis::Latitude::setErrorChecking | ( | ErrorChecking | errors | ) |
Set the error checking status.
If set to ThrowAllErrors, then an exception will be thrown if the Latitude object is set to an angle less than -90 degrees or greater than 90 degrees. If set to AllowPastPole, then no exception will be thrown.
error | The new error checking status. |
Referenced by Isis::GroundGrid::CreateGrid(), and Isis::GroundGrid::WalkBoundary().
void Isis::Latitude::setPlanetocentric | ( | double | latitude, |
Angle::Units | units = Angle::Radians ) |
Set the latitude given a value in the Planetocentric coordinate system.
latitude | The planetographic latitude to set ourselves to |
units | The angular units latitude is in |
References setAngle().
Referenced by Latitude(), Latitude(), Latitude(), Latitude(), 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.
latitude | The planetographic latitude to set ourselves to |
units | The angular units latitude is in |
IException::Programmer | "The latitude cannot be converted to Planetographic without the planetary radii, please use the other Latitude constructor" |
IException::Programmer | "Latitudes outside of the -90/90 range cannot be converted between Planetographic and Planetocentric" |
IException::Programmer | "Invalid planetographic latitudes are not currently supported" |
References _FILEINFO_, Isis::Angle::Angle(), Isis::Angle::Degrees, Isis::IsSpecial(), Isis::IException::Programmer, Isis::Angle::Radians, setAngle(), and Isis::toString().
Referenced by Latitude(), Latitude(), and Latitude().
|
inlineinherited |
Set the angle in units of Radians.
radians | The new angle value, Null for invalid angle |
References Isis::Angle::Radians, Isis::Angle::radians(), and Isis::Angle::setAngle().
Referenced by Isis::LinearAlgebra::toAxisAngle().
|
virtualinherited |
Get the angle in human-readable form.
includeUnits | Include the angle's units in the text. |
References Isis::Angle::degrees(), Isis::Angle::isValid(), and Isis::toString().
Referenced by Latitude(), planetographic(), and Isis::Hillshade::shadedValue().
|
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.
unit | Desired units of the Angle wrap constant (see Angle::Units) |
References _FILEINFO_, Isis::Angle::Degrees, Isis::PI, Isis::IException::Programmer, and Isis::Angle::Radians.
Referenced by Isis::Longitude::positiveWest(), and Isis::Longitude::setPositiveWest().