Filter out points when min size is set (#1132)

pull/1133/head
Michael Barry 2024-12-19 20:32:50 -05:00 zatwierdzone przez GitHub
rodzic 581824ac97
commit f0e3d0cc0b
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
2 zmienionych plików z 42 dodań i 1 usunięć

Wyświetl plik

@ -83,7 +83,7 @@ public class FeatureRenderer implements Consumer<FeatureCollector.Feature>, Clos
} else {
if (minSize > 0) {
if (geometry instanceof Puntal) {
if (!feature.source().isPoint() && feature.getSourceFeaturePixelSizeAtZoom(zoom) < minSize) {
if (feature.getSourceFeaturePixelSizeAtZoom(zoom) < minSize) {
// don't emit points if the line or polygon feature it came from was too small
continue;
}

Wyświetl plik

@ -430,6 +430,47 @@ class PlanetilerTests {
), results.tiles);
}
@Test
void testMinSize() throws Exception {
double x = 0.5 + Z14_WIDTH / 4;
double y = 0.5 + Z14_WIDTH / 4;
double lat = GeoUtils.getWorldLat(y);
double lng = GeoUtils.getWorldLon(x);
double delta = 5e-5;
var results = runWithReaderFeatures(
Map.of("threads", "1", "maxzoom", "15"),
List.of(
newReaderFeature(newPoint(lng, lat), Map.of(
"type", "point"
)),
newReaderFeature(rectangle(lng - delta, lat - delta, lng + delta, lat + delta), Map.of(
"type", "poly"
)),
newReaderFeature(newLineString(lng - delta, lat, lng + delta, lat), Map.of(
"type", "line"
))
),
(in, features) -> features.centroid("layer")
.setZoomRange(13, 15)
.setMinPixelSizeAtAllZooms(1)
.inheritAttrFromSource("type")
);
assertEquals(Map.of(
TileCoord.ofXYZ(Z15_TILES / 2, Z15_TILES / 2, 15), List.of(
feature(newPoint(128, 128), Map.of("type", "line")),
feature(newPoint(128, 128), Map.of("type", "poly"))
// omit point when min size is set
),
TileCoord.ofXYZ(Z14_TILES / 2, Z14_TILES / 2, 14), List.of(
feature(newPoint(64, 64), Map.of("type", "line")),
feature(newPoint(64, 64), Map.of("type", "poly"))
) // features are too small at z13
), results.tiles);
}
@ParameterizedTest
@CsvSource({
"false,RETAIN_IMPORTANT_POINTS",