GEOS  3.14.0dev
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 
39 #include <algorithm>
40 #include <string>
41 #include <iostream>
42 #include <vector>
43 #include <memory>
44 
45 #ifdef _MSC_VER
46 #pragma warning(push)
47 #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
48 #pragma warning(disable: 4355) // warning C4355: 'this' : used in base member initializer list
49 #endif
50 
51 // Forward declarations
52 namespace geos {
53 namespace geom {
54 class Coordinate;
55 class CoordinateFilter;
56 class CoordinateSequence;
57 class CoordinateSequenceFilter;
58 class GeometryComponentFilter;
59 class GeometryFactory;
60 class GeometryFilter;
61 class PrecisionModel;
62 class Point;
63 class IntersectionMatrix;
64 }
65 namespace io { // geos.io
66 class Unload;
67 } // namespace geos.io
68 }
69 
70 namespace geos { // geos
71 namespace geom { // geos::geom
72 
74 enum GeometryTypeId : int {
91  GEOS_CIRCULARSTRING,
92  GEOS_COMPOUNDCURVE,
93  GEOS_CURVEPOLYGON,
94  GEOS_MULTICURVE,
95  GEOS_MULTISURFACE,
96 };
97 
98 enum GeometrySortIndex {
99  SORTINDEX_POINT = 0,
100  SORTINDEX_MULTIPOINT = 1,
101  SORTINDEX_LINESTRING = 2,
102  SORTINDEX_LINEARRING = 3,
103  SORTINDEX_MULTILINESTRING = 4,
104  SORTINDEX_POLYGON = 5,
105  SORTINDEX_MULTIPOLYGON = 6,
106  SORTINDEX_GEOMETRYCOLLECTION = 7,
107  SORTINDEX_CIRCULARSTRING = 8,
108  SORTINDEX_COMPOUNDCURVE = 9,
109  SORTINDEX_CURVEPOLYGON = 10,
110  SORTINDEX_MULTICURVE = 11,
111  SORTINDEX_MULTISURFACE = 12,
112 };
113 
197 class GEOS_DLL Geometry {
198 
199 public:
200 
201  friend class GeometryFactory;
202 
204  using ConstVect = std::vector<const Geometry*>;
205 
207  using NonConstVect = std::vector<Geometry*>;
208 
210  using Ptr = std::unique_ptr<Geometry> ;
211 
213  std::unique_ptr<Geometry> clone() const { return std::unique_ptr<Geometry>(cloneImpl()); }
214 
216  virtual ~Geometry();
217 
218 
226  const GeometryFactory*
227  getFactory() const
228  {
229  return _factory;
230  }
231 
245  void
246  setUserData(void* newUserData)
247  {
248  _userData = newUserData;
249  }
250 
257  void*
258  getUserData() const
259  {
260  return _userData;
261  }
262 
273  int getSRID() const
274  {
275  return SRID;
276  }
277 
281  virtual void
282  setSRID(int newSRID)
283  {
284  SRID = newSRID;
285  }
286 
292 
294  virtual const CoordinateXY* getCoordinate() const = 0; //Abstract
295 
301  virtual std::unique_ptr<CoordinateSequence> getCoordinates() const = 0; //Abstract
302 
304  virtual std::size_t getNumPoints() const = 0; //Abstract
305 
307  virtual bool isSimple() const;
308 
310  virtual std::string getGeometryType() const = 0; //Abstract
311 
313  virtual bool hasCurvedComponents() const;
314 
316  virtual GeometryTypeId getGeometryTypeId() const = 0; //Abstract
317 
325  virtual std::size_t
327  {
328  return 1;
329  }
330 
333  virtual const Geometry*
334  getGeometryN(std::size_t /*n*/) const
335  {
336  return this;
337  }
338 
348  bool isValid() const;
349 
351  virtual bool isEmpty() const = 0; //Abstract
352 
354  virtual bool
355  isRectangle() const
356  {
357  return false;
358  }
359 
361  virtual Dimension::DimensionType getDimension() const = 0; //Abstract
362 
364  virtual bool hasDimension(Dimension::DimensionType d) const {
365  return getDimension() == d;
366  }
367 
370  return d == getDimension();
371  }
372 
373  bool isPuntal() const {
374  return isDimensionStrict(Dimension::P);
375  }
376 
377  bool isLineal() const {
378  return isDimensionStrict(Dimension::L);
379  }
380 
381  bool isPolygonal() const {
382  return isDimensionStrict(Dimension::A);
383  }
384 
385  bool isMixedDimension() const;
386  bool isMixedDimension(Dimension::DimensionType* baseDim) const;
387 
388  bool isCollection() const {
389  int t = getGeometryTypeId();
390  return t == GEOS_GEOMETRYCOLLECTION ||
391  t == GEOS_MULTIPOINT ||
392  t == GEOS_MULTILINESTRING ||
393  t == GEOS_MULTIPOLYGON;
394  }
395 
396  static GeometryTypeId multiTypeId(GeometryTypeId typeId) {
397  switch (typeId) {
398  case GEOS_POINT: return GEOS_MULTIPOINT;
400  case GEOS_POLYGON: return GEOS_MULTIPOLYGON;
401  default: return typeId;
402  }
403  }
404 
406  virtual uint8_t getCoordinateDimension() const = 0; //Abstract
407 
408  virtual bool hasZ() const = 0;
409 
410  virtual bool hasM() const = 0;
411 
428  virtual std::unique_ptr<Geometry> getBoundary() const = 0; //Abstract
429 
431  virtual int getBoundaryDimension() const = 0; //Abstract
432 
434  virtual std::unique_ptr<Geometry> getEnvelope() const;
435 
440  virtual const Envelope* getEnvelopeInternal() const = 0;
441 
458  virtual bool disjoint(const Geometry* other) const;
459 
464  virtual bool touches(const Geometry* other) const;
465 
467  virtual bool intersects(const Geometry* g) const;
468 
491  virtual bool crosses(const Geometry* g) const;
492 
497  virtual bool within(const Geometry* g) const;
498 
500  virtual bool contains(const Geometry* g) const;
501 
507  virtual bool overlaps(const Geometry* g) const;
508 
523  bool relate(const Geometry* g,
524  const std::string& intersectionPattern) const;
525 
526  bool
527  relate(const Geometry& g, const std::string& intersectionPattern) const
528  {
529  return relate(&g, intersectionPattern);
530  }
531 
533  std::unique_ptr<IntersectionMatrix> relate(const Geometry* g) const;
534 
535  std::unique_ptr<IntersectionMatrix> relate(const Geometry& g) const;
536 
542  bool equals(const Geometry* g) const;
543 
582  bool covers(const Geometry* g) const;
583 
614  bool coveredBy(const Geometry* g) const;
615 
616 
618  virtual std::string toString() const;
619 
620  virtual std::string toText() const;
621 
626  std::unique_ptr<Geometry> buffer(double distance) const;
627 
635  std::unique_ptr<Geometry> buffer(double distance, int quadrantSegments) const;
636 
673  std::unique_ptr<Geometry> buffer(double distance, int quadrantSegments,
674  int endCapStyle) const;
675 
679  virtual std::unique_ptr<Geometry> convexHull() const;
680 
687  std::unique_ptr<Geometry> reverse() const { return std::unique_ptr<Geometry>(reverseImpl()); }
688 
698  std::unique_ptr<Geometry> intersection(const Geometry* other) const;
699 
709  std::unique_ptr<Geometry> Union(const Geometry* other) const;
710  // throw(IllegalArgumentException *, TopologyException *);
711 
729  Ptr Union() const;
730  // throw(IllegalArgumentException *, TopologyException *);
731 
742  std::unique_ptr<Geometry> difference(const Geometry* other) const;
743 
753  std::unique_ptr<Geometry> symDifference(const Geometry* other) const;
754 
761  virtual bool equalsExact(const Geometry* other, double tolerance = 0)
762  const = 0; // Abstract
763 
768  virtual bool equalsIdentical(const Geometry* other) const = 0;
769 
770  virtual void apply_rw(const CoordinateFilter* filter) = 0; //Abstract
771  virtual void apply_ro(CoordinateFilter* filter) const = 0; //Abstract
772  virtual void apply_rw(GeometryFilter* filter);
773  virtual void apply_ro(GeometryFilter* filter) const;
774  virtual void apply_rw(GeometryComponentFilter* filter);
775  virtual void apply_ro(GeometryComponentFilter* filter) const;
776 
785  virtual void apply_rw(CoordinateSequenceFilter& filter) = 0;
786 
793  virtual void apply_ro(CoordinateSequenceFilter& filter) const = 0;
794 
804  template <class T>
805  void
807  {
808  for(std::size_t i = 0, n = getNumGeometries(); i < n; ++i) {
809  f.filter(getGeometryN(i));
810  }
811  }
812 
818  virtual void normalize() = 0; //Abstract
819 
821  int compareTo(const Geometry* geom) const;
822 
824  virtual double getArea() const;
825 
827  virtual double getLength() const;
828 
834  virtual double distance(const Geometry* g) const;
835 
836 
848  virtual bool isWithinDistance(const Geometry* geom,
849  double cDistance) const;
850 
860  virtual std::unique_ptr<Point> getCentroid() const;
861 
863  //
866  virtual bool getCentroid(CoordinateXY& ret) const;
867 
878  std::unique_ptr<Point> getInteriorPoint() const;
879 
886 
892  virtual void geometryChangedAction() = 0;
893 
894 protected:
896  virtual Geometry* cloneImpl() const = 0;
897 
899  virtual Geometry* reverseImpl() const = 0;
900 
902  template<typename T>
903  static bool hasNonEmptyElements(const std::vector<T>* geometries) {
904  return std::any_of(geometries->begin(), geometries->end(), [](const T& g) { return !g->isEmpty(); });
905  }
906 
908  static bool hasNullElements(const CoordinateSequence* list);
909 
911  template<typename T>
912  static bool hasNullElements(const std::vector<T>* geometries) {
913  return std::any_of(geometries->begin(), geometries->end(), [](const T& g) { return g == nullptr; });
914  }
915 
916 // static void reversePointOrder(CoordinateSequence* coordinates);
917 // static Coordinate& minCoordinate(CoordinateSequence* coordinates);
918 // static void scroll(CoordinateSequence* coordinates,Coordinate* firstCoordinate);
919 // static int indexOf(Coordinate* coordinate,CoordinateSequence* coordinates);
920 //
925  virtual bool isEquivalentClass(const Geometry* other) const;
926 
927  static void checkNotGeometryCollection(const Geometry* g);
928 
929  virtual int compareToSameClass(const Geometry* geom) const = 0; //Abstract
930 
931  template<typename T>
932  static int compare(const T& a, const T& b)
933  {
934  std::size_t i = 0;
935  std::size_t j = 0;
936  while(i < a.size() && j < b.size()) {
937  const auto& aGeom = *a[i];
938  const auto& bGeom = *b[j];
939 
940  int comparison = aGeom.compareTo(&bGeom);
941  if(comparison != 0) {
942  return comparison;
943  }
944 
945  i++;
946  j++;
947  }
948 
949  if(i < a.size()) {
950  return 1;
951  }
952 
953  if(j < b.size()) {
954  return -1;
955  }
956 
957  return 0;
958  }
959 
960  bool equal(const CoordinateXY& a, const CoordinateXY& b,
961  double tolerance) const;
962  int SRID;
963 
964  Geometry(const Geometry& geom);
965 
975  Geometry(const GeometryFactory* factory);
976 
977  template<typename T>
978  static std::vector<std::unique_ptr<Geometry>> toGeometryArray(std::vector<std::unique_ptr<T>> && v) {
979  static_assert(std::is_base_of<Geometry, T>::value, "");
980  std::vector<std::unique_ptr<Geometry>> gv(v.size());
981  for (std::size_t i = 0; i < v.size(); i++) {
982  gv[i] = std::move(v[i]);
983  }
984  return gv;
985  }
986 
987  static std::vector<std::unique_ptr<Geometry>> toGeometryArray(std::vector<std::unique_ptr<Geometry>> && v) {
988  return std::move(v);
989  }
990 
991 protected:
992 
993  virtual int getSortIndex() const = 0;
994 
995 
996 private:
997 
998  class GEOS_DLL GeometryChangedFilter : public GeometryComponentFilter {
999  public:
1000  void filter_rw(Geometry* geom) override;
1001  };
1002 
1003  static GeometryChangedFilter geometryChangedFilter;
1004 
1009  const GeometryFactory* _factory;
1010 
1011  void* _userData;
1012 };
1013 
1018 GEOS_DLL std::ostream& operator<< (std::ostream& os, const Geometry& geom);
1019 
1020 struct GEOS_DLL GeometryGreaterThen {
1021  bool operator()(const Geometry* first, const Geometry* second);
1022 };
1023 
1024 
1026 GEOS_DLL std::string geosversion();
1027 
1033 GEOS_DLL std::string jtsport();
1034 
1035 // We use this instead of std::pair<unique_ptr<Geometry>> because C++11
1036 // forbids that construct:
1037 // http://lwg.github.com/issues/lwg-closed.html#2068
1038 struct GeomPtrPair {
1039  typedef std::unique_ptr<Geometry> GeomPtr;
1040  GeomPtr first;
1041  GeomPtr second;
1042 };
1043 
1044 } // namespace geos::geom
1045 } // namespace geos
1046 
1047 #ifdef _MSC_VER
1048 #pragma warning(pop)
1049 #endif
1050 
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
DimensionType
Definition: Dimension.h:29
@ A
Dimension value of a surface (2).
Definition: Dimension.h:46
@ L
Dimension value of a curve (1).
Definition: Dimension.h:43
@ 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:70
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:197
virtual int getBoundaryDimension() const =0
Returns the dimension of this Geometrys inherent boundary.
std::unique_ptr< IntersectionMatrix > relate(const Geometry *g) const
Returns the DE-9IM intersection matrix for the two Geometrys.
virtual Geometry * cloneImpl() const =0
Make a deep-copy of this Geometry.
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:207
void applyComponentFilter(T &f) const
Apply a filter to each component of this geometry. The filter is expected to provide a ....
Definition: Geometry.h:806
virtual ~Geometry()
Destroy Geometry and all components.
virtual void apply_rw(CoordinateSequenceFilter &filter)=0
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 void geometryChangedAction()=0
Notifies this Geometry that its Coordinates have been changed by an external party.
const GeometryFactory * getFactory() const
Gets the factory which contains the context in which this geometry was created.
Definition: Geometry.h:227
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 ...
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:369
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 bool hasDimension(Dimension::DimensionType d) const
Checks whether any component of this geometry has dimension d.
Definition: Geometry.h:364
virtual std::unique_ptr< Geometry > getBoundary() const =0
Returns the boundary, or an empty geometry of appropriate dimension if this Geometry is empty.
virtual std::string getGeometryType() const =0
Return a string representation of this Geometry type.
const PrecisionModel * getPrecisionModel() const
Get the PrecisionModel used to create this Geometry.
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
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:210
virtual Geometry * reverseImpl() const =0
Make a geometry with coordinates in reverse order.
virtual bool hasCurvedComponents() const
Returns whether the Geometry contains curved components.
virtual std::unique_ptr< Point > getCentroid() const
Computes the centroid of this Geometry.
virtual std::unique_ptr< CoordinateSequence > getCoordinates() const =0
Returns this Geometry vertices. Caller takes ownership of the returned object.
void * getUserData() const
Gets the user data object for this geometry, if any.
Definition: Geometry.h:258
virtual bool within(const Geometry *g) const
Returns true if the DE-9IM intersection matrix for the two Geometrys is T*F**F***.
virtual const CoordinateXY * getCoordinate() const =0
Returns a vertex of this Geometry, or NULL if this is the empty geometry.
virtual std::size_t getNumPoints() const =0
Returns the count of this Geometrys vertices.
virtual std::unique_ptr< Geometry > getEnvelope() const
Returns this Geometrys bounding box.
static bool hasNullElements(const CoordinateSequence *list)
Returns true if the CoordinateSequence contains any null elements.
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:246
virtual bool isEmpty() const =0
Returns whether or not the set of points in this Geometry is empty.
std::unique_ptr< Geometry > buffer(double distance) const
std::unique_ptr< Geometry > intersection(const Geometry *other) const
Returns a Geometry representing the points shared by this Geometry and other.
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:204
virtual bool touches(const Geometry *other) const
Returns true if the DE-9IM intersection matrix for the two Geometrys is FT*******,...
std::unique_ptr< Geometry > Union(const Geometry *other) const
Returns a Geometry representing all the points in this Geometry and other.
virtual std::string toString() const
Returns the Well-known Text representation 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:903
Ptr Union() const
Computes the union of all the elements of this geometry. Heterogeneous GeometryCollections are fully ...
std::unique_ptr< Geometry > reverse() const
Computes a new geometry which has all component coordinate sequences in reverse order (opposite orien...
Definition: Geometry.h:687
virtual bool disjoint(const Geometry *other) const
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 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.
bool coveredBy(const Geometry *g) const
Tests whether this geometry is covered by the specified geometry.
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.
std::unique_ptr< Geometry > clone() const
Make a deep-copy of this Geometry.
Definition: Geometry.h:213
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:326
virtual double getArea() const
Returns the area of this 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< Point > getInteriorPoint() const
Computes an interior point of this Geometry.
virtual bool isRectangle() const
Polygon overrides to check for actual rectangle.
Definition: Geometry.h:355
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 ...
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:334
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)
virtual std::unique_ptr< Geometry > convexHull() const
Returns the smallest convex Polygon that contains all the points in the Geometry.
int getSRID() const
Returns the ID of the Spatial Reference System used by the Geometry.
Definition: Geometry.h:273
static bool hasNullElements(const std::vector< T > *geometries)
Returns true if the vector contains any null elements.
Definition: Geometry.h:912
virtual void setSRID(int newSRID)
Sets the ID of the Spatial Reference System used by the Geometry.
Definition: Geometry.h:282
bool equals(const Geometry *g) const
Returns true if the DE-9IM intersection matrix for the two Geometrys is T*F**FFF*.
Specifies the precision model of the Coordinate in a Geometry.
Definition: PrecisionModel.h:88
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:74
@ GEOS_MULTILINESTRING
a collection of linestrings
Definition: Geometry.h:86
@ GEOS_LINEARRING
a linear ring (linestring with 1st point == last point)
Definition: Geometry.h:80
@ GEOS_GEOMETRYCOLLECTION
a collection of heterogeneus geometries
Definition: Geometry.h:90
@ GEOS_POINT
a point
Definition: Geometry.h:76
@ GEOS_LINESTRING
a linestring
Definition: Geometry.h:78
@ GEOS_POLYGON
a polygon
Definition: Geometry.h:82
@ GEOS_MULTIPOLYGON
a collection of polygons
Definition: Geometry.h:88
@ GEOS_MULTIPOINT
a collection of points
Definition: Geometry.h:84
Basic namespace for all GEOS functionalities.
Definition: Angle.h:25