32 #ifndef OGR_GEOMETRY_H_INCLUDED
33 #define OGR_GEOMETRY_H_INCLUDED
49 #ifndef DEFINEH_OGRGeometryH
50 #define DEFINEH_OGRGeometryH
84 static int defPrecision = getDefaultPrecision();
85 static bool defRound = getDefaultRound();
87 precision = defPrecision;
95 static int getDefaultPrecision();
96 static bool getDefaultRound();
332 friend class OGRCurveCollection;
334 unsigned int flags = 0;
336 OGRErr importPreambleFromWkt(
const char ** ppszInput,
337 int* pbHasZ,
int* pbHasM,
339 OGRErr importCurveCollectionFromWkt(
340 const char ** ppszInput,
341 int bAllowEmptyComponent,
342 int bAllowLineString,
344 int bAllowCompoundCurve,
347 OGRErr importPreambleFromWkb(
const unsigned char * pabyData,
351 OGRErr importPreambleOfCollectionFromWkb(
352 const unsigned char * pabyData,
362 void HomogenizeDimensionalityWith(
OGRGeometry* poOtherGeom );
377 static const unsigned int OGR_G_NOT_EMPTY_POINT = 0x1;
378 static const unsigned int OGR_G_3D = 0x2;
379 static const unsigned int OGR_G_MEASURED = 0x4;
396 virtual int getCoordinateDimension()
const;
397 int CoordinateDimension()
const;
413 virtual
int WkbSize() const = 0;
416 virtual
OGRErr importFromWkb( const
unsigned char *,
419 int& nBytesConsumedOut ) = 0;
422 virtual
OGRErr importFromWkt( const
char ** ppszInput ) = 0;
430 CPL_WARN_DEPRECATED(
"Use importFromWkt(const char**) instead")
433 return importFromWkt(
const_cast<const char**
>(ppszInput) );
437 OGRErr exportToWkt(
char ** ppszDstText,
445 OGRErr *err =
nullptr)
const = 0;
451 virtual void dumpReadable( FILE *,
const char * =
nullptr
452 ,
char** papszOptions =
nullptr )
const;
454 virtual char * exportToGML(
const char*
const * papszOptions =
nullptr )
const;
455 virtual char * exportToKML()
const;
456 virtual char * exportToJson()
const;
468 virtual OGRBoolean hasCurveGeometry(
int bLookForNonLinear = FALSE)
const;
472 double dfMaxAngleStepSizeDegrees = 0,
480 virtual
void closeRings();
482 virtual
void setCoordinateDimension(
int nDimension );
484 virtual
void setMeasured(
OGRBoolean bIsMeasured );
492 virtual void segmentize(
double dfMaxLength);
508 virtual
double Distance( const
OGRGeometry * ) const ;
510 virtual
OGRGeometry *Buffer(
double dfDist,
int nQuadSegs = 30 )
524 OGRGeometry *SimplifyPreserveTopology(
double dTolerance)
531 virtual
double Distance3D( const
OGRGeometry *poOtherGeom ) const;
536 const CPL_WARN_DEPRECATED("Non standard method. "
537 "Use Intersects() instead");
539 const CPL_WARN_DEPRECATED("Non standard method. "
540 "Use Equals() instead");
542 const CPL_WARN_DEPRECATED("Non standard method. "
543 "Use SymDifference() instead");
545 const CPL_WARN_DEPRECATED("Non standard method. "
546 "Use Boundary() instead");
551 static
int bGenerate_DB2_V72_BYTE_ORDER;
554 virtual
void swapXY();
577 {
return cpl::down_cast<OGRPoint*>(
this); }
584 {
return cpl::down_cast<const OGRPoint*>(
this); }
591 {
return cpl::down_cast<OGRCurve*>(
this); }
598 {
return cpl::down_cast<const OGRCurve*>(
this); }
605 {
return cpl::down_cast<OGRSimpleCurve*>(
this); }
612 {
return cpl::down_cast<const OGRSimpleCurve*>(
this); }
619 {
return cpl::down_cast<OGRLineString*>(
this); }
626 {
return cpl::down_cast<const OGRLineString*>(
this); }
633 {
return cpl::down_cast<OGRLinearRing*>(
this); }
640 {
return cpl::down_cast<const OGRLinearRing*>(
this); }
647 {
return cpl::down_cast<OGRCircularString*>(
this); }
654 {
return cpl::down_cast<const OGRCircularString*>(
this); }
661 {
return cpl::down_cast<OGRCompoundCurve*>(
this); }
668 {
return cpl::down_cast<const OGRCompoundCurve*>(
this); }
675 {
return cpl::down_cast<OGRSurface*>(
this); }
682 {
return cpl::down_cast<const OGRSurface*>(
this); }
689 {
return cpl::down_cast<OGRPolygon*>(
this); }
696 {
return cpl::down_cast<const OGRPolygon*>(
this); }
703 {
return cpl::down_cast<OGRTriangle*>(
this); }
710 {
return cpl::down_cast<const OGRTriangle*>(
this); }
717 {
return cpl::down_cast<OGRCurvePolygon*>(
this); }
724 {
return cpl::down_cast<const OGRCurvePolygon*>(
this); }
731 {
return cpl::down_cast<OGRGeometryCollection*>(
this); }
738 {
return cpl::down_cast<const OGRGeometryCollection*>(
this); }
745 {
return cpl::down_cast<OGRMultiPoint*>(
this); }
752 {
return cpl::down_cast<const OGRMultiPoint*>(
this); }
759 {
return cpl::down_cast<OGRMultiLineString*>(
this); }
766 {
return cpl::down_cast<const OGRMultiLineString*>(
this); }
773 {
return cpl::down_cast<OGRMultiPolygon*>(
this); }
780 {
return cpl::down_cast<const OGRMultiPolygon*>(
this); }
787 {
return cpl::down_cast<OGRMultiCurve*>(
this); }
794 {
return cpl::down_cast<const OGRMultiCurve*>(
this); }
801 {
return cpl::down_cast<OGRMultiSurface*>(
this); }
808 {
return cpl::down_cast<const OGRMultiSurface*>(
this); }
815 {
return cpl::down_cast<OGRPolyhedralSurface*>(
this); }
822 {
return cpl::down_cast<const OGRPolyhedralSurface*>(
this); }
829 {
return cpl::down_cast<OGRTriangulatedSurface*>(
this); }
836 {
return cpl::down_cast<const OGRTriangulatedSurface*>(
this); }
841 struct CPL_DLL OGRGeometryUniquePtrDeleter
872 OGRPoint(
double x,
double y,
double z );
873 OGRPoint(
double x,
double y,
double z,
double m );
875 static OGRPoint* createXYM(
double x,
double y,
double m );
881 int WkbSize()
const override;
882 OGRErr importFromWkb(
const unsigned char *,
885 int& nBytesConsumedOut )
override;
894 OGRErr importFromWkt(
const char ** )
override;
905 OGRErr *err =
nullptr)
const override;
908 virtual int getDimension()
const override;
910 virtual void empty()
override;
911 virtual void getEnvelope(
OGREnvelope * psEnvelope )
const override;
912 virtual void getEnvelope(
OGREnvelope3D * psEnvelope )
const override;
914 {
return !(flags & OGR_G_NOT_EMPTY_POINT); }
918 double getX()
const {
return x; }
920 double getY()
const {
return y; }
922 double getZ()
const {
return z; }
924 double getM()
const {
return m; }
927 virtual void setCoordinateDimension(
int nDimension )
override;
931 void setX(
double xIn ) { x = xIn; flags |= OGR_G_NOT_EMPTY_POINT; }
935 void setY(
double yIn ) { y = yIn; flags |= OGR_G_NOT_EMPTY_POINT; }
940 { z = zIn; flags |= (OGR_G_NOT_EMPTY_POINT | OGR_G_3D); }
945 { m = mIn; flags |= (OGR_G_NOT_EMPTY_POINT | OGR_G_MEASURED); }
953 virtual const char *getGeometryName()
const override;
956 virtual void flattenTo2D()
override;
960 virtual void swapXY()
override;
998 virtual OGRCurveCasterToLineString GetCasterToLineString()
const = 0;
999 virtual OGRCurveCasterToLinearRing GetCasterToLinearRing()
const = 0;
1010 class CPL_DLL ConstIterator
1013 std::unique_ptr<Private> m_poPrivate;
1015 ConstIterator(
const OGRCurve* poSelf,
bool bStart);
1016 ConstIterator(ConstIterator&& oOther) noexcept;
1019 ConstIterator& operator++();
1020 bool operator!=(
const ConstIterator& it)
const;
1044 ConstIterator
begin()
const;
1046 ConstIterator
end()
const;
1052 virtual int get_IsClosed()
const;
1055 const char*
const* papszOptions =
nullptr)
1057 virtual int getDimension()
const override;
1068 {
return cpl::down_cast<OGRSimpleCurve*>(
this); }
1073 {
return cpl::down_cast<const OGRSimpleCurve*>(
this); }
1082 inline OGRCurve::ConstIterator
begin(
const OGRCurve* poCurve) {
return poCurve->begin(); }
1084 inline OGRCurve::ConstIterator
end(
const OGRCurve* poCurve) {
return poCurve->end(); }
1116 OGRErr importFromWKTListOnly(
const char ** ppszInput,
int bHasZ,
int bHasM,
1123 virtual double get_LinearArea()
const;
1129 class CPL_DLL Iterator
1132 std::unique_ptr<Private> m_poPrivate;
1136 Iterator(Iterator&& oOther) noexcept;
1139 Iterator& operator++();
1140 bool operator!=(
const Iterator& it)
const;
1146 class CPL_DLL ConstIterator
1149 std::unique_ptr<Private> m_poPrivate;
1152 ConstIterator(ConstIterator&& oOther) noexcept;
1155 ConstIterator& operator++();
1156 bool operator!=(
const ConstIterator& it)
const;
1189 ConstIterator
begin()
const;
1191 ConstIterator
end()
const;
1194 virtual int WkbSize()
const override;
1195 virtual OGRErr importFromWkb(
const unsigned char *,
1198 int& nBytesConsumedOut )
override;
1207 OGRErr importFromWkt(
const char ** )
override;
1218 OGRErr *err =
nullptr)
const override;
1222 virtual void empty()
override;
1223 virtual void getEnvelope(
OGREnvelope * psEnvelope )
const override;
1224 virtual void getEnvelope(
OGREnvelope3D * psEnvelope )
const override;
1228 virtual double get_Length()
const override;
1229 virtual void StartPoint(
OGRPoint * )
const override;
1230 virtual void EndPoint(
OGRPoint * )
const override;
1231 virtual void Value(
double,
OGRPoint * )
const override;
1232 virtual double Project(
const OGRPoint * )
const;
1233 virtual OGRLineString* getSubLine(
double,
double,
int )
const;
1237 void getPoint(
int,
OGRPoint * )
const;
1238 double getX(
int i )
const {
return paoPoints[i].
x; }
1239 double getY(
int i )
const {
return paoPoints[i].
y; }
1240 double getZ(
int i )
const;
1241 double getM(
int i )
const;
1247 virtual void setCoordinateDimension(
int nDimension )
override;
1248 virtual void set3D(
OGRBoolean bIs3D )
override;
1249 virtual void setMeasured(
OGRBoolean bIsMeasured )
override;
1250 void setNumPoints(
int nNewPointCount,
1251 int bZeroizeNewContent = TRUE );
1253 void setPoint(
int,
double,
double );
1254 void setZ(
int,
double );
1255 void setM(
int,
double );
1256 void setPoint(
int,
double,
double,
double );
1257 void setPointM(
int,
double,
double,
double );
1258 void setPoint(
int,
double,
double,
double,
double );
1259 void setPoints(
int,
const OGRRawPoint *,
const double * =
nullptr );
1260 void setPointsM(
int,
const OGRRawPoint *,
const double * );
1261 void setPoints(
int,
const OGRRawPoint *,
const double *,
const double * );
1262 void setPoints(
int,
const double * padfX,
const double * padfY,
1263 const double *padfZIn =
nullptr );
1264 void setPointsM(
int,
const double * padfX,
const double * padfY,
1265 const double *padfMIn =
nullptr );
1266 void setPoints(
int,
const double * padfX,
const double * padfY,
1267 const double *padfZIn,
const double *padfMIn );
1269 void addPoint(
double,
double );
1270 void addPoint(
double,
double,
double );
1271 void addPointM(
double,
double,
double );
1272 void addPoint(
double,
double,
double,
double );
1274 void getPoints(
OGRRawPoint *,
double * =
nullptr )
const;
1275 void getPoints(
void* pabyX,
int nXStride,
1276 void* pabyY,
int nYStride,
1277 void* pabyZ =
nullptr,
int nZStride = 0,
1278 void* pabyM =
nullptr,
int nMStride = 0 )
const;
1281 int nStartVertex = 0,
int nEndVertex = -1 );
1282 void reversePoints(
void );
1287 virtual void flattenTo2D()
override;
1288 virtual void segmentize(
double dfMaxLength)
override;
1290 virtual void swapXY()
override;
1295 inline OGRSimpleCurve::Iterator
begin(
OGRSimpleCurve* poCurve) {
return poCurve->begin(); }
1297 inline OGRSimpleCurve::Iterator
end(
OGRSimpleCurve* poCurve) {
return poCurve->end(); }
1300 inline OGRSimpleCurve::ConstIterator
begin(
const OGRSimpleCurve* poCurve) {
return poCurve->begin(); }
1302 inline OGRSimpleCurve::ConstIterator
end(
const OGRSimpleCurve* poCurve) {
return poCurve->end(); }
1327 virtual OGRCurveCasterToLineString GetCasterToLineString()
1329 virtual OGRCurveCasterToLinearRing GetCasterToLinearRing()
1332 virtual double get_AreaOfCurveSegments()
const override;
1344 virtual OGRLineString* CurveToLine(
double dfMaxAngleStepSizeDegrees = 0,
1345 const char*
const* papszOptions =
nullptr )
1348 const char*
const* papszOptions =
nullptr )
const override;
1353 virtual const char *getGeometryName()
const override;
1398 virtual int _WkbSize(
int _flags )
const;
1400 const unsigned char *,
int,
1401 int& nBytesConsumedOut );
1403 unsigned char * )
const;
1405 virtual OGRCurveCasterToLineString GetCasterToLineString()
1407 virtual OGRCurveCasterToLinearRing GetCasterToLinearRing()
1424 virtual int isClockwise()
const;
1425 virtual void reverseWindingOrder();
1428 int bTestEnvelope = TRUE )
const;
1430 int bTestEnvelope = TRUE )
const;
1444 virtual int WkbSize()
const override;
1448 int& nBytesConsumedOut )
override;
1473 void ExtendEnvelopeWithCircular(
OGREnvelope * psEnvelope )
const;
1475 int IsFullCircle(
double& cx,
double& cy,
double& square_R )
const;
1479 virtual OGRCurveCasterToLineString GetCasterToLineString()
1481 virtual OGRCurveCasterToLinearRing GetCasterToLinearRing()
1483 virtual int IntersectsPoint(
const OGRPoint* p )
const override;
1484 virtual int ContainsPoint(
const OGRPoint* p )
const override;
1485 virtual double get_AreaOfCurveSegments()
const override;
1496 virtual OGRErr importFromWkb(
const unsigned char *,
1499 int& nBytesConsumedOut )
override;
1508 OGRErr importFromWkt(
const char ** )
override;
1519 OGRErr *err =
nullptr)
const override;
1523 virtual void getEnvelope(
OGREnvelope * psEnvelope )
const override;
1524 virtual void getEnvelope(
OGREnvelope3D * psEnvelope )
const override;
1527 virtual double get_Length()
const override;
1528 virtual OGRLineString* CurveToLine(
double dfMaxAngleStepSizeDegrees = 0,
1529 const char*
const* papszOptions =
nullptr )
1531 virtual void Value(
double,
OGRPoint * )
const override;
1532 virtual double get_Area()
const override;
1536 virtual const char *getGeometryName()
const override;
1537 virtual void segmentize(
double dfMaxLength )
override;
1538 virtual OGRBoolean hasCurveGeometry(
int bLookForNonLinear = FALSE )
1541 double dfMaxAngleStepSizeDegrees = 0,
1542 const char*
const* papszOptions =
nullptr)
const override;
1568 class CPL_DLL OGRCurveCollection
1576 int nCurveCount = 0;
1580 OGRCurveCollection();
1581 OGRCurveCollection(
const OGRCurveCollection& other);
1582 ~OGRCurveCollection();
1584 OGRCurveCollection&
operator=(
const OGRCurveCollection& other);
1594 OGRCurve**
end() {
return papoCurves + nCurveCount; }
1600 const OGRCurve*
const*
end()
const {
return papoCurves + nCurveCount; }
1611 const unsigned char * pabyData,
1615 int nMinSubGeomSize,
1617 OGRErr importBodyFromWkb(
1619 const unsigned char * pabyData,
1621 int bAcceptCompoundCurve,
1625 int& nBytesConsumedOut );
1633 int nNewDimension );
1637 int getNumCurves()
const;
1639 const OGRCurve *getCurve(
int )
const;
1642 OGRErr removeCurve(
int iIndex,
bool bDelete =
true );
1670 OGRCurveCollection oCC{};
1673 double dfToleranceEps,
1679 OGRLineString* CurveToLineInternal(
double dfMaxAngleStepSizeDegrees,
1680 const char*
const* papszOptions,
1681 int bIsLinearRing )
const;
1692 virtual OGRCurveCasterToLineString GetCasterToLineString()
1694 virtual OGRCurveCasterToLinearRing GetCasterToLinearRing()
1722 virtual int WkbSize()
const override;
1723 virtual OGRErr importFromWkb(
const unsigned char *,
1726 int& nBytesConsumedOut )
override;
1735 OGRErr importFromWkt(
const char ** )
override;
1746 OGRErr *err =
nullptr)
const override;
1750 virtual void empty()
override;
1751 virtual void getEnvelope(
OGREnvelope * psEnvelope )
const override;
1752 virtual void getEnvelope(
OGREnvelope3D * psEnvelope )
const override;
1756 virtual double get_Length()
const override;
1757 virtual void StartPoint(
OGRPoint * )
const override;
1758 virtual void EndPoint(
OGRPoint * )
const override;
1759 virtual void Value(
double,
OGRPoint * )
const override;
1760 virtual OGRLineString* CurveToLine(
double dfMaxAngleStepSizeDegrees = 0,
1761 const char*
const* papszOptions =
nullptr )
1764 virtual int getNumPoints()
const override;
1765 virtual double get_AreaOfCurveSegments()
const override;
1766 virtual double get_Area()
const override;
1772 int getNumCurves()
const;
1774 const OGRCurve *getCurve(
int )
const;
1777 virtual void setCoordinateDimension(
int nDimension )
override;
1778 virtual void set3D(
OGRBoolean bIs3D )
override;
1779 virtual void setMeasured(
OGRBoolean bIsMeasured )
override;
1784 OGRErr addCurveDirectly(
OGRCurve*,
double dfToleranceEps = 1e-14 );
1790 virtual const char *getGeometryName()
const override;
1792 virtual void flattenTo2D()
override;
1793 virtual void segmentize(
double dfMaxLength)
override;
1794 virtual OGRBoolean hasCurveGeometry(
int bLookForNonLinear = FALSE)
1797 double dfMaxAngleStepSizeDegrees = 0,
1798 const char*
const* papszOptions =
nullptr)
const override;
1802 virtual void swapXY()
override;
1830 virtual OGRSurfaceCasterToPolygon GetCasterToPolygon()
const = 0;
1831 virtual OGRSurfaceCasterToCurvePolygon GetCasterToCurvePolygon()
const = 0;
1837 {
return PointOnSurfaceInternal(poPoint); }
1868 virtual int checkRing(
OGRCurve * poNewRing )
const;
1880 OGRCurveCollection oCC{};
1882 virtual OGRSurfaceCasterToPolygon GetCasterToPolygon()
1884 virtual OGRSurfaceCasterToCurvePolygon GetCasterToCurvePolygon()
1917 virtual void empty()
override;
1921 virtual void segmentize(
double dfMaxLength )
override;
1925 double dfMaxAngleStepSizeDegrees = 0,
1926 const char*
const* papszOptions =
nullptr )
const override;
1929 virtual double get_Area()
const override;
1932 virtual int WkbSize()
const override;
1936 int& nBytesConsumedOut )
override;
1956 OGRErr *err =
nullptr)
const override;
1965 double dfMaxAngleStepSizeDegrees = 0,
1966 const char*
const* papszOptions =
nullptr )
const;
1995 virtual void swapXY()
override;
2033 virtual int checkRing(
OGRCurve * poNewRing )
const override;
2034 virtual OGRErr importFromWKTListOnly(
const char ** ppszInput,
2035 int bHasZ,
int bHasM,
2042 virtual OGRSurfaceCasterToPolygon GetCasterToPolygon()
2044 virtual OGRSurfaceCasterToCurvePolygon GetCasterToCurvePolygon()
2077 const char*
const* papszOptions =
nullptr )
const override;
2079 double dfMaxAngleStepSizeDegrees = 0,
2080 const char*
const* papszOptions =
nullptr)
const override;
2083 virtual int WkbSize()
const override;
2087 int& nBytesConsumedOut )
override;
2107 OGRErr *err =
nullptr)
const override;
2111 double dfMaxAngleStepSizeDegrees = 0,
2112 const char*
const* papszOptions =
nullptr )
const override;
2162 bool quickValidityCheck()
const;
2166 virtual OGRSurfaceCasterToPolygon GetCasterToPolygon()
const override;
2167 virtual OGRErr importFromWKTListOnly(
const char ** ppszInput,
2168 int bHasZ,
int bHasM,
2171 double*& padfZ )
override;
2181 virtual const char *getGeometryName()
const override;
2185 virtual OGRErr importFromWkb(
const unsigned char *,
2188 int& nBytesConsumedOut )
override;
2219 OGRErr importFromWkbInternal(
const unsigned char * pabyData,
2223 OGRErr importFromWktInternal(
const char **ppszInput,
int nRecLevel );
2231 std::string exclude = std::string())
const;
2262 virtual const char *getGeometryName()
const override;
2265 virtual void empty()
override;
2267 virtual void flattenTo2D()
override;
2269 virtual void segmentize(
double dfMaxLength)
override;
2270 virtual OGRBoolean hasCurveGeometry(
int bLookForNonLinear = FALSE )
2273 const char*
const* papszOptions =
nullptr )
const override;
2275 double dfMaxAngleStepSizeDegrees = 0,
2276 const char*
const* papszOptions =
nullptr )
const override;
2279 virtual int WkbSize()
const override;
2280 virtual OGRErr importFromWkb(
const unsigned char *,
2283 int& nBytesConsumedOut )
override;
2292 OGRErr importFromWkt(
const char ** )
override;
2303 OGRErr *err =
nullptr)
const override;
2305 virtual double get_Length()
const;
2306 virtual double get_Area()
const;
2309 virtual int getDimension()
const override;
2310 virtual void getEnvelope(
OGREnvelope * psEnvelope )
const override;
2311 virtual void getEnvelope(
OGREnvelope3D * psEnvelope )
const override;
2314 int getNumGeometries()
const;
2322 virtual void setCoordinateDimension(
int nDimension )
override;
2323 virtual void set3D(
OGRBoolean bIs3D )
override;
2324 virtual void setMeasured(
OGRBoolean bIsMeasured )
override;
2327 virtual OGRErr removeGeometry(
int iIndex,
int bDelete = TRUE );
2331 void closeRings()
override;
2333 virtual void swapXY()
override;
2394 virtual const char *getGeometryName()
const override;
2401 OGRErr importFromWkt(
const char ** )
override;
2412 OGRErr *err =
nullptr)
const override;
2418 virtual int getDimension()
const override;
2421 virtual OGRBoolean hasCurveGeometry(
int bLookForNonLinear = FALSE )
2465 OGRErr _addGeometryWithExpectedSubGeometryType(
2468 OGRErr _addGeometryDirectlyWithExpectedSubGeometryType(
2510 OGRErr *err =
nullptr)
const override;
2555 virtual OGRSurfaceCasterToPolygon GetCasterToPolygon()
2557 virtual OGRSurfaceCasterToCurvePolygon GetCasterToCurvePolygon()
2560 virtual const char* getSubGeometryName()
const;
2564 virtual OGRPolyhedralSurfaceCastToMultiPolygon GetCasterToMultiPolygon()
2592 virtual int WkbSize()
const override;
2598 int& nBytesConsumedOut )
override;
2618 OGRErr *err =
nullptr)
const override;
2623 virtual void empty()
override;
2632 virtual double get_Area()
const override;
2648 virtual void swapXY()
override;
2685 virtual const char* getSubGeometryName()
const override;
2688 virtual OGRPolyhedralSurfaceCastToMultiPolygon GetCasterToMultiPolygon()
2716 virtual const char *getGeometryName()
const override;
2757 OGRErr importFromWkt_Bracketed(
const char **,
int bHasM,
int bHasZ );
2787 virtual const char *getGeometryName()
const override;
2794 OGRErr importFromWkt(
const char ** )
override;
2805 OGRErr *err =
nullptr)
const override;
2808 virtual int getDimension()
const override;
2819 virtual OGRBoolean hasCurveGeometry(
int bLookForNonLinear = FALSE )
2879 virtual const char *getGeometryName()
const override;
2886 OGRErr importFromWkt(
const char ** )
override;
2897 OGRErr *err =
nullptr)
const override;
2900 virtual int getDimension()
const override;
2903 virtual OGRBoolean hasCurveGeometry(
int bLookForNonLinear = FALSE )
2967 virtual const char *getGeometryName()
const override;
2979 OGRErr *err =
nullptr)
const override;
2982 virtual OGRBoolean hasCurveGeometry(
int bLookForNonLinear = FALSE )
3018 static OGRErr createFromFgfInternal(
const unsigned char *pabyData,
3022 int *pnBytesConsumed,
3028 static OGRErr createFromWkb(
const void * pabyData,
3033 int& nBytesConsumedOut );
3043 CPL_WARN_DEPRECATED(
"Use createFromWkt(const char**, ...) instead")
3045 return createFromWkt(
const_cast<const char**
>(ppszInput), poSRS, ppoGeom);
3050 static OGRGeometry *createFromGML(
const char * );
3053 static OGRGeometry *createFromGeoJson(
const char *);
3061 bool bOnlyInOrder =
true );
3068 const char*
const* papszOptions =
nullptr );
3074 int *pbResultValidGeometry,
3075 const char **papszOptions =
nullptr);
3076 static bool haveGEOS();
3083 std::unique_ptr<Private> d;
3092 char** papszOptions,
3096 approximateArcAngles(
double dfX,
double dfY,
double dfZ,
3097 double dfPrimaryRadius,
double dfSecondaryAxis,
3099 double dfStartAngle,
double dfEndAngle,
3100 double dfMaxAngleStepSizeDegrees,
3101 const bool bUseMaxGap =
false );
3103 static int GetCurveParmeters(
double x0,
double y0,
3104 double x1,
double y1,
3105 double x2,
double y2,
3106 double& R,
double& cx,
double& cy,
3107 double& alpha0,
double& alpha1,
3110 double x0,
double y0,
double z0,
3111 double x1,
double y1,
double z1,
3112 double x2,
double y2,
double z2,
3114 double dfMaxAngleStepSizeDegrees,
3115 const char*
const * papszOptions =
nullptr );
3116 static OGRCurve* curveFromLineString(
3118 const char*
const * papszOptions =
nullptr);
3135 struct CPL_DLL OGRPreparedGeometryUniquePtrDeleter
The CPLJSONArray class holds JSON object from CPLJSONDocument.
Definition: cpl_json.h:54
OGRGeometry visitor interface.
Definition: ogr_geometry.h:231
virtual void visit(const OGRCurvePolygon *)=0
Visit OGRCurvePolygon.
virtual void visit(const OGRPolyhedralSurface *)=0
Visit OGRPolyhedralSurface.
virtual void visit(const OGRCompoundCurve *)=0
Visit OGRCompoundCurve.
virtual void visit(const OGRMultiLineString *)=0
Visit OGRMultiLineString.
virtual void visit(const OGRTriangulatedSurface *)=0
Visit OGRTriangulatedSurface.
virtual void visit(const OGRPolygon *)=0
Visit OGRPolygon.
virtual void visit(const OGRMultiPolygon *)=0
Visit OGRMultiPolygon.
virtual void visit(const OGRTriangle *)=0
Visit OGRTriangle.
virtual void visit(const OGRLineString *)=0
Visit OGRLineString.
virtual void visit(const OGRMultiPoint *)=0
Visit OGRMultiPoint.
virtual void visit(const OGRMultiCurve *)=0
Visit OGRMultiCurve.
virtual void visit(const OGRGeometryCollection *)=0
Visit OGRGeometryCollection.
virtual void visit(const OGRPoint *)=0
Visit OGRPoint.
virtual ~IOGRConstGeometryVisitor()=default
Destructor/.
virtual void visit(const OGRMultiSurface *)=0
Visit OGRMultiSurface.
virtual void visit(const OGRLinearRing *)=0
Visit OGRLinearRing.
virtual void visit(const OGRCircularString *)=0
Visit OGRCircularString.
OGRGeometry visitor interface.
Definition: ogr_geometry.h:157
virtual void visit(OGRMultiSurface *)=0
Visit OGRMultiSurface.
virtual void visit(OGRLinearRing *)=0
Visit OGRLinearRing.
virtual void visit(OGRTriangle *)=0
Visit OGRTriangle.
virtual void visit(OGRCircularString *)=0
Visit OGRCircularString.
virtual void visit(OGRPolygon *)=0
Visit OGRPolygon.
virtual void visit(OGRLineString *)=0
Visit OGRLineString.
virtual void visit(OGRCompoundCurve *)=0
Visit OGRCompoundCurve.
virtual void visit(OGRTriangulatedSurface *)=0
Visit OGRTriangulatedSurface.
virtual void visit(OGRPoint *)=0
Visit OGRPoint.
virtual void visit(OGRCurvePolygon *)=0
Visit OGRCurvePolygon.
virtual void visit(OGRGeometryCollection *)=0
Visit OGRGeometryCollection.
virtual void visit(OGRPolyhedralSurface *)=0
Visit OGRPolyhedralSurface.
virtual void visit(OGRMultiPolygon *)=0
Visit OGRMultiPolygon.
virtual ~IOGRGeometryVisitor()=default
Destructor/.
virtual void visit(OGRMultiLineString *)=0
Visit OGRMultiLineString.
virtual void visit(OGRMultiPoint *)=0
Visit OGRMultiPoint.
virtual void visit(OGRMultiCurve *)=0
Visit OGRMultiCurve.
Concrete representation of a circular string, that is to say a curve made of one or several arc circl...
Definition: ogr_geometry.h:1471
virtual void accept(IOGRGeometryVisitor *visitor) override
Accept a visitor.
Definition: ogr_geometry.h:1549
OGRCircularString()
Create an empty circular string.
const OGRSimpleCurve * toUpperClass() const
Return pointer of this in upper class.
Definition: ogr_geometry.h:1547
OGRCircularString(const OGRCircularString &other)
Copy constructor.
OGRSimpleCurve * toUpperClass()
Return pointer of this in upper class.
Definition: ogr_geometry.h:1545
virtual void accept(IOGRConstGeometryVisitor *visitor) const override
Accept a visitor.
Definition: ogr_geometry.h:1550
Utility class to store a collection of curves.
Definition: ogr_geometry.h:1668
virtual void accept(IOGRConstGeometryVisitor *visitor) const override
Accept a visitor.
Definition: ogr_geometry.h:1800
const ChildType *const * begin() const
Return begin of curve iterator.
Definition: ogr_geometry.h:1717
ChildType ** end()
Return end of curve iterator.
Definition: ogr_geometry.h:1713
OGRCompoundCurve(const OGRCompoundCurve &other)
Copy constructor.
ChildType ** begin()
Return begin of curve iterator.
Definition: ogr_geometry.h:1711
OGRCurve ChildType
Type of child elements.
Definition: ogr_geometry.h:1706
const ChildType *const * end() const
Return end of curve iterator.
Definition: ogr_geometry.h:1719
OGRCompoundCurve()
Create an empty compound curve.
virtual void accept(IOGRGeometryVisitor *visitor) override
Accept a visitor.
Definition: ogr_geometry.h:1799
Concrete class representing curve polygons.
Definition: ogr_geometry.h:1862
OGRCurve * stealExteriorRingCurve()
"Steal" reference to external ring.
Definition: ogrcurvepolygon.cpp:307
OGRCurve * getExteriorRingCurve()
Fetch reference to external polygon ring.
Definition: ogrcurvepolygon.cpp:201
OGRCurve * getInteriorRingCurve(int)
Fetch reference to indicated internal ring.
Definition: ogrcurvepolygon.cpp:266
virtual OGRBoolean Contains(const OGRGeometry *) const override
Test for containment.
Definition: ogrcurvepolygon.cpp:780
virtual void flattenTo2D() override
Convert geometry to strictly 2D.
Definition: ogrcurvepolygon.cpp:165
virtual void accept(IOGRGeometryVisitor *visitor) override
Accept a visitor.
Definition: ogr_geometry.h:1992
virtual void empty() override
Clear geometry information.
Definition: ogrcurvepolygon.cpp:128
virtual void getEnvelope(OGREnvelope *psEnvelope) const override
Computes and returns the bounding envelope for this geometry in the passed psEnvelope structure.
Definition: ogrcurvepolygon.cpp:616
static OGRPolygon * CastToPolygon(OGRCurvePolygon *poCP)
Convert to polygon.
Definition: ogrcurvepolygon.cpp:827
virtual double get_Area() const override
Get the area of the surface object.
Definition: ogrcurvepolygon.cpp:665
virtual OGRErr transform(OGRCoordinateTransformation *poCT) override
Apply arbitrary coordinate transformation to geometry.
Definition: ogrcurvepolygon.cpp:655
virtual int getDimension() const override
Get the dimension of this object.
Definition: ogrcurvepolygon.cpp:155
virtual OGRBoolean Intersects(const OGRGeometry *) const override
Do these features intersect?
Definition: ogrcurvepolygon.cpp:796
virtual void swapXY() override
Swap x and y coordinates.
Definition: ogrcurvepolygon.cpp:737
virtual OGRBoolean Equals(const OGRGeometry *) const override
Returns TRUE if two geometries are equivalent.
Definition: ogrcurvepolygon.cpp:636
virtual void segmentize(double dfMaxLength) override
Modify the geometry such it has no segment longer then the given distance.
Definition: ogrcurvepolygon.cpp:723
const ChildType *const * end() const
Return end of curve iterator.
Definition: ogr_geometry.h:1911
OGRCurve ChildType
Type of child elements.
Definition: ogr_geometry.h:1898
virtual OGRBoolean IsEmpty() const override
Returns TRUE (non-zero) if the object has no points.
Definition: ogrcurvepolygon.cpp:714
OGRCurvePolygon()
Create an empty curve polygon.
virtual OGRGeometry * clone() const override
Make a copy of this object.
Definition: ogrcurvepolygon.cpp:103
const ChildType *const * begin() const
Return begin of curve iterator.
Definition: ogr_geometry.h:1909
virtual void assignSpatialReference(OGRSpatialReference *poSR) override
Assign spatial reference to this object.
Definition: ogrcurvepolygon.cpp:705
ChildType ** end()
Return end of curve iterator.
Definition: ogr_geometry.h:1905
virtual OGRErr addRing(OGRCurve *)
Add a ring to a polygon.
Definition: ogrcurvepolygon.cpp:362
ChildType ** begin()
Return begin of curve iterator.
Definition: ogr_geometry.h:1903
virtual void setCoordinateDimension(int nDimension) override
Set the coordinate dimension.
Definition: ogrcurvepolygon.cpp:685
virtual void setMeasured(OGRBoolean bIsMeasured) override
Add or remove the M coordinate dimension.
Definition: ogrcurvepolygon.cpp:696
int getNumInteriorRings() const
Fetch the number of internal rings.
Definition: ogrcurvepolygon.cpp:238
virtual void accept(IOGRConstGeometryVisitor *visitor) const override
Accept a visitor.
Definition: ogr_geometry.h:1993
OGRErr removeRing(int iIndex, bool bDelete=true)
Remove a geometry from the container.
Definition: ogrcurvepolygon.cpp:339
OGRCurvePolygon(const OGRCurvePolygon &)
Copy constructor.
virtual void set3D(OGRBoolean bIs3D) override
Add or remove the Z coordinate dimension.
Definition: ogrcurvepolygon.cpp:691
Abstract curve base class for OGRLineString, OGRCircularString and OGRCompoundCurve.
Definition: ogr_geometry.h:992
virtual OGRLineString * CurveToLine(double dfMaxAngleStepSizeDegrees=0, const char *const *papszOptions=nullptr) const =0
Return a linestring from a curve geometry.
virtual double get_Length() const =0
Returns the length of the curve.
virtual int IntersectsPoint(const OGRPoint *p) const
Returns if a point intersects a (closed) curve.
Definition: ogrcurve.cpp:416
const OGRSimpleCurve * toSimpleCurve() const
Down-cast to OGRSimpleCurve*.
Definition: ogr_geometry.h:1072
virtual void StartPoint(OGRPoint *) const =0
Return the curve start point.
virtual void EndPoint(OGRPoint *) const =0
Return the curve end point.
virtual int getNumPoints() const =0
Return the number of points of a curve geometry.
OGRPoint ChildType
Type of child elements.
Definition: ogr_geometry.h:1034
virtual int ContainsPoint(const OGRPoint *p) const
Returns if a point is contained in a (closed) curve.
Definition: ogrcurve.cpp:396
virtual void Value(double, OGRPoint *) const =0
Fetch point at given distance along curve.
virtual OGRPointIterator * getPointIterator() const =0
Returns a point iterator over the curve.
virtual double get_AreaOfCurveSegments() const =0
Get the area of the purely curve portions of a (closed) curve.
virtual double get_Area() const =0
Get the area of the (closed) curve.
OGRSimpleCurve * toSimpleCurve()
Down-cast to OGRSimpleCurve*.
Definition: ogr_geometry.h:1067
OGRGeometry visitor default implementation.
Definition: ogr_geometry.h:278
void visit(const OGRPoint *) override
Visit OGRPoint.
Definition: ogr_geometry.h:283
OGRGeometry visitor default implementation.
Definition: ogr_geometry.h:204
void visit(OGRPoint *) override
Visit OGRPoint.
Definition: ogr_geometry.h:209
Simple container for a bounding region in 3D.
Definition: ogr_core.h:176
Simple container for a bounding region (rectangle)
Definition: ogr_core.h:58
A collection of 1 or more geometry objects.
Definition: ogr_geometry.h:2218
virtual void accept(IOGRGeometryVisitor *visitor) override
Accept a visitor.
Definition: ogr_geometry.h:2335
const ChildType *const * end() const
Return end of sub-geometry iterator.
Definition: ogr_geometry.h:2259
virtual void accept(IOGRConstGeometryVisitor *visitor) const override
Accept a visitor.
Definition: ogr_geometry.h:2336
ChildType ** begin()
Return begin of sub-geometry iterator.
Definition: ogr_geometry.h:2251
const ChildType *const * begin() const
Return begin of sub-geometry iterator.
Definition: ogr_geometry.h:2257
ChildType ** end()
Return end of sub-geometry iterator.
Definition: ogr_geometry.h:2253
OGRGeometryCollection()
Create an empty geometry collection.
OGRGeometry ChildType
Type of child elements.
Definition: ogr_geometry.h:2246
Create geometry objects from well known text/binary.
Definition: ogr_geometry.h:3017
static OGRErr createFromWkt(char **ppszInput, OGRSpatialReference *poSRS, OGRGeometry **ppoGeom)
Deprecated.
Definition: ogr_geometry.h:3041
Abstract base class for all geometry classes.
Definition: ogr_geometry.h:326
OGRCircularString * toCircularString()
Down-cast to OGRCircularString*.
Definition: ogr_geometry.h:646
OGRMultiPolygon * toMultiPolygon()
Down-cast to OGRMultiPolygon*.
Definition: ogr_geometry.h:772
OGRLinearRing * toLinearRing()
Down-cast to OGRLinearRing*.
Definition: ogr_geometry.h:632
OGRLineString * toLineString()
Down-cast to OGRLineString*.
Definition: ogr_geometry.h:618
virtual OGRGeometry * getCurveGeometry(const char *const *papszOptions=nullptr) const
Return curve version of this geometry.
Definition: ogrgeometry.cpp:3217
const OGRCurvePolygon * toCurvePolygon() const
Down-cast to OGRCurvePolygon*.
Definition: ogr_geometry.h:723
OGRSimpleCurve * toSimpleCurve()
Down-cast to OGRSimpleCurve*.
Definition: ogr_geometry.h:604
virtual void empty()=0
Clear geometry information.
virtual OGRBoolean Equals(const OGRGeometry *) const =0
Returns TRUE if two geometries are equivalent.
const OGRMultiPoint * toMultiPoint() const
Down-cast to OGRMultiPoint*.
Definition: ogr_geometry.h:751
OGRCurvePolygon * toCurvePolygon()
Down-cast to OGRCurvePolygon*.
Definition: ogr_geometry.h:716
const OGRMultiPolygon * toMultiPolygon() const
Down-cast to OGRMultiPolygon*.
Definition: ogr_geometry.h:779
OGRPolygon * toPolygon()
Down-cast to OGRPolygon*.
Definition: ogr_geometry.h:688
bool operator!=(const OGRGeometry &other) const
Returns if two geometries are different.
Definition: ogr_geometry.h:392
const OGRGeometryCollection * toGeometryCollection() const
Down-cast to OGRGeometryCollection*.
Definition: ogr_geometry.h:737
const OGRTriangulatedSurface * toTriangulatedSurface() const
Down-cast to OGRTriangulatedSurface*.
Definition: ogr_geometry.h:835
OGRTriangulatedSurface * toTriangulatedSurface()
Down-cast to OGRTriangulatedSurface*.
Definition: ogr_geometry.h:828
const OGRCurve * toCurve() const
Down-cast to OGRCurve*.
Definition: ogr_geometry.h:597
OGRMultiLineString * toMultiLineString()
Down-cast to OGRMultiLineString*.
Definition: ogr_geometry.h:758
OGRPolyhedralSurface * toPolyhedralSurface()
Down-cast to OGRPolyhedralSurface*.
Definition: ogr_geometry.h:814
const OGRSimpleCurve * toSimpleCurve() const
Down-cast to OGRSimpleCurve*.
Definition: ogr_geometry.h:611
virtual OGRwkbGeometryType getGeometryType() const =0
Fetch geometry type.
virtual void accept(IOGRConstGeometryVisitor *visitor) const =0
Accept a visitor.
OGRCompoundCurve * toCompoundCurve()
Down-cast to OGRCompoundCurve*.
Definition: ogr_geometry.h:660
const OGRCompoundCurve * toCompoundCurve() const
Down-cast to OGRCompoundCurve*.
Definition: ogr_geometry.h:667
const OGRSurface * toSurface() const
Down-cast to OGRSurface*.
Definition: ogr_geometry.h:681
const OGRMultiCurve * toMultiCurve() const
Down-cast to OGRMultiCurve*.
Definition: ogr_geometry.h:793
OGRMultiCurve * toMultiCurve()
Down-cast to OGRMultiCurve*.
Definition: ogr_geometry.h:786
const OGRCircularString * toCircularString() const
Down-cast to OGRCircularString*.
Definition: ogr_geometry.h:653
const OGRLineString * toLineString() const
Down-cast to OGRLineString*.
Definition: ogr_geometry.h:625
bool operator==(const OGRGeometry &other) const
Returns if two geometries are equal.
Definition: ogr_geometry.h:389
OGRMultiSurface * toMultiSurface()
Down-cast to OGRMultiSurface*.
Definition: ogr_geometry.h:800
const OGRPolygon * toPolygon() const
Down-cast to OGRPolygon*.
Definition: ogr_geometry.h:695
OGRBoolean IsMeasured() const
Definition: ogr_geometry.h:405
OGRGeometryCollection * toGeometryCollection()
Down-cast to OGRGeometryCollection*.
Definition: ogr_geometry.h:730
virtual void accept(IOGRGeometryVisitor *visitor)=0
Accept a visitor.
OGRTriangle * toTriangle()
Down-cast to OGRTriangle*.
Definition: ogr_geometry.h:702
virtual OGRErr transform(OGRCoordinateTransformation *poCT)=0
Apply arbitrary coordinate transformation to geometry.
virtual void flattenTo2D()=0
Convert geometry to strictly 2D.
virtual int getDimension() const =0
Get the dimension of this object.
const OGRMultiLineString * toMultiLineString() const
Down-cast to OGRMultiLineString*.
Definition: ogr_geometry.h:765
OGRMultiPoint * toMultiPoint()
Down-cast to OGRMultiPoint*.
Definition: ogr_geometry.h:744
OGRSurface * toSurface()
Down-cast to OGRSurface*.
Definition: ogr_geometry.h:674
virtual const char * getGeometryName() const =0
Fetch WKT name for geometry type.
const OGRTriangle * toTriangle() const
Down-cast to OGRTriangle*.
Definition: ogr_geometry.h:709
static OGRGeometry * FromHandle(OGRGeometryH hGeom)
Convert a OGRGeometryH to a OGRGeometry*.
Definition: ogr_geometry.h:569
OGRErr importFromWkt(char **ppszInput)
Deprecated.
Definition: ogr_geometry.h:428
const OGRLinearRing * toLinearRing() const
Down-cast to OGRLinearRing*.
Definition: ogr_geometry.h:639
virtual OGRBoolean IsEmpty() const =0
Returns TRUE (non-zero) if the object has no points.
OGRPoint * toPoint()
Down-cast to OGRPoint*.
Definition: ogr_geometry.h:576
OGRCurve * toCurve()
Down-cast to OGRCurve*.
Definition: ogr_geometry.h:590
OGRErr exportToWkt(char **ppszDstText, OGRwkbVariant=wkbVariantOldOgc) const
Convert a geometry into well known text format.
Definition: ogrgeometry.cpp:1791
const OGRPoint * toPoint() const
Down-cast to OGRPoint*.
Definition: ogr_geometry.h:583
virtual OGRGeometry * getLinearGeometry(double dfMaxAngleStepSizeDegrees=0, const char *const *papszOptions=nullptr) const
Return, possibly approximate, non-curve version of this geometry.
Definition: ogrgeometry.cpp:3182
static OGRGeometryH ToHandle(OGRGeometry *poGeom)
Convert a OGRGeometry* to a OGRGeometryH.
Definition: ogr_geometry.h:563
OGRBoolean Is3D() const
Definition: ogr_geometry.h:403
virtual void closeRings()
Force rings to be closed.
Definition: ogrgeometry.cpp:5111
const OGRPolyhedralSurface * toPolyhedralSurface() const
Down-cast to OGRPolyhedralSurface*.
Definition: ogr_geometry.h:821
virtual OGRErr importFromWkt(const char **ppszInput)=0
Assign geometry from well known text data.
virtual OGRGeometry * clone() const =0
Make a copy of this object.
virtual std::string exportToWkt(const OGRWktOptions &opts=OGRWktOptions(), OGRErr *err=nullptr) const =0
Export a WKT geometry.
const OGRMultiSurface * toMultiSurface() const
Down-cast to OGRMultiSurface*.
Definition: ogr_geometry.h:807
Concrete representation of a multi-vertex line.
Definition: ogr_geometry.h:1317
virtual void accept(IOGRConstGeometryVisitor *visitor) const override
Accept a visitor.
Definition: ogr_geometry.h:1361
virtual void accept(IOGRGeometryVisitor *visitor) override
Accept a visitor.
Definition: ogr_geometry.h:1360
OGRLineString(const OGRLineString &other)
Copy constructor.
const OGRSimpleCurve * toUpperClass() const
Return pointer of this in upper class.
Definition: ogr_geometry.h:1358
OGRSimpleCurve * toUpperClass()
Return pointer of this in upper class.
Definition: ogr_geometry.h:1356
OGRLineString()
Create an empty line string.
virtual double get_Area() const override
Get the area of the (closed) curve.
Concrete representation of a closed ring.
Definition: ogr_geometry.h:1389
const OGRLineString * toUpperClass() const
Return pointer of this in upper class.
Definition: ogr_geometry.h:1436
virtual void accept(IOGRConstGeometryVisitor *visitor) const override
Accept a visitor.
Definition: ogr_geometry.h:1439
OGRLinearRing(const OGRLinearRing &other)
Copy constructor.
OGRLinearRing()
Constructor.
virtual void accept(IOGRGeometryVisitor *visitor) override
Accept a visitor.
Definition: ogr_geometry.h:1438
OGRLineString * toUpperClass()
Return pointer of this in upper class.
Definition: ogr_geometry.h:1434
A collection of OGRCurve.
Definition: ogr_geometry.h:2846
const ChildType *const * begin() const
Return begin of iterator.
Definition: ogr_geometry.h:2874
virtual void accept(IOGRConstGeometryVisitor *visitor) const override
Accept a visitor.
Definition: ogr_geometry.h:2912
ChildType ** begin()
Return begin of iterator.
Definition: ogr_geometry.h:2868
const OGRGeometryCollection * toUpperClass() const
Return pointer of this in upper class.
Definition: ogr_geometry.h:2909
OGRMultiCurve()
Create an empty multi curve collection.
OGRMultiCurve(const OGRMultiCurve &other)
Copy constructor.
OGRCurve ChildType
Type of child elements.
Definition: ogr_geometry.h:2863
const ChildType *const * end() const
Return end of iterator.
Definition: ogr_geometry.h:2876
ChildType ** end()
Return end of iterator.
Definition: ogr_geometry.h:2870
OGRGeometryCollection * toUpperClass()
Return pointer of this in upper class.
Definition: ogr_geometry.h:2907
virtual void accept(IOGRGeometryVisitor *visitor) override
Accept a visitor.
Definition: ogr_geometry.h:2911
A collection of OGRLineString.
Definition: ogr_geometry.h:2938
ChildType ** begin()
Return begin of iterator.
Definition: ogr_geometry.h:2956
OGRLineString ChildType
Type of child elements.
Definition: ogr_geometry.h:2951
const OGRGeometryCollection * toUpperClass() const
Return pointer of this in upper class.
Definition: ogr_geometry.h:2988
const ChildType *const * end() const
Return end of iterator.
Definition: ogr_geometry.h:2964
virtual void accept(IOGRConstGeometryVisitor *visitor) const override
Accept a visitor.
Definition: ogr_geometry.h:2991
OGRMultiLineString()
Create an empty multi line string collection.
virtual void accept(IOGRGeometryVisitor *visitor) override
Accept a visitor.
Definition: ogr_geometry.h:2990
const ChildType *const * begin() const
Return begin of iterator.
Definition: ogr_geometry.h:2962
ChildType ** end()
Return end of iterator.
Definition: ogr_geometry.h:2958
OGRGeometryCollection * toUpperClass()
Return pointer of this in upper class.
Definition: ogr_geometry.h:2986
OGRMultiLineString(const OGRMultiLineString &other)
Copy constructor.
A collection of OGRPoint.
Definition: ogr_geometry.h:2755
ChildType ** begin()
Return begin of iterator.
Definition: ogr_geometry.h:2776
OGRGeometryCollection * toUpperClass()
Return pointer of this in upper class.
Definition: ogr_geometry.h:2811
const ChildType *const * begin() const
Return begin of iterator.
Definition: ogr_geometry.h:2782
const ChildType *const * end() const
Return end of iterator.
Definition: ogr_geometry.h:2784
ChildType ** end()
Return end of iterator.
Definition: ogr_geometry.h:2778
const OGRGeometryCollection * toUpperClass() const
Return pointer of this in upper class.
Definition: ogr_geometry.h:2813
virtual void accept(IOGRGeometryVisitor *visitor) override
Accept a visitor.
Definition: ogr_geometry.h:2815
OGRMultiPoint()
Create an empty multi point collection.
virtual void accept(IOGRConstGeometryVisitor *visitor) const override
Accept a visitor.
Definition: ogr_geometry.h:2816
OGRMultiPoint(const OGRMultiPoint &other)
Copy constructor.
OGRPoint ChildType
Type of child elements.
Definition: ogr_geometry.h:2771
A collection of non-overlapping OGRPolygon.
Definition: ogr_geometry.h:2456
OGRGeometryCollection * toUpperClass()
Return pointer of this in upper class.
Definition: ogr_geometry.h:2517
OGRPolygon ChildType
Type of child elements.
Definition: ogr_geometry.h:2482
OGRMultiPolygon(const OGRMultiPolygon &other)
Copy constructor.
virtual void accept(IOGRConstGeometryVisitor *visitor) const override
Accept a visitor.
Definition: ogr_geometry.h:2522
ChildType ** end()
Return end of iterator.
Definition: ogr_geometry.h:2489
const ChildType *const * begin() const
Return begin of iterator.
Definition: ogr_geometry.h:2493
const ChildType *const * end() const
Return end of iterator.
Definition: ogr_geometry.h:2495
const OGRGeometryCollection * toUpperClass() const
Return pointer of this in upper class.
Definition: ogr_geometry.h:2519
virtual void accept(IOGRGeometryVisitor *visitor) override
Accept a visitor.
Definition: ogr_geometry.h:2521
OGRMultiPolygon()
Create an empty multi polygon collection.
ChildType ** begin()
Return begin of iterator.
Definition: ogr_geometry.h:2487
A collection of non-overlapping OGRSurface.
Definition: ogr_geometry.h:2365
OGRMultiSurface()
Create an empty multi surface collection.
virtual void accept(IOGRGeometryVisitor *visitor) override
Accept a visitor.
Definition: ogr_geometry.h:2429
const ChildType *const * begin() const
Return begin of iterator.
Definition: ogr_geometry.h:2389
OGRSurface ChildType
Type of child elements.
Definition: ogr_geometry.h:2378
const ChildType *const * end() const
Return end of iterator.
Definition: ogr_geometry.h:2391
OGRGeometryCollection * toUpperClass()
Return pointer of this in upper class.
Definition: ogr_geometry.h:2425
ChildType ** begin()
Return begin of iterator.
Definition: ogr_geometry.h:2383
OGRMultiSurface(const OGRMultiSurface &other)
Copy constructor.
virtual void accept(IOGRConstGeometryVisitor *visitor) const override
Accept a visitor.
Definition: ogr_geometry.h:2430
ChildType ** end()
Return end of iterator.
Definition: ogr_geometry.h:2385
const OGRGeometryCollection * toUpperClass() const
Return pointer of this in upper class.
Definition: ogr_geometry.h:2427
Interface for a point iterator.
Definition: ogr_geometry.h:974
virtual OGRBoolean getNextPoint(OGRPoint *p)=0
Returns the next point followed by the iterator.
Point class.
Definition: ogr_geometry.h:863
double getM() const
Return m.
Definition: ogr_geometry.h:924
virtual void accept(IOGRGeometryVisitor *visitor) override
Accept a visitor.
Definition: ogr_geometry.h:957
void setX(double xIn)
Set x.
Definition: ogr_geometry.h:931
OGRPoint(const OGRPoint &other)
Copy constructor.
void setZ(double zIn)
Set z.
Definition: ogr_geometry.h:939
void setM(double mIn)
Set m.
Definition: ogr_geometry.h:944
double getX() const
Return x.
Definition: ogr_geometry.h:918
virtual void accept(IOGRConstGeometryVisitor *visitor) const override
Accept a visitor.
Definition: ogr_geometry.h:958
void setY(double yIn)
Set y.
Definition: ogr_geometry.h:935
virtual OGRBoolean IsEmpty() const override
Returns TRUE (non-zero) if the object has no points.
Definition: ogr_geometry.h:913
double getZ() const
Return z.
Definition: ogr_geometry.h:922
double getY() const
Return y.
Definition: ogr_geometry.h:920
Concrete class representing polygons.
Definition: ogr_geometry.h:2024
const OGRCurvePolygon * toUpperClass() const
Return pointer of this in upper class.
Definition: ogr_geometry.h:2127
virtual OGRGeometry * getLinearGeometry(double dfMaxAngleStepSizeDegrees=0, const char *const *papszOptions=nullptr) const override
Return, possibly approximate, non-curve version of this geometry.
Definition: ogrpolygon.cpp:740
const ChildType *const * end() const
Return end of iterator.
Definition: ogr_geometry.h:2069
OGRLinearRing ChildType
Type of child elements.
Definition: ogr_geometry.h:2056
virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear=FALSE) const override
Returns if this geometry is or has curve geometry.
Definition: ogrpolygon.cpp:731
OGRPolygon()
Create an empty polygon.
virtual OGRPolygon * CurvePolyToPoly(double dfMaxAngleStepSizeDegrees=0, const char *const *papszOptions=nullptr) const override
Return a polygon from a curve polygon.
Definition: ogrpolygon.cpp:720
virtual int WkbSize() const override
Returns size of related binary representation.
Definition: ogrpolygon.cpp:298
virtual OGRErr exportToWkb(OGRwkbByteOrder, unsigned char *, OGRwkbVariant=wkbVariantOldOgc) const override
Convert a geometry into well known binary format.
Definition: ogrpolygon.cpp:372
OGRPolygon(const OGRPolygon &other)
Copy constructor.
const ChildType *const * begin() const
Return begin of iterator.
Definition: ogr_geometry.h:2067
ChildType ** end()
Return end of iterator.
Definition: ogr_geometry.h:2063
OGRCurvePolygon * toUpperClass()
Return pointer of this in upper class.
Definition: ogr_geometry.h:2125
OGRErr exportToWkt(char **ppszDstText, OGRwkbVariant=wkbVariantOldOgc) const
Convert a geometry into well known text format.
Definition: ogrgeometry.cpp:1791
virtual void accept(IOGRConstGeometryVisitor *visitor) const override
Accept a visitor.
Definition: ogr_geometry.h:2130
ChildType ** begin()
Return begin of iterator.
Definition: ogr_geometry.h:2061
virtual OGRErr importFromWkt(const char **ppszInput)=0
Assign geometry from well known text data.
virtual void accept(IOGRGeometryVisitor *visitor) override
Accept a visitor.
Definition: ogr_geometry.h:2129
virtual void closeRings() override
Force rings to be closed.
Definition: ogrpolygon.cpp:709
PolyhedralSurface class.
Definition: ogr_geometry.h:2550
virtual OGRGeometry * clone() const override
Make a copy of this object.
Definition: ogrpolyhedralsurface.cpp:166
virtual OGRErr exportToWkb(OGRwkbByteOrder, unsigned char *, OGRwkbVariant=wkbVariantOldOgc) const override
Convert a geometry into well known binary format.
Definition: ogrpolyhedralsurface.cpp:303
virtual OGRBoolean IsEmpty() const override
Checks if the PolyhedralSurface is empty.
Definition: ogrpolyhedralsurface.cpp:851
virtual void setMeasured(OGRBoolean bIsMeasured) override
Set the type as Measured.
Definition: ogrpolyhedralsurface.cpp:879
virtual void setCoordinateDimension(int nDimension) override
Set the coordinate dimension.
Definition: ogrpolyhedralsurface.cpp:900
int getNumGeometries() const
Fetch number of geometries in PolyhedralSurface.
Definition: ogrpolyhedralsurface.cpp:792
virtual void assignSpatialReference(OGRSpatialReference *poSR) override
Assign spatial reference to this object.
Definition: ogrpolyhedralsurface.cpp:960
static OGRMultiPolygon * CastToMultiPolygon(OGRPolyhedralSurface *poPS)
Casts the OGRPolyhedralSurface to an OGRMultiPolygon.
Definition: ogrpolyhedralsurface.cpp:703
virtual void swapXY() override
Swap x and y coordinates.
Definition: ogrpolyhedralsurface.cpp:915
virtual int WkbSize() const override
Returns size of related binary representation.
Definition: ogrpolyhedralsurface.cpp:125
virtual void getEnvelope(OGREnvelope *psEnvelope) const override
Computes and returns the bounding envelope for this geometry in the passed psEnvelope structure.
Definition: ogrpolyhedralsurface.cpp:193
ChildType ** begin()
Return begin of iterator.
Definition: ogr_geometry.h:2581
virtual void flattenTo2D() override
Convert geometry to strictly 2D.
Definition: ogrpolyhedralsurface.cpp:499
OGRPolyhedralSurface(const OGRPolyhedralSurface &poGeom)
Copy constructor.
virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear=FALSE) const override
Returns if this geometry is or has curve geometry.
Definition: ogrpolyhedralsurface.cpp:925
~OGRPolyhedralSurface() override
Destructor.
virtual OGRErr importFromWkb(const unsigned char *, int, OGRwkbVariant, int &nBytesConsumedOut) override
Assign geometry from well known binary data.
Definition: ogrpolyhedralsurface.cpp:211
virtual void set3D(OGRBoolean bIs3D) override
Set the type as 3D geometry.
Definition: ogrpolyhedralsurface.cpp:864
OGRErr addGeometryDirectly(OGRGeometry *poNewGeom)
Add a geometry directly to the container.
Definition: ogrpolyhedralsurface.cpp:760
virtual OGRBoolean Equals(const OGRGeometry *) const override
Returns TRUE if two geometries are equivalent.
Definition: ogrpolyhedralsurface.cpp:592
virtual void accept(IOGRGeometryVisitor *visitor) override
Accept a visitor.
Definition: ogr_geometry.h:2651
OGRPolygon ChildType
Type of child elements.
Definition: ogr_geometry.h:2576
virtual double get_Area() const override
Returns the area enclosed.
Definition: ogrpolyhedralsurface.cpp:632
virtual OGRErr transform(OGRCoordinateTransformation *) override
Apply arbitrary coordinate transformation to geometry.
Definition: ogrpolyhedralsurface.cpp:511
OGRGeometry * getGeometryRef(int i)
Fetch geometry from container.
Definition: ogrpolyhedralsurface.cpp:814
OGRErr exportToWkt(char **ppszDstText, OGRwkbVariant=wkbVariantOldOgc) const
Convert a geometry into well known text format.
Definition: ogrgeometry.cpp:1791
virtual OGRErr PointOnSurface(OGRPoint *) const override
This method relates to the SFCOM ISurface::get_PointOnSurface() method.
Definition: ogrpolyhedralsurface.cpp:659
OGRPolyhedralSurface()
Create an empty PolyhedralSurface.
ChildType ** end()
Return end of iterator.
Definition: ogr_geometry.h:2583
const ChildType *const * end() const
Return end of iterator.
Definition: ogr_geometry.h:2589
virtual OGRErr importFromWkt(const char **ppszInput)=0
Assign geometry from well known text data.
const ChildType *const * begin() const
Return begin of iterator.
Definition: ogr_geometry.h:2587
virtual int getDimension() const override
Get the dimension of this object.
Definition: ogrpolyhedralsurface.cpp:139
virtual void empty() override
Clear geometry information.
Definition: ogrpolyhedralsurface.cpp:148
OGRErr removeGeometry(int iIndex, int bDelete=TRUE)
Remove a geometry from the container.
Definition: ogrpolyhedralsurface.cpp:951
virtual void accept(IOGRConstGeometryVisitor *visitor) const override
Accept a visitor.
Definition: ogr_geometry.h:2652
Simple container for a position.
Definition: ogr_geometry.h:103
OGRRawPoint(double xIn, double yIn)
Constructor.
Definition: ogr_geometry.h:109
double x
x
Definition: ogr_geometry.h:112
double y
y
Definition: ogr_geometry.h:114
OGRRawPoint()
Constructor.
Definition: ogr_geometry.h:106
Abstract curve base class for OGRLineString and OGRCircularString.
Definition: ogr_geometry.h:1101
double getY(int i) const
Get Y at vertex.
Definition: ogr_geometry.h:1239
double getX(int i) const
Get X at vertex.
Definition: ogr_geometry.h:1238
OGRPoint ChildType
Type of child elements.
Definition: ogr_geometry.h:1168
virtual int getNumPoints() const override
Fetch vertex count.
Definition: ogr_geometry.h:1236
This class represents an OpenGIS Spatial Reference System, and contains methods for converting betwee...
Definition: ogr_spatialref.h:158
Abstract base class for 2 dimensional objects like polygons or curve polygons.
Definition: ogr_geometry.h:1827
virtual double get_Area() const =0
Get the area of the surface object.
virtual OGRErr PointOnSurface(OGRPoint *poPoint) const
This method relates to the SFCOM ISurface::get_PointOnSurface() method.
Definition: ogr_geometry.h:1836
Triangle class.
Definition: ogr_geometry.h:2158
virtual OGRErr importFromWkb(const unsigned char *, int, OGRwkbVariant, int &nBytesConsumedOut) override
Assign geometry from well known binary data.
Definition: ogrtriangle.cpp:188
const OGRPolygon * toUpperClass() const
Return pointer of this in upper class.
Definition: ogr_geometry.h:2196
virtual OGRwkbGeometryType getGeometryType() const override
Fetch geometry type.
Definition: ogrtriangle.cpp:160
virtual void accept(IOGRGeometryVisitor *visitor) override
Accept a visitor.
Definition: ogr_geometry.h:2198
virtual void accept(IOGRConstGeometryVisitor *visitor) const override
Accept a visitor.
Definition: ogr_geometry.h:2199
OGRPolygon * toUpperClass()
Return pointer of this in upper class.
Definition: ogr_geometry.h:2194
OGRTriangle()
Constructor.
~OGRTriangle() override
Destructor.
virtual OGRErr addRingDirectly(OGRCurve *poNewRing) override
Add a ring to a polygon.
Definition: ogrtriangle.cpp:246
OGRTriangle(const OGRTriangle &other)
Copy constructor.
OGRTriangle & operator=(const OGRTriangle &other)
Assignment operator.
Definition: ogrtriangle.cpp:138
virtual const char * getGeometryName() const override
Fetch WKT name for geometry type.
Definition: ogrtriangle.cpp:151
TriangulatedSurface class.
Definition: ogr_geometry.h:2680
~OGRTriangulatedSurface()
Destructor.
OGRTriangulatedSurface & operator=(const OGRTriangulatedSurface &other)
Assignment operator.
Definition: ogrtriangulatedsurface.cpp:84
virtual const char * getGeometryName() const override
Returns the geometry name of the TriangulatedSurface.
Definition: ogrtriangulatedsurface.cpp:116
virtual OGRwkbGeometryType getGeometryType() const override
Returns the WKB Type of TriangulatedSurface.
Definition: ogrtriangulatedsurface.cpp:130
virtual OGRErr addGeometry(const OGRGeometry *) override
Add a new geometry to a collection.
Definition: ogrtriangulatedsurface.cpp:180
OGRPolyhedralSurface * toUpperClass()
Return pointer of this in upper class.
Definition: ogr_geometry.h:2723
virtual void accept(IOGRGeometryVisitor *visitor) override
Accept a visitor.
Definition: ogr_geometry.h:2727
const ChildType *const * begin() const
Return begin of iterator.
Definition: ogr_geometry.h:2711
const OGRPolyhedralSurface * toUpperClass() const
Return pointer of this in upper class.
Definition: ogr_geometry.h:2725
OGRTriangle ChildType
Type of child elements.
Definition: ogr_geometry.h:2700
virtual void accept(IOGRConstGeometryVisitor *visitor) const override
Accept a visitor.
Definition: ogr_geometry.h:2728
ChildType ** end()
Return end of iterator.
Definition: ogr_geometry.h:2707
const ChildType *const * end() const
Return end of iterator.
Definition: ogr_geometry.h:2713
ChildType ** begin()
Return begin of iterator.
Definition: ogr_geometry.h:2705
OGRTriangulatedSurface()
Constructor.
Various convenience functions for CPL.
Interface for read and write JSON documents.
#define CPL_WARN_UNUSED_RESULT
Qualifier to warn when the return value of a function is not used.
Definition: cpl_port.h:946
unsigned char GByte
Unsigned byte type.
Definition: cpl_port.h:215
void * OGRGeometryH
Opaque type for a geometry.
Definition: ogr_api.h:60
Core portability services for cross-platform OGR code.
int OGRBoolean
Type for a OGR boolean.
Definition: ogr_core.h:334
OGRwkbByteOrder
Enumeration to describe byte order.
Definition: ogr_core.h:528
OGRwkbVariant
Output variants of WKB we support.
Definition: ogr_core.h:462
@ wkbVariantOldOgc
Old-style 99-402 extended dimension (Z) WKB types.
Definition: ogr_core.h:463
OGRwkbGeometryType
List of well known binary geometry types.
Definition: ogr_core.h:346
int OGRErr
Type for a OGR error.
Definition: ogr_core.h:318
OGRPreparedGeometry * OGRCreatePreparedGeometry(const OGRGeometry *poGeom)
Creates a prepared geometry.
Definition: ogrgeometry.cpp:5869
OGRWktFormat
WKT Output formatting options.
Definition: ogr_geometry.h:61
@ Default
Format as F when abs(value) < 1, otherwise as G.
std::unique_ptr< OGRPreparedGeometry, OGRPreparedGeometryUniquePtrDeleter > OGRPreparedGeometryUniquePtr
Unique pointer type for OGRPreparedGeometry.
Definition: ogr_geometry.h:3144
int OGRPreparedGeometryIntersects(const OGRPreparedGeometry *poPreparedGeom, const OGRGeometry *poOtherGeom)
Returns whether a prepared geometry intersects with a geometry.
Definition: ogrgeometry.cpp:5927
const char * OGRToOGCGeomType(OGRwkbGeometryType eGeomType)
Map OGR geometry format constants to corresponding OGC geometry type.
Definition: ogrgeometry.cpp:2421
struct GEOSContextHandle_HS * GEOSContextHandle_t
GEOS context handle type.
Definition: ogr_geometry.h:120
struct _OGRPreparedGeometry OGRPreparedGeometry
Prepared geometry API (needs GEOS >= 3.1.0)
Definition: ogr_geometry.h:3125
OGRwkbGeometryType OGRFromOGCGeomType(const char *pszGeomType)
Map OGCgeometry format type to corresponding OGR constants.
Definition: ogrgeometry.cpp:2348
std::unique_ptr< OGRGeometry, OGRGeometryUniquePtrDeleter > OGRGeometryUniquePtr
Unique pointer type for OGRGeometry.
Definition: ogr_geometry.h:850
int OGRPreparedGeometryContains(const OGRPreparedGeometry *poPreparedGeom, const OGRGeometry *poOtherGeom)
Returns whether a prepared geometry contains a geometry.
Definition: ogrgeometry.cpp:5957
void OGRDestroyPreparedGeometry(OGRPreparedGeometry *poPreparedGeom)
Destroys a prepared geometry.
Definition: ogrgeometry.cpp:5905
struct GEOSGeom_t * GEOSGeom
GEOS geometry type.
Definition: ogr_geometry.h:118
void sfcgal_geometry_t
SFCGAL geometry type.
Definition: ogr_geometry.h:122
int OGRHasPreparedGeometrySupport()
Returns if GEOS has prepared geometry support.
Definition: ogrgeometry.cpp:5849
Coordinate systems services.
OGRLayer::FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition: ogrsf_frmts.h:287
OGRLayer::FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition: ogrsf_frmts.h:292
Options for formatting WKT output.
Definition: ogr_geometry.h:69
OGRwkbVariant variant
Type of WKT output to produce.
Definition: ogr_geometry.h:72
OGRWktOptions()
Constructor.
Definition: ogr_geometry.h:81
OGRWktOptions(const OGRWktOptions &)=default
Copy constructor.
bool round
Whether GDAL-special rounding should be applied.
Definition: ogr_geometry.h:76
int precision
Precision of output. Interpretation depends on format.
Definition: ogr_geometry.h:74
OGRWktFormat format
Formatting type.
Definition: ogr_geometry.h:78