GEOS 3.15.0beta1
Geometry.h
1/**********************************************************************
2 *
3 * GEOS - Geometry Engine Open Source
4 * http://geos.osgeo.org
5 *
6 * Copyright (C) 2009 2011 Sandro Santilli <strk@kbt.io>
7 * Copyright (C) 2005 2006 Refractions Research Inc.
8 * Copyright (C) 2001-2002 Vivid Solutions Inc.
9 *
10 * This is free software; you can redistribute and/or modify it under
11 * the terms of the GNU Lesser General Public Licence as published
12 * by the Free Software Foundation.
13 * See the COPYING file for more information.
14 *
15 **********************************************************************
16 *
17 * Last port: geom/Geometry.java rev. 1.112
18 *
19 **********************************************************************/
20
21#pragma once
22
23#ifndef USE_UNSTABLE_GEOS_CPP_API
24#ifndef _MSC_VER
25# warning "The GEOS C++ API is unstable, please use the C API instead"
26# warning "HINT: #include geos_c.h"
27#else
28#pragma message("The GEOS C++ API is unstable, please use the C API instead")
29#pragma message("HINT: #include geos_c.h")
30#endif
31#endif
32
33#include <geos/export.h>
34#include <geos/geom/Envelope.h>
35#include <geos/geom/Dimension.h> // for Dimension::DimensionType
36#include <geos/geom/GeometryComponentFilter.h> // for inheritance
37#include <geos/geom/CoordinateSequence.h> // to materialize CoordinateSequence
38#include <geos/util/Progress.h>
39
40#include <algorithm>
41#include <string>
42#include <iostream>
43#include <vector>
44#include <memory>
45
46#ifdef _MSC_VER
47#pragma warning(push)
48#pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
49#pragma warning(disable: 4355) // warning C4355: 'this' : used in base member initializer list
50#endif
51
52// Forward declarations
53namespace geos {
54namespace algorithm {
55class CurveToLineParams;
56class LineToCurveParams;
57}
58namespace geom {
59class Coordinate;
64class GeometryFactory;
65class GeometryFilter;
66class PrecisionModel;
67class Point;
69}
70namespace io { // geos.io
71} // namespace geos.io
72}
73
74namespace geos { // geos
75namespace geom { // geos::geom
76
78enum GeometryTypeId : int {
95 GEOS_CIRCULARSTRING,
96 GEOS_COMPOUNDCURVE,
97 GEOS_CURVEPOLYGON,
98 GEOS_MULTICURVE,
99 GEOS_MULTISURFACE,
100};
101
102enum GeometrySortIndex {
103 SORTINDEX_POINT = 0,
104 SORTINDEX_MULTIPOINT = 1,
105 SORTINDEX_LINESTRING = 2,
106 SORTINDEX_LINEARRING = 3,
107 SORTINDEX_MULTILINESTRING = 4,
108 SORTINDEX_POLYGON = 5,
109 SORTINDEX_MULTIPOLYGON = 6,
110 SORTINDEX_GEOMETRYCOLLECTION = 7,
111 SORTINDEX_CIRCULARSTRING = 8,
112 SORTINDEX_COMPOUNDCURVE = 9,
113 SORTINDEX_CURVEPOLYGON = 10,
114 SORTINDEX_MULTICURVE = 11,
115 SORTINDEX_MULTISURFACE = 12,
116};
117
201class GEOS_DLL Geometry {
202
203public:
204
205 friend class GeometryFactory;
206
208 using ConstVect = std::vector<const Geometry*>;
209
211 using NonConstVect = std::vector<Geometry*>;
212
214 using Ptr = std::unique_ptr<Geometry> ;
215
217 std::unique_ptr<Geometry> clone() const { return std::unique_ptr<Geometry>(cloneImpl()); }
218
220 virtual ~Geometry();
221
222
230 const GeometryFactory*
232 {
233 return _factory;
234 }
235
249 void
250 setUserData(void* newUserData)
251 {
252 _userData = newUserData;
253 }
254
261 void*
263 {
264 return _userData;
265 }
266
277 int getSRID() const
278 {
279 return SRID;
280 }
281
285 virtual void
286 setSRID(int newSRID)
287 {
288 SRID = newSRID;
289 }
290
296
298 virtual const CoordinateXY* getCoordinate() const = 0; //Abstract
299
305 virtual std::unique_ptr<CoordinateSequence> getCoordinates() const = 0; //Abstract
306
308 virtual std::size_t getNumPoints() const = 0; //Abstract
309
311 virtual bool isSimple() const;
312
314 virtual std::string getGeometryType() const = 0; //Abstract
315
317 virtual bool hasCurvedComponents() const;
318
320 virtual GeometryTypeId getGeometryTypeId() const = 0; //Abstract
321
329 virtual std::size_t
331 {
332 return 1;
333 }
334
337 virtual const Geometry*
338 getGeometryN(std::size_t /*n*/) const
339 {
340 return this;
341 }
342
345 std::unique_ptr<Geometry> getLinearized(const algorithm::CurveToLineParams& params) const
346 {
347 return std::unique_ptr<Geometry>(getLinearizedImpl(params));
348 }
349
352 std::unique_ptr<Geometry> getCurved(const algorithm::LineToCurveParams& params) const
353 {
354 return std::unique_ptr<Geometry>(getCurvedImpl(params));
355 }
356
366 bool isValid() const;
367
369 virtual bool isEmpty() const = 0; //Abstract
370
372 virtual bool
374 {
375 return false;
376 }
377
379 virtual Dimension::DimensionType getDimension() const = 0; //Abstract
380
383 return getDimension() == d;
384 }
385
388 return d == getDimension();
389 }
390
391 bool isPuntal() const {
392 return isDimensionStrict(Dimension::P);
393 }
394
395 bool isLineal() const {
396 return isDimensionStrict(Dimension::L);
397 }
398
399 bool isPolygonal() const {
400 return isDimensionStrict(Dimension::A);
401 }
402
403 bool isMixedDimension() const;
404 bool isMixedDimension(Dimension::DimensionType* baseDim) const;
405
406 bool isCollection() const {
407 int t = getGeometryTypeId();
408 return t == GEOS_GEOMETRYCOLLECTION ||
409 t == GEOS_MULTIPOINT ||
411 t == GEOS_MULTIPOLYGON ||
412 t == GEOS_MULTICURVE ||
413 t == GEOS_MULTISURFACE;
414 }
415
416 static GeometryTypeId multiTypeId(GeometryTypeId typeId) {
417 switch (typeId) {
418 case GEOS_POINT: return GEOS_MULTIPOINT;
420 case GEOS_POLYGON: return GEOS_MULTIPOLYGON;
421 case GEOS_CIRCULARSTRING:
422 case GEOS_COMPOUNDCURVE: return GEOS_MULTICURVE;
423 case GEOS_CURVEPOLYGON: return GEOS_MULTISURFACE;
424 default: return typeId;
425 }
426 }
427
429 virtual uint8_t getCoordinateDimension() const = 0; //Abstract
430
431 virtual bool hasZ() const = 0;
432
433 virtual bool hasM() const = 0;
434
451 virtual std::unique_ptr<Geometry> getBoundary() const = 0; //Abstract
452
454 virtual int getBoundaryDimension() const = 0; //Abstract
455
457 virtual std::unique_ptr<Geometry> getEnvelope() const;
458
463 virtual const Envelope* getEnvelopeInternal() const = 0;
464
481 virtual bool disjoint(const Geometry* other) const;
482
487 virtual bool touches(const Geometry* other) const;
488
490 virtual bool intersects(const Geometry* g) const;
491
514 virtual bool crosses(const Geometry* g) const;
515
520 virtual bool within(const Geometry* g) const;
521
523 virtual bool contains(const Geometry* g) const;
524
530 virtual bool overlaps(const Geometry* g) const;
531
546 bool relate(const Geometry* g,
547 const std::string& intersectionPattern) const;
548
549 bool
550 relate(const Geometry& g, const std::string& intersectionPattern) const
551 {
552 return relate(&g, intersectionPattern);
553 }
554
556 std::unique_ptr<IntersectionMatrix> relate(const Geometry* g) const;
557
558 std::unique_ptr<IntersectionMatrix> relate(const Geometry& g) const;
559
565 bool equals(const Geometry* g) const;
566
605 bool covers(const Geometry* g) const;
606
637 bool coveredBy(const Geometry* g) const;
638
639
641 virtual std::string toString() const;
642
643 virtual std::string toText() const;
644
649 std::unique_ptr<Geometry> buffer(double distance) const;
650
658 std::unique_ptr<Geometry> buffer(double distance, int quadrantSegments) const;
659
696 std::unique_ptr<Geometry> buffer(double distance, int quadrantSegments,
697 int endCapStyle) const;
698
702 virtual std::unique_ptr<Geometry> convexHull() const;
703
710 std::unique_ptr<Geometry> reverse() const { return std::unique_ptr<Geometry>(reverseImpl()); }
711
721 std::unique_ptr<Geometry> intersection(const Geometry* other) const;
722
732 std::unique_ptr<Geometry> Union(const Geometry* other) const;
733 // throw(IllegalArgumentException *, TopologyException *);
734
752 Ptr Union(geos::util::ProgressFunction* progressFunction) const;
753 // throw(IllegalArgumentException *, TopologyException *);
754
755 Ptr Union() const
756 {
757 geos::util::ProgressFunction* progressFunction = nullptr;
758 return Union(progressFunction);
759 }
760
771 std::unique_ptr<Geometry> difference(const Geometry* other) const;
772
782 std::unique_ptr<Geometry> symDifference(const Geometry* other) const;
783
790 virtual bool equalsExact(const Geometry* other, double tolerance = 0)
791 const = 0; // Abstract
792
797 virtual bool equalsIdentical(const Geometry* other) const = 0;
798
799 virtual void apply_rw(const CoordinateFilter* filter) = 0; //Abstract
800 virtual void apply_ro(CoordinateFilter* filter) const = 0; //Abstract
801 virtual void apply_rw(GeometryFilter* filter);
802 virtual void apply_ro(GeometryFilter* filter) const;
803 virtual void apply_rw(GeometryComponentFilter* filter);
804 virtual void apply_ro(GeometryComponentFilter* filter) const;
805
814 virtual void apply_rw(CoordinateSequenceFilter& filter) = 0;
815
822 virtual void apply_ro(CoordinateSequenceFilter& filter) const = 0;
823
833 template <class T>
834 void
836 {
837 for(std::size_t i = 0, n = getNumGeometries(); i < n; ++i) {
838 f.filter(getGeometryN(i));
839 }
840 }
841
847 virtual void normalize() = 0; //Abstract
848
850 int compareTo(const Geometry* geom) const;
851
853 virtual double getArea() const;
854
856 virtual double getLength() const;
857
863 virtual double distance(const Geometry* g) const;
864
865
877 virtual bool isWithinDistance(const Geometry* geom,
878 double cDistance) const;
879
889 virtual std::unique_ptr<Point> getCentroid() const;
890
892 //
895 virtual bool getCentroid(CoordinateXY& ret) const;
896
907 std::unique_ptr<Point> getInteriorPoint() const;
908
915
921 virtual void geometryChangedAction() = 0;
922
923protected:
925 virtual Geometry* cloneImpl() const = 0;
926
928 virtual Geometry* reverseImpl() const = 0;
929
930 virtual Geometry* getLinearizedImpl(const algorithm::CurveToLineParams&) const = 0;
931
932 virtual Geometry* getCurvedImpl(const algorithm::LineToCurveParams&) const = 0;
933
935 template<typename T>
936 static bool hasNonEmptyElements(const std::vector<T>* geometries) {
937 return std::any_of(geometries->begin(), geometries->end(), [](const T& g) { return !g->isEmpty(); });
938 }
939
941 static bool hasNullElements(const CoordinateSequence* list);
942
944 template<typename T>
945 static bool hasNullElements(const std::vector<T>* geometries) {
946 return std::any_of(geometries->begin(), geometries->end(), [](const T& g) { return g == nullptr; });
947 }
948
949// static void reversePointOrder(CoordinateSequence* coordinates);
950// static Coordinate& minCoordinate(CoordinateSequence* coordinates);
951// static void scroll(CoordinateSequence* coordinates,Coordinate* firstCoordinate);
952// static int indexOf(Coordinate* coordinate,CoordinateSequence* coordinates);
953//
958 virtual bool isEquivalentClass(const Geometry* other) const;
959
960 static void checkNotGeometryCollection(const Geometry* g);
961
962 virtual int compareToSameClass(const Geometry* geom) const = 0; //Abstract
963
964 template<typename T>
965 static int compare(const T& a, const T& b)
966 {
967 std::size_t i = 0;
968 std::size_t j = 0;
969 while(i < a.size() && j < b.size()) {
970 const auto& aGeom = *a[i];
971 const auto& bGeom = *b[j];
972
973 int comparison = aGeom.compareTo(&bGeom);
974 if(comparison != 0) {
975 return comparison;
976 }
977
978 i++;
979 j++;
980 }
981
982 if(i < a.size()) {
983 return 1;
984 }
985
986 if(j < b.size()) {
987 return -1;
988 }
989
990 return 0;
991 }
992
993 bool equal(const CoordinateXY& a, const CoordinateXY& b,
994 double tolerance) const;
995 int SRID;
996
997 Geometry(const Geometry& geom);
998
1008 Geometry(const GeometryFactory* factory);
1009
1010 template<typename T>
1011 static std::vector<std::unique_ptr<Geometry>> toGeometryArray(std::vector<std::unique_ptr<T>> && v) {
1012 static_assert(std::is_base_of<Geometry, T>::value, "");
1013 std::vector<std::unique_ptr<Geometry>> gv(v.size());
1014 for (std::size_t i = 0; i < v.size(); i++) {
1015 gv[i] = std::move(v[i]);
1016 }
1017 return gv;
1018 }
1019
1020 static std::vector<std::unique_ptr<Geometry>> toGeometryArray(std::vector<std::unique_ptr<Geometry>> && v) {
1021 return std::move(v);
1022 }
1023
1024protected:
1025
1026 virtual int getSortIndex() const = 0;
1027
1028
1029private:
1030
1031 class GEOS_DLL GeometryChangedFilter : public GeometryComponentFilter {
1032 public:
1033 void filter_rw(Geometry* geom) override;
1034 };
1035
1036 static GeometryChangedFilter geometryChangedFilter;
1037
1042 const GeometryFactory* _factory;
1043
1044 void* _userData;
1045};
1046
1051GEOS_DLL std::ostream& operator<< (std::ostream& os, const Geometry& geom);
1052
1053struct GEOS_DLL GeometryGreaterThen {
1054 bool operator()(const Geometry* first, const Geometry* second);
1055};
1056
1057
1059GEOS_DLL std::string geosversion();
1060
1066GEOS_DLL std::string jtsport();
1067
1068// We use this instead of std::pair<unique_ptr<Geometry>> because C++11
1069// forbids that construct:
1070// http://lwg.github.com/issues/lwg-closed.html#2068
1071struct GeomPtrPair {
1072 typedef std::unique_ptr<Geometry> GeomPtr;
1073 GeomPtr first;
1074 GeomPtr second;
1075};
1076
1077} // namespace geos::geom
1078} // namespace geos
1079
1080#ifdef _MSC_VER
1081#pragma warning(pop)
1082#endif
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:56
The internal representation of a list of coordinates inside a Geometry.
Definition CoordinateSequence.h:56
Coordinate is the lightweight class used to store coordinates.
Definition Coordinate.h:220
DimensionType
Definition Dimension.h:29
@ 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:59
Definition GeometryComponentFilter.h:41
Supplies a set of utility methods for building Geometry objects from CoordinateSequence or other Geom...
Definition GeometryFactory.h:72
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:201
virtual std::unique_ptr< Geometry > getBoundary() const =0
Returns the boundary, or an empty geometry of appropriate dimension if this Geometry is empty.
virtual int getBoundaryDimension() const =0
Returns the dimension of this Geometrys inherent boundary.
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:211
void applyComponentFilter(T &f) const
Apply a filter to each component of this geometry. The filter is expected to provide a ....
Definition Geometry.h:835
virtual const CoordinateXY * getCoordinate() const =0
Returns a vertex of this Geometry, or NULL if this is the empty 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< Geometry > reverse() const
Computes a new geometry which has all component coordinate sequences in reverse order (opposite orien...
Definition Geometry.h:710
virtual ~Geometry()
Destroy Geometry and all components.
virtual void apply_rw(CoordinateSequenceFilter &filter)=0
const PrecisionModel * getPrecisionModel() const
Get the PrecisionModel used to create this Geometry.
std::unique_ptr< IntersectionMatrix > relate(const Geometry *g) const
Returns the DE-9IM intersection matrix for the two Geometrys.
virtual void geometryChangedAction()=0
Notifies this Geometry that its Coordinates have been changed by an external party.
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:387
Ptr Union(geos::util::ProgressFunction *progressFunction) const
Computes the union of all the elements of this geometry. Heterogeneous GeometryCollections are fully ...
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.
int compareTo(const Geometry *geom) const
Comparator for sorting geometry.
virtual std::unique_ptr< Geometry > convexHull() const
Returns the smallest convex Polygon that contains all the points in the Geometry.
virtual bool hasDimension(Dimension::DimensionType d) const
Checks whether any component of this geometry has dimension d.
Definition Geometry.h:382
virtual std::string getGeometryType() const =0
Return a string representation of this Geometry type.
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
std::unique_ptr< Point > getInteriorPoint() const
Computes an interior point of this Geometry.
std::unique_ptr< Geometry > intersection(const Geometry *other) const
Returns a Geometry representing the points shared by this Geometry and other.
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:214
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:338
virtual bool hasCurvedComponents() const
Returns whether the Geometry contains curved components.
std::unique_ptr< Geometry > getCurved(const algorithm::LineToCurveParams &params) const
Definition Geometry.h:352
virtual bool within(const Geometry *g) const
Returns true if the DE-9IM intersection matrix for the two Geometrys is T*F**F***.
virtual std::size_t getNumPoints() const =0
Returns the count of this Geometrys vertices.
static bool hasNullElements(const CoordinateSequence *list)
Returns true if the CoordinateSequence contains any null elements.
virtual Geometry * reverseImpl() const =0
Make a geometry with coordinates in reverse order.
void geometryChanged()
Notifies this Geometry that its Coordinates have been changed by an external party (using a Coordinat...
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:250
virtual bool isEmpty() const =0
Returns whether or not the set of points in this Geometry is empty.
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.
bool isValid() const
Tests the validity of this Geometry.
std::vector< const Geometry * > ConstVect
A vector of const Geometry pointers.
Definition Geometry.h:208
const GeometryFactory * getFactory() const
Gets the factory which contains the context in which this geometry was created.
Definition Geometry.h:231
virtual bool touches(const Geometry *other) const
Returns true if the DE-9IM intersection matrix for the two Geometrys is FT*******,...
virtual std::unique_ptr< Geometry > getEnvelope() const
Returns this Geometrys bounding box.
virtual std::string toString() const
Returns the Well-known Text representation of this Geometry.
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 Geometry * cloneImpl() const =0
Make a deep-copy 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:936
void * getUserData() const
Gets the user data object for this geometry, if any.
Definition Geometry.h:262
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 bool disjoint(const Geometry *other) const
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.
std::unique_ptr< Geometry > buffer(double distance) const
virtual std::unique_ptr< Point > getCentroid() const
Computes the centroid of this Geometry.
bool coveredBy(const Geometry *g) const
Tests whether this geometry is covered by the specified geometry.
virtual std::unique_ptr< CoordinateSequence > getCoordinates() const =0
Returns this Geometry vertices. Caller takes ownership of the returned object.
std::unique_ptr< Geometry > Union(const Geometry *other) const
Returns a Geometry representing all the points in this Geometry and other.
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:330
std::unique_ptr< Geometry > clone() const
Make a deep-copy of this Geometry.
Definition Geometry.h:217
virtual double getArea() const
Returns the area of this Geometry.
virtual bool isRectangle() const
Polygon overrides to check for actual rectangle.
Definition Geometry.h:373
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 ...
std::unique_ptr< Geometry > getLinearized(const algorithm::CurveToLineParams &params) const
Definition Geometry.h:345
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).
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 ...
int getSRID() const
Returns the ID of the Spatial Reference System used by the Geometry.
Definition Geometry.h:277
static bool hasNullElements(const std::vector< T > *geometries)
Returns true if the vector contains any null elements.
Definition Geometry.h:945
virtual void setSRID(int newSRID)
Sets the ID of the Spatial Reference System used by the Geometry.
Definition Geometry.h:286
bool equals(const Geometry *g) const
Returns true if the DE-9IM intersection matrix for the two Geometrys is T*F**FFF*.
Implementation of Dimensionally Extended Nine-Intersection Model (DE-9IM) matrix.
Definition IntersectionMatrix.h:51
Definition Point.h:61
Specifies the precision model of the Coordinate in a Geometry.
Definition PrecisionModel.h:87
@ GEOS_MULTILINESTRING
Definition geos_c.h:252
@ GEOS_GEOMETRYCOLLECTION
Definition geos_c.h:256
@ GEOS_POINT
Definition geos_c.h:242
@ GEOS_MULTIPOLYGON
Definition geos_c.h:254
@ GEOS_POLYGON
Definition geos_c.h:248
@ GEOS_MULTIPOINT
Definition geos_c.h:250
@ GEOS_LINESTRING
Definition geos_c.h:244
Contains classes and interfaces implementing fundamental computational geometry algorithms.
Definition Angle.h:32
Definition Angle.h:26
std::string jtsport()
Return the version of JTS this GEOS release has been ported from.
std::string geosversion()
Return current GEOS version.
GeometryTypeId
Geometry types.
Definition Geometry.h:78
@ GEOS_MULTILINESTRING
a collection of linestrings
Definition Geometry.h:90
@ GEOS_LINEARRING
a linear ring (linestring with 1st point == last point)
Definition Geometry.h:84
@ GEOS_GEOMETRYCOLLECTION
a collection of heterogeneus geometries
Definition Geometry.h:94
@ GEOS_POINT
a point
Definition Geometry.h:80
@ GEOS_LINESTRING
a linestring
Definition Geometry.h:82
@ GEOS_POLYGON
a polygon
Definition Geometry.h:86
@ GEOS_MULTIPOLYGON
a collection of polygons
Definition Geometry.h:92
@ GEOS_MULTIPOINT
a collection of points
Definition Geometry.h:88
Contains the interfaces for converting JTS objects to and from other formats.
Definition Geometry.h:70
std::function< void(double, const char *)> ProgressFunction
Definition Progress.h:29
Basic namespace for all GEOS functionalities.
Definition geos.h:38