GEOS  3.13.0dev
CoverageSimplifier.h
1 
2 /**********************************************************************
3  *
4  * GEOS - Geometry Engine Open Source
5  * http://geos.osgeo.org
6  *
7  * Copyright (C) 2023 Paul Ramsey <pramsey@cleverelephant.ca>
8  * Copyright (c) 2023 Martin Davis.
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 #pragma once
18 
19 #include <vector>
20 #include <memory>
21 #include <geos/export.h>
22 
23 
24 namespace geos {
25 namespace geom {
26 class Geometry;
27 class GeometryFactory;
28 class MultiLineString;
29 }
30 namespace coverage {
31 class CoverageEdge;
32 }
33 }
34 
35 
40 
41 
42 namespace geos {
43 namespace coverage { // geos::coverage
44 
76 class GEOS_DLL CoverageSimplifier {
77 
78 
79 public:
80 
86  CoverageSimplifier(const std::vector<const Geometry*>& coverage);
87 
96  static std::vector<std::unique_ptr<Geometry>> simplify(
97  std::vector<const Geometry*>& coverage,
98  double tolerance);
99 
100  static std::vector<std::unique_ptr<Geometry>> simplify(
101  const std::vector<std::unique_ptr<Geometry>>& coverage,
102  double tolerance);
103 
113  static std::vector<std::unique_ptr<Geometry>> simplifyInner(
114  std::vector<const Geometry*>& coverage,
115  double tolerance);
116 
117  static std::vector<std::unique_ptr<Geometry>> simplifyInner(
118  const std::vector<std::unique_ptr<Geometry>>& coverage,
119  double tolerance);
120 
127  std::vector<std::unique_ptr<Geometry>> simplify(
128  double tolerance);
129 
138  std::vector<std::unique_ptr<Geometry>> simplifyInner(
139  double tolerance);
140 
141 
142 private:
143 
144  // Members
145  const std::vector<const Geometry*>& m_input;
146  const GeometryFactory* m_geomFactory;
147 
148  // Methods
149  void simplifyEdges(
150  std::vector<CoverageEdge*> edges,
151  const MultiLineString* constraints,
152  double tolerance);
153 
154  void setCoordinates(
155  std::vector<CoverageEdge*>& edges,
156  const MultiLineString* lines);
157 
158  std::vector<bool> getFreeRings(
159  const std::vector<CoverageEdge*>& edges) const;
160 
161 
162 }; // CoverageSimplifier
163 
164 
165 } // geos::coverage
166 } // geos
Definition: CoverageEdge.h:54
Definition: CoverageSimplifier.h:76
std::vector< std::unique_ptr< Geometry > > simplify(double tolerance)
CoverageSimplifier(const std::vector< const Geometry * > &coverage)
static std::vector< std::unique_ptr< Geometry > > simplifyInner(std::vector< const Geometry * > &coverage, double tolerance)
std::vector< std::unique_ptr< Geometry > > simplifyInner(double tolerance)
static std::vector< std::unique_ptr< Geometry > > simplify(std::vector< const Geometry * > &coverage, double tolerance)
Supplies a set of utility methods for building Geometry objects from CoordinateSequence or other Geom...
Definition: GeometryFactory.h:65
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition: Geometry.h:186
Models a collection of LineStrings.
Definition: MultiLineString.h:49
Basic namespace for all GEOS functionalities.
Definition: Angle.h:25