GEOS 3.15.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#pragma once
20
21#include <geos/export.h>
22#include <geos/geom/GeometryFactory.h> // for GeometryFactory::Ptr
23#include <memory> // for unique_ptr
24
25// Forward declarations
26namespace geos {
27namespace geom {
28class PrecisionModel;
29class GeometryFactory;
30class Geometry;
31}
32}
33
34namespace geos {
35namespace precision { // geos.precision
36
58
59private:
60
61 // Externally owned
62 const geom::GeometryFactory* newFactory;
63
64 const geom::PrecisionModel& targetPM;
65
66 bool removeCollapsed;
67 bool changePrecisionModel;
68 bool useAreaReducer;
69 bool isPointwise;
70
71 geom::GeometryFactory::Ptr createFactory(
72 const geom::GeometryFactory& oldGF,
73 const geom::PrecisionModel& newPM);
74
83 std::unique_ptr<geom::Geometry> changePM(
84 const geom::Geometry* geom,
85 const geom::PrecisionModel& newPM);
86
88 GeometryPrecisionReducer& operator=(GeometryPrecisionReducer const&); /*= delete*/
89
90public:
91
103 static std::unique_ptr<geom::Geometry>
104 reduce(const geom::Geometry& g, const geom::PrecisionModel& precModel);
105
106 static std::unique_ptr<geom::Geometry>
107 reducePointwise(const geom::Geometry& g, const geom::PrecisionModel& precModel);
108
109 static std::unique_ptr<geom::Geometry>
110 reduceKeepCollapsed(const geom::Geometry& g, const geom::PrecisionModel& precModel);
111
113 : newFactory(nullptr)
114 , targetPM(pm)
115 , removeCollapsed(true)
116 , changePrecisionModel(false)
117 , useAreaReducer(false)
118 , isPointwise(false)
119 {}
120
132 : newFactory(&changeFactory)
133 , targetPM(*(changeFactory.getPrecisionModel()))
134 , removeCollapsed(true)
135 , changePrecisionModel(false)
136 , useAreaReducer(false)
137 , isPointwise(false)
138 {}
139
147 void
149 {
150 removeCollapsed = remove;
151 }
152
163 void
165 {
166 changePrecisionModel = change;
167 }
168
169 void
170 setUseAreaReducer(bool useAR)
171 {
172 useAreaReducer = useAR;
173 }
174
186 void
187 setPointwise(bool pointwise)
188 {
189 isPointwise = pointwise;
190 }
191
192 std::unique_ptr<geom::Geometry> reduce(const geom::Geometry& geom);
193
194
195
196};
197
198} // namespace geos.precision
199} // namespace geos
200
Supplies a set of utility methods for building Geometry objects from CoordinateSequence or other Geom...
Definition GeometryFactory.h:71
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition Geometry.h:196
Specifies the precision model of the Coordinate in a Geometry.
Definition PrecisionModel.h:87
Reduces the precision of a geom::Geometry according to the supplied geom::PrecisionModel,...
Definition GeometryPrecisionReducer.h:57
GeometryPrecisionReducer(const geom::GeometryFactory &changeFactory)
Create a reducer that will change the precision model of the new reduced Geometry.
Definition GeometryPrecisionReducer.h:131
void setPointwise(bool pointwise)
Sets whether the precision reduction will be done in pointwise fashion only.
Definition GeometryPrecisionReducer.h:187
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:164
static std::unique_ptr< geom::Geometry > reduce(const geom::Geometry &g, const geom::PrecisionModel &precModel)
void setRemoveCollapsedComponents(bool remove)
Definition GeometryPrecisionReducer.h:148
Basic namespace for all GEOS functionalities.
Definition geos.h:38