31 #ifndef _OGR_GEOMETRY_H_INCLUDED
32 #define _OGR_GEOMETRY_H_INCLUDED
57 typedef struct GEOSGeom_t *GEOSGeom;
90 virtual int getDimension()
const = 0;
91 virtual int getCoordinateDimension()
const;
92 virtual OGRBoolean IsEmpty()
const = 0;
93 virtual OGRBoolean IsValid()
const;
94 virtual OGRBoolean IsSimple()
const;
95 virtual OGRBoolean IsRing()
const;
96 virtual void empty() = 0;
98 virtual void getEnvelope(
OGREnvelope * psEnvelope )
const = 0;
99 virtual void getEnvelope(
OGREnvelope3D * psEnvelope )
const = 0;
102 virtual int WkbSize()
const = 0;
103 virtual OGRErr importFromWkb(
unsigned char *,
int=-1 )=0;
104 virtual OGRErr exportToWkb( OGRwkbByteOrder,
unsigned char * )
const = 0;
105 virtual OGRErr importFromWkt(
char ** ppszInput ) = 0;
106 virtual OGRErr exportToWkt(
char ** ppszDstText )
const = 0;
110 virtual const char *getGeometryName()
const = 0;
111 virtual void dumpReadable( FILE *,
const char * = NULL,
char** papszOptions = NULL )
const;
112 virtual void flattenTo2D() = 0;
113 virtual char * exportToGML(
const char*
const * papszOptions = NULL )
const;
114 virtual char * exportToKML()
const;
115 virtual char * exportToJson()
const;
116 virtual GEOSGeom exportToGEOS()
const;
117 virtual void closeRings();
119 virtual void setCoordinateDimension(
int nDimension );
127 virtual void segmentize(
double dfMaxLength);
130 virtual OGRBoolean Intersects(
OGRGeometry * )
const;
131 virtual OGRBoolean Equals(
OGRGeometry * )
const = 0;
132 virtual OGRBoolean Disjoint(
const OGRGeometry * )
const;
133 virtual OGRBoolean Touches(
const OGRGeometry * )
const;
134 virtual OGRBoolean Crosses(
const OGRGeometry * )
const;
135 virtual OGRBoolean Within(
const OGRGeometry * )
const;
136 virtual OGRBoolean Contains(
const OGRGeometry * )
const;
137 virtual OGRBoolean Overlaps(
const OGRGeometry * )
const;
141 virtual double Distance(
const OGRGeometry * )
const;
143 virtual OGRGeometry *Buffer(
double dfDist,
int nQuadSegs = 30 )
const;
149 virtual OGRErr Centroid(
OGRPoint * poPoint )
const;
150 virtual OGRGeometry *Simplify(
double dTolerance)
const;
151 OGRGeometry *SimplifyPreserveTopology(
double dTolerance)
const;
156 OGRBoolean Intersect(
OGRGeometry * ) const CPL_WARN_DEPRECATED("Non standard method. Use Intersects() instead");
157 OGRBoolean Equal(
OGRGeometry * ) const CPL_WARN_DEPRECATED("Non standard method. Use Equals() instead");
158 virtual
OGRGeometry *SymmetricDifference( const
OGRGeometry * ) const CPL_WARN_DEPRECATED("Non standard method. Use SymDifference() instead");
159 virtual
OGRGeometry *getBoundary() const CPL_WARN_DEPRECATED("Non standard method. Use Boundary() instead");
162 static
int bGenerate_DB2_V72_BYTE_ORDER;
164 virtual
void swapXY();
186 OGRPoint(
double x,
double y,
double z );
190 virtual int WkbSize()
const;
191 virtual OGRErr importFromWkb(
unsigned char *,
int=-1 );
192 virtual OGRErr exportToWkb( OGRwkbByteOrder,
unsigned char * )
const;
193 virtual OGRErr importFromWkt(
char ** );
194 virtual OGRErr exportToWkt(
char ** ppszDstText )
const;
197 virtual int getDimension()
const;
198 virtual OGRGeometry *clone()
const;
199 virtual void empty();
200 virtual void getEnvelope(
OGREnvelope * psEnvelope )
const;
201 virtual void getEnvelope(
OGREnvelope3D * psEnvelope )
const;
202 virtual OGRBoolean IsEmpty()
const;
205 double getX()
const {
return x; }
206 double getY()
const {
return y; }
207 double getZ()
const {
return z; }
210 virtual void setCoordinateDimension(
int nDimension );
211 void setX(
double xIn ) { x = xIn;
if (nCoordDimension == 0) nCoordDimension = 2; }
212 void setY(
double yIn ) { y = yIn;
if (nCoordDimension == 0) nCoordDimension = 2; }
213 void setZ(
double zIn ) { z = zIn; nCoordDimension=3; }
216 virtual OGRBoolean Equals( OGRGeometry * )
const;
219 virtual const char *getGeometryName()
const;
222 virtual void flattenTo2D();
224 virtual void swapXY();
241 virtual double get_Length()
const = 0;
242 virtual void StartPoint(
OGRPoint *)
const = 0;
243 virtual void EndPoint(
OGRPoint *)
const = 0;
244 virtual int get_IsClosed()
const;
245 virtual void Value(
double,
OGRPoint * )
const = 0;
272 virtual int WkbSize()
const;
273 virtual OGRErr importFromWkb(
unsigned char *,
int = -1 );
274 virtual OGRErr exportToWkb( OGRwkbByteOrder,
unsigned char * )
const;
275 virtual OGRErr importFromWkt(
char ** );
276 virtual OGRErr exportToWkt(
char ** ppszDstText )
const;
279 virtual int getDimension()
const;
281 virtual void empty();
282 virtual void getEnvelope(
OGREnvelope * psEnvelope )
const;
283 virtual void getEnvelope(
OGREnvelope3D * psEnvelope )
const;
284 virtual OGRBoolean IsEmpty()
const;
287 virtual double get_Length()
const;
288 virtual void StartPoint(
OGRPoint *)
const;
289 virtual void EndPoint(
OGRPoint *)
const;
290 virtual void Value(
double,
OGRPoint * )
const;
294 void getPoint(
int,
OGRPoint * )
const;
295 double getX(
int i )
const {
return paoPoints[i].x; }
296 double getY(
int i )
const {
return paoPoints[i].y; }
297 double getZ(
int i )
const;
303 virtual void setCoordinateDimension(
int nDimension );
304 void setNumPoints(
int );
306 void setPoint(
int,
double,
double );
307 void setPoint(
int,
double,
double,
double );
308 void setPoints(
int,
OGRRawPoint *,
double * = NULL );
309 void setPoints(
int,
double * padfX,
double * padfY,
310 double *padfZ = NULL );
312 void addPoint(
double,
double );
313 void addPoint(
double,
double,
double );
315 void getPoints(
OGRRawPoint *,
double * = NULL )
const;
316 void getPoints(
void* pabyX,
int nXStride,
317 void* pabyY,
int nYStride,
318 void* pabyZ = NULL,
int nZStride = 0 )
const;
321 int nStartVertex = 0,
int nEndVertex = -1 );
322 void reversePoints(
void );
326 virtual const char *getGeometryName()
const;
328 virtual void flattenTo2D();
329 virtual void segmentize(
double dfMaxLength);
331 virtual void swapXY();
362 virtual int _WkbSize(
int b3D )
const;
363 virtual OGRErr _importFromWkb( OGRwkbByteOrder,
int b3D,
364 unsigned char *,
int=-1 );
365 virtual OGRErr _exportToWkb( OGRwkbByteOrder,
int b3D,
366 unsigned char * )
const;
376 virtual int isClockwise()
const;
377 virtual void reverseWindingOrder();
380 OGRBoolean isPointInRing(
const OGRPoint* pt,
int bTestEnvelope = TRUE)
const;
381 OGRBoolean isPointOnRingBoundary(
const OGRPoint* pt,
int bTestEnvelope = TRUE)
const;
388 virtual OGRErr
exportToWkb( OGRwkbByteOrder,
unsigned char * )
const;
402 virtual double get_Area()
const = 0;
403 virtual OGRErr PointOnSurface(
OGRPoint * poPoint )
const = 0;
429 virtual const char *getGeometryName()
const;
432 virtual void empty();
434 virtual void flattenTo2D();
435 virtual OGRBoolean IsEmpty()
const;
436 virtual void segmentize(
double dfMaxLength);
439 virtual double get_Area()
const;
440 virtual int PointOnSurface(
OGRPoint * poPoint )
const;
443 virtual int WkbSize()
const;
444 virtual OGRErr importFromWkb(
unsigned char *,
int = -1 );
445 virtual OGRErr exportToWkb( OGRwkbByteOrder,
unsigned char * )
const;
446 virtual OGRErr importFromWkt(
char ** );
447 virtual OGRErr exportToWkt(
char ** ppszDstText )
const;
450 virtual int getDimension()
const;
451 virtual void getEnvelope(
OGREnvelope * psEnvelope )
const;
452 virtual void getEnvelope(
OGREnvelope3D * psEnvelope )
const;
458 virtual void setCoordinateDimension(
int nDimension );
465 int getNumInteriorRings()
const;
469 OGRBoolean IsPointOnSurface(
const OGRPoint * )
const;
471 virtual void closeRings();
473 virtual void swapXY();
492 OGRErr importFromWkbInternal(
unsigned char * pabyData,
int nSize,
int nRecLevel );
493 OGRErr importFromWktInternal(
char **ppszInput,
int nRecLevel );
500 virtual const char *getGeometryName()
const;
503 virtual void empty();
505 virtual void flattenTo2D();
506 virtual OGRBoolean IsEmpty()
const;
507 virtual void segmentize(
double dfMaxLength);
510 virtual int WkbSize()
const;
511 virtual OGRErr importFromWkb(
unsigned char *,
int = -1 );
512 virtual OGRErr exportToWkb( OGRwkbByteOrder,
unsigned char * )
const;
513 virtual OGRErr importFromWkt(
char ** );
514 virtual OGRErr exportToWkt(
char ** ppszDstText )
const;
516 virtual double get_Length()
const;
517 virtual double get_Area()
const;
520 virtual int getDimension()
const;
521 virtual void getEnvelope(
OGREnvelope * psEnvelope )
const;
522 virtual void getEnvelope(
OGREnvelope3D * psEnvelope )
const;
525 int getNumGeometries()
const;
533 virtual void setCoordinateDimension(
int nDimension );
535 virtual OGRErr addGeometryDirectly(
OGRGeometry * );
536 virtual OGRErr removeGeometry(
int iIndex,
int bDelete = TRUE );
540 virtual void swapXY();
559 virtual const char *getGeometryName()
const;
562 virtual OGRErr importFromWkt(
char ** );
563 virtual OGRErr exportToWkt(
char ** )
const;
566 virtual int getDimension()
const;
569 virtual OGRErr addGeometryDirectly(
OGRGeometry * );
571 virtual double get_Area()
const;
585 OGRErr importFromWkt_Bracketed(
char **,
int bHasM,
int bHasZ );
590 virtual const char *getGeometryName()
const;
593 virtual OGRErr importFromWkt(
char ** );
594 virtual OGRErr exportToWkt(
char ** )
const;
597 virtual int getDimension()
const;
600 virtual OGRErr addGeometryDirectly(
OGRGeometry * );
617 virtual const char *getGeometryName()
const;
620 virtual OGRErr importFromWkt(
char ** );
621 virtual OGRErr exportToWkt(
char ** )
const;
624 virtual int getDimension()
const;
627 virtual OGRErr addGeometryDirectly(
OGRGeometry * );
641 static OGRErr createFromFgfInternal(
unsigned char *pabyData,
645 int *pnBytesConsumed,
668 int *pbResultValidGeometry,
669 const char **papszOptions = NULL);
671 static void *getGEOSGeometryFactory();
673 static int haveGEOS();
677 char** papszOptions );
680 approximateArcAngles(
double dfX,
double dfY,
double dfZ,
681 double dfPrimaryRadius,
double dfSecondaryAxis,
683 double dfStartAngle,
double dfEndAngle,
684 double dfMaxAngleStepSizeDegrees );
691 typedef struct _OGRPreparedGeometry OGRPreparedGeometry;
692 int OGRHasPreparedGeometrySupport();
693 OGRPreparedGeometry* OGRCreatePreparedGeometry(
const OGRGeometry* poGeom );
694 void OGRDestroyPreparedGeometry( OGRPreparedGeometry* poPreparedGeom );
695 int OGRPreparedGeometryIntersects(
const OGRPreparedGeometry* poPreparedGeom,