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/inline.h>
36 #include <geos/geom/Envelope.h>
37 #include <geos/geom/Dimension.h>
38 #include <geos/geom/GeometryComponentFilter.h>
39 #include <geos/geom/IntersectionMatrix.h>
49 #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
50 #pragma warning(disable: 4355) // warning C4355: 'this' : used in base member initializer list
57 class CoordinateFilter;
58 class CoordinateSequence;
59 class CoordinateSequenceFilter;
60 class GeometryComponentFilter;
61 class GeometryFactory;
94 enum GeometrySortIndex {
96 SORTINDEX_MULTIPOINT = 1,
97 SORTINDEX_LINESTRING = 2,
98 SORTINDEX_LINEARRING = 3,
99 SORTINDEX_MULTILINESTRING = 4,
100 SORTINDEX_POLYGON = 5,
101 SORTINDEX_MULTIPOLYGON = 6,
102 SORTINDEX_GEOMETRYCOLLECTION = 7
201 using Ptr = std::unique_ptr<Geometry> ;
204 virtual std::unique_ptr<Geometry> clone()
const = 0;
239 _userData = newUserData;
286 virtual const Coordinate* getCoordinate()
const = 0;
293 virtual std::unique_ptr<CoordinateSequence> getCoordinates()
const = 0;
296 virtual std::size_t getNumPoints()
const = 0;
299 virtual bool isSimple()
const;
302 virtual std::string getGeometryType()
const = 0;
332 virtual bool isValid()
const;
335 virtual bool isEmpty()
const = 0;
349 return d == getDimension();
352 bool isPuntal()
const {
356 bool isLineal()
const {
360 bool isPolygonal()
const {
365 virtual int getCoordinateDimension()
const = 0;
383 virtual std::unique_ptr<Geometry> getBoundary()
const = 0;
386 virtual int getBoundaryDimension()
const = 0;
389 virtual std::unique_ptr<Geometry> getEnvelope()
const;
395 virtual const Envelope* getEnvelopeInternal()
const;
413 virtual bool disjoint(
const Geometry* other)
const;
419 virtual bool touches(
const Geometry* other)
const;
422 virtual bool intersects(
const Geometry* g)
const;
446 virtual bool crosses(
const Geometry* g)
const;
452 virtual bool within(
const Geometry* g)
const;
455 virtual bool contains(
const Geometry* g)
const;
462 virtual bool overlaps(
const Geometry* g)
const;
478 bool relate(
const Geometry* g,
479 const std::string& intersectionPattern)
const;
482 relate(
const Geometry& g,
const std::string& intersectionPattern)
const
484 return relate(&g, intersectionPattern);
488 std::unique_ptr<IntersectionMatrix> relate(
const Geometry* g)
const;
490 std::unique_ptr<IntersectionMatrix> relate(
const Geometry& g)
const
500 virtual bool equals(
const Geometry* g)
const;
540 bool covers(
const Geometry* g)
const;
580 virtual std::string toString()
const;
582 virtual std::string toText()
const;
588 std::unique_ptr<Geometry> buffer(
double distance)
const;
597 std::unique_ptr<Geometry> buffer(
double distance,
int quadrantSegments)
const;
635 std::unique_ptr<Geometry> buffer(
double distance,
int quadrantSegments,
636 int endCapStyle)
const;
641 virtual std::unique_ptr<Geometry> convexHull()
const;
649 virtual std::unique_ptr<Geometry> reverse()
const = 0;
660 std::unique_ptr<Geometry> intersection(
const Geometry* other)
const;
671 std::unique_ptr<Geometry> Union(
const Geometry* other)
const;
704 std::unique_ptr<Geometry> difference(
const Geometry* other)
const;
715 std::unique_ptr<Geometry> symDifference(
const Geometry* other)
const;
721 virtual bool equalsExact(
const Geometry* other,
double tolerance = 0)
762 for(std::size_t i = 0, n = getNumGeometries(); i < n; ++i) {
763 f.filter(getGeometryN(i));
768 virtual void normalize() = 0;
770 virtual int compareTo(
const Geometry* geom)
const;
776 virtual double distance(
const Geometry* g)
const;
779 virtual double getArea()
const;
782 virtual double getLength()
const;
795 virtual bool isWithinDistance(
const Geometry* geom,
796 double cDistance)
const;
807 virtual std::unique_ptr<Point> getCentroid()
const;
813 virtual bool getCentroid(
Coordinate& ret)
const;
825 std::unique_ptr<Point> getInteriorPoint()
const;
832 virtual void geometryChanged();
839 void geometryChangedAction();
849 return std::any_of(geometries->begin(), geometries->end(), [](
const T& g) { return !g->isEmpty(); });
858 return std::any_of(geometries->begin(), geometries->end(), [](
const T& g) { return g == nullptr; });
870 virtual bool isEquivalentClass(
const Geometry* other)
const;
872 static void checkNotGeometryCollection(
const Geometry* g);
879 virtual Envelope::Ptr computeEnvelopeInternal()
const = 0;
881 virtual int compareToSameClass(
const Geometry* geom)
const = 0;
883 int compare(std::vector<Coordinate> a, std::vector<Coordinate> b)
const;
885 int compare(std::vector<Geometry*> a, std::vector<Geometry*> b)
const;
887 int compare(
const std::vector<std::unique_ptr<Geometry>> & a,
const std::vector<std::unique_ptr<Geometry>> & b)
const;
890 double tolerance)
const;
907 static std::vector<std::unique_ptr<Geometry>> toGeometryArray(std::vector<std::unique_ptr<T>> && v) {
908 static_assert(std::is_base_of<Geometry, T>::value,
"");
909 std::vector<std::unique_ptr<Geometry>> gv(v.size());
910 for (
size_t i = 0; i < v.size(); i++) {
911 gv[i] = std::move(v[i]);
918 virtual int getSortIndex()
const = 0;
923 class GEOS_DLL GeometryChangedFilter :
public GeometryComponentFilter {
925 void filter_rw(Geometry* geom)
override;
928 static GeometryChangedFilter geometryChangedFilter;
934 const GeometryFactory* _factory;
943 GEOS_DLL std::ostream&
operator<< (std::ostream& os,
const Geometry& geom);
945 struct GEOS_DLL GeometryGreaterThen {
946 bool operator()(
const Geometry* first,
const Geometry* second);
958 GEOS_DLL std::string
jtsport();
964 typedef std::unique_ptr<Geometry> GeomPtr;
976 #endif // ndef GEOS_GEOM_GEOMETRY_H
std::vector< const Geometry * > ConstVect
A vector of const Geometry pointers.
Definition: Geometry.h:195
std::unique_ptr< Envelope > envelope
The bounding box of this Geometry.
Definition: Geometry.h:844
std::ostream & operator<<(std::ostream &os, const Coordinate &c)
Output function.
static bool hasNullElements(const std::vector< T > *geometries)
Returns true if the vector contains any null elements.
Definition: Geometry.h:857
@ A
Dimension value of a surface (2).
Definition: Dimension.h:96
Specifies the precision model of the Coordinate in a Geometry.
Definition: PrecisionModel.h:87
Basic namespace for all GEOS functionalities.
Definition: IndexedNestedRingTester.h:25
Definition: GeometryComponentFilter.h:43
@ 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:201
virtual std::size_t getNumGeometries() const
Definition: Geometry.h:310
virtual bool isDimensionStrict(Dimension::DimensionType d) const
Checks whether this Geometry consists only of components having dimension d.
Definition: Geometry.h:348
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:318
@ GEOS_MULTIPOLYGON
a collection of polygons
Definition: Geometry.h:89
virtual void setSRID(int newSRID)
Sets the ID of the Spatial Reference System used by the Geometry.
Definition: Geometry.h:274
@ 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:339
DimensionType
Definition: Dimension.h:67
@ GEOS_POINT
a point
Definition: Geometry.h:77
static bool hasNonEmptyElements(const std::vector< T > *geometries)
Returns true if the array contains any non-empty Geometrys.
Definition: Geometry.h:848
Coordinate is the lightweight class used to store coordinates.
Definition: Coordinate.h:84
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition: Geometry.h:188
void applyComponentFilter(T &f) const
Apply a filter to each component of this geometry. The filter is expected to provide a ....
Definition: Geometry.h:760
bool coveredBy(const Geometry *g) const
Tests whether this geometry is covered by the specified geometry.
Definition: Geometry.h:573
@ L
Dimension value of a curve (1).
Definition: Dimension.h:93
@ 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:58
Interface for classes which provide operations that can be applied to the coordinates in a Coordinate...
Definition: CoordinateSequenceFilter.h:57
@ GEOS_MULTILINESTRING
a collection of linestrings
Definition: Geometry.h:87
const GeometryFactory * getFactory() const
Gets the factory which contains the context in which this geometry was created.
Definition: Geometry.h:218
@ P
Dimension value of a point (0).
Definition: Dimension.h:90
GeometryTypeId
Geometry types.
Definition: Geometry.h:75
Geometry classes support the concept of applying a coordinate filter to every coordinate in the Geome...
Definition: CoordinateFilter.h:67
Supplies a set of utility methods for building Geometry objects from CoordinateSequence or other Geom...
Definition: GeometryFactory.h:68
virtual int getSRID() const
Returns the ID of the Spatial Reference System used by the Geometry.
Definition: Geometry.h:265
void * getUserData() const
Gets the user data object for this geometry, if any.
Definition: Geometry.h:249
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:237
Geometry classes support the concept of applying a Geometry filter to the Geometry.
Definition: GeometryFilter.h:47
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.
std::vector< Geometry * > NonConstVect
A vector of non-const Geometry pointers.
Definition: Geometry.h:198
std::string jtsport()
Return the version of JTS this GEOS release has been ported from.