21 #ifndef GEOS_GEOM_GEOMETRY_H
22 #define GEOS_GEOM_GEOMETRY_H
24 #ifndef USE_UNSTABLE_GEOS_CPP_API
26 # warning "The GEOS C++ API is unstable, please use the C API instead"
27 # warning "HINT: #include geos_c.h"
29 #pragma message("The GEOS C++ API is unstable, please use the C API instead")
30 #pragma message("HINT: #include geos_c.h")
34 #include <geos/export.h>
35 #include <geos/platform.h>
36 #include <geos/inline.h>
37 #include <geos/geom/Envelope.h>
38 #include <geos/geom/Dimension.h>
39 #include <geos/geom/GeometryComponentFilter.h>
48 #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
49 #pragma warning(disable: 4355) // warning C4355: 'this' : used in base member initializer list
56 class CoordinateFilter;
57 class CoordinateSequence;
58 class CoordinateSequenceFilter;
59 class GeometryComponentFilter;
60 class GeometryFactory;
62 class IntersectionMatrix;
190 using Ptr = std::unique_ptr<Geometry> ;
246 virtual int getSRID()
const {
return SRID; }
252 virtual void setSRID(
int newSRID) { SRID=newSRID; }
428 const std::string& intersectionPattern)
const;
430 bool relate(
const Geometry& g,
const std::string& intersectionPattern)
const
432 return relate(&g, intersectionPattern);
526 virtual std::string toText()
const;
580 int endCapStyle)
const;
705 for(std::size_t i=0, n=getNumGeometries(); i<n; ++i)
706 f.filter(getGeometryN(i));
712 virtual int compareTo(
const Geometry *geom)
const;
738 double cDistance)
const;
774 virtual void geometryChanged();
808 static void checkNotGeometryCollection(
const Geometry *g);
815 virtual Envelope::Ptr computeEnvelopeInternal()
const=0;
817 virtual int compareToSameClass(
const Geometry *geom)
const=0;
819 int compare(std::vector<Coordinate> a, std::vector<Coordinate> b)
const;
821 int compare(std::vector<Geometry *> a, std::vector<Geometry *> b)
const;
824 double tolerance)
const;
851 int getClassSortIndex()
const;
856 void filter_rw(
Geometry* geom)
override;
859 static GeometryChangedFilter geometryChangedFilter;
876 struct GEOS_DLL GeometryGreaterThen {
895 typedef std::unique_ptr<Geometry> GeomPtr;
907 #endif // ndef GEOS_GEOM_GEOMETRY_H
virtual Geometry * difference(const Geometry *other) const
Returns a Geometry representing the points making up this Geometry that do not make up other.
virtual 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 a...
std::vector< const Geometry * > ConstVect
A vector of const Geometry pointers.
Definition: Geometry.h:184
virtual Geometry * buffer(double distance, int quadrantSegments) const
Returns a buffer region around this Geometry having the given width and with a specified number of se...
virtual void apply_rw(CoordinateSequenceFilter &filter)=0
virtual bool isSimple() const
Returns false if the Geometry not simple.
virtual bool contains(const Geometry *g) const
Returns true if other.within(this) returns true.
std::unique_ptr< Envelope > envelope
The bounding box of this Geometry.
Definition: Geometry.h:786
virtual const Envelope * getEnvelopeInternal() const
Returns the minimum and maximum x and y values in this Geometry, or a null Envelope if this Geometry ...
virtual Dimension::DimensionType getDimension() const =0
Returns the dimension of this Geometry (0=point, 1=line, 2=surface)
virtual Point * getCentroid() const
Computes the centroid of this Geometry.
virtual bool isEquivalentClass(const Geometry *other) const
Returns whether the two Geometrys are equal, from the point of view of the equalsExact method.
virtual double getLength() const
Returns the length of this Geometry.
Specifies the precision model of the Coordinate in a Geometry.
Definition: PrecisionModel.h:87
static bool hasNullElements(const std::vector< Geometry * > *lrs)
Returns true if the vector contains any null elements.
virtual IntersectionMatrix * relate(const Geometry *g) const
Returns the DE-9IM intersection matrix for the two Geometrys.
Basic namespace for all GEOS functionalities.
Definition: IndexedNestedRingTester.h:25
virtual Geometry * convexHull() const
Returns the smallest convex Polygon that contains all the points in the Geometry.
virtual 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...
virtual const Coordinate * getCoordinate() const =0
Returns a vertex of this Geometry, or NULL if this is the empty geometry.
Definition: GeometryComponentFilter.h:43
virtual bool isEmpty() const =0
Returns whether or not the set of points in this Geometry is empty.
virtual bool intersects(const Geometry *g) const
Returns true if disjoint returns false.
static bool hasNullElements(const CoordinateSequence *list)
Returns true if the CoordinateSequence contains any null elements.
@ GEOS_POLYGON
a polygon
Definition: Geometry.h:83
@ GEOS_LINESTRING
a linestring
Definition: Geometry.h:79
std::unique_ptr< Geometry > Ptr
An unique_ptr of Geometry.
Definition: Geometry.h:190
virtual std::size_t getNumGeometries() const
Definition: Geometry.h:287
Geometry(const Geometry &geom)
Polygon overrides to check for actual rectangle.
virtual const Geometry * getGeometryN(std::size_t) const
Definition: Geometry.h:291
@ GEOS_MULTIPOLYGON
a collection of polygons
Definition: Geometry.h:89
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 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 elemen...
virtual Geometry * getEnvelope() const
Returns this Geometrys bounding box.
@ GEOS_LINEARRING
a linear ring (linestring with 1st point == last point)
Definition: Geometry.h:81
virtual bool isRectangle() const
Polygon overrides to check for actual rectangle.
Definition: Geometry.h:308
virtual bool touches(const Geometry *other) const
Returns true if the DE-9IM intersection matrix for the two Geometrys is FT*******,...
DimensionType
Definition: Dimension.h:31
virtual bool getCentroid(Coordinate &ret) const
Computes the centroid of this Geometry as a Coordinate.
virtual double getArea() const
Returns the area of this Geometry.
virtual Geometry * getBoundary() const =0
Returns the boundary, or an empty geometry of appropriate dimension if this Geometry is empty.
virtual std::string toString() const
Returns the Well-known Text representation of this Geometry.
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 crosses(const Geometry *g) const
virtual Geometry * buffer(double distance) const
Returns a buffer region around this Geometry having the given width.
virtual Geometry * clone() const =0
Make a deep-copy of this Geometry.
@ GEOS_POINT
a point
Definition: Geometry.h:77
virtual bool equals(const Geometry *g) const
Returns true if the DE-9IM intersection matrix for the two Geometrys is T*F**FFF*.
Coordinate is the lightweight class used to store coordinates.
Definition: Coordinate.h:60
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition: Geometry.h:177
void applyComponentFilter(T &f) const
Apply a fiter to each component of this geometry. The filter is expected to provide a ....
Definition: Geometry.h:703
Geometry(const GeometryFactory *factory)
Construct a geometry with the given GeometryFactory.
void geometryChangedAction()
Notifies this Geometry that its Coordinates have been changed by an external party.
bool coveredBy(const Geometry *g) const
Tests whether this geometry is covered by the specified geometry.
Definition: Geometry.h:518
const PrecisionModel * getPrecisionModel() const
Get the PrecisionModel used to create this Geometry.
static bool hasNonEmptyElements(const std::vector< Geometry * > *geometries)
Returns true if the array contains any non-empty Geometrys.
virtual CoordinateSequence * getCoordinates() const =0
Returns this Geometry vertices. Caller takes ownership of the returned object.
virtual Point * getInteriorPoint() const
Computes an interior point of this Geometry.
@ GEOS_GEOMETRYCOLLECTION
a collection of heterogeneus geometries
Definition: Geometry.h:91
The internal representation of a list of coordinates inside a Geometry.
Definition: CoordinateSequence.h:59
Geometry * Union(const Geometry *other) const
Returns a Geometry representing all the points in this Geometry and other.
virtual void normalize()=0
Converts this Geometry to normal form (or canonical form).
Definition: CoordinateSequenceFilter.h:58
virtual bool disjoint(const Geometry *other) const
@ GEOS_MULTILINESTRING
a collection of linestrings
Definition: Geometry.h:87
virtual GeometryTypeId getGeometryTypeId() const =0
Return an integer representation of this Geometry type.
virtual Geometry * reverse() const =0
std::vector< Geometry * > NonConstVect
A vector of non-const Geometry pointers.
Definition: Geometry.h:187
const GeometryFactory * getFactory() const
Gets the factory which contains the context in which this geometry was created.
Definition: Geometry.h:206
virtual double distance(const Geometry *g) const
Returns the minimum distance between this Geometry and the Geometry g.
GEOS_DLL std::ostream & operator<<(std::ostream &os, const Coordinate &c)
Output function.
virtual int getBoundaryDimension() const =0
Returns the dimension of this Geometrys inherent boundary.
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...
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 ...
Implementation of Dimensionally Extended Nine-Intersection Model (DE-9IM) matrix.
Definition: IntersectionMatrix.h:51
An Envelope defines a rectangulare region of the 2D coordinate plane.
Definition: Envelope.h:59
GeometryTypeId
Geometry types.
Definition: Geometry.h:75
Definition: CoordinateFilter.h:43
virtual std::size_t getNumPoints() const =0
Returns the count of this Geometrys vertices.
Supplies a set of utility methods for building Geometry objects from CoordinateSequence or other Geom...
Definition: GeometryFactory.h:67
void * getUserData() const
Gets the user data object for this geometry, if any.
Definition: Geometry.h:229
void setUserData(void *newUserData)
A simple scheme for applications to add their own custom data to a Geometry. An example use might be ...
Definition: Geometry.h:221
Geometry classes support the concept of applying a Geometry filter to the Geometry.
Definition: GeometryFilter.h:48
virtual void apply_ro(CoordinateSequenceFilter &filter) const =0
bool covers(const Geometry *g) const
Returns true if this geometry covers the specified geometry.
@ GEOS_MULTIPOINT
a collection of points
Definition: Geometry.h:85
std::string geosversion()
Return current GEOS version.
virtual Geometry * intersection(const Geometry *other) const
Returns a Geometry representing the points shared by this Geometry and other.
virtual ~Geometry()
Destroy Geometry and all components.
virtual bool isValid() const
Tests the validity of this Geometry.
virtual int getCoordinateDimension() const =0
Returns the coordinate dimension of this Geometry (2=XY, 3=XYZ, 4=XYZM in future).
virtual std::string getGeometryType() const =0
Return a string representation of this Geometry type.
std::string jtsport()
Return the version of JTS this GEOS release has been ported from.