GEOS 3.11.1
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Friends | List of all members
geos::geom::Polygon Class Reference

Represents a linear polygon, which may include holes. More...

#include <geos.h>

Inheritance diagram for geos::geom::Polygon:
geos::geom::Geometry

Public Types

typedef std::vector< const Polygon * > ConstVect
 A vector of const Polygon pointers.
 
- Public Types inherited from geos::geom::Geometry
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< Polygonclone () const
 
std::unique_ptr< CoordinateSequencegetCoordinates () const override
 Returns this Geometry vertices. Caller takes ownership of the returned object. More...
 
std::size_t getNumPoints () const override
 Returns the count of this Geometrys vertices. More...
 
Dimension::DimensionType getDimension () const override
 Returns surface dimension (2) More...
 
uint8_t getCoordinateDimension () const override
 Returns coordinate dimension. More...
 
int getBoundaryDimension () const override
 Returns 1 (Polygon boundary is a MultiLineString) More...
 
std::unique_ptr< GeometrygetBoundary () const override
 Computes the boundary of this geometry. More...
 
bool isEmpty () const override
 Returns whether or not the set of points in this Geometry is empty. More...
 
const LinearRinggetExteriorRing () const
 Returns the exterior ring (shell)
 
std::unique_ptr< LinearRingreleaseExteriorRing ()
 Take ownership of this Polygon's exterior ring. After releasing the exterior ring, the Polygon should be considered in a moved-from state and should not be accessed, except to release the interior rings (if desired.) More...
 
std::size_t getNumInteriorRing () const
 Returns number of interior rings (hole)
 
const LinearRinggetInteriorRingN (std::size_t n) const
 Get nth interior ring (hole)
 
std::vector< std::unique_ptr< LinearRing > > releaseInteriorRings ()
 Take ownership of this Polygon's interior rings. After releasing the rings, the Polygon should be considered in a moved-from state and should not be accessed, except to release the exterior ring (if desired.) More...
 
std::string getGeometryType () const override
 Return a string representation of this Geometry type. More...
 
GeometryTypeId getGeometryTypeId () const override
 Return an integer representation of this Geometry type. More...
 
bool equalsExact (const Geometry *other, double tolerance=0) const override
 Returns true iff the two Geometrys are of the same type and their vertices corresponding by index are equal up to a specified tolerance. More...
 
void apply_rw (const CoordinateFilter *filter) override
 
void apply_ro (CoordinateFilter *filter) const override
 
void apply_rw (GeometryFilter *filter) override
 
void apply_ro (GeometryFilter *filter) const override
 
void apply_rw (CoordinateSequenceFilter &filter) override
 
void apply_ro (CoordinateSequenceFilter &filter) const override
 
void apply_rw (GeometryComponentFilter *filter) override
 
void apply_ro (GeometryComponentFilter *filter) const override
 
std::unique_ptr< GeometryconvexHull () const override
 Returns the smallest convex Polygon that contains all the points in the Geometry. More...
 
void normalize () override
 
std::unique_ptr< Polygonreverse () const
 
const CoordinategetCoordinate () const override
 Returns a vertex of this Geometry, or NULL if this is the empty geometry. More...
 
double getArea () const override
 Returns the area of this Geometry. More...
 
double getLength () const override
 Returns the perimeter of this Polygon More...
 
bool isRectangle () const override
 Polygon overrides to check for actual rectangle. More...
 
- Public Member Functions inherited from geos::geom::Geometry
std::unique_ptr< Geometryclone () const
 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. More...
 
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. More...
 
void * getUserData () const
 Gets the user data object for this geometry, if any. More...
 
virtual int getSRID () const
 Returns the ID of the Spatial Reference System used by the Geometry. More...
 
virtual void setSRID (int newSRID)
 Sets the ID of the Spatial Reference System used by the Geometry. More...
 
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. More...
 
virtual std::unique_ptr< CoordinateSequencegetCoordinates () const =0
 Returns this Geometry vertices. Caller takes ownership of the returned object. More...
 
virtual std::size_t getNumPoints () const =0
 Returns the count of this Geometrys vertices. More...
 
virtual bool isSimple () const
 Returns false if the Geometry not simple. More...
 
virtual std::string getGeometryType () const =0
 Return a string representation of this Geometry type. More...
 
virtual GeometryTypeId getGeometryTypeId () const =0
 Return an integer representation of this Geometry type. More...
 
virtual std::size_t getNumGeometries () const
 
virtual const GeometrygetGeometryN (std::size_t) const
 Returns a pointer to the nth Geometry in this collection (or self if this is not a collection) More...
 
virtual bool isValid () const
 Tests the validity of this Geometry. More...
 
virtual bool isEmpty () const =0
 Returns whether or not the set of points in this Geometry is empty. More...
 
virtual bool isRectangle () const
 Polygon overrides to check for actual rectangle. More...
 
virtual Dimension::DimensionType getDimension () const =0
 Returns the dimension of this Geometry (0=point, 1=line, 2=surface) More...
 
virtual bool isDimensionStrict (Dimension::DimensionType d) const
 Checks whether this Geometry consists only of components having dimension d. More...
 
bool isPuntal () const
 
bool isLineal () const
 
bool isPolygonal () const
 
bool isCollection () const
 
virtual uint8_t getCoordinateDimension () const =0
 Returns the coordinate dimension of this Geometry (2=XY, 3=XYZ, 4=XYZM in future). More...
 
virtual std::unique_ptr< GeometrygetBoundary () const =0
 Returns the boundary, or an empty geometry of appropriate dimension if this Geometry is empty. More...
 
virtual int getBoundaryDimension () const =0
 Returns the dimension of this Geometrys inherent boundary. More...
 
virtual std::unique_ptr< 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
 
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. More...
 
bool relate (const Geometry &g, const std::string &intersectionPattern) const
 
std::unique_ptr< IntersectionMatrixrelate (const Geometry *g) const
 Returns the DE-9IM intersection matrix for the two Geometrys.
 
std::unique_ptr< 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. More...
 
bool coveredBy (const Geometry *g) const
 Tests whether this geometry is covered by the specified geometry. More...
 
virtual std::string toString () const
 Returns the Well-known Text representation of this Geometry.
 
virtual std::string toText () const
 
std::unique_ptr< Geometrybuffer (double distance) const
 
std::unique_ptr< 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. More...
 
std::unique_ptr< 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. More...
 
virtual std::unique_ptr< GeometryconvexHull () const
 Returns the smallest convex Polygon that contains all the points in the Geometry. More...
 
std::unique_ptr< Geometryreverse () const
 Computes a new geometry which has all component coordinate sequences in reverse order (opposite orientation) to this one. More...
 
std::unique_ptr< Geometryintersection (const Geometry *other) const
 Returns a Geometry representing the points shared by this Geometry and other. More...
 
std::unique_ptr< GeometryUnion (const Geometry *other) const
 Returns a Geometry representing all the points in this Geometry and other. More...
 
Ptr Union () const
 Computes the union of all the elements of this geometry. Heterogeneous GeometryCollections are fully supported. More...
 
std::unique_ptr< Geometrydifference (const Geometry *other) const
 Returns a Geometry representing the points making up this Geometry that do not make up other. More...
 
std::unique_ptr< 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. More...
 
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 tolerance. More...
 
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. More...
 
virtual void normalize ()=0
 
virtual int compareTo (const Geometry *geom) const
 Comparator for sorting geometry.
 
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. More...
 
virtual double getLength () const
 Returns the length of this Geometry. More...
 
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. More...
 
virtual std::unique_ptr< PointgetCentroid () const
 Computes the centroid of this Geometry. More...
 
virtual bool getCentroid (Coordinate &ret) const
 Computes the centroid of this Geometry as a Coordinate. More...
 
std::unique_ptr< PointgetInteriorPoint () const
 Computes an interior point of this Geometry. More...
 
virtual void geometryChanged ()
 Notifies this Geometry that its Coordinates have been changed by an external party (using a CoordinateFilter, for example).
 
void geometryChangedAction ()
 Notifies this Geometry that its Coordinates have been changed by an external party.
 

Protected Member Functions

 Polygon (const Polygon &p)
 
int compareToSameClass (const Geometry *p) const override
 
 Polygon (LinearRing *newShell, std::vector< LinearRing * > *newHoles, const GeometryFactory *newFactory)
 
 Polygon (std::unique_ptr< LinearRing > &&newShell, const GeometryFactory &newFactory)
 
 Polygon (std::unique_ptr< LinearRing > &&newShell, std::vector< std::unique_ptr< LinearRing > > &&newHoles, const GeometryFactory &newFactory)
 
PolygoncloneImpl () const override
 Make a deep-copy of this Geometry. More...
 
PolygonreverseImpl () const override
 Make a geometry with coordinates in reverse order. More...
 
Envelope::Ptr computeEnvelopeInternal () const override
 
int getSortIndex () const override
 
- Protected Member Functions inherited from geos::geom::Geometry
virtual GeometrycloneImpl () const =0
 Make a deep-copy of this Geometry. More...
 
virtual GeometryreverseImpl () const =0
 Make a geometry with coordinates in reverse order. More...
 
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::Ptr 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
 
int compare (const std::vector< std::unique_ptr< Geometry > > &a, const std::vector< std::unique_ptr< Geometry > > &b) const
 
bool equal (const Coordinate &a, const Coordinate &b, double tolerance) const
 
 Geometry (const Geometry &geom)
 
 Geometry (const GeometryFactory *factory)
 Construct a geometry with the given GeometryFactory. More...
 
virtual int getSortIndex () const =0
 

Protected Attributes

std::unique_ptr< LinearRingshell
 
std::vector< std::unique_ptr< LinearRing > > holes
 
- Protected Attributes inherited from geos::geom::Geometry
std::unique_ptr< Envelopeenvelope
 The bounding box of this Geometry.
 
int SRID
 

Friends

class GeometryFactory
 

Additional Inherited Members

- Static Protected Member Functions inherited from geos::geom::Geometry
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 std::vector< std::unique_ptr< Geometry > > toGeometryArray (std::vector< std::unique_ptr< T > > &&v)
 

Detailed Description

Represents a linear polygon, which may include holes.

The shell and holes of the polygon are represented by LinearRings. In a valid polygon, holes may touch the shell or other holes at a single point. However, no sequence of touching holes may split the polygon into two pieces. The orientation of the rings in the polygon does not matter.

The shell and holes must conform to the assertions specified in the OpenGIS Simple Features Specification for SQL .

Constructor & Destructor Documentation

◆ Polygon()

geos::geom::Polygon::Polygon ( LinearRing newShell,
std::vector< LinearRing * > *  newHoles,
const GeometryFactory newFactory 
)
protected

Constructs a Polygon with the given exterior and interior boundaries.

Parameters
newShellthe outer boundary of the new Polygon, or null or an empty LinearRing if the empty geometry is to be created.
newHolesthe LinearRings defining the inner boundaries of the new Polygon, or null or empty LinearRing if the empty geometry is to be created.
newFactorythe GeometryFactory used to create this geometry

Polygon will take ownership of Shell and Holes LinearRings

Member Function Documentation

◆ apply_ro() [1/4]

void geos::geom::Polygon::apply_ro ( CoordinateFilter filter) const
overridevirtual

Implements geos::geom::Geometry.

◆ apply_ro() [2/4]

void geos::geom::Polygon::apply_ro ( CoordinateSequenceFilter filter) const
overridevirtual

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

Parameters
filterthe filter to apply

Implements geos::geom::Geometry.

◆ apply_ro() [3/4]

void geos::geom::Polygon::apply_ro ( GeometryComponentFilter filter) const
overridevirtual

Reimplemented from geos::geom::Geometry.

◆ apply_ro() [4/4]

void geos::geom::Polygon::apply_ro ( GeometryFilter filter) const
overridevirtual

Reimplemented from geos::geom::Geometry.

◆ apply_rw() [1/4]

void geos::geom::Polygon::apply_rw ( const CoordinateFilter filter)
overridevirtual

Implements geos::geom::Geometry.

◆ apply_rw() [2/4]

void geos::geom::Polygon::apply_rw ( CoordinateSequenceFilter filter)
overridevirtual

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
filterthe filter to apply

Implements geos::geom::Geometry.

◆ apply_rw() [3/4]

void geos::geom::Polygon::apply_rw ( GeometryComponentFilter filter)
overridevirtual

Reimplemented from geos::geom::Geometry.

◆ apply_rw() [4/4]

void geos::geom::Polygon::apply_rw ( GeometryFilter filter)
overridevirtual

Reimplemented from geos::geom::Geometry.

◆ clone()

std::unique_ptr< Polygon > geos::geom::Polygon::clone ( ) const
inline

Creates and returns a full copy of this Polygon object. (including all coordinates contained by it).

Returns
a clone of this instance

◆ cloneImpl()

Polygon * geos::geom::Polygon::cloneImpl ( ) const
inlineoverrideprotectedvirtual

Make a deep-copy of this Geometry.

Implements geos::geom::Geometry.

◆ compareToSameClass()

int geos::geom::Polygon::compareToSameClass ( const Geometry p) const
overrideprotectedvirtual

Implements geos::geom::Geometry.

◆ computeEnvelopeInternal()

Envelope::Ptr geos::geom::Polygon::computeEnvelopeInternal ( ) const
overrideprotectedvirtual

Implements geos::geom::Geometry.

◆ convexHull()

std::unique_ptr< Geometry > geos::geom::Polygon::convexHull ( ) const
overridevirtual

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

Reimplemented from geos::geom::Geometry.

◆ equalsExact()

bool geos::geom::Polygon::equalsExact ( const Geometry other,
double  tolerance = 0 
) const
overridevirtual

Returns true iff the two Geometrys are of the same type and their vertices corresponding by index are equal up to a specified tolerance.

Implements geos::geom::Geometry.

◆ getArea()

double geos::geom::Polygon::getArea ( ) const
overridevirtual

Returns the area of this Geometry.

Reimplemented from geos::geom::Geometry.

◆ getBoundary()

std::unique_ptr< Geometry > geos::geom::Polygon::getBoundary ( ) const
overridevirtual

Computes the boundary of this geometry.

Returns
a lineal geometry (which may be empty)
See also
Geometry::getBoundary

Implements geos::geom::Geometry.

◆ getBoundaryDimension()

int geos::geom::Polygon::getBoundaryDimension ( ) const
overridevirtual

Returns 1 (Polygon boundary is a MultiLineString)

Implements geos::geom::Geometry.

◆ getCoordinate()

const Coordinate * geos::geom::Polygon::getCoordinate ( ) const
overridevirtual

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

Implements geos::geom::Geometry.

◆ getCoordinateDimension()

uint8_t geos::geom::Polygon::getCoordinateDimension ( ) const
overridevirtual

Returns coordinate dimension.

Implements geos::geom::Geometry.

◆ getCoordinates()

std::unique_ptr< CoordinateSequence > geos::geom::Polygon::getCoordinates ( ) const
overridevirtual

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

Implements geos::geom::Geometry.

◆ getDimension()

Dimension::DimensionType geos::geom::Polygon::getDimension ( ) const
overridevirtual

Returns surface dimension (2)

Implements geos::geom::Geometry.

◆ getGeometryType()

std::string geos::geom::Polygon::getGeometryType ( ) const
overridevirtual

Return a string representation of this Geometry type.

Implements geos::geom::Geometry.

◆ getGeometryTypeId()

GeometryTypeId geos::geom::Polygon::getGeometryTypeId ( ) const
overridevirtual

Return an integer representation of this Geometry type.

Implements geos::geom::Geometry.

◆ getLength()

double geos::geom::Polygon::getLength ( ) const
overridevirtual

Returns the perimeter of this Polygon

Reimplemented from geos::geom::Geometry.

◆ getNumPoints()

std::size_t geos::geom::Polygon::getNumPoints ( ) const
overridevirtual

Returns the count of this Geometrys vertices.

Implements geos::geom::Geometry.

◆ getSortIndex()

int geos::geom::Polygon::getSortIndex ( ) const
inlineoverrideprotectedvirtual

Implements geos::geom::Geometry.

◆ isEmpty()

bool geos::geom::Polygon::isEmpty ( ) const
overridevirtual

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

Implements geos::geom::Geometry.

◆ isRectangle()

bool geos::geom::Polygon::isRectangle ( ) const
overridevirtual

Polygon overrides to check for actual rectangle.

Reimplemented from geos::geom::Geometry.

◆ normalize()

void geos::geom::Polygon::normalize ( )
overridevirtual

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

Implements geos::geom::Geometry.

◆ releaseExteriorRing()

std::unique_ptr< LinearRing > geos::geom::Polygon::releaseExteriorRing ( )

Take ownership of this Polygon's exterior ring. After releasing the exterior ring, the Polygon should be considered in a moved-from state and should not be accessed, except to release the interior rings (if desired.)

Returns
exterior ring

◆ releaseInteriorRings()

std::vector< std::unique_ptr< LinearRing > > geos::geom::Polygon::releaseInteriorRings ( )

Take ownership of this Polygon's interior rings. After releasing the rings, the Polygon should be considered in a moved-from state and should not be accessed, except to release the exterior ring (if desired.)

Returns
vector of rings (may be empty)

◆ reverseImpl()

Polygon * geos::geom::Polygon::reverseImpl ( ) const
overrideprotectedvirtual

Make a geometry with coordinates in reverse order.

Implements geos::geom::Geometry.


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