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;
162 static int bGenerate_DB2_V72_BYTE_ORDER;
164 virtual void swapXY();
186 OGRPoint(
double x,
double y,
double z );
192 virtual OGRErr
exportToWkb( OGRwkbByteOrder,
unsigned char * )
const;
194 virtual OGRErr
exportToWkt(
char ** ppszDstText )
const;
199 virtual void empty();
202 virtual OGRBoolean
IsEmpty()
const;
205 double getX()
const {
return x; }
206 double getY()
const {
return y; }
207 double getZ()
const {
return z; }
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; }
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;
274 virtual OGRErr
exportToWkb( OGRwkbByteOrder,
unsigned char * )
const;
276 virtual OGRErr
exportToWkt(
char ** ppszDstText )
const;
281 virtual void empty();
284 virtual OGRBoolean
IsEmpty()
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;
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 );
361 virtual int _WkbSize(
int b3D )
const;
362 virtual OGRErr _importFromWkb( OGRwkbByteOrder,
int b3D,
363 unsigned char *,
int=-1 );
364 virtual OGRErr _exportToWkb( OGRwkbByteOrder,
int b3D,
365 unsigned char * )
const;
375 virtual int isClockwise()
const;
376 virtual void reverseWindingOrder();
379 OGRBoolean isPointInRing(
const OGRPoint* pt,
int bTestEnvelope = TRUE)
const;
380 OGRBoolean isPointOnRingBoundary(
const OGRPoint* pt,
int bTestEnvelope = TRUE)
const;
387 virtual OGRErr
exportToWkb( OGRwkbByteOrder,
unsigned char * )
const;
401 virtual double get_Area()
const = 0;
402 virtual OGRErr PointOnSurface(
OGRPoint * poPoint )
const = 0;
431 virtual void empty();
434 virtual OGRBoolean
IsEmpty()
const;
444 virtual OGRErr
exportToWkb( OGRwkbByteOrder,
unsigned char * )
const;
446 virtual OGRErr
exportToWkt(
char ** ppszDstText )
const;
464 int getNumInteriorRings()
const;
468 OGRBoolean IsPointOnSurface(
const OGRPoint * )
const;
491 OGRErr importFromWkbInternal(
unsigned char * pabyData,
int nSize,
int nRecLevel );
492 OGRErr importFromWktInternal(
char **ppszInput,
int nRecLevel );
502 virtual void empty();
505 virtual OGRBoolean
IsEmpty()
const;
511 virtual OGRErr
exportToWkb( OGRwkbByteOrder,
unsigned char * )
const;
513 virtual OGRErr
exportToWkt(
char ** ppszDstText )
const;
515 virtual double get_Length()
const;
516 virtual double get_Area()
const;
524 int getNumGeometries()
const;
534 virtual OGRErr addGeometryDirectly(
OGRGeometry * );
535 virtual OGRErr removeGeometry(
int iIndex,
int bDelete = TRUE );
581 OGRErr importFromWkt_Bracketed(
char **,
int bHasM,
int bHasZ );
631 static OGRErr createFromFgfInternal(
unsigned char *pabyData,
635 int *pnBytesConsumed,
657 int *pbResultValidGeometry,
658 const char **papszOptions = NULL);
660 static void *getGEOSGeometryFactory();
662 static int haveGEOS();
666 char** papszOptions );
669 approximateArcAngles(
double dfX,
double dfY,
double dfZ,
670 double dfPrimaryRadius,
double dfSecondaryAxis,
672 double dfStartAngle,
double dfEndAngle,
673 double dfMaxAngleStepSizeDegrees );