GEOS  3.7.2
Point.h
1 /**********************************************************************
2  *
3  * GEOS - Geometry Engine Open Source
4  * http://geos.osgeo.org
5  *
6  * Copyright (C) 2011 Sandro Santilli <strk@kbt.io>
7  * Copyright (C) 2001-2002 Vivid Solutions Inc.
8  * Copyright (C) 2005 2006 Refractions Research 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/Point.java r320 (JTS-1.12)
18  *
19  **********************************************************************/
20 
21 #ifndef GEOS_GEOS_POINT_H
22 #define GEOS_GEOS_POINT_H
23 
24 #include <geos/export.h>
25 #include <geos/platform.h>
26 #include <geos/geom/Geometry.h> // for inheritance
27 #include <geos/geom/Puntal.h> // for inheritance
28 #include <geos/geom/CoordinateSequence.h> // for proper use of unique_ptr<>
29 #include <geos/geom/Envelope.h> // for proper use of unique_ptr<>
30 #include <geos/geom/Dimension.h> // for Dimension::DimensionType
31 
32 #include <geos/inline.h>
33 
34 #include <string>
35 #include <vector>
36 #include <memory> // for unique_ptr
37 
38 #ifdef _MSC_VER
39 #pragma warning(push)
40 #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
41 #endif
42 
43 // Forward declarations
44 namespace geos {
45  namespace geom { // geos::geom
46  class Coordinate;
47  class CoordinateArraySequence;
48  class CoordinateFilter;
49  class CoordinateSequenceFilter;
50  class GeometryComponentFilter;
51  class GeometryFilter;
52  }
53 }
54 
55 namespace geos {
56 namespace geom { // geos::geom
57 
67 class GEOS_DLL Point : public virtual Geometry, public Puntal
68 {
69 
70 public:
71 
72  friend class GeometryFactory;
73 
75  typedef std::vector<const Point *> ConstVect;
76 
77  ~Point() override;
78 
85  Geometry *clone() const override { return new Point(*this); }
86 
87  CoordinateSequence* getCoordinates(void) const override;
88 
89  const CoordinateSequence* getCoordinatesRO() const;
90 
91  size_t getNumPoints() const override;
92  bool isEmpty() const override;
93  bool isSimple() const override;
94 
96  Dimension::DimensionType getDimension() const override;
97 
99  int getCoordinateDimension() const override;
100 
102  int getBoundaryDimension() const override;
103 
112  Geometry* getBoundary() const override;
113 
114  double getX() const;
115  double getY() const;
116  double getZ() const;
117  const Coordinate* getCoordinate() const override;
118  std::string getGeometryType() const override;
119  GeometryTypeId getGeometryTypeId() const override;
120  void apply_ro(CoordinateFilter *filter) const override;
121  void apply_rw(const CoordinateFilter *filter) override;
122  void apply_ro(GeometryFilter *filter) const override;
123  void apply_rw(GeometryFilter *filter) override;
124  void apply_rw(GeometryComponentFilter *filter) override;
125  void apply_ro(GeometryComponentFilter *filter) const override;
126  void apply_rw(CoordinateSequenceFilter& filter) override;
127  void apply_ro(CoordinateSequenceFilter& filter) const override;
128 
129  bool equalsExact(const Geometry *other, double tolerance=0) const override;
130 
131  void normalize(void) override
132  {
133  // a Point is always in normalized form
134  }
135 
136  Geometry* reverse() const override
137  {
138  return clone();
139  }
140 
141 protected:
142 
155  Point(CoordinateSequence *newCoords, const GeometryFactory *newFactory);
156 
157  Point(const Point &p);
158 
159  Envelope::Ptr computeEnvelopeInternal() const override;
160 
161  int compareToSameClass(const Geometry *p) const override;
162 
163 private:
164 
168  std::unique_ptr<CoordinateSequence> coordinates;
169 };
170 
171 } // namespace geos::geom
172 } // namespace geos
173 
174 //#ifdef GEOS_INLINE
175 //# include "geos/geom/Point.inl"
176 //#endif
177 
178 #ifdef _MSC_VER
179 #pragma warning(pop)
180 #endif
181 
182 #endif // ndef GEOS_GEOS_POINT_H
183 
geos::geom::Point::normalize
void normalize(void) override
Converts this Geometry to normal form (or canonical form).
Definition: Point.h:131
geos
Basic namespace for all GEOS functionalities.
Definition: IndexedNestedRingTester.h:25
geos::geom::GeometryComponentFilter
Definition: GeometryComponentFilter.h:43
geos::geom::Point::reverse
Geometry * reverse() const override
Definition: Point.h:136
geos::geom::Dimension::DimensionType
DimensionType
Definition: Dimension.h:67
geos::geom::Coordinate
Coordinate is the lightweight class used to store coordinates.
Definition: Coordinate.h:84
geos::geom::Geometry
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition: Geometry.h:177
geos::geom::CoordinateSequence
The internal representation of a list of coordinates inside a Geometry.
Definition: CoordinateSequence.h:59
geos::geom::CoordinateSequenceFilter
Definition: CoordinateSequenceFilter.h:58
geos::geom::Point::clone
Geometry * clone() const override
Definition: Point.h:85
geos::geom::GeometryTypeId
GeometryTypeId
Geometry types.
Definition: Geometry.h:75
geos::geom::Point::ConstVect
std::vector< const Point * > ConstVect
A vector of const Point pointers.
Definition: Point.h:75
geos::geom::CoordinateFilter
Definition: CoordinateFilter.h:67
geos::geom::GeometryFactory
Supplies a set of utility methods for building Geometry objects from CoordinateSequence or other Geom...
Definition: GeometryFactory.h:67
geos::geom::GeometryFilter
Geometry classes support the concept of applying a Geometry filter to the Geometry.
Definition: GeometryFilter.h:48
geos::geom::Point
Definition: Point.h:67
geos::geom::Puntal
Definition: Puntal.h:69