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) // warning C4251: needs to have dll-interface to be used by clients of class
47 #pragma warning(disable: 4355) // warning C4355: 'this' : used in base member initializer list
54 class CoordinateFilter;
55 class CoordinateSequence;
56 class CoordinateSequenceFilter;
57 class GeometryComponentFilter;
58 class GeometryFactory;
62 class IntersectionMatrix;
92 enum GeometrySortIndex {
94 SORTINDEX_MULTIPOINT = 1,
95 SORTINDEX_LINESTRING = 2,
96 SORTINDEX_LINEARRING = 3,
97 SORTINDEX_MULTILINESTRING = 4,
98 SORTINDEX_POLYGON = 5,
99 SORTINDEX_MULTIPOLYGON = 6,
100 SORTINDEX_GEOMETRYCOLLECTION = 7
199 using Ptr = std::unique_ptr<Geometry> ;
202 std::unique_ptr<Geometry>
clone()
const {
return std::unique_ptr<Geometry>(cloneImpl()); }
237 _userData = newUserData;
347 return getDimension() == d;
352 return d == getDimension();
355 bool isPuntal()
const {
359 bool isLineal()
const {
363 bool isPolygonal()
const {
367 bool isMixedDimension()
const;
370 bool isCollection()
const {
371 int t = getGeometryTypeId();
383 default:
return typeId;
390 virtual bool hasZ()
const = 0;
392 virtual bool hasM()
const = 0;
506 const std::string& intersectionPattern)
const;
509 relate(
const Geometry& g,
const std::string& intersectionPattern)
const
511 return relate(&g, intersectionPattern);
517 std::unique_ptr<IntersectionMatrix> relate(
const Geometry& g)
const;
606 virtual std::string toText()
const;
612 std::unique_ptr<Geometry>
buffer(
double distance)
const;
621 std::unique_ptr<Geometry>
buffer(
double distance,
int quadrantSegments)
const;
659 std::unique_ptr<Geometry>
buffer(
double distance,
int quadrantSegments,
660 int endCapStyle)
const;
673 std::unique_ptr<Geometry>
reverse()
const {
return std::unique_ptr<Geometry>(reverseImpl()); }
794 for(std::size_t i = 0, n = getNumGeometries(); i < n; ++i) {
795 f.filter(getGeometryN(i));
835 double cDistance)
const;
890 return std::any_of(geometries->begin(), geometries->end(), [](
const T& g) { return !g->isEmpty(); });
899 return std::any_of(geometries->begin(), geometries->end(), [](
const T& g) { return g == nullptr; });
913 static void checkNotGeometryCollection(
const Geometry* g);
915 virtual int compareToSameClass(
const Geometry* geom)
const = 0;
917 int compare(std::vector<Coordinate> a, std::vector<Coordinate> b)
const;
919 int compare(std::vector<Geometry*> a, std::vector<Geometry*> b)
const;
921 int compare(
const std::vector<std::unique_ptr<Geometry>> & a,
const std::vector<std::unique_ptr<Geometry>> & b)
const;
923 bool equal(
const CoordinateXY& a,
const CoordinateXY& b,
924 double tolerance)
const;
941 static std::vector<std::unique_ptr<Geometry>> toGeometryArray(std::vector<std::unique_ptr<T>> && v) {
942 static_assert(std::is_base_of<Geometry, T>::value,
"");
943 std::vector<std::unique_ptr<Geometry>> gv(v.size());
944 for (std::size_t i = 0; i < v.size(); i++) {
945 gv[i] = std::move(v[i]);
950 static std::vector<std::unique_ptr<Geometry>> toGeometryArray(std::vector<std::unique_ptr<Geometry>> && v) {
956 virtual int getSortIndex()
const = 0;
961 class GEOS_DLL GeometryChangedFilter :
public GeometryComponentFilter {
963 void filter_rw(Geometry* geom)
override;
966 static GeometryChangedFilter geometryChangedFilter;
972 const GeometryFactory* _factory;
981 GEOS_DLL std::ostream& operator<< (std::ostream& os,
const Geometry& geom);
983 struct GEOS_DLL GeometryGreaterThen {
1001 struct GeomPtrPair {
1002 typedef std::unique_ptr<Geometry> GeomPtr;
1011 #pragma warning(pop)
std::vector< const Geometry * > ConstVect
A vector of const Geometry pointers.
Definition: Geometry.h:193
virtual void apply_rw(CoordinateSequenceFilter &filter)=0
virtual bool isSimple() const
Returns false if the Geometry not simple.
std::unique_ptr< Geometry > buffer(double distance) const
std::unique_ptr< Geometry > reverse() const
Computes a new geometry which has all component coordinate sequences in reverse order (opposite orien...
Definition: Geometry.h:673
virtual bool contains(const Geometry *g) const
Returns true if other.within(this) returns true.
virtual Geometry * cloneImpl() const =0
Make a deep-copy of this Geometry.
std::unique_ptr< Point > getInteriorPoint() const
Computes an interior point of this Geometry.
static bool hasNullElements(const std::vector< T > *geometries)
Returns true if the vector contains any null elements.
Definition: Geometry.h:898
virtual Dimension::DimensionType getDimension() const =0
Returns the dimension of this Geometry (0=point, 1=line, 2=surface)
@ A
Dimension value of a surface (2).
Definition: Dimension.h:46
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:90
virtual const CoordinateXY * getCoordinate() const =0
Returns a vertex of this Geometry, or NULL if this is the empty geometry.
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 const Envelope * getEnvelopeInternal() const =0
Returns the minimum and maximum x and y values in this Geometry, or a null Envelope if this Geometry ...
Basic namespace for all GEOS functionalities.
Definition: Angle.h:25
Definition: GeometryComponentFilter.h:41
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:81
@ GEOS_LINESTRING
a linestring
Definition: Geometry.h:77
std::unique_ptr< Geometry > Ptr
An unique_ptr of Geometry.
Definition: Geometry.h:199
virtual std::size_t getNumGeometries() const
Definition: Geometry.h:308
virtual bool isDimensionStrict(Dimension::DimensionType d) const
Checks whether this Geometry consists only of components having dimension d.
Definition: Geometry.h:351
std::unique_ptr< IntersectionMatrix > relate(const Geometry *g) const
Returns the DE-9IM intersection matrix for the two Geometrys.
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:316
virtual void geometryChangedAction()=0
Notifies this Geometry that its Coordinates have been changed by an external party.
@ GEOS_MULTIPOLYGON
a collection of polygons
Definition: Geometry.h:87
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 hasDimension(Dimension::DimensionType d) const
Checks whether any component of this geometry has dimension d.
Definition: Geometry.h:346
virtual void setSRID(int newSRID)
Sets the ID of the Spatial Reference System used by the Geometry.
Definition: Geometry.h:272
std::unique_ptr< Geometry > intersection(const Geometry *other) const
Returns a Geometry representing the points shared by this Geometry and other.
virtual std::unique_ptr< Geometry > getBoundary() const =0
Returns the boundary, or an empty geometry of appropriate dimension if this Geometry is empty.
@ GEOS_LINEARRING
a linear ring (linestring with 1st point == last point)
Definition: Geometry.h:79
virtual bool isRectangle() const
Polygon overrides to check for actual rectangle.
Definition: Geometry.h:337
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:29
virtual double getArea() const
Returns the area of this Geometry.
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
@ GEOS_POINT
a point
Definition: Geometry.h:75
static bool hasNonEmptyElements(const std::vector< T > *geometries)
Returns true if the array contains any non-empty Geometrys.
Definition: Geometry.h:889
virtual bool equals(const Geometry *g) const
Returns true if the DE-9IM intersection matrix for the two Geometrys is T*F**FFF*.
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition: Geometry.h:186
void applyComponentFilter(T &f) const
Apply a filter to each component of this geometry. The filter is expected to provide a ....
Definition: Geometry.h:792
Geometry(const GeometryFactory *factory)
Construct a geometry with the given GeometryFactory.
bool coveredBy(const Geometry *g) const
Tests whether this geometry is covered by the specified geometry.
Definition: Geometry.h:597
@ L
Dimension value of a curve (1).
Definition: Dimension.h:43
const PrecisionModel * getPrecisionModel() const
Get the PrecisionModel used to create this Geometry.
@ GEOS_GEOMETRYCOLLECTION
a collection of heterogeneus geometries
Definition: Geometry.h:89
virtual uint8_t getCoordinateDimension() const =0
Returns the coordinate dimension of this Geometry (2=XY, 3=XYZ or XYM, 4=XYZM).
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...
The internal representation of a list of coordinates inside a Geometry.
Definition: CoordinateSequence.h:56
virtual void normalize()=0
Interface for classes which provide operations that can be applied to the coordinates in a Coordinate...
Definition: CoordinateSequenceFilter.h:55
virtual bool disjoint(const Geometry *other) const
virtual std::unique_ptr< CoordinateSequence > getCoordinates() const =0
Returns this Geometry vertices. Caller takes ownership of the returned object.
@ GEOS_MULTILINESTRING
a collection of linestrings
Definition: Geometry.h:85
virtual GeometryTypeId getGeometryTypeId() const =0
Return an integer representation of this Geometry type.
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.
virtual std::unique_ptr< Geometry > convexHull() const
Returns the smallest convex Polygon that contains all the points in the Geometry.
const GeometryFactory * getFactory() const
Gets the factory which contains the context in which this geometry was created.
Definition: Geometry.h:216
virtual std::unique_ptr< Geometry > getEnvelope() const
Returns this Geometrys bounding box.
virtual double distance(const Geometry *g) const
virtual int getBoundaryDimension() const =0
Returns the dimension of this Geometrys inherent boundary.
virtual int compareTo(const Geometry *geom) const
Comparator for sorting 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 getCentroid(CoordinateXY &ret) const
Computes the centroid of this Geometry as a Coordinate.
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 ...
@ 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
GeometryTypeId
Geometry types.
Definition: Geometry.h:73
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 classes support the concept of applying a coordinate filter to every coordinate in the Geome...
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:65
virtual int getSRID() const
Returns the ID of the Spatial Reference System used by the Geometry.
Definition: Geometry.h:263
void * getUserData() const
Gets the user data object for this geometry, if any.
Definition: Geometry.h:247
virtual std::unique_ptr< Point > getCentroid() const
Computes the centroid of this Geometry.
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:235
Geometry classes support the concept of applying a Geometry filter to the Geometry.
Definition: GeometryFilter.h:45
virtual void apply_ro(CoordinateSequenceFilter &filter) const =0
bool covers(const Geometry *g) const
Returns true if this geometry covers the specified geometry.
std::unique_ptr< Geometry > Union(const Geometry *other) const
Returns a Geometry representing all the points in this Geometry and other.
@ GEOS_MULTIPOINT
a collection of points
Definition: Geometry.h:83
std::string geosversion()
Return current GEOS version.
std::vector< Geometry * > NonConstVect
A vector of non-const Geometry pointers.
Definition: Geometry.h:196
Ptr Union() const
Computes the union of all the elements of this geometry. Heterogeneous GeometryCollections are fully ...
std::unique_ptr< Geometry > clone() const
Make a deep-copy of this Geometry.
Definition: Geometry.h:202
virtual void geometryChanged()
Notifies this Geometry that its Coordinates have been changed by an external party (using a Coordinat...
virtual Geometry * reverseImpl() const =0
Make a geometry with coordinates in reverse order.
virtual ~Geometry()
Destroy Geometry and all components.
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...
virtual bool isValid() const
Tests the validity of this Geometry.
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.
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...