GEOS  3.9.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 
58 class GEOS_DLL GeometryPrecisionReducer {
59 
60 private:
61 
62  // Externally owned
63  const geom::GeometryFactory* newFactory;
64 
65  const geom::PrecisionModel& targetPM;
66 
67  bool removeCollapsed;
68  bool changePrecisionModel;
69  bool useAreaReducer;
70  bool isPointwise;
71 
72  std::unique_ptr<geom::Geometry> reducePointwise(const geom::Geometry& geom);
73 
74  std::unique_ptr<geom::Geometry> fixPolygonalTopology(const geom::Geometry& geom);
75 
76  geom::GeometryFactory::Ptr createFactory(
77  const geom::GeometryFactory& oldGF,
78  const geom::PrecisionModel& newPM);
79 
81  GeometryPrecisionReducer& operator=(GeometryPrecisionReducer const&); /*= delete*/
82 
83 public:
84 
96  static std::unique_ptr<geom::Geometry>
98  const geom::Geometry& g,
99  const geom::PrecisionModel& precModel)
100  {
101  GeometryPrecisionReducer reducer(precModel);
102  return reducer.reduce(g);
103  }
104 
116  static std::unique_ptr<geom::Geometry>
118  const geom::Geometry& g,
119  const geom::PrecisionModel& precModel)
120  {
121  GeometryPrecisionReducer reducer(precModel);
122  reducer.setPointwise(true);
123  return reducer.reduce(g);
124  }
125 
127  : newFactory(nullptr)
128  , targetPM(pm)
129  , removeCollapsed(true)
130  , changePrecisionModel(false)
131  , isPointwise(false)
132  {}
133 
144  GeometryPrecisionReducer(const geom::GeometryFactory& gf);
145 
153  void
155  {
156  removeCollapsed = remove;
157  }
158 
169  void
171  {
172  changePrecisionModel = change;
173  }
174 
175  void
176  setUseAreaReducer(bool useAR)
177  {
178  useAreaReducer = useAR;
179  }
180 
192  void
193  setPointwise(bool pointwise)
194  {
195  isPointwise = pointwise;
196  }
197 
198  std::unique_ptr<geom::Geometry> reduce(const geom::Geometry& geom);
199 
200 };
201 
202 } // namespace geos.precision
203 } // namespace geos
204 
205 #endif // GEOS_PRECISION_GEOMETRYPRECISIONREDUCER_H
static std::unique_ptr< geom::Geometry > reducePointwise(const geom::Geometry &g, const geom::PrecisionModel &precModel)
Definition: GeometryPrecisionReducer.h:117
void setRemoveCollapsedComponents(bool remove)
Definition: GeometryPrecisionReducer.h:154
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:68
Reduces the precision of a geom::Geometry according to the supplied geom::PrecisionModel, ensuring that the result is valid (unless specified otherwise).
Definition: GeometryPrecisionReducer.h:58
Basic namespace for all GEOS functionalities.
Definition: IndexedNestedRingTester.h:26
static std::unique_ptr< geom::Geometry > reduce(const geom::Geometry &g, const geom::PrecisionModel &precModel)
Definition: GeometryPrecisionReducer.h:97
void setChangePrecisionModel(bool change)
Sets whether the geom::PrecisionModel of the new reduced Geometry will be changed to be the geom::Pre...
Definition: GeometryPrecisionReducer.h:170
void setPointwise(bool pointwise)
Sets whether the precision reduction will be done in pointwise fashion only.
Definition: GeometryPrecisionReducer.h:193