geos::geom::Geometry Class Reference

Basic implementation of Geometry, constructed and destructed by GeometryFactory. More...

#include <geos.h>

Inheritance diagram for geos::geom::Geometry:

geos::geom::GeometryCollection geos::geom::LineString geos::geom::Point geos::geom::Polygon geos::geom::MultiLineString geos::geom::MultiPoint geos::geom::MultiPolygon geos::geom::LinearRing

List of all members.

Public Types

typedef std::vector< const
Geometry * > 
ConstVect
 A vector of const Geometry pointers.
typedef std::vector< Geometry * > NonConstVect
 A vector of non-const Geometry pointers.
typedef std::auto_ptr< GeometryAutoPtr
 An auto_ptr of Geometry.

Public Member Functions

virtual Geometryclone () const =0
 Make a deep-copy of this Geometry.
virtual ~Geometry ()
 Destroy Geometry and all components.
const GeometryFactorygetFactory () const
 Gets the factory which contains the context in which this geometry was created.
void setUserData (void *newUserData)
 A simple scheme for applications to add their own custom data to a Geometry. An example use might be to add an object representing a Coordinate Reference System.
void * getUserData ()
 Gets the user data object for this geometry, if any.
virtual int getSRID () const
virtual void setSRID (int newSRID)
const PrecisionModelgetPrecisionModel () const
 Get the PrecisionModel used to create this Geometry.
virtual const CoordinategetCoordinate () const =0
 Returns a vertex of this Geometry, or NULL if this is the empty geometry.
virtual CoordinateSequencegetCoordinates () const =0
 Returns this Geometry vertices. Caller takes ownership of the returned object.
virtual size_t getNumPoints () const =0
 Returns the count of this Geometrys vertices.
virtual bool isSimple () const =0
 Returns false if the Geometry not simple.
virtual std::string getGeometryType () const =0
 Return a string representation of this Geometry type.
virtual GeometryTypeId getGeometryTypeId () const =0
 Return an integer representation of this Geometry type.
virtual size_t getNumGeometries () const
virtual const GeometrygetGeometryN (size_t) const
virtual bool isValid () const
 Tests the validity of this Geometry.
virtual bool isEmpty () const =0
 Returns whether or not the set of points in this Geometry is empty.
virtual Dimension::DimensionType getDimension () const =0
 Returns the dimension of this Geometry (0=point, 1=line, 2=surface).
virtual GeometrygetBoundary () const =0
 Returns the boundary as a newly allocated Geometry object.
virtual int getBoundaryDimension () const =0
 Returns the dimension of this Geometrys inherent boundary.
virtual GeometrygetEnvelope () const
 Returns this Geometrys bounding box.
virtual const EnvelopegetEnvelopeInternal () const
 Returns the minimum and maximum x and y values in this Geometry, or a null Envelope if this Geometry is empty.
virtual bool disjoint (const Geometry *other) const
 Returns true if the DE-9IM intersection matrix for the two Geometrys is FF*FF****.
virtual bool touches (const Geometry *other) const
 Returns true if the DE-9IM intersection matrix for the two Geometrys is FT*******, F**T***** or F***T****.
virtual bool intersects (const Geometry *g) const
 Returns true if disjoint returns false.
virtual bool crosses (const Geometry *g) const
 Returns true if the DE-9IM intersection matrix for the two Geometrys is T*T****** (for a point and a curve, a point and an area or a line and an area) 0******** (for two curves).
virtual bool within (const Geometry *g) const
 Returns true if the DE-9IM intersection matrix for the two Geometrys is T*F**F***.
virtual bool contains (const Geometry *g) const
 Returns true if other.within(this) returns true.
virtual bool overlaps (const Geometry *g) const
 Returns true if the DE-9IM intersection matrix for the two Geometrys is T*T***T** (for two points or two surfaces) 1*T***T** (for two curves).
virtual bool relate (const Geometry *g, const std::string &intersectionPattern) const
 Returns true if the elements in the DE-9IM intersection matrix for the two Geometrys match the elements in intersectionPattern.
bool relate (const Geometry &g, const std::string &intersectionPattern) const
virtual IntersectionMatrixrelate (const Geometry *g) const
 Returns the DE-9IM intersection matrix for the two Geometrys.
IntersectionMatrixrelate (const Geometry &g) const
virtual bool equals (const Geometry *g) const
 Returns true if the DE-9IM intersection matrix for the two Geometrys is T*F**FFF*.
bool covers (const Geometry *g) const
 Returns true if this geometry covers the specified geometry.
bool coveredBy (const Geometry *g) const
 Returns true if this geometry is covered by the specified geometry.
virtual std::string toString () const
 Returns the Well-known Text representation of this Geometry.
virtual std::string toText () const
virtual Geometrybuffer (double distance) const
 Returns a buffer region around this Geometry having the given width.
virtual Geometrybuffer (double distance, int quadrantSegments) const
 Returns a buffer region around this Geometry having the given width and with a specified number of segments used to approximate curves.
virtual Geometrybuffer (double distance, int quadrantSegments, int endCapStyle) const
 Computes a buffer area around this geometry having the given width and with a specified accuracy of approximation for circular arcs, and using a specified end cap style.
virtual GeometryconvexHull () const
 Returns the smallest convex Polygon that contains all the points in the Geometry.
virtual Geometryintersection (const Geometry *other) const
 Returns a Geometry representing the points shared by this Geometry and other.
virtual GeometryUnion (const Geometry *other) const
 Returns a Geometry representing all the points in this Geometry and other.
virtual Geometrydifference (const Geometry *other) const
 Returns a Geometry representing the points making up this Geometry that do not make up other.
virtual GeometrysymDifference (const Geometry *other) const
 Returns a set combining the points in this Geometry not in other, and the points in other not in this Geometry.
virtual bool equalsExact (const Geometry *other, double tolerance=0) const =0
 Returns true if the two Geometrys are exactly equal, up to a specified tolerance.
virtual void apply_rw (const CoordinateFilter *filter)=0
virtual void apply_ro (CoordinateFilter *filter) const =0
virtual void apply_rw (GeometryFilter *filter)
virtual void apply_ro (GeometryFilter *filter) const
virtual void apply_rw (GeometryComponentFilter *filter)
virtual void apply_ro (GeometryComponentFilter *filter) const
template<class T>
void applyComponentFilter (T &f) const
 Apply a fiter to each component of this geometry. The filter is expected to provide a .filter(const Geometry*) method.
virtual void normalize ()=0
 Converts this Geometry to normal form (or canonical form).
virtual int compareTo (const Geometry *geom) const
virtual double distance (const Geometry *g) const
 Returns the minimum distance between this Geometry and the Geometry g.
virtual double getArea () const
 Returns the area of this Geometry.
virtual double getLength () const
 Returns the length of this Geometry.
virtual bool isWithinDistance (const Geometry *geom, double cDistance)
 Tests whether the distance from this Geometry to another is less than or equal to a specified value.
virtual PointgetCentroid () const
 Computes the centroid of this Geometry.
virtual bool getCentroid (Coordinate &ret) const
 Computes the centroid of this Geometry as a Coordinate.
virtual PointgetInteriorPoint () const
 Computes an interior point of this Geometry.
virtual void geometryChanged ()
void geometryChangedAction ()
 Notifies this Geometry that its Coordinates have been changed by an external party.

Protected Member Functions

virtual bool isEquivalentClass (const Geometry *other) const
 Returns whether the two Geometrys are equal, from the point of view of the equalsExact method.
virtual Envelope::AutoPtr computeEnvelopeInternal () const =0
virtual int compareToSameClass (const Geometry *geom) const =0
int compare (std::vector< Coordinate > a, std::vector< Coordinate > b) const
int compare (std::vector< Geometry * > a, std::vector< Geometry * > b) const
bool equal (const Coordinate &a, const Coordinate &b, double tolerance) const
virtual bool isRectangle () const
 Geometry (const Geometry &geom)
 Geometry (const GeometryFactory *factory)
 Construct a geometry with the given GeometryFactory. Will keep a reference to the factory, so don't delete it until al Geometry objects referring to it are deleted.

Static Protected Member Functions

static bool hasNonEmptyElements (const std::vector< Geometry * > *geometries)
 Returns true if the array contains any non-empty Geometrys.
static bool hasNullElements (const CoordinateSequence *list)
 Returns true if the CoordinateSequence contains any null elements.
static bool hasNullElements (const std::vector< Geometry * > *lrs)
 Returns true if the vector contains any null elements.
static void checkNotGeometryCollection (const Geometry *g)

Protected Attributes

std::auto_ptr< Envelopeenvelope
int SRID

Friends

class GeometryFactory
std::ostream & operator<< (std::ostream &os, const Geometry &geom)
 Write the Well-known Binary representation of this Geometry as an HEX string to the given output stream.


Detailed Description

Basic implementation of Geometry, constructed and destructed by GeometryFactory.

clone returns a deep copy of the object. Use GeometryFactory to construct.

Binary Predicates

Because it is not clear at this time what semantics for spatial analysis methods involving GeometryCollections would be useful, GeometryCollections are not supported as arguments to binary predicates (other than convexHull) or the relate method.

Set-Theoretic Methods

The spatial analysis methods will return the most specific class possible to represent the result. If the result is homogeneous, a Point, LineString, or Polygon will be returned if the result contains a single element; otherwise, a MultiPoint, MultiLineString, or MultiPolygon will be returned. If the result is heterogeneous a GeometryCollection will be returned.

Because it is not clear at this time what semantics for set-theoretic methods involving GeometryCollections would be useful, GeometryCollections are not supported as arguments to the set-theoretic methods.

Representation of Computed Geometries

The SFS states that the result of a set-theoretic method is the "point-set" result of the usual set-theoretic definition of the operation (SFS 3.2.21.1). However, there are sometimes many ways of representing a point set as a Geometry.

The SFS does not specify an unambiguous representation of a given point set returned from a spatial analysis method. One goal of JTS is to make this specification precise and unambiguous. JTS will use a canonical form for Geometrys returned from spatial analysis methods. The canonical form is a Geometry which is simple and noded:

This definition implies that non-simple geometries which are arguments to spatial analysis methods must be subjected to a line-dissolve process to ensure that the results are simple.

Constructed Points And The Precision Model

The results computed by the set-theoretic methods may contain constructed points which are not present in the input Geometry. These new points arise from intersections between line segments in the edges of the input Geometry. In the general case it is not possible to represent constructed points exactly. This is due to the fact that the coordinates of an intersection point may contain twice as many bits of precision as the coordinates of the input line segments. In order to represent these constructed points explicitly, JTS must truncate them to fit the PrecisionModel.

Unfortunately, truncating coordinates moves them slightly. Line segments which would not be coincident in the exact result may become coincident in the truncated representation. This in turn leads to "topology collapses" -- situations where a computed element has a lower dimension than it would in the exact result.

When JTS detects topology collapses during the computation of spatial analysis methods, it will throw an exception. If possible the exception will report the location of the collapse.

equals(Object) and hashCode are not overridden, so that when two topologically equal Geometries are added to HashMaps and HashSets, they remain distinct. This behaviour is desired in many cases.


Member Function Documentation

const GeometryFactory* geos::geom::Geometry::getFactory (  )  const [inline]

Gets the factory which contains the context in which this geometry was created.

Returns:
the factory for this geometry

void geos::geom::Geometry::setUserData ( void *  newUserData  )  [inline]

A simple scheme for applications to add their own custom data to a Geometry. An example use might be to add an object representing a Coordinate Reference System.

Note that user data objects are not present in geometries created by construction methods.

Parameters:
newUserData an object, the semantics for which are defined by the application using this Geometry

void* geos::geom::Geometry::getUserData (  )  [inline]

Gets the user data object for this geometry, if any.

Returns:
the user data object, or null if none set

virtual size_t geos::geom::Geometry::getNumGeometries (  )  const [inline, virtual]

Returns the number of geometries in this collection (or 1 if this is not a collection)

Reimplemented in geos::geom::GeometryCollection.

virtual const Geometry* geos::geom::Geometry::getGeometryN ( size_t   )  const [inline, virtual]

Returns a pointer to the nth Geometry int this collection (or self if this is not a collection)

Reimplemented in geos::geom::GeometryCollection.

virtual bool geos::geom::Geometry::isValid (  )  const [virtual]

Tests the validity of this Geometry.

Subclasses provide their own definition of "valid".

Returns:
true if this Geometry is valid
See also:
IsValidOp

virtual Geometry* geos::geom::Geometry::getBoundary (  )  const [pure virtual]

Returns the boundary as a newly allocated Geometry object.

Returned geometry is empty if this Geometry is empty.

Implemented in geos::geom::GeometryCollection, geos::geom::LineString, geos::geom::MultiLineString, geos::geom::MultiPoint, geos::geom::MultiPolygon, geos::geom::Point, and geos::geom::Polygon.

virtual bool geos::geom::Geometry::relate ( const Geometry g,
const std::string &  intersectionPattern 
) const [virtual]

Returns true if the elements in the DE-9IM intersection matrix for the two Geometrys match the elements in intersectionPattern.

IntersectionPattern elements may be: 0 1 2 T ( = 0, 1 or 2) F ( = -1) * ( = -1, 0, 1 or 2).

For more information on the DE-9IM, see the OpenGIS Simple Features Specification.

Exceptions:
util::IllegalArgumentException if either arg is a collection

bool geos::geom::Geometry::covers ( const Geometry g  )  const

Returns true if this geometry covers the specified geometry.

The covers predicate has the following equivalent definitions:

Note the difference between covers and contains

Parameters:
g the Geometry with which to compare this Geometry
Returns:
true if this Geometry covers g
See also:
Geometry::contains

Geometry::coveredBy

bool geos::geom::Geometry::coveredBy ( const Geometry g  )  const [inline]

Returns true if this geometry is covered by the specified geometry.

Note the difference between coveredBy and within

Parameters:
g the Geometry with which to compare this Geometry
Returns:
true if this Geometry is covered by g
See also:
Geometry::within

Geometry::covers

virtual Geometry* geos::geom::Geometry::buffer ( double  distance  )  const [virtual]

Returns a buffer region around this Geometry having the given width.

Exceptions:
util::TopologyException if a robustness error occurs

virtual Geometry* geos::geom::Geometry::buffer ( double  distance,
int  quadrantSegments 
) const [virtual]

Returns a buffer region around this Geometry having the given width and with a specified number of segments used to approximate curves.

Exceptions:
util::TopologyException if a robustness error occurs

virtual Geometry* geos::geom::Geometry::buffer ( double  distance,
int  quadrantSegments,
int  endCapStyle 
) const [virtual]

Computes a buffer area around this geometry having the given width and with a specified accuracy of approximation for circular arcs, and using a specified end cap style.

Buffer area boundaries can contain circular arcs. To represent these arcs using linear geometry they must be approximated with line segments.

The quadrantSegments argument allows controlling the accuracy of the approximation by specifying the number of line segments used to represent a quadrant of a circle

The end cap style specifies the buffer geometry that will be created at the ends of linestrings. The styles provided are:

Parameters:
distance the width of the buffer (may be positive, negative or 0)
quadrantSegments the number of line segments used to represent a quadrant of a circle
endCapStyle the end cap style to use
Returns:
an area geometry representing the buffer region
Exceptions:
util::TopologyException if a robustness error occurs
See also:
BufferOp

virtual Geometry* geos::geom::Geometry::intersection ( const Geometry other  )  const [virtual]

Returns a Geometry representing the points shared by this Geometry and other.

Exceptions:
util::TopologyException if a robustness error occurs
util::IllegalArgumentException if either arg is a collection

virtual Geometry* geos::geom::Geometry::Union ( const Geometry other  )  const [virtual]

Returns a Geometry representing all the points in this Geometry and other.

Exceptions:
util::TopologyException if a robustness error occurs
util::IllegalArgumentException if either arg is a collection

virtual Geometry* geos::geom::Geometry::difference ( const Geometry other  )  const [virtual]

Returns a Geometry representing the points making up this Geometry that do not make up other.

Exceptions:
util::TopologyException if a robustness error occurs
util::IllegalArgumentException if either arg is a collection

virtual Geometry* geos::geom::Geometry::symDifference ( const Geometry other  )  const [virtual]

Returns a set combining the points in this Geometry not in other, and the points in other not in this Geometry.

Exceptions:
util::TopologyException if a robustness error occurs
util::IllegalArgumentException if either arg is a collection

template<class T>
void geos::geom::Geometry::applyComponentFilter ( T &  f  )  const [inline]

Apply a fiter to each component of this geometry. The filter is expected to provide a .filter(const Geometry*) method.

I intend similar templated methods to replace all the virtual apply_rw and apply_ro functions... --strk(2005-02-06);

virtual Point* geos::geom::Geometry::getCentroid (  )  const [virtual]

Computes the centroid of this Geometry.

The centroid is equal to the centroid of the set of component Geometrys of highest dimension (since the lower-dimension geometries contribute zero "weight" to the centroid)

Returns:
a Point which is the centroid of this Geometry

virtual bool geos::geom::Geometry::getCentroid ( Coordinate ret  )  const [virtual]

Computes the centroid of this Geometry as a Coordinate.

Returns false if centroid cannot be computed (EMPTY geometry)

virtual Point* geos::geom::Geometry::getInteriorPoint (  )  const [virtual]

Computes an interior point of this Geometry.

An interior point is guaranteed to lie in the interior of the Geometry, if it possible to calculate such a point exactly. Otherwise, the point may lie on the boundary of the geometry.

Returns:
a Point which is in the interior of this Geometry, or null if the geometry doesn't have an interior (empty)

virtual bool geos::geom::Geometry::isRectangle (  )  const [inline, protected, virtual]

Deprecated:
Deprecated:
Polygon overrides to check for actual rectangle

Reimplemented in geos::geom::Polygon.


The documentation for this class was generated from the following file:
Generated on Fri Mar 27 04:53:21 2009 for GEOS by  doxygen 1.5.4