144 static constexpr int MERGE_LONGEST_BORDER = 0;
146 static constexpr int MERGE_MAX_AREA = 1;
148 static constexpr int MERGE_MIN_AREA = 2;
150 static constexpr int MERGE_MIN_INDEX = 3;
154 std::vector<const Geometry*> coverage;
156 double snappingDistance;
158 double gapMaximumWidth = 0.0;
159 int overlapMergeStrategy = MERGE_LONGEST_BORDER;
160 std::unique_ptr<index::strtree::TemplateSTRtree<std::size_t>> covIndex;
161 std::vector<std::unique_ptr<Polygon>> resultants;
162 std::unique_ptr<CleanCoverage> cleanCov;
163 std::map<std::size_t, std::vector<std::size_t>> overlapParentMap;
164 std::vector<const Polygon*> overlaps;
165 std::vector<const Polygon*> gaps;
166 std::vector<const Polygon*> mergableGaps;
168 static constexpr double DEFAULT_SNAPPING_FACTOR = 1.0e8;
171 static double computeDefaultSnappingDistance(
172 std::vector<const Geometry*>& geoms);
174 static Envelope extent(std::vector<const Geometry*>& geoms);
177 std::map<std::size_t, std::vector<std::size_t>>& overlapMap);
179 std::unique_ptr<CleanCoverage::MergeStrategy> mergeStrategy(
180 int mergeStrategyId);
182 void computeResultants(
double tolerance);
184 void createCoverageIndex();
186 void classifyResult(std::vector<std::unique_ptr<Polygon>>& rs);
188 void classifyResultant(std::size_t resultIndex,
const Polygon* resPoly);
190 static bool covers(
const Geometry* poly,
const Point* intPt);
192 std::vector<const Polygon*> findMergableGaps(
193 std::vector<const Polygon*> gaps);
195 bool isMergableGap(
const Polygon* gap);
197 static std::vector<std::unique_ptr<geom::Polygon>> polygonize(
200 static bool isPolygonal(
const Geometry* geom);
202 static std::vector<const Polygon*> toPolygonArray(
225 static std::vector<std::unique_ptr<Geometry>>
clean(
226 std::vector<const Geometry*>& coverage,
240 static std::vector<std::unique_ptr<Geometry>>
clean(
241 std::vector<const Geometry*>& coverage,
255 std::vector<const Geometry*>& coverage,
269 std::vector<const Geometry*>& coverage,
326 std::unique_ptr<Geometry> toGeometry(
327 std::vector<SegmentString*>& segStrings,
330 std::unique_ptr<Geometry> node(
331 std::vector<const Geometry*>& coverage,
332 double snapDistance);