Isis 3 Programmer Reference
Isis::ImagePolygon Class Reference

Create cube polygons, read/write polygons to blobs. More...

#include <ImagePolygon.h>

Collaboration diagram for Isis::ImagePolygon:
Collaboration graph

Public Member Functions

 ImagePolygon ()
 Constructs a Polygon object, setting the polygon name.
 
 ImagePolygon (Blob &blob)
 Constructs a Polygon object from a Blob.
 
 ImagePolygon (const ImagePolygon &other)
 
 ~ImagePolygon ()
 Destroys the Polygon object.
 
void Create (Cube &cube, int sinc=1, int linc=1, int ss=1, int sl=1, int ns=0, int nl=0, int band=1, bool increasePrecision=false)
 Create a Polygon from given cube.
 
void Create (std::vector< std::vector< double > > polyCoordinates)
 
CamerainitCube (Cube &cube, int ss=1, int sl=1, int ns=0, int nl=0, int band=1)
 Create a Polygon from given cube.
 
void Emission (double emission)
 Set the maximum emission angle ( light refleted to camera )
 
void Incidence (double incidence)
 Set the maximum incidence angle ( light contacting the planet )
 
void EllipsoidLimb (bool ellip)
 If a limb is detected, use un ellipsoid shape model if true.
 
void SubpixelAccuracy (int div)
 The subpixel accuracy to use.
 
geos::geom::MultiPolygon * Polys ()
 Return a geos Multipolygon.
 
std::string polyStr () const
 Return a geos Multipolygon.
 
double validSampleDim ()
 Retuns the maximum valid sample width of the cube set with either initCube() or Create()
 
double validLineDim ()
 Retuns the maximum valid line width of the cube set with either initCube() or Create()
 
int getSinc () const
 Return the sample increment used the create this polygon.
 
int getLinc () const
 Return the line increment used the create this polygon.
 
int numVertices () const
 
Blob toBlob () const
 Serialize the ImagePolygon to a Blob.
 

Private Member Functions

bool SetImage (const double sample, const double line)
 Sets the sample/line values of the cube to get lat/lon values.
 
geos::geom::Coordinate FindFirstPoint ()
 Finds the first point that projects in an image.
 
void WalkPoly ()
 Walks the image finding its lon lat polygon and stores it to p_pts.
 
geos::geom::Coordinate FindNextPoint (geos::geom::Coordinate *currentPoint, geos::geom::Coordinate lastPoint, int recursionDepth=0)
 Finds the next point on the image using a left hand rule walking algorithm.
 
double DistanceSquared (const geos::geom::Coordinate *p1, const geos::geom::Coordinate *p2)
 Calculates the distance squared between two coordinates.
 
void MoveBackInsideImage (double &sample, double &line, double sinc, double linc)
 This method ensures sample/line after sinc/linc have been applied is inside the image.
 
bool InsideImage (double sample, double line)
 This returns true if sample/line are inside the cube.
 
void Fix360Poly ()
 If the cube crosses the 0/360 boundary and does not include a pole, the polygon is separated into multiple polygons, usually one on each side of the boundary.
 
void FixPolePoly (std::vector< geos::geom::Coordinate > *crossingPoints)
 If the cube crosses the 0/360 boundary and contains a pole, Some points are added to allow the polygon to unwrap properly.
 
bool IsLimb ()
 Returns True when the input image is a limb image.
 
geos::geom::Coordinate FindBestPoint (geos::geom::Coordinate *currentPoint, geos::geom::Coordinate newPoint, geos::geom::Coordinate lastPoint)
 While walking the image in sample/line space, this function finds the best valid point between the first valid point found and the last point which failed its validity test using a linear search.
 
geos::geom::Coordinate FixCornerSkip (geos::geom::Coordinate *currentPoint, geos::geom::Coordinate newPoint)
 Looks at the next possible point relative to the lasts and attempts to adjust the point outward to grab valid corner data.
 
void FindSubpixel (std::vector< geos::geom::Coordinate > &points)
 Takes p_polygons in sample/line space and finds its subpixel accuracy.
 
void calcImageBorderCoordinates ()
 Calculates the four border points, particularly for validSampleDim() and validLineDim()
 

Private Attributes

Cubep_cube
 The cube provided.
 
bool p_isProjected
 True when the provided cube is projected.
 
Brickp_brick
 Used to check for valid DNs.
 
geos::geom::CoordinateSequence * p_pts
 The sequence of coordinates that compose the boundary of the image.
 
geos::geom::MultiPolygon * p_polygons
 The multipolygon of the image.
 
std::string p_polyStr
 The string representation of the polygon.
 
UniversalGroundMapp_gMap
 The cube's ground map.
 
geos::geom::Coordinate * m_leftCoord
 The cube's left-most valid coord.
 
geos::geom::Coordinate * m_rightCoord
 The cube's right-most valid coord.
 
geos::geom::Coordinate * m_topCoord
 The cube's top-most valid coord.
 
geos::geom::Coordinate * m_botCoord
 The cube's bot-most valid coord.
 
int p_cubeStartSamp
 The the sample of the first valid point in the cube.
 
int p_cubeStartLine
 The the line of the first valid point in the cube.
 
int p_cubeSamps
 The number of samples in the cube.
 
int p_cubeLines
 The number of lines in the cube.
 
int p_sampinc
 The increment for walking along the polygon in the sample direction.
 
int p_lineinc
 The increment for walking along the polygon in the line direcction.
 
double p_emission
 The maximum emission angle to consider valid.
 
double p_incidence
 The maximum incidence angle to consider valid.
 
bool p_ellipsoid
 Uses an ellipsoid if a limb is detected.
 
int p_subpixelAccuracy
 The subpixel accuracy to use.
 

Detailed Description

Create cube polygons, read/write polygons to blobs.

This class creates polygons defining an image boundary, reads the polygon from a cube blob, and writes a polygon to a cube blob. The GEOS (Geometry Engine Open Source) package is used to create and manipulate the polygons. See http://geos.refractions.net for information about this package.

Author
2005-11-22 Tracie Sucharski
History

2006-05-17 Stuart Sides Renamed from PolygonTools and moved the geos::GeometryFactory to the new PolygonTools

2007-01-04 Tracie Sucharski, Fixed bug in Fix360Poly, on non-pole images after splitting at the 360 boundary, wasn't insuring that start and end points of polygon were the same.

2007-01-05 Tracie Sucharski, Made a change to the SetImage method. Cannot make the assumption that if a sample/line returns a lat/lon, that the lat/lon will return a sample/line. This was found using a Moc WA, global image, sample 1, line 1 returned a lat/lon, but entering that lat/lon does not return a valid sample/line.

2007-01-08 Tracie Sucharski, Fixed bugs in the ToImage and ToGround class for images that contain a pole.

History
2007-01-19 Tracie Sucharski, Comment out the ToGround method.
History

2007-01-31 Tracie Sucharski, Add WKT method to return WKT polygon as a string.

2007-02-06 Tracie Sucharski, Added band parameter to Create method and call UniversalGroundMap::SetBand.

2007-05-04 Robert Sucharski, with Jeff, Stuart, and Tracie's blessing, moved the WKT method to the PolygonTools class.

2007-07-26 Tracie Sucharski, Added ss,sl,ns,nl to constructor for sub-poly creation.

2007-11-09 Tracie Sucharski, Remove WKT method since the geos package know has a method to return a WKT string

2008-03-17 Tracie Sucharski, Added try/catch block to Create and Fix360Poly to catch geos exceptions.

History

2008-06-18 Stuart Sides - Fixed doc error

2008-08-18 Steven Lambright - Updated to work with geos3.0.0 instead of geos2. Mostly namespace changes.

2008-12-10 Steven Koechle - Split pole code into seperate function, chanded the way FixPoly360 did its intersection to handle a multipolygon being returned.

2008-12-10 Steven Lambright - Fixed logical problem which could happen when the limb of the planet was on the left and was the first thing found in the FindPoly method.

2009-01-06 Steven Koechle - Changed Constructor, removed backwards compatibility for footprint name.

2009-01-28 Steven Lambright - Fixed memory leaks

2009-02-20 Steven Koechle - Fixed Fix360Poly to use the PolygonTools Intersect method.

2009-04-17 Steven Koechle - Rewrote most of the class. Implemented a left-hand rule AI walking algotithm in the walkpoly method. Pole and 360 boundary logic was more integrated and simplified. Method of finding the first point was seperated into its own method.

2009-05-06 Steven Koechle - Fixed Error where a NULL polygon was being written.

2009-05-28 Steven Lambright - This program will no longer generate invalid polygons and should use despike as a correction algorithm if it is necessary.

2009-05-28 Stuart Sides - Added a new argument to Create for controling the quality of the polygon.

2009-05-28 Steven Lambright - Moved the quality parameter in the argument list, improved speed and the edges of files (and subareas) should be checked if the algorithm reaches them now. Fixed the sub-area capabilities.

2009-06-16 Christopher Austin - Fixed WalkPoly() to catch large pixel increments that ( though snapping ) skip over the starting point. Also skip the first left turn in FindNextPoint() to prevent double point checking as well as errors with snapping.

2009-06-17 Christopher Austin - Removed p_name. Uses parent Name()

2009-06-18 Christopher Austin - Changes starting point skipping solution to a snap. Added fix for polygons that form self-intersecting polygons due to this first point snapping.

2009-06-19 Christopher Austin - Temporarily reverted for backport, fixed truthdata for SpiceRotation, re-commited with all updates

2009-07-01 Christopher Austin - Added Emission and Phase Angle tolerences.

2009-07-09 Christopher Austin - Fixed range error in FixPolePoly() when no points cross, an overflow exception, as well as emission and incidence handling of poles.

2009-07-21 Christopher Austin - Added limb snapping along with internal corner searching. Fixed lat/lon crossing when samp/line does not cross. Removed the SetUniversalGround call in SetImage(). Limbs are now detected and handled using an ellipsoid shape model if p_ellipsoid is true.

2009-07-28 Christopher Austin - Changed qualitiy increment to sample/line increment to remove unnecessary points from the polygon.

2009-08-05 Christopher Austin - Added pole meridian proper polygon division.

2009-08-20 Christopher Austin - Added meridian walking and subpixel accuracy.

2009-08-28 Christopher Austin - Fixed a memory bounds error.

2010-02-08 Christopher Austin - Fixed an infinite loop which revisited the starting point, and added 360 meridian crossing

2010-02-17 Christopher Austin - Fixed two more infinite looping issues, including a cycle fix which occured during Emission Angle and Incidence Angle restrictions

2011-05-11 Steven Lambright - Now works with projected images.

2011-05-12 Christopher Austin - Added validSample/LineDim() functionality.

2011-07-01 Travis Addair - Added outlier check to FindFirstPoint() to avoid choosing a first point without any valid neighbors (i.e., an outlier).

2012-05-14 Steven Lambright - Added safety to the calcImageBorderCoordinates method, along with the validSampleDim and validLineDim methods. This fixes seg faults. Fixes #686.

2012-07-16 Steven Lambright - Fixed a bug in WalkPoly() that caused crashing periodically due to accessing a vector outside of it's bounds (negative indices). This was in the 'triangle' (loop) detection code. Fixes #994.

Definition at line 153 of file ImagePolygon.h.

Constructor & Destructor Documentation

◆ ImagePolygon() [1/2]

Isis::ImagePolygon::ImagePolygon ( )

Constructs a Polygon object, setting the polygon name.

Definition at line 38 of file ImagePolygon.cpp.

References m_botCoord, m_leftCoord, m_rightCoord, m_topCoord, p_cube, p_cubeStartLine, p_cubeStartSamp, p_ellipsoid, p_emission, p_incidence, p_polygons, and p_subpixelAccuracy.

◆ ImagePolygon() [2/2]

Isis::ImagePolygon::ImagePolygon ( Blob & blob)

Constructs a Polygon object from a Blob.

Definition at line 64 of file ImagePolygon.cpp.

References Isis::PolygonTools::MakeMultiPolygon(), p_polygons, p_polyStr, and p_pts.

◆ ~ImagePolygon()

Isis::ImagePolygon::~ImagePolygon ( )

Destroys the Polygon object.

Definition at line 85 of file ImagePolygon.cpp.

References m_botCoord, m_leftCoord, m_rightCoord, m_topCoord, p_cube, and p_polygons.

Member Function Documentation

◆ calcImageBorderCoordinates()

void Isis::ImagePolygon::calcImageBorderCoordinates ( )
private

Calculates the four border points, particularly for validSampleDim() and validLineDim()

History
2011-05-16 Tracie Sucharski - Fixed typo from p_cubeSamples to p_cubeSamps in ASSERT.

Definition at line 587 of file ImagePolygon.cpp.

References Isis::Cube::lineCount(), m_botCoord, m_leftCoord, m_rightCoord, m_topCoord, p_cube, p_cubeLines, p_cubeSamps, p_cubeStartLine, p_cubeStartSamp, and SetImage().

Referenced by validLineDim(), and validSampleDim().

◆ Create() [1/2]

void Isis::ImagePolygon::Create ( Cube & cube,
int sinc = 1,
int linc = 1,
int ss = 1,
int sl = 1,
int ns = 0,
int nl = 0,
int band = 1,
bool increasePrecision = false )

Create a Polygon from given cube.

Parameters
[in]cube(Cube &) Cube used to create polygon
[in]sinc(Default=1) (in) Pixel increment to define the granularity of the resulting polygon in the sample direction
[in]linc(Default=1) (in) Pixel increment to define the granularity of the resulting polygon in the line direction
[in]ss(Default=1) (in) Starting sample number
[in]sl(Default=1) (in) Starting Line number
[in]ns(Default=0) (in) Number of samples used to create the polygon. Default of 0 will cause ns to be set to the number of samples in the cube.
[in]nl(Default=0) (in) Number of lines used to create the polygon. Default of 0 will cause nl to be set to the number of lines in the cube.
[in]band(Default=1) (in) Image band number
increasePrecisionIteratively refine sinc and linc (defaults to false)
History

2008-04-28 Tracie Sucharski, When calculating p_pixInc, set to 1 if values calculated is 0.

2008-12-30 Tracie Sucharski - If ground map returns pole make sure it is actually on the image.

2009-05-28 Stuart Sides - Added the quality argument.

Definition at line 216 of file ImagePolygon.cpp.

References Isis::UniversalGroundMap::Camera(), Isis::Cube::fileName(), Fix360Poly(), Isis::Sensor::IgnoreElevationModel(), initCube(), p_brick, p_gMap, p_lineinc, p_pts, p_sampinc, Isis::IException::User, and WalkPoly().

◆ Create() [2/2]

void Isis::ImagePolygon::Create ( std::vector< std::vector< double > > polyCoordinates)

Definition at line 281 of file ImagePolygon.cpp.

◆ DistanceSquared()

double Isis::ImagePolygon::DistanceSquared ( const geos::geom::Coordinate * p1,
const geos::geom::Coordinate * p2 )
private

Calculates the distance squared between two coordinates.

Parameters
p1The first Coordinate for the calculation
p2The second Coordinate for the calculation

return The distance squared between the Coordinates

Definition at line 1378 of file ImagePolygon.cpp.

Referenced by FixPolePoly(), and WalkPoly().

◆ EllipsoidLimb()

void Isis::ImagePolygon::EllipsoidLimb ( bool ellip)
inline

If a limb is detected, use un ellipsoid shape model if true.

If false, use the default (spiceinit defined) shape model.

Parameters
ellipTrue to use ellipsoid on limb images

Definition at line 193 of file ImagePolygon.h.

References p_ellipsoid.

◆ Emission()

void Isis::ImagePolygon::Emission ( double emission)
inline

Set the maximum emission angle ( light refleted to camera )

Parameters
emissionThe maximum valid emission angle

Definition at line 175 of file ImagePolygon.h.

References p_emission.

◆ FindBestPoint()

geos::geom::Coordinate Isis::ImagePolygon::FindBestPoint ( geos::geom::Coordinate * currentPoint,
geos::geom::Coordinate newPoint,
geos::geom::Coordinate lastPoint )
private

While walking the image in sample/line space, this function finds the best valid point between the first valid point found and the last point which failed its validity test using a linear search.

Parameters
currentPointThe last point added to the polygon
newPointThe first valid point found for the next step.
lastPointThe last point that was found to be invalid which checking for the next step.
Returns
geos::geom::Coordinate The valid point found via searching between the provided points.

Definition at line 1412 of file ImagePolygon.cpp.

References FixCornerSkip(), p_cubeLines, p_cubeSamps, p_cubeStartLine, p_cubeStartSamp, p_lineinc, p_sampinc, and SetImage().

Referenced by FindNextPoint().

◆ FindFirstPoint()

geos::geom::Coordinate Isis::ImagePolygon::FindFirstPoint ( )
private

Finds the first point that projects in an image.

Returns
geos::geom::Coordinate A starting point that is on the edge of the polygon.

Definition at line 526 of file ImagePolygon.cpp.

References FindNextPoint(), p_cubeLines, p_cubeSamps, p_cubeStartLine, p_cubeStartSamp, SetImage(), and Isis::IException::User.

Referenced by WalkPoly().

◆ FindNextPoint()

geos::geom::Coordinate Isis::ImagePolygon::FindNextPoint ( geos::geom::Coordinate * currentPoint,
geos::geom::Coordinate lastPoint,
int recursionDepth = 0 )
private

Finds the next point on the image using a left hand rule walking algorithm.

To initiate the walk pass it the same point for both currentPoint and lastPoint.

Parameters
[in]currentPoint(geos::geom::Coordinate *currentPoint) This is the currentPoint in the path. You are looking for its successor.
[in]lastPoint(geos::geom::Coordinate lastPoint) This is the lastPoint in the path, it allows the algorithm to calculate direction.
[in]recursionDepth(int) This optional parameter keeps track of how far it has walked around a point. By default it is zero.

throws Isis::iException::Programmer - Error walking the file

Definition at line 314 of file ImagePolygon.cpp.

References FindBestPoint(), FindNextPoint(), InsideImage(), MoveBackInsideImage(), p_lineinc, p_sampinc, Isis::IException::Programmer, SetImage(), and Isis::IException::Unknown.

Referenced by FindFirstPoint(), FindNextPoint(), and WalkPoly().

◆ FindSubpixel()

void Isis::ImagePolygon::FindSubpixel ( std::vector< geos::geom::Coordinate > & points)
private

Takes p_polygons in sample/line space and finds its subpixel accuracy.

This algorithm depends on a left-hand-turn algorithm and assumes that the vector of Coordinates provided is not empty.

Parameters
pointsThe vector of Coordinate to set to subpixel accuracy

Definition at line 1533 of file ImagePolygon.cpp.

References InsideImage(), p_lineinc, p_sampinc, p_subpixelAccuracy, and SetImage().

Referenced by WalkPoly().

◆ Fix360Poly()

void Isis::ImagePolygon::Fix360Poly ( )
private

If the cube crosses the 0/360 boundary and does not include a pole, the polygon is separated into multiple polygons, usually one on each side of the boundary.

These polygons are put into a geos Multipolygon. If the cube does not cross the 0/360 boundary then the Multipolygon will be a single Polygon.

Definition at line 1141 of file ImagePolygon.cpp.

References Isis::PolygonTools::Intersect(), Isis::PolygonTools::MakeMultiPolygon(), p_polygons, p_pts, and Isis::IException::Unknown.

Referenced by Create().

◆ FixCornerSkip()

geos::geom::Coordinate Isis::ImagePolygon::FixCornerSkip ( geos::geom::Coordinate * currentPoint,
geos::geom::Coordinate newPoint )
private

Looks at the next possible point relative to the lasts and attempts to adjust the point outward to grab valid corner data.

Parameters
currentPointThe last valid point added to the polygon
newPointThe new point to be added to the polygon
Returns
geos::geom::Coordinate The new point modified for a better result

Definition at line 1477 of file ImagePolygon.cpp.

References p_cubeLines, p_cubeSamps, p_lineinc, p_sampinc, and SetImage().

Referenced by FindBestPoint().

◆ FixPolePoly()

void Isis::ImagePolygon::FixPolePoly ( std::vector< geos::geom::Coordinate > * crossingPoints)
private

If the cube crosses the 0/360 boundary and contains a pole, Some points are added to allow the polygon to unwrap properly.

Throws an error if both poles are in the image. Returns if there is no pole in the image.

Parameters
crossingPointsThe coordinate sequence that crosses the 0/360 boundry

Definition at line 833 of file ImagePolygon.cpp.

References Isis::UniversalGroundMap::Camera(), DistanceSquared(), Isis::Sensor::EmissionAngle(), Isis::Sensor::IncidenceAngle(), Isis::Camera::Line(), Isis::Null, p_emission, p_gMap, p_incidence, p_pts, Isis::IException::Programmer, Isis::UniversalGroundMap::Projection(), Isis::Camera::Sample(), SetImage(), Isis::UniversalGroundMap::SetUniversalGround(), Isis::Projection::WorldX(), and Isis::Projection::WorldY().

Referenced by WalkPoly().

◆ getLinc()

int Isis::ImagePolygon::getLinc ( ) const
inline

Return the line increment used the create this polygon.

Definition at line 229 of file ImagePolygon.h.

References p_lineinc.

◆ getSinc()

int Isis::ImagePolygon::getSinc ( ) const
inline

Return the sample increment used the create this polygon.

Definition at line 224 of file ImagePolygon.h.

References p_sampinc.

◆ Incidence()

void Isis::ImagePolygon::Incidence ( double incidence)
inline

Set the maximum incidence angle ( light contacting the planet )

Parameters
incidenceThe maximum valid incidence angle

Definition at line 183 of file ImagePolygon.h.

References p_incidence.

◆ initCube()

Camera * Isis::ImagePolygon::initCube ( Cube & cube,
int ss = 1,
int sl = 1,
int ns = 0,
int nl = 0,
int band = 1 )

Create a Polygon from given cube.

Parameters
[in]cube(Cube &) Cube used to create polygon
[in]ss(Default=1) (in) Starting sample number
[in]sl(Default=1) (in) Starting Line number
[in]ns(Default=0) (in) Number of samples used to create the polygon. Default of 0 will cause ns to be set to the number of samples in the cube.
[in]nl(Default=0) (in) Number of lines used to create the polygon. Default of 0 will cause nl to be set to the number of lines in the cube.
[in]band(Default=1) (in) Image band number

Definition at line 120 of file ImagePolygon.cpp.

References Isis::Cube::camera(), Isis::UniversalGroundMap::Camera(), Isis::Cube::fileName(), Isis::Sensor::IgnoreElevationModel(), IsLimb(), Isis::Cube::lineCount(), p_brick, p_cube, p_cubeLines, p_cubeSamps, p_cubeStartLine, p_cubeStartSamp, p_ellipsoid, p_gMap, p_isProjected, Isis::Cube::pixelType(), Isis::Cube::projection(), Isis::Cube::sampleCount(), Isis::UniversalGroundMap::SetBand(), and Isis::IException::User.

Referenced by Create().

◆ InsideImage()

bool Isis::ImagePolygon::InsideImage ( double sample,
double line )
private

This returns true if sample/line are inside the cube.

Parameters
sample
line
Returns
bool

Definition at line 512 of file ImagePolygon.cpp.

References p_cubeLines, p_cubeSamps, p_cubeStartLine, and p_cubeStartSamp.

Referenced by FindNextPoint(), and FindSubpixel().

◆ IsLimb()

bool Isis::ImagePolygon::IsLimb ( )
private

Returns True when the input image is a limb image.

Returns
bool True if any of the 4 corners of the input image cannot be set

Definition at line 1388 of file ImagePolygon.cpp.

References p_cubeLines, p_cubeSamps, and SetImage().

Referenced by initCube().

◆ MoveBackInsideImage()

void Isis::ImagePolygon::MoveBackInsideImage ( double & sample,
double & line,
double sinc,
double linc )
private

This method ensures sample/line after sinc/linc have been applied is inside the image.

If not, it snaps to the edge of the image - given we didn't start at the edge.

Parameters
sampleSample after sinc applied
lineLine after linc applied
sincSample increment (we can back up at most this much)
lincLine increment (we can back up at most this much)

Definition at line 444 of file ImagePolygon.cpp.

References p_cubeLines, p_cubeSamps, p_cubeStartLine, and p_cubeStartSamp.

Referenced by FindNextPoint().

◆ numVertices()

int Isis::ImagePolygon::numVertices ( ) const
inline

Definition at line 233 of file ImagePolygon.h.

◆ Polys()

geos::geom::MultiPolygon * Isis::ImagePolygon::Polys ( )
inline

Return a geos Multipolygon.

Definition at line 211 of file ImagePolygon.h.

References p_polygons.

◆ polyStr()

std::string Isis::ImagePolygon::polyStr ( ) const
inline

Return a geos Multipolygon.

Definition at line 216 of file ImagePolygon.h.

References p_polyStr.

Referenced by toBlob().

◆ SetImage()

bool Isis::ImagePolygon::SetImage ( const double sample,
const double line )
private

Sets the sample/line values of the cube to get lat/lon values.

This method checks whether the image pixel is Null for level 2 images and if so, it is considered an invalid pixel.

Parameters
[in]sample(const double) Sample coordinate of the cube
[in]line(const double) Line coordinate of the cube
Returns
bool Returns true if the image was set successfully and false if it was not or if pixel of level 2 images is NULL.

This check has been removed because it causes push frame cameras to fail inbetween the framelets, resulting in only the first framlet to be walked, leaving out the rest of the image.

This can cause autoseed/jigsaw issues, since they require conversion from lat/lon to samp/line

Definition at line 1079 of file ImagePolygon.cpp.

References Isis::UniversalGroundMap::Camera(), Isis::Sensor::EmissionAngle(), Isis::Sensor::IncidenceAngle(), Isis::IsNullPixel(), p_brick, p_cube, p_emission, p_gMap, p_incidence, p_isProjected, Isis::Cube::read(), Isis::Brick::SetBasePosition(), and Isis::UniversalGroundMap::SetImage().

Referenced by calcImageBorderCoordinates(), FindBestPoint(), FindFirstPoint(), FindNextPoint(), FindSubpixel(), FixCornerSkip(), FixPolePoly(), IsLimb(), and WalkPoly().

◆ SubpixelAccuracy()

void Isis::ImagePolygon::SubpixelAccuracy ( int div)
inline

The subpixel accuracy to use.

This accuracy is the number of binary steps to take to find the subpixel accuracy. A higher number provided gives more accurate results at the cost of runtime.

ImagePolygon's constructor sets a default value of 50

Parameters
divThe subpixel accuracy to use

Definition at line 206 of file ImagePolygon.h.

References p_subpixelAccuracy.

◆ toBlob()

Blob Isis::ImagePolygon::toBlob ( ) const

Serialize the ImagePolygon to a Blob.

The polygon will be serialized as a WKT srtring.

Returns
Blob

Definition at line 1351 of file ImagePolygon.cpp.

References p_polygons, polyStr(), and Isis::IException::Programmer.

Referenced by Isis::Image::isFootprintable(), and Isis::Shape::isFootprintable().

◆ validLineDim()

double Isis::ImagePolygon::validLineDim ( )

Retuns the maximum valid line width of the cube set with either initCube() or Create()

Definition at line 568 of file ImagePolygon.cpp.

References calcImageBorderCoordinates(), m_botCoord, and m_topCoord.

◆ validSampleDim()

double Isis::ImagePolygon::validSampleDim ( )

Retuns the maximum valid sample width of the cube set with either initCube() or Create()

Definition at line 553 of file ImagePolygon.cpp.

References calcImageBorderCoordinates(), m_leftCoord, and m_rightCoord.

◆ WalkPoly()

void Isis::ImagePolygon::WalkPoly ( )
private

Walks the image finding its lon lat polygon and stores it to p_pts.

WARNING: Very large pixel increments for cubes that have cameras/projections with no data at any of the 4 corners can still fail in this algorithm.

If we have a very large polygon, look for the inability to find the starting point by looking for the first cycle in the polygon

"very large" is defined as 250 points

Definition at line 635 of file ImagePolygon.cpp.

References DistanceSquared(), FindFirstPoint(), FindNextPoint(), FindSubpixel(), FixPolePoly(), p_cubeLines, p_cubeSamps, p_gMap, p_lineinc, p_pts, p_sampinc, Isis::IException::Programmer, SetImage(), Isis::UniversalGroundMap::UniversalLatitude(), and Isis::UniversalGroundMap::UniversalLongitude().

Referenced by Create().

Member Data Documentation

◆ m_botCoord

geos::geom::Coordinate* Isis::ImagePolygon::m_botCoord
private

The cube's bot-most valid coord.

Definition at line 284 of file ImagePolygon.h.

Referenced by calcImageBorderCoordinates(), ImagePolygon(), validLineDim(), and ~ImagePolygon().

◆ m_leftCoord

geos::geom::Coordinate* Isis::ImagePolygon::m_leftCoord
private

The cube's left-most valid coord.

Definition at line 281 of file ImagePolygon.h.

Referenced by calcImageBorderCoordinates(), ImagePolygon(), validSampleDim(), and ~ImagePolygon().

◆ m_rightCoord

geos::geom::Coordinate* Isis::ImagePolygon::m_rightCoord
private

The cube's right-most valid coord.

Definition at line 282 of file ImagePolygon.h.

Referenced by calcImageBorderCoordinates(), ImagePolygon(), validSampleDim(), and ~ImagePolygon().

◆ m_topCoord

geos::geom::Coordinate* Isis::ImagePolygon::m_topCoord
private

The cube's top-most valid coord.

Definition at line 283 of file ImagePolygon.h.

Referenced by calcImageBorderCoordinates(), ImagePolygon(), validLineDim(), and ~ImagePolygon().

◆ p_brick

Brick* Isis::ImagePolygon::p_brick
private

Used to check for valid DNs.

Definition at line 271 of file ImagePolygon.h.

Referenced by Create(), initCube(), and SetImage().

◆ p_cube

Cube* Isis::ImagePolygon::p_cube
private

The cube provided.

Definition at line 268 of file ImagePolygon.h.

Referenced by calcImageBorderCoordinates(), ImagePolygon(), initCube(), SetImage(), and ~ImagePolygon().

◆ p_cubeLines

int Isis::ImagePolygon::p_cubeLines
private

◆ p_cubeSamps

int Isis::ImagePolygon::p_cubeSamps
private

The number of samples in the cube.

Definition at line 288 of file ImagePolygon.h.

Referenced by calcImageBorderCoordinates(), FindBestPoint(), FindFirstPoint(), FixCornerSkip(), initCube(), InsideImage(), IsLimb(), MoveBackInsideImage(), and WalkPoly().

◆ p_cubeStartLine

int Isis::ImagePolygon::p_cubeStartLine
private

The the line of the first valid point in the cube.

Definition at line 287 of file ImagePolygon.h.

Referenced by calcImageBorderCoordinates(), FindBestPoint(), FindFirstPoint(), ImagePolygon(), initCube(), InsideImage(), and MoveBackInsideImage().

◆ p_cubeStartSamp

int Isis::ImagePolygon::p_cubeStartSamp
private

The the sample of the first valid point in the cube.

Definition at line 286 of file ImagePolygon.h.

Referenced by calcImageBorderCoordinates(), FindBestPoint(), FindFirstPoint(), ImagePolygon(), initCube(), InsideImage(), and MoveBackInsideImage().

◆ p_ellipsoid

bool Isis::ImagePolygon::p_ellipsoid
private

Uses an ellipsoid if a limb is detected.

Definition at line 296 of file ImagePolygon.h.

Referenced by EllipsoidLimb(), ImagePolygon(), and initCube().

◆ p_emission

double Isis::ImagePolygon::p_emission
private

The maximum emission angle to consider valid.

Definition at line 294 of file ImagePolygon.h.

Referenced by Emission(), FixPolePoly(), ImagePolygon(), and SetImage().

◆ p_gMap

UniversalGroundMap* Isis::ImagePolygon::p_gMap
private

The cube's ground map.

Definition at line 279 of file ImagePolygon.h.

Referenced by Create(), FixPolePoly(), initCube(), SetImage(), and WalkPoly().

◆ p_incidence

double Isis::ImagePolygon::p_incidence
private

The maximum incidence angle to consider valid.

Definition at line 295 of file ImagePolygon.h.

Referenced by FixPolePoly(), ImagePolygon(), Incidence(), and SetImage().

◆ p_isProjected

bool Isis::ImagePolygon::p_isProjected
private

True when the provided cube is projected.

Definition at line 269 of file ImagePolygon.h.

Referenced by initCube(), and SetImage().

◆ p_lineinc

int Isis::ImagePolygon::p_lineinc
private

The increment for walking along the polygon in the line direcction.

Definition at line 292 of file ImagePolygon.h.

Referenced by Create(), FindBestPoint(), FindNextPoint(), FindSubpixel(), FixCornerSkip(), getLinc(), and WalkPoly().

◆ p_polygons

geos::geom::MultiPolygon* Isis::ImagePolygon::p_polygons
private

The multipolygon of the image.

Definition at line 275 of file ImagePolygon.h.

Referenced by Fix360Poly(), ImagePolygon(), ImagePolygon(), Polys(), toBlob(), and ~ImagePolygon().

◆ p_polyStr

std::string Isis::ImagePolygon::p_polyStr
private

The string representation of the polygon.

Definition at line 277 of file ImagePolygon.h.

Referenced by ImagePolygon(), and polyStr().

◆ p_pts

geos::geom::CoordinateSequence* Isis::ImagePolygon::p_pts
private

The sequence of coordinates that compose the boundary of the image.

Definition at line 273 of file ImagePolygon.h.

Referenced by Create(), Fix360Poly(), FixPolePoly(), ImagePolygon(), and WalkPoly().

◆ p_sampinc

int Isis::ImagePolygon::p_sampinc
private

The increment for walking along the polygon in the sample direction.

Definition at line 291 of file ImagePolygon.h.

Referenced by Create(), FindBestPoint(), FindNextPoint(), FindSubpixel(), FixCornerSkip(), getSinc(), and WalkPoly().

◆ p_subpixelAccuracy

int Isis::ImagePolygon::p_subpixelAccuracy
private

The subpixel accuracy to use.

Definition at line 298 of file ImagePolygon.h.

Referenced by FindSubpixel(), ImagePolygon(), and SubpixelAccuracy().


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