geos::geom::Geometry Class Referenceabstract

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

`#include <geos.h>`

Inheritance diagram for geos::geom::Geometry:

## Public Types

using | ConstVect = std::vector<const Geometry*>
| A vector of const Geometry pointers.
using | NonConstVect = std::vector<Geometry*>
| A vector of non-const Geometry pointers.
using | Ptr = std::unique_ptr<Geometry>
| An unique_ptr of Geometry.

## Public Member Functions

std::unique_ptr< Geometry > | clone () const
| Make a deep-copy of this Geometry.
virtual | ~Geometry ()
| Destroy Geometry and all components.
const GeometryFactory * | getFactory () 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 () const
| Gets the user data object for this geometry, if any.
int | getSRID () const
| Returns the ID of the Spatial Reference System used by the Geometry.
virtual void | setSRID (int newSRID)
| Sets the ID of the Spatial Reference System used by the Geometry.
const PrecisionModel * | getPrecisionModel () const
| Get the PrecisionModel used to create this Geometry.
virtual const CoordinateXY * | getCoordinate () const =0
| Returns a vertex of this Geometry, or NULL if this is the empty geometry.
virtual std::unique_ptr< CoordinateSequence > | getCoordinates () const =0
| Returns this Geometry vertices. Caller takes ownership of the returned object.
virtual std::size_t | getNumPoints () const =0
| Returns the count of this Geometrys vertices.
virtual bool | isSimple () const
| Returns false if the Geometry not simple.
virtual std::string | getGeometryType () const =0
| Return a string representation of this Geometry type.
virtual bool | hasCurvedComponents () const
| Returns whether the Geometry contains curved components.
virtual GeometryTypeId | getGeometryTypeId () const =0
| Return an integer representation of this Geometry type.
virtual std::size_t | getNumGeometries () const
| Returns the number of geometries in this collection, or 1 if this is not a collection.
virtual const Geometry * | getGeometryN (std::size_t) const
| Returns a pointer to the nth Geometry in this collection (or self if this is not a collection).
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 bool | isRectangle () const
| Polygon overrides to check for actual rectangle.
virtual Dimension::DimensionType | getDimension () const =0
| Returns the dimension of this Geometry (0=point, 1=line, 2=surface).
virtual bool | hasDimension (Dimension::DimensionType d) const
| Checks whether any component of this geometry has dimension d.
virtual bool | isDimensionStrict (Dimension::DimensionType d) const
| Checks whether this Geometry consists only of components having dimension d.
bool | isPuntal () const
bool | isLineal () const
bool | isPolygonal () const
bool | isMixedDimension () const
bool | isMixedDimension (Dimension::DimensionType *baseDim) const
bool | isCollection () const
virtual uint8_t | getCoordinateDimension () const =0
| Returns the coordinate dimension of this Geometry (2=XY, 3=XYZ or XYM, 4=XYZM).
virtual bool | hasZ () const =0
virtual bool | hasM () const =0
virtual std::unique_ptr< Geometry > | getBoundary () const =0
| Returns the boundary, or an empty geometry of appropriate dimension if this `Geometry` is empty.
virtual int | getBoundaryDimension () const =0
| Returns the dimension of this Geometrys inherent boundary.
virtual std::unique_ptr< Geometry > | getEnvelope () const
| Returns this Geometrys bounding box.
virtual const Envelope * | getEnvelopeInternal () const =0
| 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
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
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).
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
std::unique_ptr< IntersectionMatrix > | relate (const Geometry *g) const
| Returns the DE-9IM intersection matrix for the two Geometrys.
std::unique_ptr< IntersectionMatrix > | relate (const Geometry &g) const
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
| Tests whether 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
std::unique_ptr< Geometry > | buffer (double distance) const
std::unique_ptr< Geometry > | buffer (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.
std::unique_ptr< Geometry > | buffer (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 std::unique_ptr< Geometry > | convexHull () const
| Returns the smallest convex Polygon that contains all the points in the Geometry.
std::unique_ptr< Geometry > | reverse () const
| Computes a new geometry which has all component coordinate sequences in reverse order (opposite orientation) to this one.
std::unique_ptr< Geometry > | intersection (const Geometry *other) const
| Returns a Geometry representing the points shared by this Geometry and other.
std::unique_ptr< Geometry > | Union (const Geometry *other) const
| Returns a Geometry representing all the points in this Geometry and other.
Ptr | Union () const
| Computes the union of all the elements of this geometry. Heterogeneous GeometryCollections are fully supported.
std::unique_ptr< Geometry > | difference (const Geometry *other) const
| Returns a Geometry representing the points making up this Geometry that do not make up other.
std::unique_ptr< Geometry > | symDifference (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 iff the two Geometrys are of the same type and their vertices corresponding by index are equal up to a specified distance tolerance. Geometries are not required to have the same dimemsion; any Z/M values are ignored.
virtual bool | equalsIdentical (const Geometry *other) const =0
| Returns true if the two geometries are of the same type and their vertices corresponding by index are equal in all dimensions.
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
virtual void | apply_rw (CoordinateSequenceFilter &filter)=0
virtual void | apply_ro (CoordinateSequenceFilter &filter) const =0
template<class T>
void | applyComponentFilter (T &f) const
| Apply a filter to each component of this geometry. The filter is expected to provide a .filter(const Geometry*) method.
virtual void | normalize ()=0
int | compareTo (const Geometry *geom) const
| Comparator for sorting geometry.
virtual double | getArea () const
| Returns the area of this Geometry.
virtual double | getLength () const
| Returns the length of this Geometry.
virtual double | distance (const Geometry *g) const
virtual bool | isWithinDistance (const Geometry *geom, double cDistance) const
| Tests whether the distance from this Geometry to another is less than or equal to a specified value.
virtual std::unique_ptr< Point > | getCentroid () const
| Computes the centroid of this `Geometry`.
virtual bool | getCentroid (CoordinateXY &ret) const
| Computes the centroid of this Geometry as a Coordinate.
std::unique_ptr< Point > | getInteriorPoint () const
| Computes an interior point of this `Geometry`.
void | geometryChanged ()
| Notifies this Geometry that its Coordinates have been changed by an external party (using a CoordinateFilter, for example).
virtual void | geometryChangedAction ()=0
| Notifies this Geometry that its Coordinates have been changed by an external party.

## Static Public Member Functions

static GeometryTypeId | multiTypeId (GeometryTypeId typeId)

## Protected Member Functions

virtual Geometry * | cloneImpl () const =0
| Make a deep-copy of this Geometry.
virtual Geometry * | reverseImpl () const =0
| Make a geometry with coordinates in reverse order.
virtual bool | isEquivalentClass (const Geometry *other) const
| Returns whether the two Geometrys are equal, from the point of view of the equalsExact method.
virtual int | compareToSameClass (const Geometry *geom) const =0
bool | equal (const CoordinateXY &a, const CoordinateXY &b, double tolerance) const
| Geometry (const Geometry &geom)
| Geometry (const GeometryFactory *factory)
| Construct a geometry with the given GeometryFactory.
virtual int | getSortIndex () const =0

## Static Protected Member Functions

template<typename T>
static bool | hasNonEmptyElements (const std::vector< T > *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.
template<typename T>
static bool | hasNullElements (const std::vector< T > *geometries)
| Returns true if the vector contains any null elements.
static void | checkNotGeometryCollection (const Geometry *g)
template<typename T>
static int | compare (const T &a, const T &b)
template<typename T>
static std::vector< std::unique_ptr< Geometry > > | toGeometryArray (std::vector< std::unique_ptr< T > > &&v)
static std::vector< std::unique_ptr< Geometry > > | toGeometryArray (std::vector< std::unique_ptr< Geometry > > &&v)

## Protected Attributes

int | SRID

## Friends

class | GeometryFactory

## 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 `GeometryCollection`s would be useful, `GeometryCollection`s 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 `GeometryCollection`s 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 `Geometry`s returned from spatial analysis methods. The canonical form is a `Geometry` which is simple and noded:

- Simple means that the Geometry returned will be simple according to the JTS definition of `isSimple`.
- Noded applies only to overlays involving `LineString`s. It means that all intersection points on `LineString`s will be present as endpoints of `LineString`s in the result.

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.

## Constructor & Destructor Documentation

## Geometry()

geos::geom::Geometry::Geometry | ( | const GeometryFactory * | factory | ) |

protected

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.

Parameters

  factory |

## Member Function Documentation

## apply_ro()

virtual void geos::geom::Geometry::apply_ro | ( | CoordinateSequenceFilter & | filter | ) | const

pure virtual

Performs a read-only operation on the coordinates in this Geometry's CoordinateSequences.

Parameters

  filter | the filter to apply

Implemented in geos::geom::GeometryCollection, geos::geom::Point, and geos::geom::Surface.

## apply_rw()

virtual void geos::geom::Geometry::apply_rw | ( | CoordinateSequenceFilter & | filter | ) |

pure virtual

Performs an operation on the coordinates in this Geometry's CoordinateSequences. If the filter reports that a coordinate value has been changed, `geometryChanged` will be called automatically.

Parameters

  filter | the filter to apply

Implemented in geos::geom::GeometryCollection, geos::geom::Point, and geos::geom::Surface.

## applyComponentFilter()

template<class T>

void geos::geom::Geometry::applyComponentFilter | ( | T & | f | ) | const

inline

Apply a filter 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);

References getGeometryN(), and getNumGeometries().

Referenced by geos::operation::linemerge::LineSequencer::add().

## buffer() [1/3]

std::unique_ptr< Geometry > geos::geom::Geometry::buffer | ( | double | distance | ) | const

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

Exceptions

  util::TopologyException | if a robustness error occurs

References distance().

## buffer() [2/3]

std::unique_ptr< Geometry > geos::geom::Geometry::buffer | ( | 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.

Exceptions

  util::TopologyException | if a robustness error occurs

References distance().

## buffer() [3/3]

std::unique_ptr< Geometry > geos::geom::Geometry::buffer | ( | 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.

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:

- BufferOp::CAP_ROUND - (default) a semi-circle
- BufferOp::CAP_BUTT - a straight line perpendicular to the end segment
- BufferOp::CAP_SQUARE - a half-square

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

References distance().

## cloneImpl()

virtual Geometry * geos::geom::Geometry::cloneImpl | ( |  | ) | const

protected pure virtual

Make a deep-copy of this Geometry.

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

Referenced by clone().

## convexHull()

virtual std::unique_ptr< Geometry > geos::geom::Geometry::convexHull | ( |  | ) | const

virtual

Returns the smallest convex Polygon that contains all the points in the Geometry.

Reimplemented in geos::geom::Surface.

## coveredBy()

bool geos::geom::Geometry::coveredBy | ( | const Geometry * | g | ) | const

Tests whether this geometry is covered by the specified geometry.

The `coveredBy` predicate has the following equivalent definitions:

- Every point of this geometry is a point of the other geometry.
- The DE-9IM Intersection Matrix for the two geometries matches `[T*F**F***]` or `[*TF**F***]` or `[**FT*F***]` or `[**F*TF***]`
- `g.covers(this)` (`coveredBy` is the converse of `covers`)

If either geometry is empty, the value of this predicate is false.

This predicate is similar to `within`, but is more inclusive (i.e. returns true for more cases).

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

## covers()

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:

- Every point of the other geometry is a point of this geometry.
- The DE-9IM Intersection Matrix for the two geometries is `T*****FF*` or `T****FF` or `***T**FF*` or `****T*FF*`
- `g.coveredBy(this)` (`covers` is the inverse of `coveredBy`)

If either geometry is empty, the value of this predicate is false.

This predicate is similar to `contains`, but is more inclusive (i.e. returns true for more cases). In particular, unlike `contains` it does not distinguish between points in the boundary and in the interior of geometries. For most situations, `covers` should be used in preference to `contains`. As an added benefit, `covers` is more amenable to optimization, and hence should be more performant.

Parameters

  g | the `Geometry` with which to compare this `Geometry`

Returns
  `true` if this `Geometry` covers `g`

See also
  Geometry::contains
  Geometry::coveredBy

## crosses()

virtual bool geos::geom::Geometry::crosses | ( | const Geometry * | g | ) | const

virtual

Tests whether this geometry crosses the specified geometry.

The `crosses` predicate has the following equivalent definitions:

- The geometries have some but not all interior points in common.
- The DE-9IM Intersection Matrix for the two geometries matches
  - `[T*T******]` (for P/L, P/A, and L/A situations)
  - `[T*****T**]` (for L/P, A/P, and A/L situations)
  - `[0********]` (for L/L situations) For any other combination of dimensions this predicate returns `false`.

The SFS defined this predicate only for P/L, P/A, L/L, and L/A situations. JTS extends the definition to apply to L/P, A/P and A/L situations as well, in order to make the relation symmetric.

Parameters

  g | the `Geometry` with which to compare this `Geometry`

Returns
  `true` if the two `Geometry`s cross.

## difference()

std::unique_ptr< Geometry > geos::geom::Geometry::difference | ( | const Geometry * | other | ) | const

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 input is a non-empty GeometryCollection

## disjoint()

virtual bool geos::geom::Geometry::disjoint | ( | const Geometry * | other | ) | const

virtual

Tests whether this geometry is disjoint from the specified geometry.

The `disjoint` predicate has the following equivalent definitions:

- The two geometries have no point in common
- The DE-9IM Intersection Matrix for the two geometries matches `[FF*FF****]`
- `! g.intersects(this)` (`disjoint` is the inverse of `intersects`)

Parameters

  other | the Geometry with which to compare this Geometry

Returns
  true if the two `Geometry`s are disjoint

See also
  Geometry::intersects

## distance()

virtual double geos::geom::Geometry::distance | ( | const Geometry * | g | ) | const

virtual

Returns the minimum distance between this Geometry and the Geometry g

Parameters

  g | the Geometry to calculate distance to

Returns
  the distance in Cartesian units

Referenced by buffer(), buffer(), and buffer().

## equalsExact()

virtual bool geos::geom::Geometry::equalsExact | ( | const Geometry * | other,
|  | double | tolerance = 0 ) const

pure virtual

Returns true iff the two Geometrys are of the same type and their vertices corresponding by index are equal up to a specified distance tolerance. Geometries are not required to have the same dimemsion; any Z/M values are ignored.

Implemented in geos::geom::GeometryCollection, geos::geom::Point, and geos::geom::Surface.

## equalsIdentical()

virtual bool geos::geom::Geometry::equalsIdentical | ( | const Geometry * | other | ) | const

pure virtual

Returns true if the two geometries are of the same type and their vertices corresponding by index are equal in all dimensions.

Implemented in geos::geom::GeometryCollection, geos::geom::Point, and geos::geom::Surface.

## geometryChangedAction()

virtual void geos::geom::Geometry::geometryChangedAction | ( |  | ) |

pure virtual

Notifies this Geometry that its Coordinates have been changed by an external party.

Implemented in geos::geom::GeometryCollection, geos::geom::LineString, geos::geom::Point, and geos::geom::Surface.

## getArea()

virtual double geos::geom::Geometry::getArea | ( |  | ) | const

virtual

Returns the area of this Geometry.

Reimplemented in geos::geom::GeometryCollection, and geos::geom::Polygon.

## getBoundary()

virtual std::unique_ptr< Geometry > geos::geom::Geometry::getBoundary | ( |  | ) | const

pure virtual

Returns the boundary, or an empty geometry of appropriate dimension if this `Geometry` is empty.

(In the case of zero-dimensional geometries, an empty GeometryCollection is returned.) For a discussion of this function, see the OpenGIS Simple Features Specification. As stated in SFS Section 2.1.13.1, "the boundary of a Geometry is a set of Geometries of the next lower dimension."

Returns
  the closure of the combinatorial boundary of this `Geometry`. Ownershipof the returned object transferred to caller.

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

## getBoundaryDimension()

virtual int geos::geom::Geometry::getBoundaryDimension | ( |  | ) | const

pure virtual

Returns the dimension of this Geometrys inherent boundary.

Implemented in geos::geom::GeometryCollection, geos::geom::LinearRing, geos::geom::MultiLineString, geos::geom::MultiPoint, geos::geom::MultiPolygon, geos::geom::Point, and geos::geom::Surface.

## getCentroid() [1/2]

virtual std::unique_ptr< 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 Geometries of highest dimension (since the lower-dimension geometries contribute zero "weight" to the centroid)

Returns
  a `Point` which is the centroid of this Geometry

## getCentroid() [2/2]

virtual bool geos::geom::Geometry::getCentroid | ( | CoordinateXY & | ret | ) | const

virtual

Computes the centroid of this Geometry as a Coordinate.

Returns false if centroid cannot be computed (EMPTY geometry)

## getCoordinate()

virtual const CoordinateXY * geos::geom::Geometry::getCoordinate | ( |  | ) | const

pure virtual

Returns a vertex of this Geometry, or NULL if this is the empty geometry.

Implemented in geos::geom::GeometryCollection, geos::geom::Point, and geos::geom::Surface.

## getCoordinateDimension()

virtual uint8_t geos::geom::Geometry::getCoordinateDimension | ( |  | ) | const

pure virtual

Returns the coordinate dimension of this Geometry (2=XY, 3=XYZ or XYM, 4=XYZM).

Implemented in geos::geom::GeometryCollection, geos::geom::Point, and geos::geom::Surface.

## getCoordinates()

virtual std::unique_ptr< CoordinateSequence > geos::geom::Geometry::getCoordinates | ( |  | ) | const

pure virtual

Returns this Geometry vertices. Caller takes ownership of the returned object.

Implemented in geos::geom::GeometryCollection, geos::geom::Point, and geos::geom::Polygon.

## getDimension()

virtual Dimension::DimensionType geos::geom::Geometry::getDimension | ( |  | ) | const

pure virtual

Returns the dimension of this Geometry (0=point, 1=line, 2=surface).

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

Referenced by hasDimension(), and isDimensionStrict().

## getEnvelopeInternal()

virtual const Envelope * geos::geom::Geometry::getEnvelopeInternal | ( |  | ) | const

pure virtual

Returns the minimum and maximum x and y values in this Geometry, or a null Envelope if this Geometry is empty.

Implemented in geos::geom::GeometryCollection, geos::geom::Point, and geos::geom::Surface.

Referenced by geos::operation::cluster::DBSCANClusterFinder::queryEnvelope(), geos::operation::cluster::EnvelopeDistanceClusterFinder::queryEnvelope(), geos::operation::cluster::EnvelopeIntersectsClusterFinder::queryEnvelope(), geos::operation::cluster::GeometryDistanceClusterFinder::queryEnvelope(), geos::operation::cluster::GeometryIntersectsClusterFinder::queryEnvelope(), geos::operation::cluster::EnvelopeDistanceClusterFinder::shouldJoin(), and geos::operation::cluster::EnvelopeIntersectsClusterFinder::shouldJoin().

## getFactory()

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

## getGeometryN()

virtual const Geometry * geos::geom::Geometry::getGeometryN | ( | std::size_t |  | ) | const

inline virtual

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

Reimplemented in geos::geom::GeometryCollection, geos::geom::MultiLineString, geos::geom::MultiPoint, and geos::geom::MultiPolygon.

Referenced by applyComponentFilter().

## getGeometryType()

virtual std::string geos::geom::Geometry::getGeometryType | ( |  | ) | const

pure virtual

Return a string representation of this Geometry type.

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

## getGeometryTypeId()

virtual GeometryTypeId geos::geom::Geometry::getGeometryTypeId | ( |  | ) | const

pure virtual

Return an integer representation of this Geometry type.

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

## getInteriorPoint()

std::unique_ptr< Point > geos::geom::Geometry::getInteriorPoint | ( |  | ) | const

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)

## getLength()

virtual double geos::geom::Geometry::getLength | ( |  | ) | const

virtual

Returns the length of this Geometry.

Reimplemented in geos::geom::GeometryCollection, geos::geom::LineString, and geos::geom::Surface.

## getNumGeometries()

virtual std::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.

Empty collection or multi-geometry types return 0, and empty simple geometry types return 1.

Reimplemented in geos::geom::GeometryCollection.

Referenced by applyComponentFilter().

## getNumPoints()

virtual std::size_t geos::geom::Geometry::getNumPoints | ( |  | ) | const

pure virtual

Returns the count of this Geometrys vertices.

Implemented in geos::geom::GeometryCollection, geos::geom::Point, and geos::geom::Surface.

## getSRID()

int geos::geom::Geometry::getSRID | ( |  | ) | const

inline

Returns the ID of the Spatial Reference System used by the Geometry.

GEOS supports Spatial Reference System information in the simple way defined in the SFS. A Spatial Reference System ID (SRID) is present in each Geometry object. Geometry provides basic accessor operations for this field, but no others. The SRID is represented as an integer.

Returns
  the ID of the coordinate space in which the Geometry is defined.

## getUserData()

void * geos::geom::Geometry::getUserData | ( |  | ) | const

inline

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

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

## hasCurvedComponents()

virtual bool geos::geom::Geometry::hasCurvedComponents | ( |  | ) | const

virtual

Returns whether the Geometry contains curved components.

Reimplemented in geos::geom::GeometryCollection, geos::geom::MultiLineString, geos::geom::MultiPoint, and geos::geom::MultiPolygon.

## hasDimension()

virtual bool geos::geom::Geometry::hasDimension | ( | Dimension::DimensionType | d | ) | const

inline virtual

Checks whether any component of this geometry has dimension d.

Reimplemented in geos::geom::GeometryCollection, geos::geom::MultiLineString, geos::geom::MultiPoint, and geos::geom::MultiPolygon.

References getDimension().

## intersection()

std::unique_ptr< Geometry > geos::geom::Geometry::intersection | ( | const Geometry * | other | ) | const

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

Exceptions

  util::TopologyException | if a robustness error occurs
  util::IllegalArgumentException | if either input is a non-empty GeometryCollection

## isDimensionStrict()

virtual bool geos::geom::Geometry::isDimensionStrict | ( | Dimension::DimensionType | d | ) | const

inline virtual

Checks whether this Geometry consists only of components having dimension d.

Reimplemented in geos::geom::GeometryCollection, geos::geom::MultiLineString, geos::geom::MultiPoint, and geos::geom::MultiPolygon.

References getDimension().

## isEmpty()

virtual bool geos::geom::Geometry::isEmpty | ( |  | ) | const

pure virtual

Returns whether or not the set of points in this Geometry is empty.

Implemented in geos::geom::GeometryCollection, geos::geom::Point, and geos::geom::Surface.

## isRectangle()

virtual bool geos::geom::Geometry::isRectangle | ( |  | ) | const

inline virtual

Polygon overrides to check for actual rectangle.

Reimplemented in geos::geom::Polygon.

## isSimple()

virtual bool geos::geom::Geometry::isSimple | ( |  | ) | const

virtual

Returns false if the Geometry not simple.

Reimplemented in geos::geom::Point.

## isValid()

bool geos::geom::Geometry::isValid | ( |  | ) | const

Tests the validity of this `Geometry`.

Subclasses provide their own definition of "valid".

Returns
  `true` if this `Geometry` is valid

See also
  IsValidOp

## isWithinDistance()

virtual bool geos::geom::Geometry::isWithinDistance | ( | const Geometry * | geom,
|  | double | cDistance ) const

virtual

Tests whether the distance from this Geometry to another is less than or equal to a specified value.

Parameters

  geom | the Geometry to check the distance to
  cDistance | the distance value to compare

Returns
  `true` if the geometries are less than `distance` apart.

Todo
  doesn't seem to need being virtual, make it concrete

## normalize()

virtual void geos::geom::Geometry::normalize | ( |  | ) |

pure virtual

Reorganizes this Geometry into normal form (or canonical form). Starting point of rings is lower left, collections are ordered by geometry type, etc.

Implemented in geos::geom::GeometryCollection, geos::geom::Point, and geos::geom::Polygon.

## relate()

bool geos::geom::Geometry::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.

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

References relate().

Referenced by relate(), and relate().

## reverse()

std::unique_ptr< Geometry > geos::geom::Geometry::reverse | ( |  | ) | const

inline

Computes a new geometry which has all component coordinate sequences in reverse order (opposite orientation) to this one.

Returns
  a reversed geometry

References reverseImpl().

## reverseImpl()

virtual Geometry * geos::geom::Geometry::reverseImpl | ( |  | ) | const

protected pure virtual

Make a geometry with coordinates in reverse order.

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

Referenced by reverse().

## setSRID()

virtual void geos::geom::Geometry::setSRID | ( | int | newSRID | ) |

inline virtual

Sets the ID of the Spatial Reference System used by the Geometry.

Reimplemented in geos::geom::GeometryCollection.

## setUserData()

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

## symDifference()

std::unique_ptr< Geometry > geos::geom::Geometry::symDifference | ( | 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.

Exceptions

  util::TopologyException | if a robustness error occurs
  util::IllegalArgumentException | if either input is a non-empty GeometryCollection

## Union() [1/2]

Ptr geos::geom::Geometry::Union | ( |  | ) | const

Computes the union of all the elements of this geometry. Heterogeneous GeometryCollections are fully supported.

The result obeys the following contract:

- Unioning a set of LineStrings has the effect of fully noding and dissolving the linework.
- Unioning a set of Polygons will always return a polygonal geometry (unlike Geometry::Union(const Geometry* other) const), which may return geometries of lower dimension if a topology collapse occurred.

Returns
  the union geometry

See also
  UnaryUnionOp

## Union() [2/2]

std::unique_ptr< Geometry > geos::geom::Geometry::Union | ( | const Geometry * | other | ) | const

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

Exceptions

  util::TopologyException | if a robustness error occurs
  util::IllegalArgumentException | if either input is a non-empty GeometryCollection

The documentation for this class was generated from the following file:

- Geometry.h