Isis Developer Reference
PolygonTools.h
Go to the documentation of this file.
1#ifndef Polygontools_h
2#define Polygontools_h
8/* SPDX-License-Identifier: CC0-1.0 */
9#include <geos/geom/GeometryFactory.h>
10#include <geos/geom/MultiPolygon.h>
11#include <geos/geom/CoordinateSequence.h>
12
13#include <QString>
14
15namespace Isis {
16
47 class UniversalGroundMap;
48 class TProjection;
49
50
51 static geos::geom::GeometryFactory::Ptr globalFactory = geos::geom::GeometryFactory::create();
52
121
122 public:
125
126 static geos::geom::MultiPolygon *LatLonToXY(
127 const geos::geom::MultiPolygon &lonLatPoly, TProjection *proj);
128
129 static geos::geom::MultiPolygon *XYToLatLon(
130 const geos::geom::MultiPolygon &xYPoly, TProjection *proj);
131
132 static geos::geom::MultiPolygon *LatLonToSampleLine(
133 const geos::geom::MultiPolygon &lonLatPoly, UniversalGroundMap *ugm);
134
135 // Return a deep copy of a multpolygon
136 static geos::geom::MultiPolygon *CopyMultiPolygon(const geos::geom::MultiPolygon *mpolygon);
137 static geos::geom::MultiPolygon *CopyMultiPolygon(const geos::geom::MultiPolygon &mpolygon);
138
139 static geos::geom::MultiPolygon *Despike(const geos::geom::Geometry *geom);
140 static geos::geom::MultiPolygon *Despike(const geos::geom::MultiPolygon *multiPoly);
141 static geos::geom::LinearRing *Despike(const geos::geom::LineString *linearRing);
142
143 // Return polygon in -180/180 coordinated system and merge split polys
144 static geos::geom::MultiPolygon *To180(geos::geom::MultiPolygon *poly360);
145
146 //Return a polygon in GML format
147 static QString ToGML(const geos::geom::MultiPolygon *mpolygon,
148 QString idString = QString("0"),
149 QString schema = QString(""));
150
151 //Return the GML schema for a polygon
152 static QString GMLSchema();
153
154 //Return the thickness of a polygon
155 static double Thickness(const geos::geom::MultiPolygon *mpolygon);
156
157 static geos::geom::Geometry *Intersect(const geos::geom::Geometry *geom1,
158 const geos::geom::Geometry *geom2);
159 static geos::geom::Geometry *Difference(const geos::geom::Geometry *geom1,
160 const geos::geom::Geometry *geom2);
161
162 static geos::geom::MultiPolygon *MakeMultiPolygon(const geos::geom::Geometry *geom);
163
164 static QString GetGeometryName(const geos::geom::Geometry *geom);
165
166 static bool Equal(const geos::geom::MultiPolygon *poly1,
167 const geos::geom::MultiPolygon *poly2);
168 static bool Equal(const geos::geom::Polygon *poly1, const geos::geom::Polygon *poly2);
169 static bool Equal(const geos::geom::LineString *lineString1,
170 const geos::geom::LineString *lineString2);
171 static bool Equal(const geos::geom::Coordinate &coord1, const geos::geom::Coordinate &coord2);
172 static bool Equal(const double d1, const double d2);
173
174 static geos::geom::MultiPolygon *FixSeam(const geos::geom::MultiPolygon *poly);
175 static geos::geom::MultiPolygon *FixSeam(const geos::geom::Polygon *polyA,
176 const geos::geom::Polygon *polyB);
177
178 static geos::geom::Geometry *ReducePrecision(const geos::geom::Geometry *geom,
179 unsigned int precision);
180 static geos::geom::MultiPolygon *ReducePrecision(const geos::geom::MultiPolygon *poly,
181 unsigned int precision);
182 static geos::geom::Polygon *ReducePrecision(const geos::geom::Polygon *poly,
183 unsigned int precision);
184 static geos::geom::LinearRing *ReducePrecision(const geos::geom::LinearRing *ring,
185 unsigned int precision);
186 static geos::geom::Coordinate *ReducePrecision(const geos::geom::Coordinate *coord,
187 unsigned int precision);
188 static double ReducePrecision(double num, unsigned int precision);
189
190 static geos::geom::MultiPolygon *FixPolePolygon(const geos::geom::MultiPolygon *polePolygon,
191 UniversalGroundMap *ugm);
192 static geos::geom::MultiPolygon *SplitPolygonOn360(const geos::geom::Polygon *inPoly);
193
194
195 private:
197 static bool IsSpiked(geos::geom::Coordinate first,
198 geos::geom::Coordinate middle, geos::geom::Coordinate last);
200 static bool TestSpiked(geos::geom::Coordinate first, geos::geom::Coordinate middle,
201 geos::geom::Coordinate last);
202
203 static geos::geom::Geometry *FixGeometry(const geos::geom::Geometry *geom);
204 static geos::geom::MultiPolygon *FixGeometry(const geos::geom::MultiPolygon *poly);
205 static geos::geom::Polygon *FixGeometry(const geos::geom::Polygon *poly);
206 static geos::geom::LinearRing *FixGeometry(const geos::geom::LinearRing *ring);
207
208 static geos::geom::Geometry *Operate(const geos::geom::Geometry *geom1,
209 const geos::geom::Geometry *geom2, unsigned int opcode);
210
211 static int DecimalPlace(double);
212
213 geos::geom::MultiPolygon *p_polygons;
214
215 };
216};
217
218#endif
219
Provides various tools to work with geos multipolygons.
Definition PolygonTools.h:120
static QString ToGML(const geos::geom::MultiPolygon *mpolygon, QString idString=QString("0"), QString schema=QString(""))
Return the polygon with gml header.
Definition PolygonTools.cpp:393
static QString GMLSchema()
Return the gml schema.
Definition PolygonTools.cpp:460
static geos::geom::MultiPolygon * CopyMultiPolygon(const geos::geom::MultiPolygon *mpolygon)
This static method will create a deep copy of a geos::geom::MultiPolygon.
Definition PolygonTools.cpp:353
static geos::geom::MultiPolygon * Despike(const geos::geom::Geometry *geom)
This method attempts to convert the geom to a MultiPolygon and then despike it.
Definition PolygonTools.cpp:641
static geos::geom::MultiPolygon * FixSeam(const geos::geom::MultiPolygon *poly)
Definition PolygonTools.cpp:1504
static geos::geom::Geometry * ReducePrecision(const geos::geom::Geometry *geom, unsigned int precision)
This method reduces the precision of the geometry to precision significant figures.
Definition PolygonTools.cpp:1564
static geos::geom::MultiPolygon * LatLonToXY(const geos::geom::MultiPolygon &lonLatPoly, TProjection *proj)
This method will return a geos::geom::MultiPolygon which contains the X/Y coordinates of the LonLat p...
Definition PolygonTools.cpp:46
static geos::geom::MultiPolygon * SplitPolygonOn360(const geos::geom::Polygon *inPoly)
If the cube crosses the 0/360 boundary and does not include a pole, this will divide the polygon into...
Definition PolygonTools.cpp:1997
static bool Equal(const geos::geom::MultiPolygon *poly1, const geos::geom::MultiPolygon *poly2)
Definition PolygonTools.cpp:1836
static geos::geom::MultiPolygon * MakeMultiPolygon(const geos::geom::Geometry *geom)
Make a geos::geom::MultiPolygon out of the components of the argument.
Definition PolygonTools.cpp:1372
static QString GetGeometryName(const geos::geom::Geometry *geom)
This method returns the name of the type of geometry passed in.
Definition PolygonTools.cpp:1812
static geos::geom::MultiPolygon * XYToLatLon(const geos::geom::MultiPolygon &xYPoly, TProjection *proj)
This method will return a geos::geom::MultiPolygon which contains the (Lon,Lat) coordinates of the XY...
Definition PolygonTools.cpp:152
static geos::geom::Geometry * Difference(const geos::geom::Geometry *geom1, const geos::geom::Geometry *geom2)
This method is used to subtract two polygons.
Definition PolygonTools.cpp:1337
static geos::geom::MultiPolygon * LatLonToSampleLine(const geos::geom::MultiPolygon &lonLatPoly, UniversalGroundMap *ugm)
This method will return a geos::geom::MultiPolygon which contains the sample/line coordinates of the ...
Definition PolygonTools.cpp:244
static geos::geom::Geometry * Intersect(const geos::geom::Geometry *geom1, const geos::geom::Geometry *geom2)
This applies the geos Intersect operator.
Definition PolygonTools.cpp:966
static double Thickness(const geos::geom::MultiPolygon *mpolygon)
Calculates the thickness of a polygon using: thickness = area / max(Xextent,Yextent)**2 The provided ...
Definition PolygonTools.cpp:619
static geos::geom::MultiPolygon * FixPolePolygon(const geos::geom::MultiPolygon *polePolygon, UniversalGroundMap *ugm)
static geos::geom::MultiPolygon * To180(geos::geom::MultiPolygon *poly360)
Convert polygon coordinates from 360 system to 180.
Definition PolygonTools.cpp:526
Base class for Map TProjections.
Definition TProjection.h:166
Universal Ground Map.
Definition UniversalGroundMap.h:69
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16
static geos::geom::GeometryFactory::Ptr globalFactory
Definition PolygonTools.h:51