kopia lustrzana https://github.com/onthegomap/planetiler
ignore duplicate relation members (#876)
rodzic
85324e7f65
commit
ef1702ec73
|
@ -35,8 +35,10 @@ import java.io.Closeable;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
@ -788,11 +790,15 @@ public class OsmReader implements Closeable, MemoryEstimator.HasEstimate {
|
||||||
@Override
|
@Override
|
||||||
protected Geometry computeWorldGeometry() throws GeometryException {
|
protected Geometry computeWorldGeometry() throws GeometryException {
|
||||||
List<LongArrayList> rings = new ArrayList<>(relation.members().size());
|
List<LongArrayList> rings = new ArrayList<>(relation.members().size());
|
||||||
|
Set<Long> added = new HashSet<>();
|
||||||
for (OsmElement.Relation.Member member : relation.members()) {
|
for (OsmElement.Relation.Member member : relation.members()) {
|
||||||
String role = member.role();
|
String role = member.role();
|
||||||
LongArrayList poly = multipolygonWayGeometries.get(member.ref());
|
LongArrayList poly = multipolygonWayGeometries.get(member.ref());
|
||||||
if (member.type() == OsmElement.Type.WAY) {
|
if (member.type() == OsmElement.Type.WAY) {
|
||||||
if (poly != null && !poly.isEmpty()) {
|
if (!added.add(member.ref())) {
|
||||||
|
// ignore duplicate relation members
|
||||||
|
stats.dataError("osm_" + relation.getTag("type") + "_duplicate_member");
|
||||||
|
} else if (poly != null && !poly.isEmpty()) {
|
||||||
rings.add(poly);
|
rings.add(poly);
|
||||||
} else {
|
} else {
|
||||||
// boundary and land_area relations might not be complete for extracts, but multipolygons should be
|
// boundary and land_area relations might not be complete for extracts, but multipolygons should be
|
||||||
|
|
|
@ -1053,6 +1053,7 @@ class PlanetilerTests {
|
||||||
rel.members().add(new OsmElement.Relation.Member(OsmElement.Type.WAY, 14, "outer"));
|
rel.members().add(new OsmElement.Relation.Member(OsmElement.Type.WAY, 14, "outer"));
|
||||||
rel.members().add(new OsmElement.Relation.Member(OsmElement.Type.WAY, 15, null)); // missing
|
rel.members().add(new OsmElement.Relation.Member(OsmElement.Type.WAY, 15, null)); // missing
|
||||||
rel.members().add(new OsmElement.Relation.Member(OsmElement.Type.WAY, 16, "inner")); // incorrect
|
rel.members().add(new OsmElement.Relation.Member(OsmElement.Type.WAY, 16, "inner")); // incorrect
|
||||||
|
rel.members().add(new OsmElement.Relation.Member(OsmElement.Type.WAY, 14, "outer")); // duplicate
|
||||||
}),
|
}),
|
||||||
with(new OsmElement.Relation(18), rel -> {
|
with(new OsmElement.Relation(18), rel -> {
|
||||||
rel.setTag("type", "relation");
|
rel.setTag("type", "relation");
|
||||||
|
|
Ładowanie…
Reference in New Issue