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;
284 virtual const CoordinateXY* getCoordinate()
const = 0;
291 virtual std::unique_ptr<CoordinateSequence> getCoordinates()
const = 0;
294 virtual std::size_t getNumPoints()
const = 0;
297 virtual bool isSimple()
const;
300 virtual std::string getGeometryType()
const = 0;
330 virtual bool isValid()
const;
333 virtual bool isEmpty()
const = 0;
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;
388 virtual uint8_t getCoordinateDimension()
const = 0;
390 virtual bool hasZ()
const = 0;
392 virtual bool hasM()
const = 0;
410 virtual std::unique_ptr<Geometry> getBoundary()
const = 0;
413 virtual int getBoundaryDimension()
const = 0;
416 virtual std::unique_ptr<Geometry> getEnvelope()
const;
422 virtual const Envelope* getEnvelopeInternal()
const = 0;
440 virtual bool disjoint(
const Geometry* other)
const;
446 virtual bool touches(
const Geometry* other)
const;
449 virtual bool intersects(
const Geometry* g)
const;
473 virtual bool crosses(
const Geometry* g)
const;
479 virtual bool within(
const Geometry* g)
const;
482 virtual bool contains(
const Geometry* g)
const;
489 virtual bool overlaps(
const Geometry* g)
const;
505 bool relate(
const Geometry* g,
506 const std::string& intersectionPattern)
const;
509 relate(
const Geometry& g,
const std::string& intersectionPattern)
const 511 return relate(&g, intersectionPattern);
515 std::unique_ptr<IntersectionMatrix> relate(
const Geometry* g)
const;
517 std::unique_ptr<IntersectionMatrix> relate(
const Geometry& g)
const;
524 virtual bool equals(
const Geometry* g)
const;
564 bool covers(
const Geometry* g)
const;
604 virtual std::string toString()
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;
665 virtual std::unique_ptr<Geometry> convexHull()
const;
673 std::unique_ptr<Geometry>
reverse()
const {
return std::unique_ptr<Geometry>(reverseImpl()); }
684 std::unique_ptr<Geometry> intersection(
const Geometry* other)
const;
695 std::unique_ptr<Geometry> Union(
const Geometry* other)
const;
728 std::unique_ptr<Geometry> difference(
const Geometry* other)
const;
739 std::unique_ptr<Geometry> symDifference(
const Geometry* other)
const;
747 virtual bool equalsExact(
const Geometry* other,
double tolerance = 0)
754 virtual bool equalsIdentical(
const Geometry* other)
const = 0;
794 for(std::size_t i = 0, n = getNumGeometries(); i < n; ++i) {
795 f.filter(getGeometryN(i));
804 virtual void normalize() = 0;
807 virtual int compareTo(
const Geometry* geom)
const;
810 virtual double getArea()
const;
813 virtual double getLength()
const;
820 virtual double distance(
const Geometry* g)
const;
834 virtual bool isWithinDistance(
const Geometry* geom,
835 double cDistance)
const;
846 virtual std::unique_ptr<Point> getCentroid()
const;
852 virtual bool getCentroid(CoordinateXY& ret)
const;
864 std::unique_ptr<Point> getInteriorPoint()
const;
871 virtual void geometryChanged();
878 virtual void geometryChangedAction() = 0;
882 virtual Geometry* cloneImpl()
const = 0;
885 virtual Geometry* reverseImpl()
const = 0;
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; });
911 virtual bool isEquivalentClass(
const Geometry* other)
const;
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 {
984 bool operator()(
const Geometry* first,
const Geometry* second);
996 GEOS_DLL std::string
jtsport();
1001 struct GeomPtrPair {
1002 typedef std::unique_ptr<Geometry> GeomPtr;
1011 #pragma warning(pop) Geometry classes support the concept of applying a Geometry filter to the Geometry.
Definition: GeometryFilter.h:45
void * getUserData() const
Gets the user data object for this geometry, if any.
Definition: Geometry.h:247
a linestring
Definition: Geometry.h:77
a collection of heterogeneus geometries
Definition: Geometry.h:89
a collection of linestrings
Definition: Geometry.h:85
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
std::unique_ptr< Geometry > clone() const
Make a deep-copy of this Geometry.
Definition: Geometry.h:202
Interface for classes which provide operations that can be applied to the coordinates in a Coordinate...
Definition: CoordinateSequenceFilter.h:55
Specifies the precision model of the Coordinate in a Geometry.
Definition: PrecisionModel.h:90
const GeometryFactory * getFactory() const
Gets the factory which contains the context in which this geometry was created.
Definition: Geometry.h:216
std::string geosversion()
Return current GEOS version.
GeometryTypeId
Geometry types.
Definition: Geometry.h:73
virtual bool isDimensionStrict(Dimension::DimensionType d) const
Checks whether this Geometry consists only of components having dimension d.
Definition: Geometry.h:351
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition: Geometry.h:186
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:83
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:263
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
Dimension value of a curve (1).
Definition: Dimension.h:43
Dimension value of a surface (2).
Definition: Dimension.h:46
virtual bool isRectangle() const
Polygon overrides to check for actual rectangle.
Definition: Geometry.h:337
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
Supplies a set of utility methods for building Geometry objects from CoordinateSequence or other Geom...
Definition: GeometryFactory.h:65
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
std::vector< Geometry * > NonConstVect
A vector of non-const Geometry pointers.
Definition: Geometry.h:196
Basic namespace for all GEOS functionalities.
Definition: Angle.h:25
bool coveredBy(const Geometry *g) const
Tests whether this geometry is covered by the specified geometry.
Definition: Geometry.h:597
virtual void setSRID(int newSRID)
Sets the ID of the Spatial Reference System used by the Geometry.
Definition: Geometry.h:272
a polygon
Definition: Geometry.h:81
a linear ring (linestring with 1st point == last point)
Definition: Geometry.h:79
virtual bool hasDimension(Dimension::DimensionType d) const
Checks whether any component of this geometry has dimension d.
Definition: Geometry.h:346
static bool hasNullElements(const std::vector< T > *geometries)
Returns true if the vector contains any null elements.
Definition: Geometry.h:898
a point
Definition: Geometry.h:75
Dimension value of a point (0).
Definition: Dimension.h:40
virtual std::size_t getNumGeometries() const
Definition: Geometry.h:308
The internal representation of a list of coordinates inside a Geometry.
Definition: CoordinateSequence.h:56
static bool hasNonEmptyElements(const std::vector< T > *geometries)
Returns true if the array contains any non-empty Geometrys.
Definition: Geometry.h:889
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:199
a collection of polygons
Definition: Geometry.h:87
std::vector< const Geometry * > ConstVect
A vector of const Geometry pointers.
Definition: Geometry.h:193
DimensionType
Definition: Dimension.h:29
Definition: GeometryComponentFilter.h:41