in baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/RelationGeometryBuilder.java [125:145]
private Set<Polygon> mergeInnerPolygons(Set<Polygon> innerPolygons) {
Set<Polygon> usedPolygons = new HashSet<>();
Set<Polygon> mergedPolygons = new HashSet<>();
for (Polygon p1 : innerPolygons) {
if (!usedPolygons.contains(p1)) {
Set<Polygon> unionPolygons = new HashSet<>();
unionPolygons.add(p1);
for (Polygon p2 : innerPolygons) {
if (!p1.equals(p2) && (p1.touches(p2) || p1.overlaps(p2))) {
unionPolygons.add(p2);
usedPolygons.add(p2);
}
}
Geometry union = CascadedPolygonUnion.union(unionPolygons);
for (Object polygon : PolygonExtracter.getPolygons(union)) {
mergedPolygons.add((Polygon) polygon);
}
}
}
return mergedPolygons;
}