23 #ifndef USE_UNSTABLE_GEOS_CPP_API
25 # warning "The GEOS C++ API is unstable, please use the C API instead"
26 # warning "HINT: #include geos_c.h"
28 #pragma message("The GEOS C++ API is unstable, please use the C API instead")
29 #pragma message("HINT: #include geos_c.h")
33 #include <geos/export.h>
34 #include <geos/geom/Envelope.h>
35 #include <geos/geom/Dimension.h>
36 #include <geos/geom/GeometryComponentFilter.h>
46 #pragma warning(disable: 4251)
47 #pragma warning(disable: 4355)
54 class CoordinateFilter;
55 class CoordinateSequence;
56 class CoordinateSequenceFilter;
57 class GeometryComponentFilter;
58 class GeometryFactory;
62 class IntersectionMatrix;
97 enum GeometrySortIndex {
99 SORTINDEX_MULTIPOINT = 1,
100 SORTINDEX_LINESTRING = 2,
101 SORTINDEX_LINEARRING = 3,
102 SORTINDEX_MULTILINESTRING = 4,
103 SORTINDEX_POLYGON = 5,
104 SORTINDEX_MULTIPOLYGON = 6,
105 SORTINDEX_GEOMETRYCOLLECTION = 7,
106 SORTINDEX_CIRCULARSTRING = 8,
107 SORTINDEX_COMPOUNDCURVE = 9,
108 SORTINDEX_CURVEPOLYGON = 10,
109 SORTINDEX_MULTICURVE = 11,
110 SORTINDEX_MULTISURFACE = 12,
209 using Ptr = std::unique_ptr<Geometry> ;
212 std::unique_ptr<Geometry>
clone()
const {
return std::unique_ptr<Geometry>(cloneImpl()); }
247 _userData = newUserData;
365 return getDimension() == d;
370 return d == getDimension();
373 bool isPuntal()
const {
377 bool isLineal()
const {
381 bool isPolygonal()
const {
385 bool isMixedDimension()
const;
388 bool isCollection()
const {
389 int t = getGeometryTypeId();
401 default:
return typeId;
408 virtual bool hasZ()
const = 0;
410 virtual bool hasM()
const = 0;
524 const std::string& intersectionPattern)
const;
527 relate(
const Geometry& g,
const std::string& intersectionPattern)
const
529 return relate(&g, intersectionPattern);
535 std::unique_ptr<IntersectionMatrix> relate(
const Geometry& g)
const;
624 virtual std::string toText()
const;
630 std::unique_ptr<Geometry>
buffer(
double distance)
const;
639 std::unique_ptr<Geometry>
buffer(
double distance,
int quadrantSegments)
const;
677 std::unique_ptr<Geometry>
buffer(
double distance,
int quadrantSegments,
678 int endCapStyle)
const;
691 std::unique_ptr<Geometry>
reverse()
const {
return std::unique_ptr<Geometry>(reverseImpl()); }
812 for(std::size_t i = 0, n = getNumGeometries(); i < n; ++i) {
813 f.filter(getGeometryN(i));
853 double cDistance)
const;
908 return std::any_of(geometries->begin(), geometries->end(), [](
const T& g) { return !g->isEmpty(); });
917 return std::any_of(geometries->begin(), geometries->end(), [](
const T& g) { return g == nullptr; });
931 static void checkNotGeometryCollection(
const Geometry* g);
933 virtual int compareToSameClass(
const Geometry* geom)
const = 0;
936 static int compare(
const T& a,
const T& b)
940 while(i < a.size() && j < b.size()) {
941 const auto& aGeom = *a[i];
942 const auto& bGeom = *b[j];
944 int comparison = aGeom.compareTo(&bGeom);
945 if(comparison != 0) {
964 bool equal(
const CoordinateXY& a,
const CoordinateXY& b,
965 double tolerance)
const;
968 Geometry(
const Geometry& geom);
982 static std::vector<std::unique_ptr<Geometry>> toGeometryArray(std::vector<std::unique_ptr<T>> && v) {
983 static_assert(std::is_base_of<Geometry, T>::value,
"");
984 std::vector<std::unique_ptr<Geometry>> gv(v.size());
985 for (std::size_t i = 0; i < v.size(); i++) {
986 gv[i] = std::move(v[i]);
991 static std::vector<std::unique_ptr<Geometry>> toGeometryArray(std::vector<std::unique_ptr<Geometry>> && v) {
997 virtual int getSortIndex()
const = 0;
1002 class GEOS_DLL GeometryChangedFilter :
public GeometryComponentFilter {
1004 void filter_rw(Geometry* geom)
override;
1007 static GeometryChangedFilter geometryChangedFilter;
1013 const GeometryFactory* _factory;
1022 GEOS_DLL std::ostream& operator<< (std::ostream& os,
const Geometry& geom);
1024 struct GEOS_DLL GeometryGreaterThen {
1042 struct GeomPtrPair {
1043 typedef std::unique_ptr<Geometry> GeomPtr;
1052 #pragma warning(pop)
Geometry classes support the concept of applying a coordinate filter to every coordinate in the Geome...
Definition: CoordinateFilter.h:43
Interface for classes which provide operations that can be applied to the coordinates in a Coordinate...
Definition: CoordinateSequenceFilter.h:55
The internal representation of a list of coordinates inside a Geometry.
Definition: CoordinateSequence.h:56
DimensionType
Definition: Dimension.h:29
@ A
Dimension value of a surface (2).
Definition: Dimension.h:46
@ L
Dimension value of a curve (1).
Definition: Dimension.h:43
@ P
Dimension value of a point (0).
Definition: Dimension.h:40
An Envelope defines a rectangulare region of the 2D coordinate plane.
Definition: Envelope.h:58
Definition: GeometryComponentFilter.h:41
Supplies a set of utility methods for building Geometry objects from CoordinateSequence or other Geom...
Definition: GeometryFactory.h:70
Geometry classes support the concept of applying a Geometry filter to the Geometry.
Definition: GeometryFilter.h:45
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition: Geometry.h:196
virtual int getBoundaryDimension() const =0
Returns the dimension of this Geometrys inherent boundary.
std::unique_ptr< IntersectionMatrix > relate(const Geometry *g) const
Returns the DE-9IM intersection matrix for the two Geometrys.
virtual Geometry * cloneImpl() const =0
Make a deep-copy of this Geometry.
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...
std::vector< Geometry * > NonConstVect
A vector of non-const Geometry pointers.
Definition: Geometry.h:206
void applyComponentFilter(T &f) const
Apply a filter to each component of this geometry. The filter is expected to provide a ....
Definition: Geometry.h:810
virtual int compareTo(const Geometry *geom) const
Comparator for sorting geometry.
virtual ~Geometry()
Destroy Geometry and all components.
virtual bool equals(const Geometry *g) const
Returns true if the DE-9IM intersection matrix for the two Geometrys is T*F**FFF*.
virtual void apply_rw(CoordinateSequenceFilter &filter)=0
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 se...
virtual void geometryChangedAction()=0
Notifies this Geometry that its Coordinates have been changed by an external party.
const GeometryFactory * getFactory() const
Gets the factory which contains the context in which this geometry was created.
Definition: Geometry.h:226
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 ...
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 isDimensionStrict(Dimension::DimensionType d) const
Checks whether this Geometry consists only of components having dimension d.
Definition: Geometry.h:369
virtual void normalize()=0
virtual void apply_ro(CoordinateSequenceFilter &filter) const =0
virtual bool intersects(const Geometry *g) const
Returns true if disjoint returns false.
virtual bool crosses(const Geometry *g) const
virtual GeometryTypeId getGeometryTypeId() const =0
Return an integer representation of this Geometry type.
virtual bool hasDimension(Dimension::DimensionType d) const
Checks whether any component of this geometry has dimension d.
Definition: Geometry.h:364
virtual std::unique_ptr< Geometry > getBoundary() const =0
Returns the boundary, or an empty geometry of appropriate dimension if this Geometry is empty.
virtual std::string getGeometryType() const =0
Return a string representation of this Geometry type.
const PrecisionModel * getPrecisionModel() const
Get the PrecisionModel used to create this Geometry.
virtual uint8_t getCoordinateDimension() const =0
Returns the coordinate dimension of this Geometry (2=XY, 3=XYZ or XYM, 4=XYZM).
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 double getLength() const
Returns the length of this Geometry.
virtual double distance(const Geometry *g) const
virtual bool getCentroid(CoordinateXY &ret) const
Computes the centroid of this Geometry as a Coordinate.
std::unique_ptr< Geometry > Ptr
An unique_ptr of Geometry.
Definition: Geometry.h:209
virtual Geometry * reverseImpl() const =0
Make a geometry with coordinates in reverse order.
virtual bool hasCurvedComponents() const
Returns whether the Geometry contains curved components.
virtual std::unique_ptr< Point > getCentroid() const
Computes the centroid of this Geometry.
virtual std::unique_ptr< CoordinateSequence > getCoordinates() const =0
Returns this Geometry vertices. Caller takes ownership of the returned object.
void * getUserData() const
Gets the user data object for this geometry, if any.
Definition: Geometry.h:257
virtual bool within(const Geometry *g) const
Returns true if the DE-9IM intersection matrix for the two Geometrys is T*F**F***.
virtual const CoordinateXY * getCoordinate() const =0
Returns a vertex of this Geometry, or NULL if this is the empty geometry.
virtual std::size_t getNumPoints() const =0
Returns the count of this Geometrys vertices.
virtual std::unique_ptr< Geometry > getEnvelope() const
Returns this Geometrys bounding box.
static bool hasNullElements(const CoordinateSequence *list)
Returns true if the CoordinateSequence contains any null elements.
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:245
virtual bool isEmpty() const =0
Returns whether or not the set of points in this Geometry is empty.
std::unique_ptr< Geometry > buffer(double distance) const
std::unique_ptr< Geometry > intersection(const Geometry *other) const
Returns a Geometry representing the points shared by this Geometry and other.
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...
Geometry(const GeometryFactory *factory)
Construct a geometry with the given GeometryFactory.
std::vector< const Geometry * > ConstVect
A vector of const Geometry pointers.
Definition: Geometry.h:203
virtual int getSRID() const
Returns the ID of the Spatial Reference System used by the Geometry.
Definition: Geometry.h:273
virtual bool touches(const Geometry *other) const
Returns true if the DE-9IM intersection matrix for the two Geometrys is FT*******,...
std::unique_ptr< Geometry > Union(const Geometry *other) const
Returns a Geometry representing all the points in this Geometry and other.
virtual std::string toString() const
Returns the Well-known Text representation of this Geometry.
virtual bool isValid() const
Tests the validity of this Geometry.
virtual bool isSimple() const
Returns false if the Geometry not simple.
static bool hasNonEmptyElements(const std::vector< T > *geometries)
Returns true if the array contains any non-empty Geometrys.
Definition: Geometry.h:907
Ptr Union() const
Computes the union of all the elements of this geometry. Heterogeneous GeometryCollections are fully ...
std::unique_ptr< Geometry > reverse() const
Computes a new geometry which has all component coordinate sequences in reverse order (opposite orien...
Definition: Geometry.h:691
virtual bool disjoint(const Geometry *other) const
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 a...
virtual bool contains(const Geometry *g) const
Returns true if other.within(this) returns true.
virtual bool isEquivalentClass(const Geometry *other) const
Returns whether the two Geometrys are equal, from the point of view of the equalsExact method.
bool coveredBy(const Geometry *g) const
Tests whether this geometry is covered by the specified geometry.
Definition: Geometry.h:615
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 > clone() const
Make a deep-copy of this Geometry.
Definition: Geometry.h:212
virtual std::size_t getNumGeometries() const
Returns the number of geometries in this collection, or 1 if this is not a collection.
Definition: Geometry.h:326
virtual double getArea() const
Returns the area of this Geometry.
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...
std::unique_ptr< Point > getInteriorPoint() const
Computes an interior point of this Geometry.
virtual bool isRectangle() const
Polygon overrides to check for actual rectangle.
Definition: Geometry.h:355
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 ...
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)
Definition: Geometry.h:334
bool covers(const Geometry *g) const
Returns true if this geometry covers the specified geometry.
virtual Dimension::DimensionType getDimension() const =0
Returns the dimension of this Geometry (0=point, 1=line, 2=surface)
virtual void geometryChanged()
Notifies this Geometry that its Coordinates have been changed by an external party (using a Coordinat...
virtual std::unique_ptr< Geometry > convexHull() const
Returns the smallest convex Polygon that contains all the points in the Geometry.
static bool hasNullElements(const std::vector< T > *geometries)
Returns true if the vector contains any null elements.
Definition: Geometry.h:916
virtual void setSRID(int newSRID)
Sets the ID of the Spatial Reference System used by the Geometry.
Definition: Geometry.h:282
Specifies the precision model of the Coordinate in a Geometry.
Definition: PrecisionModel.h:88
GeometryTypeId
Geometry types.
Definition: Geometry.h:73
@ GEOS_MULTILINESTRING
a collection of linestrings
Definition: Geometry.h:85
@ GEOS_LINEARRING
a linear ring (linestring with 1st point == last point)
Definition: Geometry.h:79
@ GEOS_GEOMETRYCOLLECTION
a collection of heterogeneus geometries
Definition: Geometry.h:89
@ GEOS_POINT
a point
Definition: Geometry.h:75
@ GEOS_LINESTRING
a linestring
Definition: Geometry.h:77
@ GEOS_POLYGON
a polygon
Definition: Geometry.h:81
@ GEOS_MULTIPOLYGON
a collection of polygons
Definition: Geometry.h:87
@ GEOS_MULTIPOINT
a collection of points
Definition: Geometry.h:83
std::string jtsport()
Return the version of JTS this GEOS release has been ported from.
std::string geosversion()
Return current GEOS version.
Basic namespace for all GEOS functionalities.
Definition: Angle.h:25