GEOS  3.8.0dev
GeometryPrecisionReducer.h
1 /**********************************************************************
2  *
3  * GEOS - Geometry Engine Open Source
4  * http://geos.osgeo.org
5  *
6  * Copyright (C) 2012 Sandro Santilli <strk@kbt.io>
7  *
8  * This is free software; you can redistribute and/or modify it under
9  * the terms of the GNU Lesser General Public Licence as published
10  * by the Free Software Foundation.
11  * See the COPYING file for more information.
12  *
13  ***********************************************************************
14  *
15  * Last port: precision/GeometryPrecisionReducer.cpp rev. 1.10 (JTS-1.7)
16  *
17  **********************************************************************/
18 
19 #ifndef GEOS_PRECISION_GEOMETRYPRECISIONREDUCER_H
20 #define GEOS_PRECISION_GEOMETRYPRECISIONREDUCER_H
21 
22 #include <geos/export.h>
23 #include <geos/geom/GeometryFactory.h> // for GeometryFactory::Ptr
24 #include <memory> // for unique_ptr
25 
26 // Forward declarations
27 namespace geos {
28 namespace geom {
29 class PrecisionModel;
30 class GeometryFactory;
31 class Geometry;
32 }
33 }
34 
35 namespace geos {
36 namespace precision { // geos.precision
37 
43 class GEOS_DLL GeometryPrecisionReducer {
44 
45 private:
46 
47  // Externally owned
48  const geom::GeometryFactory* newFactory;
49 
50  const geom::PrecisionModel& targetPM;
51 
52  bool removeCollapsed;
53 
54  bool isPointwise;
55 
56  std::unique_ptr<geom::Geometry> reducePointwise(const geom::Geometry& geom);
57 
58  std::unique_ptr<geom::Geometry> fixPolygonalTopology(
59  const geom::Geometry& geom);
60 
61  geom::GeometryFactory::Ptr createFactory(
62  const geom::GeometryFactory& oldGF,
63  const geom::PrecisionModel& newPM);
64 
66  GeometryPrecisionReducer& operator=(GeometryPrecisionReducer const&); /*= delete*/
67 
68 public:
69 
81  static std::unique_ptr<geom::Geometry>
83  const geom::Geometry& g,
84  const geom::PrecisionModel& precModel)
85  {
86  GeometryPrecisionReducer reducer(precModel);
87  return reducer.reduce(g);
88  }
89 
101  static std::unique_ptr<geom::Geometry>
103  const geom::Geometry& g,
104  const geom::PrecisionModel& precModel)
105  {
106  GeometryPrecisionReducer reducer(precModel);
107  reducer.setPointwise(true);
108  return reducer.reduce(g);
109  }
110 
112  :
113  newFactory(nullptr),
114  targetPM(pm),
115  removeCollapsed(true),
116  isPointwise(false)
117  {}
118 
129  GeometryPrecisionReducer(const geom::GeometryFactory& gf);
130 
138  void
140  {
141  removeCollapsed = remove;
142  }
143 
155  void
156  setPointwise(bool pointwise)
157  {
158  isPointwise = pointwise;
159  }
160 
161  std::unique_ptr<geom::Geometry> reduce(const geom::Geometry& geom);
162 
163 };
164 
165 } // namespace geos.precision
166 } // namespace geos
167 
168 #endif // GEOS_PRECISION_GEOMETRYPRECISIONREDUCER_H
static std::unique_ptr< geom::Geometry > reducePointwise(const geom::Geometry &g, const geom::PrecisionModel &precModel)
Definition: GeometryPrecisionReducer.h:102
void setRemoveCollapsedComponents(bool remove)
Definition: GeometryPrecisionReducer.h:139
Specifies the precision model of the Coordinate in a Geometry.
Definition: PrecisionModel.h:87
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition: Geometry.h:188
Supplies a set of utility methods for building Geometry objects from CoordinateSequence or other Geom...
Definition: GeometryFactory.h:66
Reduces the precision of a geom::Geometry according to the supplied geom::PrecisionModel, ensuring that the result is topologically valid.
Definition: GeometryPrecisionReducer.h:43
Basic namespace for all GEOS functionalities.
Definition: IndexedNestedRingTester.h:25
static std::unique_ptr< geom::Geometry > reduce(const geom::Geometry &g, const geom::PrecisionModel &precModel)
Definition: GeometryPrecisionReducer.h:82
void setPointwise(bool pointwise)
Sets whether the precision reduction will be done in pointwise fashion only.
Definition: GeometryPrecisionReducer.h:156