diff --git a/CHANGELOG.md b/CHANGELOG.md index ced582bb4..4cc7a7782 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +Tiles 4.14.12 +------ +- landuse geometry simplification via @wipfli [#500] + Tiles 4.14.11 ------ - fix missing `elevation` values and numeric types for peaks via @candux [#619] diff --git a/render-tests/tests/landuse/grassland/expected.png b/render-tests/tests/landuse/grassland/expected.png index f14d9c614..6a2b746f8 100644 Binary files a/render-tests/tests/landuse/grassland/expected.png and b/render-tests/tests/landuse/grassland/expected.png differ diff --git a/tiles/src/main/java/com/protomaps/basemap/Basemap.java b/tiles/src/main/java/com/protomaps/basemap/Basemap.java index b1aa5f148..ea9e5aebb 100644 --- a/tiles/src/main/java/com/protomaps/basemap/Basemap.java +++ b/tiles/src/main/java/com/protomaps/basemap/Basemap.java @@ -134,7 +134,7 @@ public String description() { @Override public String version() { - return "4.14.11"; + return "4.14.12"; } @Override diff --git a/tiles/src/main/java/com/protomaps/basemap/layers/Landuse.java b/tiles/src/main/java/com/protomaps/basemap/layers/Landuse.java index 00d3c1533..224e7b7dd 100644 --- a/tiles/src/main/java/com/protomaps/basemap/layers/Landuse.java +++ b/tiles/src/main/java/com/protomaps/basemap/layers/Landuse.java @@ -13,9 +13,9 @@ import com.onthegomap.planetiler.VectorTile; import com.onthegomap.planetiler.expression.MultiExpression; import com.onthegomap.planetiler.geo.GeometryException; +import com.onthegomap.planetiler.geo.VWSimplifier; import com.onthegomap.planetiler.reader.SourceFeature; -import com.protomaps.basemap.feature.FeatureId; -import com.protomaps.basemap.postprocess.Area; +import com.onthegomap.planetiler.stats.Stats; import java.util.List; import java.util.Map; @@ -244,14 +244,11 @@ public void processOsm(SourceFeature sf, FeatureCollector features) { String kind = getString(sf, matches, "kind", "other"); features.polygon(this.name()) - .setId(FeatureId.create(sf)) - // Core Tilezen schema properties + .setId(1) .setAttr("kind", kind) - .setAttr("sort_rank", 189) - // NOTE: (nvkelso 20230622) Consider zoom 5 instead... - // But to match Protomaps v2 we do earlier .setZoomRange(2, 15) - .setMinPixelSize(2.0); + .setPixelTolerance(0.0) + .setMinPixelSize(1.0); } } @@ -312,20 +309,13 @@ public String name() { @Override public List postProcess(int zoom, List items) throws GeometryException { - if (zoom == 15) - return items; - double minArea = 400d / (4096 * 4096) * (256 * 256); - if (zoom == 6) - minArea = 600d / (4096 * 4096) * (256 * 256); - else if (zoom <= 5) - minArea = 800d / (4096 * 4096) * (256 * 256); - items = Area.filterArea(items, minArea); - - // We only care about park boundaries inside groups of adjacent parks at higher zooms when they are labeled - // so at lower zooms we merge them to reduce file size - if (zoom <= 6) { - return FeatureMerge.mergeNearbyPolygons(items, 3.125, 3.125, 0.5, 0.5); - } - return items; + double resolution = 0.0625; + double tolerance = switch (zoom) { + case 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 -> 5 * resolution; + case 11 -> 10 * resolution; + default -> 15 * resolution; + }; + var simplifier = new VWSimplifier().setTolerance(tolerance); + return FeatureMerge.mergeNearbyPolygons(items, 3.125, 3.125, 0.5, 0.5, Stats.inMemory(), simplifier); } }