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 Geometry classes support the concept of applying a Geometry filter to the Geometry.
Definition: GeometryFilter.h:47
void * getUserData() const
Gets the user data object for this geometry, if any.
Definition: Geometry.h:249
a linestring
Definition: Geometry.h:79
a collection of heterogeneus geometries
Definition: Geometry.h:91
a collection of linestrings
Definition: Geometry.h:87
Coordinate is the lightweight class used to store coordinates.
Definition: Coordinate.h:60
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
Interface for classes which provide operations that can be applied to the coordinates in a Coordinate...
Definition: CoordinateSequenceFilter.h:57
Specifies the precision model of the Coordinate in a Geometry.
Definition: PrecisionModel.h:87
const GeometryFactory * getFactory() const
Gets the factory which contains the context in which this geometry was created.
Definition: Geometry.h:218
std::string geosversion()
Return current GEOS version.
GeometryTypeId
Geometry types.
Definition: Geometry.h:75
virtual bool isDimensionStrict(Dimension::DimensionType d) const
Checks whether this Geometry consists only of components having dimension d.
Definition: Geometry.h:348
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition: Geometry.h:188
Geometry classes support the concept of applying a coordinate filter to every coordinate in the Geome...
Definition: CoordinateFilter.h:43
a collection of points
Definition: Geometry.h:85
std::string jtsport()
Return the version of JTS this GEOS release has been ported from.
virtual int getSRID() const
Returns the ID of the Spatial Reference System used by the Geometry.
Definition: Geometry.h:265
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
Dimension value of a curve (1).
Definition: Dimension.h:45
Dimension value of a surface (2).
Definition: Dimension.h:48
std::ostream & operator<<(std::ostream &os, const Coordinate &c)
Output function.
virtual bool isRectangle() const
Polygon overrides to check for actual rectangle.
Definition: Geometry.h:339
Supplies a set of utility methods for building Geometry objects from CoordinateSequence or other Geom...
Definition: GeometryFactory.h:68
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
std::vector< Geometry * > NonConstVect
A vector of non-const Geometry pointers.
Definition: Geometry.h:198
Basic namespace for all GEOS functionalities.
Definition: IndexedNestedRingTester.h:25
bool coveredBy(const Geometry *g) const
Tests whether this geometry is covered by the specified geometry.
Definition: Geometry.h:573
virtual void setSRID(int newSRID)
Sets the ID of the Spatial Reference System used by the Geometry.
Definition: Geometry.h:274
a polygon
Definition: Geometry.h:83
a linear ring (linestring with 1st point == last point)
Definition: Geometry.h:81
static bool hasNullElements(const std::vector< T > *geometries)
Returns true if the vector contains any null elements.
Definition: Geometry.h:857
a point
Definition: Geometry.h:77
Dimension value of a point (0).
Definition: Dimension.h:42
virtual std::size_t getNumGeometries() const
Definition: Geometry.h:310
The internal representation of a list of coordinates inside a Geometry.
Definition: CoordinateSequence.h:58
static bool hasNonEmptyElements(const std::vector< T > *geometries)
Returns true if the array contains any non-empty Geometrys.
Definition: Geometry.h:848
bool covers(const Geometry *g) const
Returns true if this geometry covers the specified geometry.
std::unique_ptr< Geometry > Ptr
An unique_ptr of Geometry.
Definition: Geometry.h:201
a collection of polygons
Definition: Geometry.h:89
std::unique_ptr< Envelope > envelope
The bounding box of this Geometry.
Definition: Geometry.h:844
std::vector< const Geometry * > ConstVect
A vector of const Geometry pointers.
Definition: Geometry.h:195
DimensionType
Definition: Dimension.h:31
Definition: GeometryComponentFilter.h:43