From a9f245d11725d01776beba399dcfb86282234d26 Mon Sep 17 00:00:00 2001 From: Oliver Wipfli Date: Fri, 21 Feb 2025 12:00:59 +0100 Subject: [PATCH 1/6] Road relations --- .../java/com/protomaps/basemap/Basemap.java | 70 ++++++++--------- .../com/protomaps/basemap/layers/Roads.java | 75 ++++++++++++++++--- 2 files changed, 101 insertions(+), 44 deletions(-) diff --git a/tiles/src/main/java/com/protomaps/basemap/Basemap.java b/tiles/src/main/java/com/protomaps/basemap/Basemap.java index c7925d26..5dcb0d13 100644 --- a/tiles/src/main/java/com/protomaps/basemap/Basemap.java +++ b/tiles/src/main/java/com/protomaps/basemap/Basemap.java @@ -31,55 +31,55 @@ public class Basemap extends ForwardingProfile { public Basemap(NaturalEarthDb naturalEarthDb, QrankDb qrankDb, CountryCoder countryCoder, Clip clip) { - var admin = new Boundaries(); - registerHandler(admin); - registerSourceHandler("osm", admin::processOsm); - registerSourceHandler("ne", admin::processNe); + // var admin = new Boundaries(); + // registerHandler(admin); + // registerSourceHandler("osm", admin::processOsm); + // registerSourceHandler("ne", admin::processNe); - var buildings = new Buildings(); - registerHandler(buildings); - registerSourceHandler("osm", buildings::processOsm); + // var buildings = new Buildings(); + // registerHandler(buildings); + // registerSourceHandler("osm", buildings::processOsm); - var landuse = new Landuse(); - registerHandler(landuse); - registerSourceHandler("osm", landuse::processOsm); + // var landuse = new Landuse(); + // registerHandler(landuse); + // registerSourceHandler("osm", landuse::processOsm); - var landcover = new Landcover(); - registerHandler(landcover); - registerSourceHandler("landcover", landcover::processLandcover); + // var landcover = new Landcover(); + // registerHandler(landcover); + // registerSourceHandler("landcover", landcover::processLandcover); - var place = new Places(naturalEarthDb); - registerHandler(place); - registerSourceHandler("osm", place::processOsm); + // var place = new Places(naturalEarthDb); + // registerHandler(place); + // registerSourceHandler("osm", place::processOsm); - var poi = new Pois(qrankDb); - registerHandler(poi); - registerSourceHandler("osm", poi::processOsm); + // var poi = new Pois(qrankDb); + // registerHandler(poi); + // registerSourceHandler("osm", poi::processOsm); var roads = new Roads(countryCoder); registerHandler(roads); registerSourceHandler("osm", roads::processOsm); - var transit = new Transit(); - registerHandler(transit); - registerSourceHandler("osm", transit::processOsm); + // var transit = new Transit(); + // registerHandler(transit); + // registerSourceHandler("osm", transit::processOsm); - var water = new Water(); - registerHandler(water); - registerSourceHandler("osm", water::processOsm); - registerSourceHandler("osm_water", water::processPreparedOsm); - registerSourceHandler("ne", water::processNe); + // var water = new Water(); + // registerHandler(water); + // registerSourceHandler("osm", water::processOsm); + // registerSourceHandler("osm_water", water::processPreparedOsm); + // registerSourceHandler("ne", water::processNe); - var earth = new Earth(); - registerHandler(earth); + // var earth = new Earth(); + // registerHandler(earth); - registerSourceHandler("osm", earth::processOsm); - registerSourceHandler("osm_land", earth::processPreparedOsm); - registerSourceHandler("ne", earth::processNe); + // registerSourceHandler("osm", earth::processOsm); + // registerSourceHandler("osm_land", earth::processPreparedOsm); + // registerSourceHandler("ne", earth::processNe); - if (clip != null) { - registerHandler(clip); - } + // if (clip != null) { + // registerHandler(clip); + // } } @Override diff --git a/tiles/src/main/java/com/protomaps/basemap/layers/Roads.java b/tiles/src/main/java/com/protomaps/basemap/layers/Roads.java index 096866b0..2b4c07b3 100644 --- a/tiles/src/main/java/com/protomaps/basemap/layers/Roads.java +++ b/tiles/src/main/java/com/protomaps/basemap/layers/Roads.java @@ -8,6 +8,8 @@ import com.onthegomap.planetiler.VectorTile; import com.onthegomap.planetiler.geo.GeometryException; import com.onthegomap.planetiler.reader.SourceFeature; +import com.onthegomap.planetiler.reader.osm.OsmElement; +import com.onthegomap.planetiler.reader.osm.OsmRelationInfo; import com.protomaps.basemap.feature.CountryCoder; import com.protomaps.basemap.feature.FeatureId; import com.protomaps.basemap.locales.CartographicLocale; @@ -15,7 +17,7 @@ import com.protomaps.basemap.names.OsmNames; import java.util.*; -public class Roads implements ForwardingProfile.LayerPostProcesser { +public class Roads implements ForwardingProfile.LayerPostProcesser, ForwardingProfile.OsmRelationPreprocessor { private CountryCoder countryCoder; @@ -33,6 +35,26 @@ public String name() { public record Shield(String text, String network) {} + private record RouteRelationInfo( + @Override long id, + String name, String ref, String network + ) implements OsmRelationInfo {} + + @Override + public List preprocessOsmRelation(OsmElement.Relation relation) { + if (relation.hasTag("type", "route") + && relation.hasTag("route", "road") + && !relation.hasTag("state")) { + return List.of(new RouteRelationInfo( + relation.id(), + relation.getString("name"), + relation.getString("ref"), + relation.getString("network") + )); + } + return null; + } + public void processOsm(SourceFeature sf, FeatureCollector features) { if (sf.canBeLine() && sf.hasTag("highway") && !(sf.hasTag("highway", "proposed", "abandoned", "razed", "demolished", "removed", "construction", "elevator"))) { @@ -49,11 +71,43 @@ public void processOsm(SourceFeature sf, FeatureCollector features) { Shield shield = locale.getShield(sf); Integer shieldTextLength = shield.text() == null ? null : shield.text().length(); + List relationNetworks = new ArrayList<>(); + List relationRefs = new ArrayList<>(); + List relationNames = new ArrayList<>(); + + for (var routeInfo : sf.relationInfo(RouteRelationInfo.class)) { + RouteRelationInfo relation = routeInfo.relation(); + if (relation.network != null) { + relationNetworks.add(relation.network); + } + if (relation.ref != null) { + relationRefs.add(relation.ref); + } + if (relation.name != null) { + relationNames.add(relation.name); + } + } + + boolean ARoad = false; + boolean BRoad = false; + + // United States + ARoad |= relationNetworks.contains("US:I"); + BRoad |= relationNetworks.contains("US:US"); + + boolean hasOverride = false; + try { + var code = countryCoder.getCountryCode(sf.latLonGeometry()).orElse(""); + hasOverride |= code.equals("US"); // United States + } catch (Exception e) { + // do nothing + } + if (highway.equals("motorway") || highway.equals("motorway_link")) { // TODO: (nvkelso 20230622) Use Natural Earth for low zoom roads at zoom 5 and earlier // as normally OSM roads would start at 6, but we start at 3 to match Protomaps v2 kind = "highway"; - minZoom = 3; + minZoom = hasOverride ? 7 : 3; if (highway.equals("motorway")) { minZoomShieldText = 7; @@ -69,7 +123,7 @@ public void processOsm(SourceFeature sf, FeatureCollector features) { if (highway.equals("trunk")) { // Just trunk earlier zoom, otherwise road network looks choppy just with motorways then - minZoom = 6; + minZoom = hasOverride ? 7 : 6; minZoomShieldText = 8; } else if (highway.equals("primary")) { minZoomShieldText = 10; @@ -138,6 +192,15 @@ public void processOsm(SourceFeature sf, FeatureCollector features) { minZoomNames = 14; } + if (hasOverride) { + if (BRoad) { + minZoom = 6; + } + if (ARoad) { + minZoom = 3; + } + } + var feat = features.line("roads") .setId(FeatureId.create(sf)) .setAttr("kind", kind) @@ -154,12 +217,6 @@ public void processOsm(SourceFeature sf, FeatureCollector features) { .setPixelTolerance(0) .setZoomRange(minZoom, maxZoom); - try { - var code = countryCoder.getCountryCode(sf.latLonGeometry()); - } catch (Exception e) { - // do logic based on country code - } - if (!kindDetail.isEmpty()) { feat.setAttr("kind_detail", kindDetail); } else { From ab42133c7648efefb40b5ff9b1640a60011f75f1 Mon Sep 17 00:00:00 2001 From: Oliver Wipfli Date: Fri, 21 Feb 2025 12:10:25 +0100 Subject: [PATCH 2/6] Only keep network from route --- .../java/com/protomaps/basemap/layers/Roads.java | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/tiles/src/main/java/com/protomaps/basemap/layers/Roads.java b/tiles/src/main/java/com/protomaps/basemap/layers/Roads.java index 2b4c07b3..5dcbfd1c 100644 --- a/tiles/src/main/java/com/protomaps/basemap/layers/Roads.java +++ b/tiles/src/main/java/com/protomaps/basemap/layers/Roads.java @@ -37,18 +37,15 @@ public record Shield(String text, String network) {} private record RouteRelationInfo( @Override long id, - String name, String ref, String network + String network ) implements OsmRelationInfo {} @Override public List preprocessOsmRelation(OsmElement.Relation relation) { if (relation.hasTag("type", "route") - && relation.hasTag("route", "road") - && !relation.hasTag("state")) { + && relation.hasTag("route", "road")) { return List.of(new RouteRelationInfo( relation.id(), - relation.getString("name"), - relation.getString("ref"), relation.getString("network") )); } @@ -72,20 +69,12 @@ public void processOsm(SourceFeature sf, FeatureCollector features) { Integer shieldTextLength = shield.text() == null ? null : shield.text().length(); List relationNetworks = new ArrayList<>(); - List relationRefs = new ArrayList<>(); - List relationNames = new ArrayList<>(); for (var routeInfo : sf.relationInfo(RouteRelationInfo.class)) { RouteRelationInfo relation = routeInfo.relation(); if (relation.network != null) { relationNetworks.add(relation.network); } - if (relation.ref != null) { - relationRefs.add(relation.ref); - } - if (relation.name != null) { - relationNames.add(relation.name); - } } boolean ARoad = false; From 74c249d4b85370072b7c219bd7397fb01bb50903 Mon Sep 17 00:00:00 2001 From: Oliver Wipfli Date: Fri, 21 Feb 2025 12:11:20 +0100 Subject: [PATCH 3/6] Fix deprecation --- tiles/src/main/java/com/protomaps/basemap/layers/Roads.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tiles/src/main/java/com/protomaps/basemap/layers/Roads.java b/tiles/src/main/java/com/protomaps/basemap/layers/Roads.java index 5dcbfd1c..1b646c30 100644 --- a/tiles/src/main/java/com/protomaps/basemap/layers/Roads.java +++ b/tiles/src/main/java/com/protomaps/basemap/layers/Roads.java @@ -17,7 +17,7 @@ import com.protomaps.basemap.names.OsmNames; import java.util.*; -public class Roads implements ForwardingProfile.LayerPostProcesser, ForwardingProfile.OsmRelationPreprocessor { +public class Roads implements ForwardingProfile.LayerPostProcessor, ForwardingProfile.OsmRelationPreprocessor { private CountryCoder countryCoder; From f35e660c3c604ab9e5fb9d0399830721a0913abc Mon Sep 17 00:00:00 2001 From: Oliver Wipfli Date: Mon, 24 Feb 2025 11:26:23 +0100 Subject: [PATCH 4/6] Add test --- .../protomaps/basemap/layers/RoadsTest.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tiles/src/test/java/com/protomaps/basemap/layers/RoadsTest.java b/tiles/src/test/java/com/protomaps/basemap/layers/RoadsTest.java index 4a48c835..fc1b88ba 100644 --- a/tiles/src/test/java/com/protomaps/basemap/layers/RoadsTest.java +++ b/tiles/src/test/java/com/protomaps/basemap/layers/RoadsTest.java @@ -1,8 +1,12 @@ package com.protomaps.basemap.layers; import static com.onthegomap.planetiler.TestUtils.newLineString; +import static com.onthegomap.planetiler.TestUtils.newPoint; import com.onthegomap.planetiler.reader.SimpleFeature; +import com.onthegomap.planetiler.reader.osm.OsmElement; +import com.onthegomap.planetiler.reader.osm.OsmReader; + import java.util.HashMap; import java.util.List; import java.util.Map; @@ -26,4 +30,24 @@ void simple() { 0 ))); } + + // @Test + // void relation() { + // var interstateRelation = new OsmElement.Relation(1); + // interstateRelation.setTag("route", "road"); + // interstateRelation.setTag("type", "route"); + // interstateRelation.setTag("networks", "US:I"); + + // assertFeatures(3, + // List.of(Map.of("kind", "highway")), + // process(SimpleFeature.createFakeOsmFeature( + // newLineString(0, 10, 0, 20), + // new HashMap<>(Map.of("highway", "motorway")), + // "osm", + // null, + // 0, + // profile.preprocessOsmRelation(interstateRelation).stream().map(r -> new OsmReader.RelationMember<>("", r)).toList() + // )) + // ); + // } } From e701a5cae8b21209393364e76aad62cd88f71ecf Mon Sep 17 00:00:00 2001 From: Oliver Wipfli Date: Mon, 24 Feb 2025 14:49:46 +0100 Subject: [PATCH 5/6] Add test, lint --- .../java/com/protomaps/basemap/Basemap.java | 70 ++++----- .../com/protomaps/basemap/layers/Roads.java | 5 +- .../protomaps/basemap/layers/LayerTest.java | 7 +- .../protomaps/basemap/layers/RoadsTest.java | 137 +++++++++++++++--- 4 files changed, 159 insertions(+), 60 deletions(-) diff --git a/tiles/src/main/java/com/protomaps/basemap/Basemap.java b/tiles/src/main/java/com/protomaps/basemap/Basemap.java index 5dcb0d13..c7925d26 100644 --- a/tiles/src/main/java/com/protomaps/basemap/Basemap.java +++ b/tiles/src/main/java/com/protomaps/basemap/Basemap.java @@ -31,55 +31,55 @@ public class Basemap extends ForwardingProfile { public Basemap(NaturalEarthDb naturalEarthDb, QrankDb qrankDb, CountryCoder countryCoder, Clip clip) { - // var admin = new Boundaries(); - // registerHandler(admin); - // registerSourceHandler("osm", admin::processOsm); - // registerSourceHandler("ne", admin::processNe); + var admin = new Boundaries(); + registerHandler(admin); + registerSourceHandler("osm", admin::processOsm); + registerSourceHandler("ne", admin::processNe); - // var buildings = new Buildings(); - // registerHandler(buildings); - // registerSourceHandler("osm", buildings::processOsm); + var buildings = new Buildings(); + registerHandler(buildings); + registerSourceHandler("osm", buildings::processOsm); - // var landuse = new Landuse(); - // registerHandler(landuse); - // registerSourceHandler("osm", landuse::processOsm); + var landuse = new Landuse(); + registerHandler(landuse); + registerSourceHandler("osm", landuse::processOsm); - // var landcover = new Landcover(); - // registerHandler(landcover); - // registerSourceHandler("landcover", landcover::processLandcover); + var landcover = new Landcover(); + registerHandler(landcover); + registerSourceHandler("landcover", landcover::processLandcover); - // var place = new Places(naturalEarthDb); - // registerHandler(place); - // registerSourceHandler("osm", place::processOsm); + var place = new Places(naturalEarthDb); + registerHandler(place); + registerSourceHandler("osm", place::processOsm); - // var poi = new Pois(qrankDb); - // registerHandler(poi); - // registerSourceHandler("osm", poi::processOsm); + var poi = new Pois(qrankDb); + registerHandler(poi); + registerSourceHandler("osm", poi::processOsm); var roads = new Roads(countryCoder); registerHandler(roads); registerSourceHandler("osm", roads::processOsm); - // var transit = new Transit(); - // registerHandler(transit); - // registerSourceHandler("osm", transit::processOsm); + var transit = new Transit(); + registerHandler(transit); + registerSourceHandler("osm", transit::processOsm); - // var water = new Water(); - // registerHandler(water); - // registerSourceHandler("osm", water::processOsm); - // registerSourceHandler("osm_water", water::processPreparedOsm); - // registerSourceHandler("ne", water::processNe); + var water = new Water(); + registerHandler(water); + registerSourceHandler("osm", water::processOsm); + registerSourceHandler("osm_water", water::processPreparedOsm); + registerSourceHandler("ne", water::processNe); - // var earth = new Earth(); - // registerHandler(earth); + var earth = new Earth(); + registerHandler(earth); - // registerSourceHandler("osm", earth::processOsm); - // registerSourceHandler("osm_land", earth::processPreparedOsm); - // registerSourceHandler("ne", earth::processNe); + registerSourceHandler("osm", earth::processOsm); + registerSourceHandler("osm_land", earth::processPreparedOsm); + registerSourceHandler("ne", earth::processNe); - // if (clip != null) { - // registerHandler(clip); - // } + if (clip != null) { + registerHandler(clip); + } } @Override diff --git a/tiles/src/main/java/com/protomaps/basemap/layers/Roads.java b/tiles/src/main/java/com/protomaps/basemap/layers/Roads.java index 1b646c30..164b3112 100644 --- a/tiles/src/main/java/com/protomaps/basemap/layers/Roads.java +++ b/tiles/src/main/java/com/protomaps/basemap/layers/Roads.java @@ -42,8 +42,7 @@ private record RouteRelationInfo( @Override public List preprocessOsmRelation(OsmElement.Relation relation) { - if (relation.hasTag("type", "route") - && relation.hasTag("route", "road")) { + if (relation.hasTag("type", "route") && relation.hasTag("route", "road")) { return List.of(new RouteRelationInfo( relation.id(), relation.getString("network") @@ -51,7 +50,7 @@ public List preprocessOsmRelation(OsmElement.Relation relation) } return null; } - + public void processOsm(SourceFeature sf, FeatureCollector features) { if (sf.canBeLine() && sf.hasTag("highway") && !(sf.hasTag("highway", "proposed", "abandoned", "razed", "demolished", "removed", "construction", "elevator"))) { diff --git a/tiles/src/test/java/com/protomaps/basemap/layers/LayerTest.java b/tiles/src/test/java/com/protomaps/basemap/layers/LayerTest.java index 5bfd56e3..cb38c2f9 100644 --- a/tiles/src/test/java/com/protomaps/basemap/layers/LayerTest.java +++ b/tiles/src/test/java/com/protomaps/basemap/layers/LayerTest.java @@ -9,6 +9,7 @@ import com.onthegomap.planetiler.reader.SourceFeature; import com.onthegomap.planetiler.stats.Stats; import com.protomaps.basemap.Basemap; +import com.protomaps.basemap.feature.CountryCoder; import com.protomaps.basemap.feature.NaturalEarthDb; import java.util.List; import java.util.Map; @@ -24,7 +25,11 @@ abstract class LayerTest { List.of(new NaturalEarthDb.NeAdmin1StateProvince("California", "US-CA", "Q2", 5.0, 8.0)), List.of(new NaturalEarthDb.NePopulatedPlace("San Francisco", "Q3", 9.0, 2)) ); - final Basemap profile = new Basemap(naturalEarthDb, null, null, null); + final CountryCoder countryCoder = CountryCoder.fromJsonString( + "{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"properties\":{\"iso1A2\":\"US\",\"nameEn\":\"United States\"},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[-124,47],[-124,25],[-71,25],[-71,47],[-124,47]]]]}}]}"); + + // US [-124,47],[-124,25],[-71,25],[-71,47],[-124,47] + final Basemap profile = new Basemap(naturalEarthDb, null, countryCoder, null); static void assertFeatures(int zoom, List> expected, Iterable actual) { var expectedList = expected.stream().toList(); diff --git a/tiles/src/test/java/com/protomaps/basemap/layers/RoadsTest.java b/tiles/src/test/java/com/protomaps/basemap/layers/RoadsTest.java index fc1b88ba..e924cc06 100644 --- a/tiles/src/test/java/com/protomaps/basemap/layers/RoadsTest.java +++ b/tiles/src/test/java/com/protomaps/basemap/layers/RoadsTest.java @@ -1,12 +1,11 @@ package com.protomaps.basemap.layers; import static com.onthegomap.planetiler.TestUtils.newLineString; -import static com.onthegomap.planetiler.TestUtils.newPoint; +import com.onthegomap.planetiler.FeatureCollector; import com.onthegomap.planetiler.reader.SimpleFeature; import com.onthegomap.planetiler.reader.osm.OsmElement; import com.onthegomap.planetiler.reader.osm.OsmReader; - import java.util.HashMap; import java.util.List; import java.util.Map; @@ -31,23 +30,119 @@ void simple() { ))); } - // @Test - // void relation() { - // var interstateRelation = new OsmElement.Relation(1); - // interstateRelation.setTag("route", "road"); - // interstateRelation.setTag("type", "route"); - // interstateRelation.setTag("networks", "US:I"); - - // assertFeatures(3, - // List.of(Map.of("kind", "highway")), - // process(SimpleFeature.createFakeOsmFeature( - // newLineString(0, 10, 0, 20), - // new HashMap<>(Map.of("highway", "motorway")), - // "osm", - // null, - // 0, - // profile.preprocessOsmRelation(interstateRelation).stream().map(r -> new OsmReader.RelationMember<>("", r)).toList() - // )) - // ); - // } + @Test + void relation1() { + // highway=motorway is part of a US Interstate relation and is located in the US -> minzoom should be 3 + var relationResult = profile.preprocessOsmRelation(new OsmElement.Relation(1, Map.of( + "type", "route", + "route", "road", + "network", "US:I" + ), List.of( + new OsmElement.Relation.Member(OsmElement.Type.WAY, 2, "role") + ))); + + FeatureCollector features = process(SimpleFeature.createFakeOsmFeature( + newLineString(-104.97235, 39.73867, -105.260503, 40.010771), // Denver - Boulder + new HashMap<>(Map.of("highway", "motorway")), + "osm", + null, + 2, + relationResult.stream().map(info -> new OsmReader.RelationMember<>("role", info)).toList() + )); + + assertFeatures(0, + List.of(Map.of( + "_minzoom", 3 + )), + features + ); + } + + @Test + void relation2() { + // highway=motorway is part of US State network and is located in the US -> minzoom should be 6 + var relationResult = profile.preprocessOsmRelation(new OsmElement.Relation(1, Map.of( + "type", "route", + "route", "road", + "network", "US:US" + ), List.of( + new OsmElement.Relation.Member(OsmElement.Type.WAY, 2, "role") + ))); + + FeatureCollector features = process(SimpleFeature.createFakeOsmFeature( + newLineString(-104.97235, 39.73867, -105.260503, 40.010771), // Denver - Boulder + new HashMap<>(Map.of("highway", "motorway")), + "osm", + null, + 2, + relationResult.stream().map(info -> new OsmReader.RelationMember<>("role", info)).toList() + )); + + assertFeatures(0, + List.of(Map.of( + "kind", "highway", + "_minzoom", 6 + )), + features + ); + } + + @Test + void relation3() { + // highway=motorway is not part of US Interstate/State network and is located in the US -> minzoom should be 7 + var relationResult = profile.preprocessOsmRelation(new OsmElement.Relation(1, Map.of( + "type", "route", + "route", "road", + "network", "some:network" + ), List.of( + new OsmElement.Relation.Member(OsmElement.Type.WAY, 2, "role") + ))); + + FeatureCollector features = process(SimpleFeature.createFakeOsmFeature( + newLineString(-104.97235, 39.73867, -105.260503, 40.010771), // Denver - Boulder + new HashMap<>(Map.of("highway", "motorway")), + "osm", + null, + 2, + relationResult.stream().map(info -> new OsmReader.RelationMember<>("role", info)).toList() + )); + + assertFeatures(0, + List.of(Map.of( + "kind", "highway", + "_minzoom", 7 + )), + features + ); + } + + @Test + void relation4() { + // highway=motorway is part of US State network and is located ouside of the US -> minzoom should be 3 + var relationResult = profile.preprocessOsmRelation(new OsmElement.Relation(1, Map.of( + "type", "route", + "route", "road", + "network", "US:US" + ), List.of( + new OsmElement.Relation.Member(OsmElement.Type.WAY, 2, "role") + ))); + + FeatureCollector features = process(SimpleFeature.createFakeOsmFeature( + newLineString(2.424, 48.832, 8.52332, 47.36919), // Paris - Zurich + new HashMap<>(Map.of("highway", "motorway")), + "osm", + null, + 2, + relationResult.stream().map(info -> new OsmReader.RelationMember<>("role", info)).toList() + )); + + assertFeatures(0, + List.of(Map.of( + "kind", "highway", + "_minzoom", 3 + )), + features + ); + } + } From e85d53c97406aafcd3ba5ecd22d334e384f80567 Mon Sep 17 00:00:00 2001 From: Oliver Wipfli Date: Mon, 24 Feb 2025 14:50:30 +0100 Subject: [PATCH 6/6] Only test minzoom --- .../src/test/java/com/protomaps/basemap/layers/RoadsTest.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/tiles/src/test/java/com/protomaps/basemap/layers/RoadsTest.java b/tiles/src/test/java/com/protomaps/basemap/layers/RoadsTest.java index e924cc06..feb14a23 100644 --- a/tiles/src/test/java/com/protomaps/basemap/layers/RoadsTest.java +++ b/tiles/src/test/java/com/protomaps/basemap/layers/RoadsTest.java @@ -80,7 +80,6 @@ void relation2() { assertFeatures(0, List.of(Map.of( - "kind", "highway", "_minzoom", 6 )), features @@ -109,7 +108,6 @@ void relation3() { assertFeatures(0, List.of(Map.of( - "kind", "highway", "_minzoom", 7 )), features @@ -138,7 +136,6 @@ void relation4() { assertFeatures(0, List.of(Map.of( - "kind", "highway", "_minzoom", 3 )), features