GDAL
ogr_geometry.h
Go to the documentation of this file.
1 /******************************************************************************
2  * $Id: ogr_geometry.h 28123 2014-12-10 19:27:55Z rouault $
3  *
4  * Project: OpenGIS Simple Features Reference Implementation
5  * Purpose: Classes for manipulating simple features that is not specific
6  * to a particular interface technology.
7  * Author: Frank Warmerdam, warmerdam@pobox.com
8  *
9  ******************************************************************************
10  * Copyright (c) 1999, Frank Warmerdam
11  * Copyright (c) 2008-2014, Even Rouault <even dot rouault at mines-paris dot org>
12  *
13  * Permission is hereby granted, free of charge, to any person obtaining a
14  * copy of this software and associated documentation files (the "Software"),
15  * to deal in the Software without restriction, including without limitation
16  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
17  * and/or sell copies of the Software, and to permit persons to whom the
18  * Software is furnished to do so, subject to the following conditions:
19  *
20  * The above copyright notice and this permission notice shall be included
21  * in all copies or substantial portions of the Software.
22  *
23  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29  * DEALINGS IN THE SOFTWARE.
30  ****************************************************************************/
31 
32 #ifndef _OGR_GEOMETRY_H_INCLUDED
33 #define _OGR_GEOMETRY_H_INCLUDED
34 
35 #include "ogr_core.h"
36 #include "ogr_spatialref.h"
37 
48 {
49  public:
50  OGRRawPoint()
51  {
52  x = y = 0.0;
53  }
54 
55  OGRRawPoint(double x, double y) : x(x), y(y) {}
56  double x;
57  double y;
58 };
59 
60 typedef struct GEOSGeom_t *GEOSGeom;
61 typedef struct GEOSContextHandle_HS *GEOSContextHandle_t;
62 
63 class OGRPoint;
64 class OGRCurve;
65 class OGRCompoundCurve;
66 class OGRLinearRing;
67 class OGRLineString;
68 class OGRSurface;
69 class OGRCurvePolygon;
70 class OGRPolygon;
71 class OGRMultiSurface;
72 class OGRMultiPolygon;
73 class OGRMultiCurve;
74 class OGRMultiLineString;
75 
76 typedef OGRLineString* (*OGRCurveCasterToLineString)(OGRCurve*);
77 typedef OGRLinearRing* (*OGRCurveCasterToLinearRing)(OGRCurve*);
78 
79 typedef OGRPolygon* (*OGRSurfaceCasterToPolygon)(OGRSurface*);
80 typedef OGRCurvePolygon* (*OGRSurfaceCasterToCurvePolygon)(OGRSurface*);
81 
82 /************************************************************************/
83 /* OGRGeometry */
84 /************************************************************************/
85 
104 class CPL_DLL OGRGeometry
105 {
106  private:
107  OGRSpatialReference * poSRS; // may be NULL
108 
109  protected:
110  friend class OGRCurveCollection;
111 
112  int nCoordDimension;
113 
114  OGRErr importPreambuleFromWkt( char ** ppszInput,
115  int* pbHasZ, int* pbHasM );
116  OGRErr importCurveCollectionFromWkt( char ** ppszInput,
117  int bAllowEmptyComponent,
118  int bAllowLineString,
119  int bAllowCurve,
120  int bAllowCompoundCurve,
121  OGRErr (*pfnAddCurveDirectly)(OGRGeometry* poSelf, OGRCurve* poCurve) );
122  OGRErr importPreambuleFromWkb( unsigned char * pabyData,
123  int nSize,
124  OGRwkbByteOrder& eByteOrder,
125  OGRBoolean& b3D,
126  OGRwkbVariant eWkbVariant );
127  OGRErr importPreambuleOfCollectionFromWkb(
128  unsigned char * pabyData,
129  int& nSize,
130  int& nDataOffset,
131  OGRwkbByteOrder& eByteOrder,
132  int nMinSubGeomSize,
133  int& nGeomCount,
134  OGRwkbVariant eWkbVariant );
135  public:
136  OGRGeometry();
137  virtual ~OGRGeometry();
138 
139  // standard IGeometry
140  virtual int getDimension() const = 0;
141  virtual int getCoordinateDimension() const;
142  virtual OGRBoolean IsEmpty() const = 0;
143  virtual OGRBoolean IsValid() const;
144  virtual OGRBoolean IsSimple() const;
145  virtual OGRBoolean IsRing() const;
146  virtual void empty() = 0;
147  virtual OGRGeometry *clone() const = 0;
148  virtual void getEnvelope( OGREnvelope * psEnvelope ) const = 0;
149  virtual void getEnvelope( OGREnvelope3D * psEnvelope ) const = 0;
150 
151  // IWks Interface
152  virtual int WkbSize() const = 0;
153  virtual OGRErr importFromWkb( unsigned char *, int=-1, OGRwkbVariant=wkbVariantOldOgc )=0;
154  virtual OGRErr exportToWkb( OGRwkbByteOrder, unsigned char *, OGRwkbVariant=wkbVariantOldOgc ) const = 0;
155  virtual OGRErr importFromWkt( char ** ppszInput ) = 0;
156  virtual OGRErr exportToWkt( char ** ppszDstText, OGRwkbVariant=wkbVariantOldOgc ) const = 0;
157 
158  // non-standard
159  virtual OGRwkbGeometryType getGeometryType() const = 0;
160  OGRwkbGeometryType getIsoGeometryType() const;
161  virtual const char *getGeometryName() const = 0;
162  virtual void dumpReadable( FILE *, const char * = NULL, char** papszOptions = NULL ) const;
163  virtual void flattenTo2D() = 0;
164  virtual char * exportToGML( const char* const * papszOptions = NULL ) const;
165  virtual char * exportToKML() const;
166  virtual char * exportToJson() const;
167 
168  static GEOSContextHandle_t createGEOSContext();
169  static void freeGEOSContext(GEOSContextHandle_t hGEOSCtxt);
170  virtual GEOSGeom exportToGEOS(GEOSContextHandle_t hGEOSCtxt) const;
171  virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear = FALSE) const;
172  virtual OGRGeometry* getCurveGeometry(const char* const* papszOptions = NULL) const;
173  virtual OGRGeometry* getLinearGeometry(double dfMaxAngleStepSizeDegrees = 0,
174  const char* const* papszOptions = NULL) const;
175 
176  virtual void closeRings();
177 
178  virtual void setCoordinateDimension( int nDimension );
179 
180  void assignSpatialReference( OGRSpatialReference * poSR );
181  OGRSpatialReference *getSpatialReference( void ) const { return poSRS; }
182 
183  virtual OGRErr transform( OGRCoordinateTransformation *poCT ) = 0;
184  OGRErr transformTo( OGRSpatialReference *poSR );
185 
186  virtual void segmentize(double dfMaxLength);
187 
188  // ISpatialRelation
189  virtual OGRBoolean Intersects( const OGRGeometry * ) const;
190  virtual OGRBoolean Equals( OGRGeometry * ) const = 0;
191  virtual OGRBoolean Disjoint( const OGRGeometry * ) const;
192  virtual OGRBoolean Touches( const OGRGeometry * ) const;
193  virtual OGRBoolean Crosses( const OGRGeometry * ) const;
194  virtual OGRBoolean Within( const OGRGeometry * ) const;
195  virtual OGRBoolean Contains( const OGRGeometry * ) const;
196  virtual OGRBoolean Overlaps( const OGRGeometry * ) const;
197 // virtual OGRBoolean Relate( const OGRGeometry *, const char * ) const;
198 
199  virtual OGRGeometry *Boundary() const;
200  virtual double Distance( const OGRGeometry * ) const;
201  virtual OGRGeometry *ConvexHull() const;
202  virtual OGRGeometry *Buffer( double dfDist, int nQuadSegs = 30 ) const;
203  virtual OGRGeometry *Intersection( const OGRGeometry *) const;
204  virtual OGRGeometry *Union( const OGRGeometry * ) const;
205  virtual OGRGeometry *UnionCascaded() const;
206  virtual OGRGeometry *Difference( const OGRGeometry * ) const;
207  virtual OGRGeometry *SymDifference( const OGRGeometry * ) const;
208  virtual OGRErr Centroid( OGRPoint * poPoint ) const;
209  virtual OGRGeometry *Simplify(double dTolerance) const;
210  OGRGeometry *SimplifyPreserveTopology(double dTolerance) const;
211 
212  virtual OGRGeometry *Polygonize() const;
213 
214  // backward compatibility to non-standard method names.
215  OGRBoolean Intersect( OGRGeometry * ) const CPL_WARN_DEPRECATED("Non standard method. Use Intersects() instead");
216  OGRBoolean Equal( OGRGeometry * ) const CPL_WARN_DEPRECATED("Non standard method. Use Equals() instead");
217  virtual OGRGeometry *SymmetricDifference( const OGRGeometry * ) const CPL_WARN_DEPRECATED("Non standard method. Use SymDifference() instead");
218  virtual OGRGeometry *getBoundary() const CPL_WARN_DEPRECATED("Non standard method. Use Boundary() instead");
219 
220  // Special HACK for DB2 7.2 support
221  static int bGenerate_DB2_V72_BYTE_ORDER;
222 
223  virtual void swapXY();
224 
225  static OGRGeometry* CastToIdentity(OGRGeometry* poGeom) { return poGeom; }
226  static OGRGeometry* CastToError(OGRGeometry* poGeom);
227 };
228 
229 /************************************************************************/
230 /* OGRPoint */
231 /************************************************************************/
232 
239 class CPL_DLL OGRPoint : public OGRGeometry
240 {
241  double x;
242  double y;
243  double z;
244 
245  public:
246  OGRPoint();
247  OGRPoint( double x, double y );
248  OGRPoint( double x, double y, double z );
249  virtual ~OGRPoint();
250 
251  // IWks Interface
252  virtual int WkbSize() const;
253  virtual OGRErr importFromWkb( unsigned char *, int=-1, OGRwkbVariant=wkbVariantOldOgc );
254  virtual OGRErr exportToWkb( OGRwkbByteOrder, unsigned char *, OGRwkbVariant=wkbVariantOldOgc ) const;
255  virtual OGRErr importFromWkt( char ** );
256  virtual OGRErr exportToWkt( char ** ppszDstText, OGRwkbVariant=wkbVariantOldOgc ) const;
257 
258  // IGeometry
259  virtual int getDimension() const;
260  virtual int getCoordinateDimension() const;
261  virtual OGRGeometry *clone() const;
262  virtual void empty();
263  virtual void getEnvelope( OGREnvelope * psEnvelope ) const;
264  virtual void getEnvelope( OGREnvelope3D * psEnvelope ) const;
265  virtual OGRBoolean IsEmpty() const;
266 
267  // IPoint
268  double getX() const { return x; }
269  double getY() const { return y; }
270  double getZ() const { return z; }
271 
272  // Non standard
273  virtual void setCoordinateDimension( int nDimension );
274  void setX( double xIn ) { x = xIn; if (nCoordDimension <= 0) nCoordDimension = 2; }
275  void setY( double yIn ) { y = yIn; if (nCoordDimension <= 0) nCoordDimension = 2; }
276  void setZ( double zIn ) { z = zIn; nCoordDimension=3; }
277 
278  // ISpatialRelation
279  virtual OGRBoolean Equals( OGRGeometry * ) const;
280  virtual OGRBoolean Intersects( const OGRGeometry * ) const;
281  virtual OGRBoolean Within( const OGRGeometry * ) const;
282 
283  // Non standard from OGRGeometry
284  virtual const char *getGeometryName() const;
285  virtual OGRwkbGeometryType getGeometryType() const;
286  virtual OGRErr transform( OGRCoordinateTransformation *poCT );
287  virtual void flattenTo2D();
288 
289  virtual void swapXY();
290 };
291 
292 /************************************************************************/
293 /* OGRPointIterator */
294 /************************************************************************/
295 
302 class CPL_DLL OGRPointIterator
303 {
304  public:
305  virtual ~OGRPointIterator();
306  virtual OGRBoolean getNextPoint(OGRPoint* p) = 0;
307 
308  static void destroy(OGRPointIterator*);
309 };
310 
311 /************************************************************************/
312 /* OGRCurve */
313 /************************************************************************/
314 
320 class CPL_DLL OGRCurve : public OGRGeometry
321 {
322  protected:
323  OGRCurve();
324 
325  virtual OGRCurveCasterToLineString GetCasterToLineString() const = 0;
326  virtual OGRCurveCasterToLinearRing GetCasterToLinearRing() const = 0;
327 
328  friend class OGRCurvePolygon;
329  friend class OGRCompoundCurve;
330  virtual int ContainsPoint( const OGRPoint* p ) const;
331  virtual double get_AreaOfCurveSegments() const = 0;
332 
333  public:
334  virtual ~OGRCurve();
335 
336  // ICurve methods
337  virtual double get_Length() const = 0;
338  virtual void StartPoint(OGRPoint *) const = 0;
339  virtual void EndPoint(OGRPoint *) const = 0;
340  virtual int get_IsClosed() const;
341  virtual void Value( double, OGRPoint * ) const = 0;
342  virtual OGRLineString* CurveToLine(double dfMaxAngleStepSizeDegrees = 0,
343  const char* const* papszOptions = NULL) const = 0;
344  virtual int getDimension() const;
345 
346  // non standard
347  virtual int getNumPoints() const = 0;
348  virtual OGRPointIterator* getPointIterator() const = 0;
349  virtual OGRBoolean IsConvex() const;
350  virtual double get_Area() const = 0;
351 
353  static OGRLineString* CastToLineString(OGRCurve* poCurve);
354  static OGRLinearRing* CastToLinearRing(OGRCurve* poCurve);
355 };
356 
357 /************************************************************************/
358 /* OGRSimpleCurve */
359 /************************************************************************/
360 
370 class CPL_DLL OGRSimpleCurve: public OGRCurve
371 {
372  protected:
373  friend class OGRGeometry;
374 
375  int nPointCount;
376  OGRRawPoint *paoPoints;
377  double *padfZ;
378 
379  void Make3D();
380  void Make2D();
381 
382  OGRErr importFromWKTListOnly( char ** ppszInput, int bHasZ, int bHasM,
383  OGRRawPoint*& paoPointsIn, int& nMaxPoints,
384  double*& padfZIn );
385 
386  virtual double get_LinearArea() const;
387 
388  OGRSimpleCurve();
389 
390  public:
391  virtual ~OGRSimpleCurve();
392 
393  // IWks Interface
394  virtual int WkbSize() const;
395  virtual OGRErr importFromWkb( unsigned char *, int = -1, OGRwkbVariant=wkbVariantOldOgc );
396  virtual OGRErr exportToWkb( OGRwkbByteOrder, unsigned char *, OGRwkbVariant=wkbVariantOldOgc ) const;
397  virtual OGRErr importFromWkt( char ** );
398  virtual OGRErr exportToWkt( char ** ppszDstText, OGRwkbVariant=wkbVariantOldOgc ) const;
399 
400  // IGeometry interface
401  virtual OGRGeometry *clone() const;
402  virtual void empty();
403  virtual void getEnvelope( OGREnvelope * psEnvelope ) const;
404  virtual void getEnvelope( OGREnvelope3D * psEnvelope ) const;
405  virtual OGRBoolean IsEmpty() const;
406 
407  // ICurve methods
408  virtual double get_Length() const;
409  virtual void StartPoint(OGRPoint *) const;
410  virtual void EndPoint(OGRPoint *) const;
411  virtual void Value( double, OGRPoint * ) const;
412  virtual double Project(const OGRPoint *) const;
413  virtual OGRLineString* getSubLine(double, double, int) const;
414 
415  // ILineString methods
416  virtual int getNumPoints() const { return nPointCount; }
417  void getPoint( int, OGRPoint * ) const;
418  double getX( int i ) const { return paoPoints[i].x; }
419  double getY( int i ) const { return paoPoints[i].y; }
420  double getZ( int i ) const;
421 
422  // ISpatialRelation
423  virtual OGRBoolean Equals( OGRGeometry * ) const;
424 
425  // non standard.
426  virtual void setCoordinateDimension( int nDimension );
427  void setNumPoints( int nNewPointCount, int bZeroizeNewContent = TRUE );
428  void setPoint( int, OGRPoint * );
429  void setPoint( int, double, double );
430  void setZ( int, double );
431  void setPoint( int, double, double, double );
432  void setPoints( int, OGRRawPoint *, double * = NULL );
433  void setPoints( int, double * padfX, double * padfY,
434  double *padfZIn = NULL );
435  void addPoint( OGRPoint * );
436  void addPoint( double, double );
437  void addPoint( double, double, double );
438 
439  void getPoints( OGRRawPoint *, double * = NULL ) const;
440  void getPoints( void* pabyX, int nXStride,
441  void* pabyY, int nYStride,
442  void* pabyZ = NULL, int nZStride = 0 ) const;
443 
444  void addSubLineString( const OGRLineString *,
445  int nStartVertex = 0, int nEndVertex = -1 );
446  void reversePoints( void );
447  virtual OGRPointIterator* getPointIterator() const;
448 
449  // non-standard from OGRGeometry
450  virtual OGRErr transform( OGRCoordinateTransformation *poCT );
451  virtual void flattenTo2D();
452  virtual void segmentize(double dfMaxLength);
453 
454  virtual void swapXY();
455 };
456 
457 /************************************************************************/
458 /* OGRLineString */
459 /************************************************************************/
460 
468 class CPL_DLL OGRLineString : public OGRSimpleCurve
469 {
470  protected:
471  static OGRLineString* TransferMembersAndDestroy(
472  OGRLineString* poSrc,
473  OGRLineString* poDst);
474 
476 
477  virtual OGRCurveCasterToLineString GetCasterToLineString() const;
478  virtual OGRCurveCasterToLinearRing GetCasterToLinearRing() const;
479 
480  virtual double get_AreaOfCurveSegments() const;
481 
482  public:
483  OGRLineString();
484  virtual ~OGRLineString();
485 
486  virtual OGRLineString* CurveToLine(double dfMaxAngleStepSizeDegrees = 0,
487  const char* const* papszOptions = NULL) const;
488  virtual OGRGeometry* getCurveGeometry(const char* const* papszOptions = NULL) const;
489  virtual double get_Area() const;
490 
491  // non-standard from OGRGeometry
492  virtual OGRwkbGeometryType getGeometryType() const;
493  virtual const char *getGeometryName() const;
494 };
495 
496 /************************************************************************/
497 /* OGRLinearRing */
498 /************************************************************************/
499 
520 class CPL_DLL OGRLinearRing : public OGRLineString
521 {
522  protected:
523  friend class OGRPolygon;
524 
525  // These are not IWks compatible ... just a convenience for OGRPolygon.
526  virtual int _WkbSize( int b3D ) const;
527  virtual OGRErr _importFromWkb( OGRwkbByteOrder, int b3D,
528  unsigned char *, int=-1 );
529  virtual OGRErr _exportToWkb( OGRwkbByteOrder, int b3D,
530  unsigned char * ) const;
531 
533 
534  virtual OGRCurveCasterToLineString GetCasterToLineString() const;
535  virtual OGRCurveCasterToLinearRing GetCasterToLinearRing() const;
536 
537  public:
538  OGRLinearRing();
540  virtual ~OGRLinearRing();
541 
542  // Non standard.
543  virtual const char *getGeometryName() const;
544  virtual OGRGeometry *clone() const;
545  virtual int isClockwise() const;
546  virtual void reverseWindingOrder();
547  virtual void closeRings();
548  OGRBoolean isPointInRing(const OGRPoint* pt, int bTestEnvelope = TRUE) const;
549  OGRBoolean isPointOnRingBoundary(const OGRPoint* pt, int bTestEnvelope = TRUE) const;
550 
551  // IWks Interface - Note this isnt really a first class object
552  // for the purposes of WKB form. These methods always fail since this
553  // object cant be serialized on its own.
554  virtual int WkbSize() const;
555  virtual OGRErr importFromWkb( unsigned char *, int=-1, OGRwkbVariant=wkbVariantOldOgc );
556  virtual OGRErr exportToWkb( OGRwkbByteOrder, unsigned char *, OGRwkbVariant=wkbVariantOldOgc ) const;
557 };
558 
559 /************************************************************************/
560 /* OGRCircularString */
561 /************************************************************************/
562 
575 class CPL_DLL OGRCircularString : public OGRSimpleCurve
576 {
577  private:
578  void ExtendEnvelopeWithCircular( OGREnvelope * psEnvelope ) const;
579  OGRBoolean IsValidFast() const;
580  int IsFullCircle( double& cx, double& cy, double& square_R ) const;
581 
582  protected:
583  virtual OGRCurveCasterToLineString GetCasterToLineString() const;
584  virtual OGRCurveCasterToLinearRing GetCasterToLinearRing() const;
585  virtual int ContainsPoint( const OGRPoint* p ) const;
586  virtual double get_AreaOfCurveSegments() const;
587 
588  public:
590  virtual ~OGRCircularString();
591 
592  // IWks Interface
593  virtual OGRErr importFromWkb( unsigned char *, int = -1, OGRwkbVariant=wkbVariantOldOgc );
594  virtual OGRErr exportToWkb( OGRwkbByteOrder, unsigned char *, OGRwkbVariant=wkbVariantOldOgc ) const;
595  virtual OGRErr importFromWkt( char ** );
596  virtual OGRErr exportToWkt( char ** ppszDstText, OGRwkbVariant=wkbVariantOldOgc ) const;
597 
598  // IGeometry interface
599  virtual OGRBoolean IsValid() const;
600  virtual void getEnvelope( OGREnvelope * psEnvelope ) const;
601  virtual void getEnvelope( OGREnvelope3D * psEnvelope ) const;
602 
603  // ICurve methods
604  virtual double get_Length() const;
605  virtual OGRLineString* CurveToLine(double dfMaxAngleStepSizeDegrees = 0,
606  const char* const* papszOptions = NULL) const;
607  virtual void Value( double, OGRPoint * ) const;
608  virtual double get_Area() const;
609 
610  // non-standard from OGRGeometry
611  virtual OGRwkbGeometryType getGeometryType() const;
612  virtual const char *getGeometryName() const;
613  virtual void segmentize(double dfMaxLength);
614  virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear = FALSE) const;
615  virtual OGRGeometry* getLinearGeometry(double dfMaxAngleStepSizeDegrees = 0,
616  const char* const* papszOptions = NULL) const;
617 };
618 
619 /************************************************************************/
620 /* OGRCurveCollection */
621 /************************************************************************/
622 
633 class CPL_DLL OGRCurveCollection
634 {
635  protected:
636  friend class OGRCompoundCurve;
637  friend class OGRCurvePolygon;
638  friend class OGRPolygon;
639 
640  int nCurveCount;
641  OGRCurve **papoCurves;
642 
643  public:
646 
647  void empty(OGRGeometry* poGeom);
648  OGRBoolean IsEmpty() const;
649  void getEnvelope( OGREnvelope * psEnvelope ) const;
650  void getEnvelope( OGREnvelope3D * psEnvelope ) const;
651 
652  OGRErr addCurveDirectly( OGRGeometry* poGeom, OGRCurve* poCurve,
653  int bNeedRealloc );
654  int WkbSize() const;
655  OGRErr importPreambuleFromWkb( OGRGeometry* poGeom,
656  unsigned char * pabyData,
657  int& nSize,
658  int& nDataOffset,
659  OGRwkbByteOrder& eByteOrder,
660  int nMinSubGeomSize,
661  OGRwkbVariant eWkVariant );
662  OGRErr importBodyFromWkb( OGRGeometry* poGeom,
663  unsigned char * pabyData,
664  int nSize,
665  int nDataOffset,
666  int bAcceptCompoundCurve,
667  OGRErr (*pfnAddCurveDirectlyFromWkb)(OGRGeometry* poGeom, OGRCurve* poCurve),
668  OGRwkbVariant eWkVariant );
669  OGRErr exportToWkt( const OGRGeometry* poGeom, char ** ppszDstText ) const;
670  OGRErr exportToWkb( const OGRGeometry* poGeom, OGRwkbByteOrder,
671  unsigned char *, OGRwkbVariant eWkbVariant ) const;
672  OGRBoolean Equals(OGRCurveCollection *poOCC) const;
673  void setCoordinateDimension( OGRGeometry* poGeom, int nNewDimension );
674  int getNumCurves() const;
675  OGRCurve *getCurve( int );
676  const OGRCurve *getCurve( int ) const;
677  OGRCurve *stealCurve( int );
678  OGRErr transform( OGRGeometry* poGeom,
680  void flattenTo2D(OGRGeometry* poGeom);
681  void segmentize(double dfMaxLength);
682  void swapXY();
683  OGRBoolean hasCurveGeometry(int bLookForNonLinear) const;
684 };
685 
686 /************************************************************************/
687 /* OGRCompoundCurve */
688 /************************************************************************/
689 
700 class CPL_DLL OGRCompoundCurve : public OGRCurve
701 {
702  private:
703  OGRCurveCollection oCC;
704 
705  OGRErr addCurveDirectlyInternal( OGRCurve* poCurve,
706  double dfToleranceEps,
707  int bNeedRealloc );
708  static OGRErr addCurveDirectlyFromWkt( OGRGeometry* poSelf, OGRCurve* poCurve );
709  static OGRErr addCurveDirectlyFromWkb( OGRGeometry* poSelf, OGRCurve* poCurve );
710  OGRLineString* CurveToLineInternal(double dfMaxAngleStepSizeDegrees,
711  const char* const* papszOptions,
712  int bIsLinearRing) const;
713 
714  protected:
717 
718  virtual OGRCurveCasterToLineString GetCasterToLineString() const;
719  virtual OGRCurveCasterToLinearRing GetCasterToLinearRing() const;
720 
721  public:
723  virtual ~OGRCompoundCurve();
724 
725  // IWks Interface
726  virtual int WkbSize() const;
727  virtual OGRErr importFromWkb( unsigned char *, int = -1, OGRwkbVariant=wkbVariantOldOgc );
728  virtual OGRErr exportToWkb( OGRwkbByteOrder, unsigned char *, OGRwkbVariant=wkbVariantOldOgc ) const;
729  virtual OGRErr importFromWkt( char ** );
730  virtual OGRErr exportToWkt( char ** ppszDstText, OGRwkbVariant=wkbVariantOldOgc ) const;
731 
732  // IGeometry interface
733  virtual OGRGeometry *clone() const;
734  virtual void empty();
735  virtual void getEnvelope( OGREnvelope * psEnvelope ) const;
736  virtual void getEnvelope( OGREnvelope3D * psEnvelope ) const;
737  virtual OGRBoolean IsEmpty() const;
738 
739  // ICurve methods
740  virtual double get_Length() const;
741  virtual void StartPoint(OGRPoint *) const;
742  virtual void EndPoint(OGRPoint *) const;
743  virtual void Value( double, OGRPoint * ) const;
744  virtual OGRLineString* CurveToLine(double dfMaxAngleStepSizeDegrees = 0,
745  const char* const* papszOptions = NULL) const;
746 
747  virtual int getNumPoints() const;
748  virtual double get_AreaOfCurveSegments() const;
749  virtual double get_Area() const;
750 
751  // ISpatialRelation
752  virtual OGRBoolean Equals( OGRGeometry * ) const;
753 
754  // ICompoundCurve method
755  int getNumCurves() const;
756  OGRCurve *getCurve( int );
757  const OGRCurve *getCurve( int ) const;
758 
759  // non standard.
760  virtual void setCoordinateDimension( int nDimension );
761 
762  OGRErr addCurve( OGRCurve*, double dfToleranceEps = 1e-14 );
763  OGRErr addCurveDirectly( OGRCurve*, double dfToleranceEps = 1e-14 );
764  OGRCurve *stealCurve( int );
765  virtual OGRPointIterator* getPointIterator() const;
766 
767  // non-standard from OGRGeometry
768  virtual OGRwkbGeometryType getGeometryType() const;
769  virtual const char *getGeometryName() const;
770  virtual OGRErr transform( OGRCoordinateTransformation *poCT );
771  virtual void flattenTo2D();
772  virtual void segmentize(double dfMaxLength);
773  virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear = FALSE) const;
774  virtual OGRGeometry* getLinearGeometry(double dfMaxAngleStepSizeDegrees = 0,
775  const char* const* papszOptions = NULL) const;
776 
777  virtual void swapXY();
778 };
779 
780 /************************************************************************/
781 /* OGRSurface */
782 /************************************************************************/
783 
788 class CPL_DLL OGRSurface : public OGRGeometry
789 {
790  protected:
791 
792  virtual OGRSurfaceCasterToPolygon GetCasterToPolygon() const = 0;
793  virtual OGRSurfaceCasterToCurvePolygon GetCasterToCurvePolygon() const = 0;
794 
795  public:
796  virtual double get_Area() const = 0;
797  virtual OGRErr PointOnSurface( OGRPoint * poPoint ) const = 0;
798 
799  static OGRPolygon* CastToPolygon(OGRSurface* poSurface);
800  static OGRCurvePolygon* CastToCurvePolygon(OGRSurface* poSurface);
801 };
802 
803 
804 /************************************************************************/
805 /* OGRCurvePolygon */
806 /************************************************************************/
807 
821 class CPL_DLL OGRCurvePolygon : public OGRSurface
822 {
823  private:
824  OGRBoolean ContainsPoint( const OGRPoint* p ) const;
825  virtual int checkRing( OGRCurve * poNewRing ) const;
826  OGRErr addRingDirectlyInternal( OGRCurve* poCurve, int bNeedRealloc );
827  static OGRErr addCurveDirectlyFromWkt( OGRGeometry* poSelf, OGRCurve* poCurve );
828  static OGRErr addCurveDirectlyFromWkb( OGRGeometry* poSelf, OGRCurve* poCurve );
829 
830  protected:
831  friend class OGRPolygon;
832  OGRCurveCollection oCC;
833 
835 
836  virtual OGRSurfaceCasterToPolygon GetCasterToPolygon() const;
837  virtual OGRSurfaceCasterToCurvePolygon GetCasterToCurvePolygon() const;
838 
839  public:
840  OGRCurvePolygon();
841  virtual ~OGRCurvePolygon();
842 
843  // Non standard (OGRGeometry).
844  virtual const char *getGeometryName() const;
845  virtual OGRwkbGeometryType getGeometryType() const;
846  virtual OGRGeometry *clone() const;
847  virtual void empty();
848  virtual OGRErr transform( OGRCoordinateTransformation *poCT );
849  virtual void flattenTo2D();
850  virtual OGRBoolean IsEmpty() const;
851  virtual void segmentize(double dfMaxLength);
852  virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear = FALSE) const;
853  virtual OGRGeometry* getLinearGeometry(double dfMaxAngleStepSizeDegrees = 0,
854  const char* const* papszOptions = NULL) const;
855 
856  // ISurface Interface
857  virtual double get_Area() const;
858  virtual int PointOnSurface( OGRPoint * poPoint ) const;
859 
860  // IWks Interface
861  virtual int WkbSize() const;
862  virtual OGRErr importFromWkb( unsigned char *, int = -1, OGRwkbVariant=wkbVariantOldOgc );
863  virtual OGRErr exportToWkb( OGRwkbByteOrder, unsigned char *, OGRwkbVariant=wkbVariantOldOgc ) const;
864  virtual OGRErr importFromWkt( char ** );
865  virtual OGRErr exportToWkt( char ** ppszDstText, OGRwkbVariant eWkbVariant = wkbVariantOldOgc ) const;
866 
867  // IGeometry
868  virtual int getDimension() const;
869  virtual void getEnvelope( OGREnvelope * psEnvelope ) const;
870  virtual void getEnvelope( OGREnvelope3D * psEnvelope ) const;
871 
872  // ICurvePolygon
873  virtual OGRPolygon* CurvePolyToPoly(double dfMaxAngleStepSizeDegrees = 0,
874  const char* const* papszOptions = NULL) const;
875 
876  // ISpatialRelation
877  virtual OGRBoolean Equals( OGRGeometry * ) const;
878  virtual OGRBoolean Intersects( const OGRGeometry * ) const;
879  virtual OGRBoolean Contains( const OGRGeometry * ) const;
880 
881  // Non standard
882  virtual void setCoordinateDimension( int nDimension );
883 
884  OGRErr addRing( OGRCurve * );
885  OGRErr addRingDirectly( OGRCurve * );
886 
888  const OGRCurve *getExteriorRingCurve() const;
889  int getNumInteriorRings() const;
891  const OGRCurve *getInteriorRingCurve( int ) const;
892 
894 
895  virtual void swapXY();
896 };
897 
898 /************************************************************************/
899 /* OGRPolygon */
900 /************************************************************************/
901 
911 class CPL_DLL OGRPolygon : public OGRCurvePolygon
912 {
913  protected:
914  friend class OGRMultiSurface;
915 
916  virtual int checkRing( OGRCurve * poNewRing ) const;
917  OGRErr importFromWKTListOnly( char ** ppszInput, int bHasZ, int bHasM,
918  OGRRawPoint*& paoPoints, int& nMaxPoints,
919  double*& padfZ );
920 
922 
923  virtual OGRSurfaceCasterToPolygon GetCasterToPolygon() const;
924  virtual OGRSurfaceCasterToCurvePolygon GetCasterToCurvePolygon() const;
925 
926  public:
927  OGRPolygon();
928  virtual ~OGRPolygon();
929 
930  // Non standard (OGRGeometry).
931  virtual const char *getGeometryName() const;
932  virtual OGRwkbGeometryType getGeometryType() const;
933  virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear = FALSE) const;
934  virtual OGRGeometry* getCurveGeometry(const char* const* papszOptions = NULL) const;
935  virtual OGRGeometry* getLinearGeometry(double dfMaxAngleStepSizeDegrees = 0,
936  const char* const* papszOptions = NULL) const;
937 
938  // ISurface Interface
939  virtual int PointOnSurface( OGRPoint * poPoint ) const;
940 
941  // IWks Interface
942  virtual int WkbSize() const;
943  virtual OGRErr importFromWkb( unsigned char *, int = -1, OGRwkbVariant=wkbVariantOldOgc );
944  virtual OGRErr exportToWkb( OGRwkbByteOrder, unsigned char *, OGRwkbVariant=wkbVariantOldOgc ) const;
945  virtual OGRErr importFromWkt( char ** );
946  virtual OGRErr exportToWkt( char ** ppszDstText, OGRwkbVariant=wkbVariantOldOgc ) const;
947 
948  // ICurvePolygon
949  virtual OGRPolygon* CurvePolyToPoly(double dfMaxAngleStepSizeDegrees = 0,
950  const char* const* papszOptions = NULL) const;
951 
952  OGRLinearRing *getExteriorRing();
953  const OGRLinearRing *getExteriorRing() const;
954  OGRLinearRing *getInteriorRing( int );
955  const OGRLinearRing *getInteriorRing( int ) const;
956 
957  OGRLinearRing *stealExteriorRing();
958  OGRLinearRing *stealInteriorRing(int);
959 
960  OGRBoolean IsPointOnSurface( const OGRPoint * ) const;
961 
962  virtual void closeRings();
963 };
964 
965 /************************************************************************/
966 /* OGRGeometryCollection */
967 /************************************************************************/
968 
976 class CPL_DLL OGRGeometryCollection : public OGRGeometry
977 {
978  OGRErr importFromWkbInternal( unsigned char * pabyData, int nSize, int nRecLevel,
979  OGRwkbVariant );
980  OGRErr importFromWktInternal( char **ppszInput, int nRecLevel );
981 
982  protected:
983  int nGeomCount;
984  OGRGeometry **papoGeoms;
985 
986  OGRErr exportToWktInternal( char ** ppszDstText,
987  OGRwkbVariant eWkbVariant,
988  const char* pszSkipPrefix ) const;
989  virtual OGRBoolean isCompatibleSubType( OGRwkbGeometryType ) const;
990 
991  static OGRGeometryCollection* TransferMembersAndDestroy(OGRGeometryCollection* poSrc,
992  OGRGeometryCollection* poDst);
993 
994  public:
996  virtual ~OGRGeometryCollection();
997 
998  // Non standard (OGRGeometry).
999  virtual const char *getGeometryName() const;
1000  virtual OGRwkbGeometryType getGeometryType() const;
1001  virtual OGRGeometry *clone() const;
1002  virtual void empty();
1003  virtual OGRErr transform( OGRCoordinateTransformation *poCT );
1004  virtual void flattenTo2D();
1005  virtual OGRBoolean IsEmpty() const;
1006  virtual void segmentize(double dfMaxLength);
1007  virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear = FALSE) const;
1008  virtual OGRGeometry* getCurveGeometry(const char* const* papszOptions = NULL) const;
1009  virtual OGRGeometry* getLinearGeometry(double dfMaxAngleStepSizeDegrees = 0, const char* const* papszOptions = NULL) const;
1010 
1011  // IWks Interface
1012  virtual int WkbSize() const;
1013  virtual OGRErr importFromWkb( unsigned char *, int = -1, OGRwkbVariant=wkbVariantOldOgc );
1014  virtual OGRErr exportToWkb( OGRwkbByteOrder, unsigned char *, OGRwkbVariant=wkbVariantOldOgc ) const;
1015  virtual OGRErr importFromWkt( char ** );
1016  virtual OGRErr exportToWkt( char ** ppszDstText, OGRwkbVariant=wkbVariantOldOgc ) const;
1017 
1018  virtual double get_Length() const;
1019  virtual double get_Area() const;
1020 
1021  // IGeometry methods
1022  virtual int getDimension() const;
1023  virtual void getEnvelope( OGREnvelope * psEnvelope ) const;
1024  virtual void getEnvelope( OGREnvelope3D * psEnvelope ) const;
1025 
1026  // IGeometryCollection
1027  int getNumGeometries() const;
1028  OGRGeometry *getGeometryRef( int );
1029  const OGRGeometry *getGeometryRef( int ) const;
1030 
1031  // ISpatialRelation
1032  virtual OGRBoolean Equals( OGRGeometry * ) const;
1033 
1034  // Non standard
1035  virtual void setCoordinateDimension( int nDimension );
1036  virtual OGRErr addGeometry( const OGRGeometry * );
1037  virtual OGRErr addGeometryDirectly( OGRGeometry * );
1038  virtual OGRErr removeGeometry( int iIndex, int bDelete = TRUE );
1039 
1040  void closeRings();
1041 
1042  virtual void swapXY();
1043 };
1044 
1045 /************************************************************************/
1046 /* OGRMultiSurface */
1047 /************************************************************************/
1048 
1056 {
1057  protected:
1058  virtual OGRBoolean isCompatibleSubType( OGRwkbGeometryType ) const;
1059 
1060  public:
1061  OGRMultiSurface();
1062  virtual ~OGRMultiSurface();
1063 
1064  // Non standard (OGRGeometry).
1065  virtual const char *getGeometryName() const;
1066  virtual OGRwkbGeometryType getGeometryType() const;
1067  virtual OGRErr importFromWkt( char ** );
1068  virtual OGRErr exportToWkt( char **, OGRwkbVariant=wkbVariantOldOgc ) const;
1069 
1070  // IMultiSurface methods
1071  virtual OGRErr PointOnSurface( OGRPoint * poPoint ) const;
1072 
1073  // IGeometry methods
1074  virtual int getDimension() const;
1075 
1076  // Non standard
1077  virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear = FALSE) const;
1078 
1079  static OGRMultiPolygon* CastToMultiPolygon(OGRMultiSurface* poMS);
1080 };
1081 
1082 /************************************************************************/
1083 /* OGRMultiPolygon */
1084 /************************************************************************/
1085 
1090 class CPL_DLL OGRMultiPolygon : public OGRMultiSurface
1091 {
1092  protected:
1093  virtual OGRBoolean isCompatibleSubType( OGRwkbGeometryType ) const;
1094 
1095  public:
1096  OGRMultiPolygon();
1097  virtual ~OGRMultiPolygon();
1098 
1099  // Non standard (OGRGeometry).
1100  virtual const char *getGeometryName() const;
1101  virtual OGRwkbGeometryType getGeometryType() const;
1102  virtual OGRErr exportToWkt( char **, OGRwkbVariant=wkbVariantOldOgc ) const;
1103 
1104  // IMultiSurface methods
1105  virtual OGRErr PointOnSurface( OGRPoint * poPoint ) const;
1106 
1107  // Non standard
1108  virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear = FALSE) const;
1109 
1110  static OGRMultiSurface* CastToMultiSurface(OGRMultiPolygon* poMP);
1111 };
1112 
1113 /************************************************************************/
1114 /* OGRMultiPoint */
1115 /************************************************************************/
1116 
1121 class CPL_DLL OGRMultiPoint : public OGRGeometryCollection
1122 {
1123  private:
1124  OGRErr importFromWkt_Bracketed( char **, int bHasM, int bHasZ );
1125 
1126  protected:
1127  virtual OGRBoolean isCompatibleSubType( OGRwkbGeometryType ) const;
1128 
1129  public:
1130  OGRMultiPoint();
1131  virtual ~OGRMultiPoint();
1132 
1133  // Non standard (OGRGeometry).
1134  virtual const char *getGeometryName() const;
1135  virtual OGRwkbGeometryType getGeometryType() const;
1136  virtual OGRErr importFromWkt( char ** );
1137  virtual OGRErr exportToWkt( char **, OGRwkbVariant=wkbVariantOldOgc ) const;
1138 
1139  // IGeometry methods
1140  virtual int getDimension() const;
1141 
1142  // Non standard
1143  virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear = FALSE) const;
1144 };
1145 
1146 /************************************************************************/
1147 /* OGRMultiCurve */
1148 /************************************************************************/
1149 
1156 class CPL_DLL OGRMultiCurve : public OGRGeometryCollection
1157 {
1158  protected:
1159  static OGRErr addCurveDirectlyFromWkt( OGRGeometry* poSelf, OGRCurve* poCurve );
1160  virtual OGRBoolean isCompatibleSubType( OGRwkbGeometryType ) const;
1161 
1162  public:
1163  OGRMultiCurve();
1164  virtual ~OGRMultiCurve();
1165 
1166  // Non standard (OGRGeometry).
1167  virtual const char *getGeometryName() const;
1168  virtual OGRwkbGeometryType getGeometryType() const;
1169  virtual OGRErr importFromWkt( char ** );
1170  virtual OGRErr exportToWkt( char **, OGRwkbVariant=wkbVariantOldOgc ) const;
1171 
1172  // IGeometry methods
1173  virtual int getDimension() const;
1174 
1175  // Non standard
1176  virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear = FALSE) const;
1177 
1178  static OGRMultiLineString* CastToMultiLineString(OGRMultiCurve* poMC);
1179 };
1180 
1181 /************************************************************************/
1182 /* OGRMultiLineString */
1183 /************************************************************************/
1184 
1189 class CPL_DLL OGRMultiLineString : public OGRMultiCurve
1190 {
1191  protected:
1192  virtual OGRBoolean isCompatibleSubType( OGRwkbGeometryType ) const;
1193 
1194  public:
1196  virtual ~OGRMultiLineString();
1197 
1198  // Non standard (OGRGeometry).
1199  virtual const char *getGeometryName() const;
1200  virtual OGRwkbGeometryType getGeometryType() const;
1201  virtual OGRErr exportToWkt( char **, OGRwkbVariant=wkbVariantOldOgc ) const;
1202 
1203  // Non standard
1204  virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear = FALSE) const;
1205 
1206  static OGRMultiCurve* CastToMultiCurve(OGRMultiLineString* poMLS);
1207 };
1208 
1209 
1210 /************************************************************************/
1211 /* OGRGeometryFactory */
1212 /************************************************************************/
1213 
1218 class CPL_DLL OGRGeometryFactory
1219 {
1220  static OGRErr createFromFgfInternal( unsigned char *pabyData,
1221  OGRSpatialReference * poSR,
1222  OGRGeometry **ppoReturn,
1223  int nBytes,
1224  int *pnBytesConsumed,
1225  int nRecLevel );
1226  public:
1227  static OGRErr createFromWkb( unsigned char *, OGRSpatialReference *,
1228  OGRGeometry **, int = -1, OGRwkbVariant=wkbVariantOldOgc );
1229  static OGRErr createFromWkt( char **, OGRSpatialReference *,
1230  OGRGeometry ** );
1231  static OGRErr createFromFgf( unsigned char *, OGRSpatialReference *,
1232  OGRGeometry **, int = -1, int * = NULL );
1233  static OGRGeometry *createFromGML( const char * );
1234  static OGRGeometry *createFromGEOS( GEOSContextHandle_t hGEOSCtxt, GEOSGeom );
1235 
1236  static void destroyGeometry( OGRGeometry * );
1237  static OGRGeometry *createGeometry( OGRwkbGeometryType );
1238 
1239  static OGRGeometry * forceToPolygon( OGRGeometry * );
1240  static OGRGeometry * forceToLineString( OGRGeometry *, bool bOnlyInOrder = true );
1241  static OGRGeometry * forceToMultiPolygon( OGRGeometry * );
1242  static OGRGeometry * forceToMultiPoint( OGRGeometry * );
1243  static OGRGeometry * forceToMultiLineString( OGRGeometry * );
1244 
1245  static OGRGeometry * forceTo( OGRGeometry* poGeom,
1246  OGRwkbGeometryType eTargetType,
1247  const char*const* papszOptions = NULL );
1248 
1249  static OGRGeometry * organizePolygons( OGRGeometry **papoPolygons,
1250  int nPolygonCount,
1251  int *pbResultValidGeometry,
1252  const char **papszOptions = NULL);
1253  static int haveGEOS();
1254 
1255  static OGRGeometry* transformWithOptions( const OGRGeometry* poSrcGeom,
1257  char** papszOptions );
1258 
1259  static OGRGeometry*
1260  approximateArcAngles( double dfX, double dfY, double dfZ,
1261  double dfPrimaryRadius, double dfSecondaryAxis,
1262  double dfRotation,
1263  double dfStartAngle, double dfEndAngle,
1264  double dfMaxAngleStepSizeDegrees );
1265 
1266  static int GetCurveParmeters(double x0, double y0,
1267  double x1, double y1,
1268  double x2, double y2,
1269  double& R, double& cx, double& cy,
1270  double& alpha0, double& alpha1, double& alpha2 );
1271  static OGRLineString* curveToLineString( double x0, double y0, double z0,
1272  double x1, double y1, double z1,
1273  double x2, double y2, double z2,
1274  int bHasZ,
1275  double dfMaxAngleStepSizeDegrees,
1276  const char*const* papszOptions = NULL );
1277  static OGRCurve* curveFromLineString(const OGRLineString* poLS,
1278  const char*const* papszOptions = NULL);
1279 };
1280 
1281 OGRwkbGeometryType CPL_DLL OGRFromOGCGeomType( const char *pszGeomType );
1282 const char CPL_DLL * OGRToOGCGeomType( OGRwkbGeometryType eGeomType );
1283 
1284 /* Prepared geometry API (needs GEOS >= 3.1.0) */
1285 typedef struct _OGRPreparedGeometry OGRPreparedGeometry;
1286 int OGRHasPreparedGeometrySupport();
1287 OGRPreparedGeometry* OGRCreatePreparedGeometry( const OGRGeometry* poGeom );
1288 void OGRDestroyPreparedGeometry( OGRPreparedGeometry* poPreparedGeom );
1289 int OGRPreparedGeometryIntersects( const OGRPreparedGeometry* poPreparedGeom,
1290  const OGRGeometry* poOtherGeom );
1291 
1292 #endif /* ndef _OGR_GEOMETRY_H_INCLUDED */
virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear=FALSE) const
Returns if this geometry is or has curve geometry.
Definition: ogrgeometrycollection.cpp:1075
virtual double get_Area() const
Get the area of the (closed) curve.
Definition: ogrcompoundcurve.cpp:752
virtual void Value(double, OGRPoint *) const =0
Fetch point at given distance along curve.
virtual OGRPointIterator * getPointIterator() const
Returns a point iterator over the curve.
Definition: ogrcompoundcurve.cpp:654
virtual void Value(double, OGRPoint *) const
Fetch point at given distance along curve.
Definition: ogrlinestring.cpp:1162
virtual void closeRings()
Force rings to be closed.
Definition: ogrgeometry.cpp:3929
virtual OGRwkbGeometryType getGeometryType() const =0
Fetch geometry type.
virtual int WkbSize() const
Returns size of related binary representation.
Definition: ogrcurvepolygon.cpp:335
virtual void setCoordinateDimension(int nDimension)
Set the coordinate dimension.
Definition: ogrgeometry.cpp:764
Concrete representation of a multi-vertex line.
Definition: ogr_geometry.h:468
virtual OGRErr importFromWkt(char **ppszInput)=0
Assign geometry from well known text data.
virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear=FALSE) const
Returns if this geometry is or has curve geometry.
Definition: ogrgeometry.cpp:2385
double getY() const
Fetch Y coordinate.
Definition: ogr_geometry.h:269
virtual OGRGeometry * clone() const =0
Make a copy of this object.
virtual void swapXY()
Swap x and y coordinates.
Definition: ogrgeometry.cpp:4508
virtual void segmentize(double dfMaxLength)
Modify the geometry such it has no segment longer then the given distance.
Definition: ogrcurvepolygon.cpp:600
virtual OGRErr exportToWkt(char **, OGRwkbVariant=wkbVariantOldOgc) const
Convert a geometry into well known text format.
Definition: ogrmulticurve.cpp:129
Create geometry objects from well known text/binary.
Definition: ogr_geometry.h:1218
virtual void StartPoint(OGRPoint *) const
Return the curve start point.
Definition: ogrcompoundcurve.cpp:238
virtual const char * getGeometryName() const =0
Fetch WKT name for geometry type.
virtual OGRErr exportToWkb(OGRwkbByteOrder, unsigned char *, OGRwkbVariant=wkbVariantOldOgc) const =0
Convert a geometry into well known binary format.
static OGRCurvePolygon * CastToCurvePolygon(OGRSurface *poSurface)
Cast to curve polygon.
Definition: ogrsurface.cpp:93
OGRCurve * stealExteriorRingCurve()
"Steal" reference to external ring.
Definition: ogrcurvepolygon.cpp:230
virtual OGRBoolean Within(const OGRGeometry *) const
Test for containment.
Definition: ogrgeometry.cpp:3691
virtual OGRErr transform(OGRCoordinateTransformation *poCT)
Apply arbitrary coordinate transformation to geometry.
Definition: ogrcurvepolygon.cpp:546
OGRCurve * getExteriorRingCurve()
Fetch reference to external polygon ring.
Definition: ogrcurvepolygon.cpp:151
virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear=FALSE) const
Returns if this geometry is or has curve geometry.
Definition: ogrpolygon.cpp:668
virtual OGRGeometry * getCurveGeometry(const char *const *papszOptions=NULL) const
Return curve version of this geometry.
Definition: ogrgeometry.cpp:2449
Coordinate systems services.
static OGRLinearRing * CastToLinearRing(OGRCompoundCurve *poCC)
Cast to linear ring.
Definition: ogrcompoundcurve.cpp:703
virtual OGRErr importFromWkt(char **)
Assign geometry from well known text data.
Definition: ogrlinestring.cpp:956
virtual OGRErr importFromWkb(unsigned char *, int=-1, OGRwkbVariant=wkbVariantOldOgc)
Assign geometry from well known binary data.
Definition: ogrlinestring.cpp:796
virtual OGRErr importFromWkt(char **)
Assign geometry from well known text data.
Definition: ogrcurvepolygon.cpp:407
virtual OGRErr exportToWkt(char **ppszDstText, OGRwkbVariant eWkbVariant=wkbVariantOldOgc) const
Convert a geometry into well known text format.
Definition: ogrcurvepolygon.cpp:422
virtual void EndPoint(OGRPoint *) const =0
Return the curve end point.
A collection of non-overlapping OGRPolygon.
Definition: ogr_geometry.h:1090
virtual void Value(double, OGRPoint *) const
Fetch point at given distance along curve.
Definition: ogrcompoundcurve.cpp:258
virtual OGRBoolean Equals(OGRGeometry *) const =0
Returns TRUE if two geometries are equivalent.
virtual OGRErr importFromWkb(unsigned char *, int=-1, OGRwkbVariant=wkbVariantOldOgc)=0
Assign geometry from well known binary data.
Concrete representation of a circular string, that is to say a curve made of one or several arc circl...
Definition: ogr_geometry.h:575
virtual void flattenTo2D()=0
Convert geometry to strictly 2D.
Abstract curve base class for OGRLineString, OGRCircularString and OGRCompoundCurve.
Definition: ogr_geometry.h:320
A collection of 1 or more geometry objects.
Definition: ogr_geometry.h:976
virtual OGRBoolean Equals(OGRGeometry *) const
Returns TRUE if two geometries are equivalent.
Definition: ogrcurvepolygon.cpp:525
int getNumInteriorRings() const
Fetch the number of internal rings.
Definition: ogrcurvepolygon.cpp:176
Concrete representation of a closed ring.
Definition: ogr_geometry.h:520
virtual OGRErr PointOnSurface(OGRPoint *poPoint) const
This method relates to the SFCOM IMultiSurface::get_PointOnSurface() method.
Definition: ogrmultisurface.cpp:245
virtual int WkbSize() const
Returns size of related binary representation.
Definition: ogrpolygon.cpp:220
virtual OGRLineString * CurveToLine(double dfMaxAngleStepSizeDegrees=0, const char *const *papszOptions=NULL) const
Return a linestring from a curve geometry.
Definition: ogrcompoundcurve.cpp:316
virtual int getDimension() const
Get the dimension of this object.
Definition: ogrgeometrycollection.cpp:121
virtual int get_IsClosed() const
Return TRUE if curve is closed.
Definition: ogrcurve.cpp:76
virtual void segmentize(double dfMaxLength)
Modify the geometry such it has no segment longer then the given distance.
Definition: ogrlinestring.cpp:1702
virtual int getCoordinateDimension() const
Get the dimension of the coordinates in this object.
Definition: ogrgeometry.cpp:716
virtual OGRErr importFromWkb(unsigned char *, int=-1, OGRwkbVariant=wkbVariantOldOgc)
Assign geometry from well known binary data.
Definition: ogrcurvepolygon.cpp:359
virtual OGRwkbGeometryType getGeometryType() const
Fetch geometry type.
Definition: ogrcurvepolygon.cpp:94
virtual int getNumPoints() const
Return the number of points of a curve geometry.
Definition: ogrcompoundcurve.cpp:596
A collection of non-overlapping OGRSurface.
Definition: ogr_geometry.h:1055
virtual double get_Length() const =0
Returns the length of the curve.
virtual void StartPoint(OGRPoint *) const =0
Return the curve start point.
virtual double get_Area() const =0
Get the area of the (closed) curve.
Concrete representation of a compound curve, made of curves: OGRLineString and OGRCircularString.
Definition: ogr_geometry.h:700
Simple container for a position.
Definition: ogr_geometry.h:47
OGRwkbGeometryType
List of well known binary geometry types.
Definition: ogr_core.h:309
virtual OGRErr exportToWkb(OGRwkbByteOrder, unsigned char *, OGRwkbVariant=wkbVariantOldOgc) const
Convert a geometry into well known binary format.
Definition: ogrpolygon.cpp:288
virtual OGRwkbGeometryType getGeometryType() const
Fetch geometry type.
Definition: ogrgeometrycollection.cpp:108
virtual OGRGeometry * getLinearGeometry(double dfMaxAngleStepSizeDegrees=0, const char *const *papszOptions=NULL) const
Return, possibly approximate, non-curve version of this geometry.
Definition: ogrcurvepolygon.cpp:482
virtual int ContainsPoint(const OGRPoint *p) const
Returns if a point is contained in a (closed) curve.
Definition: ogrcurve.cpp:353
virtual OGRErr exportToWkt(char **ppszDstText, OGRwkbVariant=wkbVariantOldOgc) const
Convert a geometry into well known text format.
Definition: ogrgeometrycollection.cpp:679
Interface for a point iterator.
Definition: ogr_geometry.h:302
A collection of OGRCurve.
Definition: ogr_geometry.h:1156
virtual OGRErr PointOnSurface(OGRPoint *poPoint) const =0
This method relates to the SFCOM ISurface::get_PointOnSurface() method.
Abstract base class for 2 dimensional objects like polygons or curve polygons.
Definition: ogr_geometry.h:788
A collection of OGRLineString.
Definition: ogr_geometry.h:1189
virtual OGRErr exportToWkt(char **ppszDstText, OGRwkbVariant=wkbVariantOldOgc) const
Convert a geometry into well known text format.
Definition: ogrpolygon.cpp:497
Abstract base class for all geometry classes.
Definition: ogr_geometry.h:104
virtual void empty()=0
Clear geometry information.
virtual void segmentize(double dfMaxLength)
Modify the geometry such it has no segment longer then the given distance.
Definition: ogrgeometry.cpp:641
double getZ() const
Fetch Z coordinate.
Definition: ogr_geometry.h:270
void setX(double xIn)
Assign point X coordinate.
Definition: ogr_geometry.h:274
virtual OGRErr importFromWkt(char **)
Assign geometry from well known text data.
Definition: ogrgeometrycollection.cpp:666
virtual OGRBoolean IsValid() const
Test if the geometry is valid.
Definition: ogrgeometry.cpp:1596
static OGRLinearRing * CastToLinearRing(OGRCurve *poCurve)
Cast to linear ring.
Definition: ogrcurve.cpp:332
virtual double get_Area() const =0
Get the area of the surface object.
virtual OGRBoolean IsEmpty() const
Returns TRUE (non-zero) if the object has no points.
Definition: ogrcurvepolygon.cpp:591
virtual OGRBoolean Intersects(const OGRGeometry *) const
Do these features intersect?
Definition: ogrgeometry.cpp:350
void setZ(double zIn)
Assign point Z coordinate.
Definition: ogr_geometry.h:276
virtual void EndPoint(OGRPoint *) const
Return the curve end point.
Definition: ogrcompoundcurve.cpp:248
virtual OGRErr exportToWkb(OGRwkbByteOrder, unsigned char *, OGRwkbVariant=wkbVariantOldOgc) const
Convert a geometry into well known binary format.
Definition: ogrlinestring.cpp:882
Core portability services for cross-platform OGR code.
virtual OGRErr exportToWkt(char **ppszDstText, OGRwkbVariant=wkbVariantOldOgc) const
Convert a geometry into well known text format.
Definition: ogrlinestring.cpp:1039
virtual void getEnvelope(OGREnvelope *psEnvelope) const
Computes and returns the bounding envelope for this geometry in the passed psEnvelope structure...
Definition: ogrlinestring.cpp:1473
virtual int getDimension() const =0
Get the dimension of this object.
virtual const char * getGeometryName() const
Fetch WKT name for geometry type.
Definition: ogrmulticurve.cpp:83
Concrete class representing curve polygons.
Definition: ogr_geometry.h:821
virtual OGRErr exportToWkb(OGRwkbByteOrder, unsigned char *, OGRwkbVariant=wkbVariantOldOgc) const
Convert a geometry into well known binary format.
Definition: ogrcurvepolygon.cpp:382
virtual const char * getGeometryName() const
Fetch WKT name for geometry type.
Definition: ogrlinestring.cpp:1882
static OGRPolygon * CastToPolygon(OGRSurface *poSurface)
Cast to polygon.
Definition: ogrsurface.cpp:73
virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear=FALSE) const
Returns if this geometry is or has curve geometry.
Definition: ogrcurvepolygon.cpp:468
Utility class to store a collection of curves.
Definition: ogr_geometry.h:633
void setY(double yIn)
Assign point Y coordinate.
Definition: ogr_geometry.h:275
This class respresents a OpenGIS Spatial Reference System, and contains methods for converting betwee...
Definition: ogr_spatialref.h:129
virtual double get_AreaOfCurveSegments() const =0
Get the area of the purely curve portions of a (closed) curve.
Old-style 99-402 extended dimension (Z) WKB types.
Definition: ogr_core.h:373
Simple container for a bounding region in 3D.
Definition: ogr_core.h:162
OGRCurvePolygon()
Create an empty curve polygon.
Definition: ogrcurvepolygon.cpp:45
virtual OGRLineString * CurveToLine(double dfMaxAngleStepSizeDegrees=0, const char *const *papszOptions=NULL) const =0
Return a linestring from a curve geometry.
virtual void empty()
Clear geometry information.
Definition: ogrcurvepolygon.cpp:84
virtual double get_AreaOfCurveSegments() const
Get the area of the purely curve portions of a (closed) curve.
Definition: ogrcompoundcurve.cpp:791
OGRErr addRingDirectly(OGRCurve *)
Add a ring to a polygon.
Definition: ogrcurvepolygon.cpp:314
Point class.
Definition: ogr_geometry.h:239
OGRwkbVariant
Output variants of WKB we support.
Definition: ogr_core.h:371
virtual double get_Length() const
Returns the length of the curve.
Definition: ogrlinestring.cpp:1118
virtual int WkbSize() const =0
Returns size of related binary representation.
virtual void getEnvelope(OGREnvelope *psEnvelope) const =0
Computes and returns the bounding envelope for this geometry in the passed psEnvelope structure...
double getX() const
Fetch X coordinate.
Definition: ogr_geometry.h:268
Concrete class representing polygons.
Definition: ogr_geometry.h:911
Abstract curve base class for OGRLineString and OGRCircularString.
Definition: ogr_geometry.h:370
Simple container for a bounding region.
Definition: ogr_core.h:48
virtual OGRErr exportToWkt(char **ppszDstText, OGRwkbVariant=wkbVariantOldOgc) const =0
Convert a geometry into well known text format.
virtual int getNumPoints() const =0
Return the number of points of a curve geometry.
virtual OGRGeometry * clone() const
Make a copy of this object.
Definition: ogrlinestring.cpp:77
virtual void getEnvelope(OGREnvelope *psEnvelope) const
Computes and returns the bounding envelope for this geometry in the passed psEnvelope structure...
Definition: ogrcurvepolygon.cpp:505
virtual OGRGeometry * getLinearGeometry(double dfMaxAngleStepSizeDegrees=0, const char *const *papszOptions=NULL) const
Return, possibly approximate, non-curve version of this geometry.
Definition: ogrgeometry.cpp:2416
virtual OGRBoolean Contains(const OGRGeometry *) const
Test for containment.
Definition: ogrgeometry.cpp:3773
virtual OGRErr exportToWkt(char **, OGRwkbVariant=wkbVariantOldOgc) const
Convert a geometry into well known text format.
Definition: ogrmultisurface.cpp:214
double getX(int i) const
Get X at vertex.
Definition: ogr_geometry.h:418
Interface for transforming between coordinate systems.
Definition: ogr_spatialref.h:573
OGRSpatialReference * getSpatialReference(void) const
Returns spatial reference system for object.
Definition: ogr_geometry.h:181
virtual OGRwkbGeometryType getGeometryType() const
Fetch geometry type.
Definition: ogrmultisurface.cpp:60
virtual int getNumPoints() const
Fetch vertex count.
Definition: ogr_geometry.h:416
static OGRCompoundCurve * CastToCompoundCurve(OGRCurve *puCurve)
Cast to compound curve.
Definition: ogrcurve.cpp:279
virtual int PointOnSurface(OGRPoint *poPoint) const
This method relates to the SFCOM ISurface::get_PointOnSurface() method.
Definition: ogrcurvepolygon.cpp:492
virtual OGRPolygon * CurvePolyToPoly(double dfMaxAngleStepSizeDegrees=0, const char *const *papszOptions=NULL) const
Return a polygon from a curve polygon.
Definition: ogrcurvepolygon.cpp:450
OGRErr addRing(OGRCurve *)
Add a ring to a polygon.
Definition: ogrcurvepolygon.cpp:257
virtual OGRPointIterator * getPointIterator() const =0
Returns a point iterator over the curve.
static OGRLineString * CastToLineString(OGRCurve *poCurve)
Cast to linestring.
Definition: ogrcurve.cpp:310
virtual OGRErr transform(OGRCoordinateTransformation *poCT)=0
Apply arbitrary coordinate transformation to geometry.
virtual OGRPolygon * CurvePolyToPoly(double dfMaxAngleStepSizeDegrees=0, const char *const *papszOptions=NULL) const
Return a polygon from a curve polygon.
Definition: ogrpolygon.cpp:658
virtual const char * getGeometryName() const
Fetch WKT name for geometry type.
Definition: ogrcurvepolygon.cpp:127
virtual const char * getGeometryName() const
Fetch WKT name for geometry type.
Definition: ogrgeometrycollection.cpp:157
virtual void flattenTo2D()
Convert geometry to strictly 2D.
Definition: ogrcurvepolygon.cpp:117
virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear=FALSE) const
Returns if this geometry is or has curve geometry.
Definition: ogrmulticurve.cpp:140
virtual double get_Length() const
Returns the length of the curve.
Definition: ogrcompoundcurve.cpp:226
A collection of OGRPoint.
Definition: ogr_geometry.h:1121
virtual OGRwkbGeometryType getGeometryType() const
Fetch geometry type.
Definition: ogrmulticurve.cpp:60
virtual void swapXY()
Swap x and y coordinates.
Definition: ogrcurvepolygon.cpp:609
virtual void setCoordinateDimension(int nDimension)
Set the coordinate dimension.
Definition: ogrcurvepolygon.cpp:580
virtual OGRBoolean IsConvex() const
Returns if a (closed) curve forms a convex shape.
Definition: ogrcurve.cpp:236
virtual OGRBoolean hasCurveGeometry(int bLookForNonLinear=FALSE) const
Returns if this geometry is or has curve geometry.
Definition: ogrmultisurface.cpp:225
virtual int WkbSize() const
Returns size of related binary representation.
Definition: ogrlinestring.cpp:123
OGRCurve * getInteriorRingCurve(int)
Fetch reference to indicated internal ring.
Definition: ogrcurvepolygon.cpp:205
virtual OGRBoolean IsEmpty() const =0
Returns TRUE (non-zero) if the object has no points.
virtual const char * getGeometryName() const
Fetch WKT name for geometry type.
Definition: ogrmultisurface.cpp:83
double getY(int i) const
Get Y at vertex.
Definition: ogr_geometry.h:419

Generated for GDAL by doxygen 1.8.8.