OGR
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 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 double get_Area() const =0
Get the area of the (closed) curve.
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
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 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
virtual OGRBoolean Equals(OGRGeometry *) const =0
Returns TRUE if two geometries are equivalent.
Definition: ogr_geometry.h:1218
virtual void StartPoint(OGRPoint *) const
Return the curve start point.
Definition: ogrcompoundcurve.cpp:238
virtual int WkbSize() const =0
Returns size of related binary representation.
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 double get_AreaOfCurveSegments() const =0
Get the area of the purely curve portions of a (closed) curve.
virtual OGRErr transform(OGRCoordinateTransformation *poCT)
Apply arbitrary coordinate transformation to geometry.
Definition: ogrcurvepolygon.cpp:546
virtual OGRwkbGeometryType getGeometryType() const =0
Fetch geometry type.
OGRCurve * getExteriorRingCurve()
Fetch reference to external polygon ring.
Definition: ogrcurvepolygon.cpp:151
virtual OGRErr PointOnSurface(OGRPoint *poPoint) const =0
This method relates to the SFCOM ISurface::get_PointOnSurface() method.
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
virtual OGRPointIterator * getPointIterator() const =0
Returns a point iterator over the curve.
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
Definition: ogr_geometry.h:1090
virtual void Value(double, OGRPoint *) const
Fetch point at given distance along curve.
Definition: ogrcompoundcurve.cpp:258
virtual OGRErr importFromWkb(unsigned char *, int=-1, OGRwkbVariant=wkbVariantOldOgc)=0
Assign geometry from well known binary data.
Definition: ogr_geometry.h:575
virtual double get_Length() const =0
Returns the length of the curve.
virtual void flattenTo2D()=0
Convert geometry to strictly 2D. In a sense this converts all Z coordinates to 0.0.
Definition: ogr_geometry.h:320
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
virtual const char * getGeometryName() const =0
Fetch WKT name for geometry type.
Definition: ogr_geometry.h:520
virtual OGRErr exportToWkb(OGRwkbByteOrder, unsigned char *, OGRwkbVariant=wkbVariantOldOgc) const =0
Convert a geometry into well known binary format.
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 void EndPoint(OGRPoint *) const =0
Return the curve end point.
virtual double get_Area() const =0
Get the area of the surface object.
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 StartPoint(OGRPoint *) const =0
Return the curve start point.
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
Definition: ogr_geometry.h:1055
Definition: ogr_geometry.h:700
Definition: ogr_geometry.h:47
OGRwkbGeometryType
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
Definition: ogr_geometry.h:302
Definition: ogr_geometry.h:1156
Definition: ogr_geometry.h:788
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
virtual void getEnvelope(OGREnvelope *psEnvelope) const =0
Computes and returns the bounding envelope for this geometry in the passed psEnvelope structure...
virtual int getDimension() const =0
Get the dimension of this object.
Definition: ogr_geometry.h:104
virtual void empty()=0
Clear geometry information. This restores the geometry to it's initial state after construction...
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 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
virtual OGRErr exportToWkt(char **ppszDstText, OGRwkbVariant=wkbVariantOldOgc) const =0
Convert a geometry into well known text format.
void setZ(double zIn)
Assign point Z coordinate. Calling this method will force the geometry coordinate dimension to 3D (wk...
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
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 const char * getGeometryName() const
Fetch WKT name for geometry type.
Definition: ogrmulticurve.cpp:83
Definition: ogr_geometry.h:821
virtual OGRBoolean IsEmpty() const =0
Returns TRUE (non-zero) if the object has no points.
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
virtual int getNumPoints() const =0
Return the number of points of a curve geometry.
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
virtual OGRGeometry * clone() const =0
Make a copy of this object.
Definition: ogr_geometry.h:633
void setY(double yIn)
Assign point Y coordinate.
Definition: ogr_geometry.h:275
Definition: ogr_spatialref.h:129
Definition: ogr_core.h:373
Definition: ogr_core.h:162
OGRCurvePolygon()
Create an empty curve polygon.
Definition: ogrcurvepolygon.cpp:45
virtual void empty()
Clear geometry information. This restores the geometry to it's initial state after construction...
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
virtual OGRLineString * CurveToLine(double dfMaxAngleStepSizeDegrees=0, const char *const *papszOptions=NULL) const =0
Return a linestring from a curve geometry.
OGRErr addRingDirectly(OGRCurve *)
Add a ring to a polygon.
Definition: ogrcurvepolygon.cpp:314
Definition: ogr_geometry.h:239
OGRwkbVariant
Definition: ogr_core.h:371
virtual double get_Length() const
Returns the length of the curve.
Definition: ogrlinestring.cpp:1118
double getX() const
Fetch X coordinate.
Definition: ogr_geometry.h:268
virtual void Value(double, OGRPoint *) const =0
Fetch point at given distance along curve.
Definition: ogr_geometry.h:911
Definition: ogr_geometry.h:370
Definition: ogr_core.h:48
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
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
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. In a sense this converts all Z coordinates to 0.0.
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
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 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.10.