📄 ogr_geometry.h
字号:
/* OGRLinearRing */
/* */
/* This is an alias for OGRLineString for now. */
/************************************************************************/
/**
* Concrete representation of a closed ring.
*
* This class is functionally equivelent to an OGRLineString, but has a
* separate identity to maintain alignment with the OpenGIS simple feature
* data model. It exists to serve as a component of an OGRPolygon.
*/
class CPL_DLL OGRLinearRing : public OGRLineString
{
private:
friend class OGRPolygon;
// These are not IWks compatible ... just a convenience for OGRPolygon.
virtual int _WkbSize( int b3D ) const;
virtual OGRErr _importFromWkb( OGRwkbByteOrder, int b3D,
unsigned char *, int=-1 );
virtual OGRErr _exportToWkb( OGRwkbByteOrder, int b3D,
unsigned char * ) const;
public:
OGRLinearRing();
OGRLinearRing( OGRLinearRing * );
~OGRLinearRing();
// Non standard.
virtual const char *getGeometryName() const;
virtual OGRGeometry *clone() const;
virtual int isClockwise() const;
virtual void reverseWindingOrder();
virtual void closeRings();
virtual double get_Area() const;
OGRBoolean isPointInRing(const OGRPoint* pt) const;
// IWks Interface - Note this isnt really a first class object
// for the purposes of WKB form. These methods always fail since this
// object cant be serialized on its own.
virtual int WkbSize() const;
virtual OGRErr importFromWkb( unsigned char *, int=-1 );
virtual OGRErr exportToWkb( OGRwkbByteOrder, unsigned char * ) const;
};
/************************************************************************/
/* OGRSurface */
/************************************************************************/
/**
* Abstract base class for 2 dimensional objects like polygons.
*/
class CPL_DLL OGRSurface : public OGRGeometry
{
public:
virtual double get_Area() const = 0;
virtual OGRErr Centroid( OGRPoint * poPoint ) const = 0;
virtual OGRErr PointOnSurface( OGRPoint * poPoint ) const = 0;
};
/************************************************************************/
/* OGRPolygon */
/************************************************************************/
/**
* Concrete class representing polygons.
*
* Note that the OpenGIS simple features polygons consist of one outer
* ring, and zero or more inner rings. A polygon cannot represent disconnected
* regions (such as multiple islands in a political body). The
* OGRMultiPolygon must be used for this.
*/
class CPL_DLL OGRPolygon : public OGRSurface
{
int nRingCount;
OGRLinearRing **papoRings;
public:
OGRPolygon();
virtual ~OGRPolygon();
// Non standard (OGRGeometry).
virtual const char *getGeometryName() const;
virtual OGRwkbGeometryType getGeometryType() const;
virtual OGRGeometry *clone() const;
virtual void empty();
virtual OGRErr transform( OGRCoordinateTransformation *poCT );
virtual void flattenTo2D();
// ISurface Interface
virtual double get_Area() const;
virtual int Centroid( OGRPoint * poPoint ) const;
virtual int PointOnSurface( OGRPoint * poPoint ) const;
// IWks Interface
virtual int WkbSize() const;
virtual OGRErr importFromWkb( unsigned char *, int = -1 );
virtual OGRErr exportToWkb( OGRwkbByteOrder, unsigned char * ) const;
virtual OGRErr importFromWkt( char ** );
virtual OGRErr exportToWkt( char ** ppszDstText ) const;
// IGeometry
virtual int getDimension() const;
virtual void getEnvelope( OGREnvelope * psEnvelope ) const;
// ISpatialRelation
virtual OGRBoolean Equals( OGRGeometry * ) const;
// Non standard
virtual void setCoordinateDimension( int nDimension );
void addRing( OGRLinearRing * );
void addRingDirectly( OGRLinearRing * );
OGRLinearRing *getExteriorRing();
const OGRLinearRing *getExteriorRing() const;
int getNumInteriorRings() const;
OGRLinearRing *getInteriorRing( int );
const OGRLinearRing *getInteriorRing( int ) const;
OGRBoolean IsPointOnSurface( const OGRPoint * ) const;
virtual void closeRings();
};
/************************************************************************/
/* OGRGeometryCollection */
/************************************************************************/
/**
* A collection of 1 or more geometry objects.
*
* All geometries must share a common spatial reference system, and
* Subclasses may impose additional restrictions on the contents.
*/
class CPL_DLL OGRGeometryCollection : public OGRGeometry
{
int nGeomCount;
OGRGeometry **papoGeoms;
int nCoordinateDimension;
public:
OGRGeometryCollection();
virtual ~OGRGeometryCollection();
// Non standard (OGRGeometry).
virtual const char *getGeometryName() const;
virtual OGRwkbGeometryType getGeometryType() const;
virtual OGRGeometry *clone() const;
virtual void empty();
virtual OGRErr transform( OGRCoordinateTransformation *poCT );
virtual void flattenTo2D();
// IWks Interface
virtual int WkbSize() const;
virtual OGRErr importFromWkb( unsigned char *, int = -1 );
virtual OGRErr exportToWkb( OGRwkbByteOrder, unsigned char * ) const;
virtual OGRErr importFromWkt( char ** );
virtual OGRErr exportToWkt( char ** ppszDstText ) const;
// IGeometry methods
virtual int getDimension() const;
virtual void getEnvelope( OGREnvelope * psEnvelope ) const;
// IGeometryCollection
int getNumGeometries() const;
OGRGeometry *getGeometryRef( int );
const OGRGeometry *getGeometryRef( int ) const;
// ISpatialRelation
virtual OGRBoolean Equals( OGRGeometry * ) const;
// Non standard
virtual void setCoordinateDimension( int nDimension );
virtual OGRErr addGeometry( const OGRGeometry * );
virtual OGRErr addGeometryDirectly( OGRGeometry * );
virtual OGRErr removeGeometry( int iIndex, int bDelete = TRUE );
void closeRings();
};
/************************************************************************/
/* OGRMultiPolygon */
/************************************************************************/
/**
* A collection of non-overlapping OGRPolygons.
*
* Note that the IMultiSurface class hasn't been modelled, nor have any
* of it's methods.
*/
class CPL_DLL OGRMultiPolygon : public OGRGeometryCollection
{
public:
OGRMultiPolygon();
// Non standard (OGRGeometry).
virtual const char *getGeometryName() const;
virtual OGRwkbGeometryType getGeometryType() const;
virtual OGRGeometry *clone() const;
virtual OGRErr importFromWkt( char ** );
virtual OGRErr exportToWkt( char ** ) const;
// Non standard
virtual OGRErr addGeometryDirectly( OGRGeometry * );
double get_Area() const;
};
/************************************************************************/
/* OGRMultiPoint */
/************************************************************************/
/**
* A collection of OGRPoints.
*/
class CPL_DLL OGRMultiPoint : public OGRGeometryCollection
{
private:
OGRErr importFromWkt_Bracketed( char ** );
public:
OGRMultiPoint();
// Non standard (OGRGeometry).
virtual const char *getGeometryName() const;
virtual OGRwkbGeometryType getGeometryType() const;
virtual OGRGeometry *clone() const;
virtual OGRErr importFromWkt( char ** );
virtual OGRErr exportToWkt( char ** ) const;
// Non standard
virtual OGRErr addGeometryDirectly( OGRGeometry * );
};
/************************************************************************/
/* OGRMultiLineString */
/************************************************************************/
/**
* A collection of OGRLineStrings.
*/
class CPL_DLL OGRMultiLineString : public OGRGeometryCollection
{
public:
OGRMultiLineString();
~OGRMultiLineString();
// Non standard (OGRGeometry).
virtual const char *getGeometryName() const;
virtual OGRwkbGeometryType getGeometryType() const;
virtual OGRGeometry *clone() const;
virtual OGRErr importFromWkt( char ** );
virtual OGRErr exportToWkt( char ** ) const;
// Non standard
virtual OGRErr addGeometryDirectly( OGRGeometry * );
};
/************************************************************************/
/* OGRGeometryFactory */
/************************************************************************/
/**
* Create geometry objects from well known text/binary.
*/
class CPL_DLL OGRGeometryFactory
{
public:
static OGRErr createFromWkb( unsigned char *, OGRSpatialReference *,
OGRGeometry **, int = -1 );
static OGRErr createFromWkt( char **, OGRSpatialReference *,
OGRGeometry ** );
static OGRGeometry *createFromGML( const char * );
static OGRGeometry *createFromGEOS( GEOSGeom );
static void destroyGeometry( OGRGeometry * );
static OGRGeometry *createGeometry( OGRwkbGeometryType );
static OGRGeometry * forceToPolygon( OGRGeometry * );
static OGRGeometry * forceToMultiPolygon( OGRGeometry * );
static OGRGeometry * forceToMultiPoint( OGRGeometry * );
static OGRGeometry * forceToMultiLineString( OGRGeometry * );
static void *getGEOSGeometryFactory();
static int haveGEOS();
};
#endif /* ndef _OGR_GEOMETRY_H_INCLUDED */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -