Isis 3 Programmer Reference
|
Calculates a lat/lon grid over an area. More...
#include <GroundGrid.h>
Public Member Functions | |
GroundGrid (UniversalGroundMap *gmap, bool splitLatLon, bool extendGrid, unsigned int width, unsigned int height) | |
This method initializes the class by allocating the grid, calculating the lat/lon range, and getting a default grid resolution. | |
virtual | ~GroundGrid () |
Delete the object. | |
void | CreateGrid (Latitude baseLat, Longitude baseLon, Angle latInc, Angle lonInc, Progress *progress=0) |
This method draws the grid internally, using default resolutions. | |
void | CreateGrid (Latitude baseLat, Longitude baseLon, Angle latInc, Angle lonInc, Progress *progress, Angle latRes, Angle lonRes) |
This method draws the grid internally. | |
void | WalkBoundary () |
This draws grid lines along the extremes of the lat/lon box of the grid. | |
void | SetGroundLimits (Latitude minLat, Longitude minLon, Latitude maxLat, Longitude maxLon) |
This restricts (or grows) the ground range in which to draw grid lines. | |
bool | PixelOnGrid (int x, int y) |
Returns true if the grid is on this point. | |
bool | PixelOnGrid (int x, int y, bool latGrid) |
Returns true if the grid is on this point. | |
Latitude | minLatitude () const |
Returns the minimum latitude for the grid. | |
Longitude | minLongitude () const |
Returns the minimum longitude for the grid. | |
Latitude | maxLatitude () const |
Returns the maximum latitude for the grid. | |
Longitude | maxLongitude () const |
Returns the maximum longitude for the grid. | |
PvlGroup * | GetMappingGroup () |
Returns a mapping group representation of the projection or camera. | |
Protected Member Functions | |
virtual bool | GetXY (Latitude lat, Longitude lon, unsigned int &x, unsigned int &y) |
This method converts a lat/lon to an X/Y. | |
UniversalGroundMap * | GroundMap () |
Returns the ground map for children. | |
Private Member Functions | |
void | SetGridBit (unsigned int x, unsigned int y, bool latGrid) |
This flags a bit as on the grid lines. | |
bool | GetGridBit (unsigned int x, unsigned int y, bool latGrid) |
Returns true if the specified coordinate is on the grid lines. | |
void | DrawLineOnGrid (unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2, bool isLatLine) |
This sets the bits on the grid along the specified line. | |
Private Attributes | |
char * | p_grid |
This stores the bits of each pixel in the grid. | |
char * | p_latLinesGrid |
This stores the bits of each pixel in the grid. | |
char * | p_lonLinesGrid |
This stores the bits of each pixel in the grid. | |
unsigned int | p_width |
This is the width of the grid. | |
unsigned int | p_height |
This is the height of the grid. | |
unsigned long | p_gridSize |
This is width*height. | |
UniversalGroundMap * | p_groundMap |
This calculates single grid pts. | |
Latitude * | p_minLat |
Lowest latitude in image. | |
Longitude * | p_minLon |
Lowest longitude in image. | |
Latitude * | p_maxLat |
Highest latitude in image. | |
Longitude * | p_maxLon |
Highest longitude in image. | |
PvlGroup * | p_mapping |
The mapping group representation of the projection or camera. | |
double | p_defaultResolution |
Default step size in degrees/pixel. | |
bool | p_reinitialize |
True if we need to reset p_grid in CreateGrid. | |
bool | m_extendGrid |
If the grid should extend past the longitude domain boundary. | |
Calculates a lat/lon grid over an area.
This class, given a universal ground map, area width and height, base lat/lon, lat/lon increments, and optionalls a progress and resolutions will calculate where grid lines should lie.
2010-05-06 Steven Lambright - Added Split Lat/Lon functionality
2010-06-22 Steven Lambright - Improved handling of resolutions
2011-01-25 Steven Lambright - Now uses native units to the projection, Lat/Lon classes, and several bug fixes when it comes to out of range values or non-standard projection types.
2011-01-26 Steven Lambright - Fixed a bug where the grid was not consistent on the edges and added SetGroundLimits and WalkBoundary for the new grid options Bound lat/lon range.
2011-02-25 Steven Lambright - Min/Max Lat/Lons do not have to be known in the constructor any more
2011-12-08 Steven Lambright - Fixed a bug causing the longitude range to be incorrect. Fixes #607.
2014-06-06 Kristin Berry - Fixed a bug where lat/lon were swapped in the code. Fixes #2081.
2016-09-29 Jeannie Backer - Changed Latitude objects that were created with Latitude's mapping group constructor to have enum value Latitude::AllowPastPole. This was done for p_minLat in the GroundGrid constructor and for startLat in the CreateGrid() method. The reason for this is that these objects are copied to initialize another Latitude variable (lat) within for-loops that go past the poles. Thus lat must be allowed to go past the poles. This bug was uncovered when Latitude's virtual setAngle() method was fixed to match the signature of the parent method. Moved implementation of GroundMap() and GetMappingGroup() to the cpp file per ISIS coding standards.
2017-04-10 Jesse Mapel - Modified to not throw an exception when calculating longitude lines close to 90 or -90 latitude. Fixes #4766.
2017-06-28 Jesse Mapel - Added a flag to extend the grid past the longitude domain boundary. Fixes #2185.
Definition at line 58 of file GroundGrid.h.
Isis::GroundGrid::GroundGrid | ( | UniversalGroundMap * | gmap, |
bool | splitLatLon, | ||
bool | extendGrid, | ||
unsigned int | width, | ||
unsigned int | height ) |
This method initializes the class by allocating the grid, calculating the lat/lon range, and getting a default grid resolution.
gmap | A universal ground map to use for calculating the grid |
splitLatLon | Make two grids: one for latitude lines and one for longitude lines |
extendGrid | If the grid should extend past the longitude domain boundary. |
width | The width of the grid; often cube samples |
height | The height of the grid; often cube samples |
Definition at line 40 of file GroundGrid.cpp.
References Isis::Latitude::AllowPastPole, Isis::Camera::BasicMapping(), Isis::UniversalGroundMap::Camera(), Isis::Angle::Degrees, Isis::UniversalGroundMap::HasCamera(), Isis::PvlContainer::hasKeyword(), Isis::Camera::HighestImageResolution(), Isis::Angle::isValid(), m_extendGrid, Isis::Distance::Meters, p_defaultResolution, p_grid, p_gridSize, p_groundMap, p_height, p_latLinesGrid, p_lonLinesGrid, p_mapping, p_maxLat, p_maxLon, p_minLat, p_minLon, p_reinitialize, p_width, Isis::UniversalGroundMap::Projection(), Isis::UniversalGroundMap::Resolution(), and Isis::toDouble().
|
virtual |
Delete the object.
Definition at line 167 of file GroundGrid.cpp.
References p_grid, p_latLinesGrid, p_lonLinesGrid, p_mapping, p_maxLat, p_maxLon, p_minLat, and p_minLon.
void Isis::GroundGrid::CreateGrid | ( | Latitude | baseLat, |
Longitude | baseLon, | ||
Angle | latInc, | ||
Angle | lonInc, | ||
Progress * | progress, | ||
Angle | latRes, | ||
Angle | lonRes ) |
This method draws the grid internally.
It is not valid to call PixelOnGrid until this method has been called.
baseLat | Latitude to hit in the grid |
baseLon | Longitude to hit in the grid |
latInc | Distance between latitude lines |
lonInc | Distance between longitude lines |
progress | If passed in, this progress will be used |
latRes | Resolution of latitude lines (in degrees/pixel) |
lonRes | Resolution of longitude lines (in degrees/pixel) |
Definition at line 239 of file GroundGrid.cpp.
References Isis::Latitude::AllowPastPole, Isis::Progress::CheckStatus(), Isis::Angle::Degrees, DrawLineOnGrid(), GetMappingGroup(), GetXY(), Isis::Angle::isValid(), p_defaultResolution, p_grid, p_gridSize, p_groundMap, p_latLinesGrid, p_lonLinesGrid, p_maxLat, p_maxLon, p_minLat, p_minLon, p_reinitialize, Isis::IException::Programmer, Isis::Latitude::setErrorChecking(), Isis::Progress::SetMaximumSteps(), and Isis::IException::Unknown.
void Isis::GroundGrid::CreateGrid | ( | Latitude | baseLat, |
Longitude | baseLon, | ||
Angle | latInc, | ||
Angle | lonInc, | ||
Progress * | progress = 0 ) |
This method draws the grid internally, using default resolutions.
baseLat | Latitude to hit in the grid |
baseLon | Longitude to hit in the grid |
latInc | Distance between latitude lines |
lonInc | Distance between longitude lines |
progress | If passed in, this progress will be used |
Definition at line 218 of file GroundGrid.cpp.
References CreateGrid().
Referenced by CreateGrid().
|
private |
This sets the bits on the grid along the specified line.
x1 | Start X |
y1 | Start Y |
x2 | End X |
y2 | End Y |
isLatLine |
Definition at line 730 of file GroundGrid.cpp.
References SetGridBit().
Referenced by CreateGrid(), and WalkBoundary().
|
private |
Returns true if the specified coordinate is on the grid lines.
x | X-Coordinate (0-based) |
y | Y-Coordinate (0-based) |
latGrid | True if you want to access the latitude grid where there are separate lat/lon grids. False for lon. Irrelevant if using a single grid. |
Definition at line 691 of file GroundGrid.cpp.
References p_grid, p_gridSize, p_latLinesGrid, p_lonLinesGrid, p_width, and Isis::IException::Programmer.
Referenced by PixelOnGrid(), and PixelOnGrid().
PvlGroup * Isis::GroundGrid::GetMappingGroup | ( | ) |
Returns a mapping group representation of the projection or camera.
This is useful for matching units with lat/lons.
Definition at line 546 of file GroundGrid.cpp.
References p_mapping.
Referenced by CreateGrid().
|
protectedvirtual |
This method converts a lat/lon to an X/Y.
This implementation converts to sample/line.
lat | Latitude of Lat/Lon pair to convert to S/L |
lon | Longitude of Lat/Lon pair to convert to S/L |
x | Output sample (0-based) |
y | Output line (0-based) |
Definition at line 618 of file GroundGrid.cpp.
References GroundMap(), Isis::UniversalGroundMap::Line(), m_extendGrid, p_groundMap, p_height, p_width, and Isis::UniversalGroundMap::Sample().
Referenced by CreateGrid(), and WalkBoundary().
|
protected |
Returns the ground map for children.
Definition at line 643 of file GroundGrid.cpp.
References p_groundMap.
Referenced by GetXY().
Latitude Isis::GroundGrid::maxLatitude | ( | ) | const |
Returns the maximum latitude for the grid.
Definition at line 585 of file GroundGrid.cpp.
References p_maxLat.
Longitude Isis::GroundGrid::maxLongitude | ( | ) | const |
Returns the maximum longitude for the grid.
Definition at line 599 of file GroundGrid.cpp.
References p_maxLon.
Latitude Isis::GroundGrid::minLatitude | ( | ) | const |
Returns the minimum latitude for the grid.
Definition at line 557 of file GroundGrid.cpp.
References p_minLat.
Longitude Isis::GroundGrid::minLongitude | ( | ) | const |
Returns the minimum longitude for the grid.
Definition at line 571 of file GroundGrid.cpp.
References p_minLon.
bool Isis::GroundGrid::PixelOnGrid | ( | int | x, |
int | y ) |
Returns true if the grid is on this point.
x | X-Coordinate of grid (0-based) |
y | Y-Coordinate of grid (0-based) |
Definition at line 529 of file GroundGrid.cpp.
References GetGridBit(), p_height, and p_width.
bool Isis::GroundGrid::PixelOnGrid | ( | int | x, |
int | y, | ||
bool | latGrid ) |
Returns true if the grid is on this point.
Using this method is recommended if lat/lon grids are separate.
x | X-Coordinate of grid (0-based) |
y | Y-Coordinate of grid (0-based) |
latGrid | True for latitude lines, false for longitude lines |
Definition at line 510 of file GroundGrid.cpp.
References GetGridBit(), p_height, and p_width.
|
private |
This flags a bit as on the grid lines.
x | X-Coordinate (0-based) |
y | Y-Coordinate (0-based) |
latGrid | True if this is derived from a latitude line |
Definition at line 655 of file GroundGrid.cpp.
References p_grid, p_gridSize, p_latLinesGrid, p_lonLinesGrid, p_width, and Isis::IException::Programmer.
Referenced by DrawLineOnGrid().
void Isis::GroundGrid::SetGroundLimits | ( | Latitude | minLat, |
Longitude | minLon, | ||
Latitude | maxLat, | ||
Longitude | maxLon ) |
This restricts (or grows) the ground range in which to draw grid lines.
minLat | The lowest latitude extreme to draw grid lines to |
maxLat | The highest latitude extreme to draw grid lines to |
minLon | The lowest longitude extreme to draw grid lines to |
maxLon | The highest longitude extreme to draw grid lines to |
Definition at line 411 of file GroundGrid.cpp.
References Isis::Angle::isValid(), p_maxLat, p_maxLon, p_minLat, and p_minLon.
void Isis::GroundGrid::WalkBoundary | ( | ) |
This draws grid lines along the extremes of the lat/lon box of the grid.
Definition at line 434 of file GroundGrid.cpp.
References Isis::Latitude::AllowPastPole, Isis::Angle::Degrees, DrawLineOnGrid(), GetXY(), p_defaultResolution, p_maxLat, p_maxLon, p_minLat, p_minLon, and Isis::Latitude::setErrorChecking().
|
private |
If the grid should extend past the longitude domain boundary.
Definition at line 132 of file GroundGrid.h.
Referenced by GetXY(), and GroundGrid().
|
private |
Default step size in degrees/pixel.
Definition at line 129 of file GroundGrid.h.
Referenced by CreateGrid(), GroundGrid(), and WalkBoundary().
|
private |
This stores the bits of each pixel in the grid.
Definition at line 113 of file GroundGrid.h.
Referenced by CreateGrid(), GetGridBit(), GroundGrid(), SetGridBit(), and ~GroundGrid().
|
private |
This is width*height.
Definition at line 118 of file GroundGrid.h.
Referenced by CreateGrid(), GetGridBit(), GroundGrid(), and SetGridBit().
|
private |
This calculates single grid pts.
Definition at line 119 of file GroundGrid.h.
Referenced by CreateGrid(), GetXY(), GroundGrid(), and GroundMap().
|
private |
This is the height of the grid.
Definition at line 117 of file GroundGrid.h.
Referenced by GetXY(), GroundGrid(), PixelOnGrid(), and PixelOnGrid().
|
private |
This stores the bits of each pixel in the grid.
Definition at line 114 of file GroundGrid.h.
Referenced by CreateGrid(), GetGridBit(), GroundGrid(), SetGridBit(), and ~GroundGrid().
|
private |
This stores the bits of each pixel in the grid.
Definition at line 115 of file GroundGrid.h.
Referenced by CreateGrid(), GetGridBit(), GroundGrid(), SetGridBit(), and ~GroundGrid().
|
private |
The mapping group representation of the projection or camera.
Definition at line 127 of file GroundGrid.h.
Referenced by GetMappingGroup(), GroundGrid(), and ~GroundGrid().
|
private |
Highest latitude in image.
Definition at line 123 of file GroundGrid.h.
Referenced by CreateGrid(), GroundGrid(), maxLatitude(), SetGroundLimits(), WalkBoundary(), and ~GroundGrid().
|
private |
Highest longitude in image.
Definition at line 124 of file GroundGrid.h.
Referenced by CreateGrid(), GroundGrid(), maxLongitude(), SetGroundLimits(), WalkBoundary(), and ~GroundGrid().
|
private |
Lowest latitude in image.
Definition at line 121 of file GroundGrid.h.
Referenced by CreateGrid(), GroundGrid(), minLatitude(), SetGroundLimits(), WalkBoundary(), and ~GroundGrid().
|
private |
Lowest longitude in image.
Definition at line 122 of file GroundGrid.h.
Referenced by CreateGrid(), GroundGrid(), minLongitude(), SetGroundLimits(), WalkBoundary(), and ~GroundGrid().
|
private |
True if we need to reset p_grid in CreateGrid.
Definition at line 131 of file GroundGrid.h.
Referenced by CreateGrid(), and GroundGrid().
|
private |
This is the width of the grid.
Definition at line 116 of file GroundGrid.h.
Referenced by GetGridBit(), GetXY(), GroundGrid(), PixelOnGrid(), PixelOnGrid(), and SetGridBit().