OGR
|
00001 /****************************************************************************** 00002 * $Id: ogr_geometry.h 25450 2013-01-04 23:15:38Z rouault $ 00003 * 00004 * Project: OpenGIS Simple Features Reference Implementation 00005 * Purpose: Classes for manipulating simple features that is not specific 00006 * to a particular interface technology. 00007 * Author: Frank Warmerdam, warmerdam@pobox.com 00008 * 00009 ****************************************************************************** 00010 * Copyright (c) 1999, Frank Warmerdam 00011 * 00012 * Permission is hereby granted, free of charge, to any person obtaining a 00013 * copy of this software and associated documentation files (the "Software"), 00014 * to deal in the Software without restriction, including without limitation 00015 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 00016 * and/or sell copies of the Software, and to permit persons to whom the 00017 * Software is furnished to do so, subject to the following conditions: 00018 * 00019 * The above copyright notice and this permission notice shall be included 00020 * in all copies or substantial portions of the Software. 00021 * 00022 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 00023 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00024 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 00025 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00026 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 00027 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 00028 * DEALINGS IN THE SOFTWARE. 00029 ****************************************************************************/ 00030 00031 #ifndef _OGR_GEOMETRY_H_INCLUDED 00032 #define _OGR_GEOMETRY_H_INCLUDED 00033 00034 #include "ogr_core.h" 00035 #include "ogr_spatialref.h" 00036 00046 class OGRRawPoint 00047 { 00048 public: 00049 OGRRawPoint() 00050 { 00051 x = y = 0.0; 00052 } 00053 double x; 00054 double y; 00055 }; 00056 00057 typedef struct GEOSGeom_t *GEOSGeom; 00058 00059 /************************************************************************/ 00060 /* OGRGeometry */ 00061 /************************************************************************/ 00062 00063 class OGRPoint; 00064 00077 class CPL_DLL OGRGeometry 00078 { 00079 private: 00080 OGRSpatialReference * poSRS; // may be NULL 00081 00082 protected: 00083 int nCoordDimension; 00084 00085 public: 00086 OGRGeometry(); 00087 virtual ~OGRGeometry(); 00088 00089 // standard IGeometry 00090 virtual int getDimension() const = 0; 00091 virtual int getCoordinateDimension() const; 00092 virtual OGRBoolean IsEmpty() const = 0; 00093 virtual OGRBoolean IsValid() const; 00094 virtual OGRBoolean IsSimple() const; 00095 virtual OGRBoolean IsRing() const; 00096 virtual void empty() = 0; 00097 virtual OGRGeometry *clone() const = 0; 00098 virtual void getEnvelope( OGREnvelope * psEnvelope ) const = 0; 00099 virtual void getEnvelope( OGREnvelope3D * psEnvelope ) const = 0; 00100 00101 // IWks Interface 00102 virtual int WkbSize() const = 0; 00103 virtual OGRErr importFromWkb( unsigned char *, int=-1 )=0; 00104 virtual OGRErr exportToWkb( OGRwkbByteOrder, unsigned char * ) const = 0; 00105 virtual OGRErr importFromWkt( char ** ppszInput ) = 0; 00106 virtual OGRErr exportToWkt( char ** ppszDstText ) const = 0; 00107 00108 // non-standard 00109 virtual OGRwkbGeometryType getGeometryType() const = 0; 00110 virtual const char *getGeometryName() const = 0; 00111 virtual void dumpReadable( FILE *, const char * = NULL, char** papszOptions = NULL ) const; 00112 virtual void flattenTo2D() = 0; 00113 virtual char * exportToGML( const char* const * papszOptions = NULL ) const; 00114 virtual char * exportToKML() const; 00115 virtual char * exportToJson() const; 00116 virtual GEOSGeom exportToGEOS() const; 00117 virtual void closeRings(); 00118 00119 virtual void setCoordinateDimension( int nDimension ); 00120 00121 void assignSpatialReference( OGRSpatialReference * poSR ); 00122 OGRSpatialReference *getSpatialReference( void ) const { return poSRS; } 00123 00124 virtual OGRErr transform( OGRCoordinateTransformation *poCT ) = 0; 00125 OGRErr transformTo( OGRSpatialReference *poSR ); 00126 00127 virtual void segmentize(double dfMaxLength); 00128 00129 // ISpatialRelation 00130 virtual OGRBoolean Intersects( OGRGeometry * ) const; 00131 virtual OGRBoolean Equals( OGRGeometry * ) const = 0; 00132 virtual OGRBoolean Disjoint( const OGRGeometry * ) const; 00133 virtual OGRBoolean Touches( const OGRGeometry * ) const; 00134 virtual OGRBoolean Crosses( const OGRGeometry * ) const; 00135 virtual OGRBoolean Within( const OGRGeometry * ) const; 00136 virtual OGRBoolean Contains( const OGRGeometry * ) const; 00137 virtual OGRBoolean Overlaps( const OGRGeometry * ) const; 00138 // virtual OGRBoolean Relate( const OGRGeometry *, const char * ) const; 00139 00140 virtual OGRGeometry *Boundary() const; 00141 virtual double Distance( const OGRGeometry * ) const; 00142 virtual OGRGeometry *ConvexHull() const; 00143 virtual OGRGeometry *Buffer( double dfDist, int nQuadSegs = 30 ) const; 00144 virtual OGRGeometry *Intersection( const OGRGeometry *) const; 00145 virtual OGRGeometry *Union( const OGRGeometry * ) const; 00146 virtual OGRGeometry *UnionCascaded() const; 00147 virtual OGRGeometry *Difference( const OGRGeometry * ) const; 00148 virtual OGRGeometry *SymDifference( const OGRGeometry * ) const; 00149 virtual OGRErr Centroid( OGRPoint * poPoint ) const; 00150 virtual OGRGeometry *Simplify(double dTolerance) const; 00151 OGRGeometry *SimplifyPreserveTopology(double dTolerance) const; 00152 00153 virtual OGRGeometry *Polygonize() const; 00154 00155 // backward compatibility to non-standard method names. 00156 OGRBoolean Intersect( OGRGeometry * ) const CPL_WARN_DEPRECATED("Non standard method. Use Intersects() instead"); 00157 OGRBoolean Equal( OGRGeometry * ) const CPL_WARN_DEPRECATED("Non standard method. Use Equals() instead"); 00158 virtual OGRGeometry *SymmetricDifference( const OGRGeometry * ) const CPL_WARN_DEPRECATED("Non standard method. Use SymDifference() instead"); 00159 virtual OGRGeometry *getBoundary() const CPL_WARN_DEPRECATED("Non standard method. Use Boundary() instead"); 00160 00161 // Special HACK for DB2 7.2 support 00162 static int bGenerate_DB2_V72_BYTE_ORDER; 00163 00164 virtual void swapXY(); 00165 }; 00166 00167 /************************************************************************/ 00168 /* OGRPoint */ 00169 /************************************************************************/ 00170 00177 class CPL_DLL OGRPoint : public OGRGeometry 00178 { 00179 double x; 00180 double y; 00181 double z; 00182 00183 public: 00184 OGRPoint(); 00185 OGRPoint( double x, double y ); 00186 OGRPoint( double x, double y, double z ); 00187 virtual ~OGRPoint(); 00188 00189 // IWks Interface 00190 virtual int WkbSize() const; 00191 virtual OGRErr importFromWkb( unsigned char *, int=-1 ); 00192 virtual OGRErr exportToWkb( OGRwkbByteOrder, unsigned char * ) const; 00193 virtual OGRErr importFromWkt( char ** ); 00194 virtual OGRErr exportToWkt( char ** ppszDstText ) const; 00195 00196 // IGeometry 00197 virtual int getDimension() const; 00198 virtual OGRGeometry *clone() const; 00199 virtual void empty(); 00200 virtual void getEnvelope( OGREnvelope * psEnvelope ) const; 00201 virtual void getEnvelope( OGREnvelope3D * psEnvelope ) const; 00202 virtual OGRBoolean IsEmpty() const; 00203 00204 // IPoint 00205 double getX() const { return x; } 00206 double getY() const { return y; } 00207 double getZ() const { return z; } 00208 00209 // Non standard 00210 virtual void setCoordinateDimension( int nDimension ); 00211 void setX( double xIn ) { x = xIn; if (nCoordDimension == 0) nCoordDimension = 2; } 00212 void setY( double yIn ) { y = yIn; if (nCoordDimension == 0) nCoordDimension = 2; } 00213 void setZ( double zIn ) { z = zIn; nCoordDimension=3; } 00214 00215 // ISpatialRelation 00216 virtual OGRBoolean Equals( OGRGeometry * ) const; 00217 00218 // Non standard from OGRGeometry 00219 virtual const char *getGeometryName() const; 00220 virtual OGRwkbGeometryType getGeometryType() const; 00221 virtual OGRErr transform( OGRCoordinateTransformation *poCT ); 00222 virtual void flattenTo2D(); 00223 00224 virtual void swapXY(); 00225 }; 00226 00227 /************************************************************************/ 00228 /* OGRCurve */ 00229 /************************************************************************/ 00230 00235 class CPL_DLL OGRCurve : public OGRGeometry 00236 { 00237 public: 00238 OGRCurve(); 00239 virtual ~OGRCurve(); 00240 // ICurve methods 00241 virtual double get_Length() const = 0; 00242 virtual void StartPoint(OGRPoint *) const = 0; 00243 virtual void EndPoint(OGRPoint *) const = 0; 00244 virtual int get_IsClosed() const; 00245 virtual void Value( double, OGRPoint * ) const = 0; 00246 00247 }; 00248 00249 /************************************************************************/ 00250 /* OGRLineString */ 00251 /************************************************************************/ 00252 00257 class CPL_DLL OGRLineString : public OGRCurve 00258 { 00259 protected: 00260 int nPointCount; 00261 OGRRawPoint *paoPoints; 00262 double *padfZ; 00263 00264 void Make3D(); 00265 void Make2D(); 00266 00267 public: 00268 OGRLineString(); 00269 virtual ~OGRLineString(); 00270 00271 // IWks Interface 00272 virtual int WkbSize() const; 00273 virtual OGRErr importFromWkb( unsigned char *, int = -1 ); 00274 virtual OGRErr exportToWkb( OGRwkbByteOrder, unsigned char * ) const; 00275 virtual OGRErr importFromWkt( char ** ); 00276 virtual OGRErr exportToWkt( char ** ppszDstText ) const; 00277 00278 // IGeometry interface 00279 virtual int getDimension() const; 00280 virtual OGRGeometry *clone() const; 00281 virtual void empty(); 00282 virtual void getEnvelope( OGREnvelope * psEnvelope ) const; 00283 virtual void getEnvelope( OGREnvelope3D * psEnvelope ) const; 00284 virtual OGRBoolean IsEmpty() const; 00285 00286 // ICurve methods 00287 virtual double get_Length() const; 00288 virtual void StartPoint(OGRPoint *) const; 00289 virtual void EndPoint(OGRPoint *) const; 00290 virtual void Value( double, OGRPoint * ) const; 00291 00292 // ILineString methods 00293 int getNumPoints() const { return nPointCount; } 00294 void getPoint( int, OGRPoint * ) const; 00295 double getX( int i ) const { return paoPoints[i].x; } 00296 double getY( int i ) const { return paoPoints[i].y; } 00297 double getZ( int i ) const; 00298 00299 // ISpatialRelation 00300 virtual OGRBoolean Equals( OGRGeometry * ) const; 00301 00302 // non standard. 00303 virtual void setCoordinateDimension( int nDimension ); 00304 void setNumPoints( int ); 00305 void setPoint( int, OGRPoint * ); 00306 void setPoint( int, double, double ); 00307 void setPoint( int, double, double, double ); 00308 void setPoints( int, OGRRawPoint *, double * = NULL ); 00309 void setPoints( int, double * padfX, double * padfY, 00310 double *padfZ = NULL ); 00311 void addPoint( OGRPoint * ); 00312 void addPoint( double, double ); 00313 void addPoint( double, double, double ); 00314 00315 void getPoints( OGRRawPoint *, double * = NULL ) const; 00316 void getPoints( void* pabyX, int nXStride, 00317 void* pabyY, int nYStride, 00318 void* pabyZ = NULL, int nZStride = 0 ) const; 00319 00320 void addSubLineString( const OGRLineString *, 00321 int nStartVertex = 0, int nEndVertex = -1 ); 00322 void reversePoints( void ); 00323 00324 // non-standard from OGRGeometry 00325 virtual OGRwkbGeometryType getGeometryType() const; 00326 virtual const char *getGeometryName() const; 00327 virtual OGRErr transform( OGRCoordinateTransformation *poCT ); 00328 virtual void flattenTo2D(); 00329 virtual void segmentize(double dfMaxLength); 00330 00331 virtual void swapXY(); 00332 }; 00333 00334 /************************************************************************/ 00335 /* OGRLinearRing */ 00336 /************************************************************************/ 00337 00356 class CPL_DLL OGRLinearRing : public OGRLineString 00357 { 00358 private: 00359 friend class OGRPolygon; 00360 00361 // These are not IWks compatible ... just a convenience for OGRPolygon. 00362 virtual int _WkbSize( int b3D ) const; 00363 virtual OGRErr _importFromWkb( OGRwkbByteOrder, int b3D, 00364 unsigned char *, int=-1 ); 00365 virtual OGRErr _exportToWkb( OGRwkbByteOrder, int b3D, 00366 unsigned char * ) const; 00367 00368 public: 00369 OGRLinearRing(); 00370 OGRLinearRing( OGRLinearRing * ); 00371 ~OGRLinearRing(); 00372 00373 // Non standard. 00374 virtual const char *getGeometryName() const; 00375 virtual OGRGeometry *clone() const; 00376 virtual int isClockwise() const; 00377 virtual void reverseWindingOrder(); 00378 virtual void closeRings(); 00379 virtual double get_Area() const; 00380 OGRBoolean isPointInRing(const OGRPoint* pt, int bTestEnvelope = TRUE) const; 00381 OGRBoolean isPointOnRingBoundary(const OGRPoint* pt, int bTestEnvelope = TRUE) const; 00382 00383 // IWks Interface - Note this isnt really a first class object 00384 // for the purposes of WKB form. These methods always fail since this 00385 // object cant be serialized on its own. 00386 virtual int WkbSize() const; 00387 virtual OGRErr importFromWkb( unsigned char *, int=-1 ); 00388 virtual OGRErr exportToWkb( OGRwkbByteOrder, unsigned char * ) const; 00389 }; 00390 00391 /************************************************************************/ 00392 /* OGRSurface */ 00393 /************************************************************************/ 00394 00399 class CPL_DLL OGRSurface : public OGRGeometry 00400 { 00401 public: 00402 virtual double get_Area() const = 0; 00403 virtual OGRErr PointOnSurface( OGRPoint * poPoint ) const = 0; 00404 }; 00405 00406 /************************************************************************/ 00407 /* OGRPolygon */ 00408 /************************************************************************/ 00409 00419 class CPL_DLL OGRPolygon : public OGRSurface 00420 { 00421 int nRingCount; 00422 OGRLinearRing **papoRings; 00423 00424 public: 00425 OGRPolygon(); 00426 virtual ~OGRPolygon(); 00427 00428 // Non standard (OGRGeometry). 00429 virtual const char *getGeometryName() const; 00430 virtual OGRwkbGeometryType getGeometryType() const; 00431 virtual OGRGeometry *clone() const; 00432 virtual void empty(); 00433 virtual OGRErr transform( OGRCoordinateTransformation *poCT ); 00434 virtual void flattenTo2D(); 00435 virtual OGRBoolean IsEmpty() const; 00436 virtual void segmentize(double dfMaxLength); 00437 00438 // ISurface Interface 00439 virtual double get_Area() const; 00440 virtual int PointOnSurface( OGRPoint * poPoint ) const; 00441 00442 // IWks Interface 00443 virtual int WkbSize() const; 00444 virtual OGRErr importFromWkb( unsigned char *, int = -1 ); 00445 virtual OGRErr exportToWkb( OGRwkbByteOrder, unsigned char * ) const; 00446 virtual OGRErr importFromWkt( char ** ); 00447 virtual OGRErr exportToWkt( char ** ppszDstText ) const; 00448 00449 // IGeometry 00450 virtual int getDimension() const; 00451 virtual void getEnvelope( OGREnvelope * psEnvelope ) const; 00452 virtual void getEnvelope( OGREnvelope3D * psEnvelope ) const; 00453 00454 // ISpatialRelation 00455 virtual OGRBoolean Equals( OGRGeometry * ) const; 00456 00457 // Non standard 00458 virtual void setCoordinateDimension( int nDimension ); 00459 00460 void addRing( OGRLinearRing * ); 00461 void addRingDirectly( OGRLinearRing * ); 00462 00463 OGRLinearRing *getExteriorRing(); 00464 const OGRLinearRing *getExteriorRing() const; 00465 int getNumInteriorRings() const; 00466 OGRLinearRing *getInteriorRing( int ); 00467 const OGRLinearRing *getInteriorRing( int ) const; 00468 00469 OGRBoolean IsPointOnSurface( const OGRPoint * ) const; 00470 00471 virtual void closeRings(); 00472 00473 virtual void swapXY(); 00474 }; 00475 00476 /************************************************************************/ 00477 /* OGRGeometryCollection */ 00478 /************************************************************************/ 00479 00487 class CPL_DLL OGRGeometryCollection : public OGRGeometry 00488 { 00489 int nGeomCount; 00490 OGRGeometry **papoGeoms; 00491 00492 OGRErr importFromWkbInternal( unsigned char * pabyData, int nSize, int nRecLevel ); 00493 OGRErr importFromWktInternal( char **ppszInput, int nRecLevel ); 00494 00495 public: 00496 OGRGeometryCollection(); 00497 virtual ~OGRGeometryCollection(); 00498 00499 // Non standard (OGRGeometry). 00500 virtual const char *getGeometryName() const; 00501 virtual OGRwkbGeometryType getGeometryType() const; 00502 virtual OGRGeometry *clone() const; 00503 virtual void empty(); 00504 virtual OGRErr transform( OGRCoordinateTransformation *poCT ); 00505 virtual void flattenTo2D(); 00506 virtual OGRBoolean IsEmpty() const; 00507 virtual void segmentize(double dfMaxLength); 00508 00509 // IWks Interface 00510 virtual int WkbSize() const; 00511 virtual OGRErr importFromWkb( unsigned char *, int = -1 ); 00512 virtual OGRErr exportToWkb( OGRwkbByteOrder, unsigned char * ) const; 00513 virtual OGRErr importFromWkt( char ** ); 00514 virtual OGRErr exportToWkt( char ** ppszDstText ) const; 00515 00516 virtual double get_Length() const; 00517 virtual double get_Area() const; 00518 00519 // IGeometry methods 00520 virtual int getDimension() const; 00521 virtual void getEnvelope( OGREnvelope * psEnvelope ) const; 00522 virtual void getEnvelope( OGREnvelope3D * psEnvelope ) const; 00523 00524 // IGeometryCollection 00525 int getNumGeometries() const; 00526 OGRGeometry *getGeometryRef( int ); 00527 const OGRGeometry *getGeometryRef( int ) const; 00528 00529 // ISpatialRelation 00530 virtual OGRBoolean Equals( OGRGeometry * ) const; 00531 00532 // Non standard 00533 virtual void setCoordinateDimension( int nDimension ); 00534 virtual OGRErr addGeometry( const OGRGeometry * ); 00535 virtual OGRErr addGeometryDirectly( OGRGeometry * ); 00536 virtual OGRErr removeGeometry( int iIndex, int bDelete = TRUE ); 00537 00538 void closeRings(); 00539 00540 virtual void swapXY(); 00541 }; 00542 00543 /************************************************************************/ 00544 /* OGRMultiPolygon */ 00545 /************************************************************************/ 00546 00554 class CPL_DLL OGRMultiPolygon : public OGRGeometryCollection 00555 { 00556 public: 00557 OGRMultiPolygon(); 00558 // Non standard (OGRGeometry). 00559 virtual const char *getGeometryName() const; 00560 virtual OGRwkbGeometryType getGeometryType() const; 00561 virtual OGRGeometry *clone() const; 00562 virtual OGRErr importFromWkt( char ** ); 00563 virtual OGRErr exportToWkt( char ** ) const; 00564 00565 // IGeometry methods 00566 virtual int getDimension() const; 00567 00568 // Non standard 00569 virtual OGRErr addGeometryDirectly( OGRGeometry * ); 00570 00571 virtual double get_Area() const; 00572 }; 00573 00574 /************************************************************************/ 00575 /* OGRMultiPoint */ 00576 /************************************************************************/ 00577 00582 class CPL_DLL OGRMultiPoint : public OGRGeometryCollection 00583 { 00584 private: 00585 OGRErr importFromWkt_Bracketed( char **, int bHasM, int bHasZ ); 00586 00587 public: 00588 OGRMultiPoint(); 00589 // Non standard (OGRGeometry). 00590 virtual const char *getGeometryName() const; 00591 virtual OGRwkbGeometryType getGeometryType() const; 00592 virtual OGRGeometry *clone() const; 00593 virtual OGRErr importFromWkt( char ** ); 00594 virtual OGRErr exportToWkt( char ** ) const; 00595 00596 // IGeometry methods 00597 virtual int getDimension() const; 00598 00599 // Non standard 00600 virtual OGRErr addGeometryDirectly( OGRGeometry * ); 00601 }; 00602 00603 /************************************************************************/ 00604 /* OGRMultiLineString */ 00605 /************************************************************************/ 00606 00611 class CPL_DLL OGRMultiLineString : public OGRGeometryCollection 00612 { 00613 public: 00614 OGRMultiLineString(); 00615 ~OGRMultiLineString(); 00616 // Non standard (OGRGeometry). 00617 virtual const char *getGeometryName() const; 00618 virtual OGRwkbGeometryType getGeometryType() const; 00619 virtual OGRGeometry *clone() const; 00620 virtual OGRErr importFromWkt( char ** ); 00621 virtual OGRErr exportToWkt( char ** ) const; 00622 00623 // IGeometry methods 00624 virtual int getDimension() const; 00625 00626 // Non standard 00627 virtual OGRErr addGeometryDirectly( OGRGeometry * ); 00628 }; 00629 00630 00631 /************************************************************************/ 00632 /* OGRGeometryFactory */ 00633 /************************************************************************/ 00634 00639 class CPL_DLL OGRGeometryFactory 00640 { 00641 static OGRErr createFromFgfInternal( unsigned char *pabyData, 00642 OGRSpatialReference * poSR, 00643 OGRGeometry **ppoReturn, 00644 int nBytes, 00645 int *pnBytesConsumed, 00646 int nRecLevel ); 00647 public: 00648 static OGRErr createFromWkb( unsigned char *, OGRSpatialReference *, 00649 OGRGeometry **, int = -1 ); 00650 static OGRErr createFromWkt( char **, OGRSpatialReference *, 00651 OGRGeometry ** ); 00652 static OGRErr createFromFgf( unsigned char *, OGRSpatialReference *, 00653 OGRGeometry **, int = -1, int * = NULL ); 00654 static OGRGeometry *createFromGML( const char * ); 00655 static OGRGeometry *createFromGEOS( GEOSGeom ); 00656 00657 static void destroyGeometry( OGRGeometry * ); 00658 static OGRGeometry *createGeometry( OGRwkbGeometryType ); 00659 00660 static OGRGeometry * forceToPolygon( OGRGeometry * ); 00661 static OGRGeometry * forceToLineString( OGRGeometry *, bool bOnlyInOrder = true ); 00662 static OGRGeometry * forceToMultiPolygon( OGRGeometry * ); 00663 static OGRGeometry * forceToMultiPoint( OGRGeometry * ); 00664 static OGRGeometry * forceToMultiLineString( OGRGeometry * ); 00665 00666 static OGRGeometry * organizePolygons( OGRGeometry **papoPolygons, 00667 int nPolygonCount, 00668 int *pbResultValidGeometry, 00669 const char **papszOptions = NULL); 00670 00671 static void *getGEOSGeometryFactory(); 00672 00673 static int haveGEOS(); 00674 00675 static OGRGeometry* transformWithOptions( const OGRGeometry* poSrcGeom, 00676 OGRCoordinateTransformation *poCT, 00677 char** papszOptions ); 00678 00679 static OGRGeometry* 00680 approximateArcAngles( double dfX, double dfY, double dfZ, 00681 double dfPrimaryRadius, double dfSecondaryAxis, 00682 double dfRotation, 00683 double dfStartAngle, double dfEndAngle, 00684 double dfMaxAngleStepSizeDegrees ); 00685 }; 00686 00687 OGRwkbGeometryType CPL_DLL OGRFromOGCGeomType( const char *pszGeomType ); 00688 const char CPL_DLL * OGRToOGCGeomType( OGRwkbGeometryType eGeomType ); 00689 00690 /* Prepared geometry API (needs GEOS >= 3.1.0) */ 00691 typedef struct _OGRPreparedGeometry OGRPreparedGeometry; 00692 int OGRHasPreparedGeometrySupport(); 00693 OGRPreparedGeometry* OGRCreatePreparedGeometry( const OGRGeometry* poGeom ); 00694 void OGRDestroyPreparedGeometry( OGRPreparedGeometry* poPreparedGeom ); 00695 int OGRPreparedGeometryIntersects( const OGRPreparedGeometry* poPreparedGeom, 00696 const OGRGeometry* poOtherGeom ); 00697 00698 #endif /* ndef _OGR_GEOMETRY_H_INCLUDED */