mirror of
https://github.com/cfpwastaken/planetiler-openmaptiles.git
synced 2026-02-04 04:21:08 +00:00
Fix pedestrian area multipolygons (#63)
This commit is contained in:
@@ -513,8 +513,9 @@ public class Transportation implements
|
|||||||
public void process(Tables.OsmHighwayPolygon element, FeatureCollector features) {
|
public void process(Tables.OsmHighwayPolygon element, FeatureCollector features) {
|
||||||
String manMade = element.manMade();
|
String manMade = element.manMade();
|
||||||
if (isBridgeOrPier(manMade) ||
|
if (isBridgeOrPier(manMade) ||
|
||||||
// ignore underground pedestrian areas
|
// only allow closed ways where area=yes, and multipolygons
|
||||||
(element.isArea() && element.layer() >= 0)) {
|
// and ignore underground pedestrian areas
|
||||||
|
(!element.source().canBeLine() && element.layer() >= 0)) {
|
||||||
String highwayClass = highwayClass(element.highway(), element.publicTransport(), null, element.manMade());
|
String highwayClass = highwayClass(element.highway(), element.publicTransport(), null, element.manMade());
|
||||||
if (highwayClass != null) {
|
if (highwayClass != null) {
|
||||||
features.polygon(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
|
features.polygon(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
|
||||||
|
|||||||
@@ -131,6 +131,17 @@ public abstract class AbstractLayerTest {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SourceFeature closedWayFeature(Map<String, Object> props) {
|
||||||
|
return SimpleFeature.createFakeOsmFeature(
|
||||||
|
newLineString(0, 0, 1, 0, 1, 1, 0, 1, 0, 0),
|
||||||
|
new HashMap<>(props),
|
||||||
|
OSM_SOURCE,
|
||||||
|
null,
|
||||||
|
0,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
SourceFeature polygonFeatureWithArea(double area, Map<String, Object> props) {
|
SourceFeature polygonFeatureWithArea(double area, Map<String, Object> props) {
|
||||||
return SimpleFeature.create(
|
return SimpleFeature.create(
|
||||||
GeoUtils.worldToLatLonCoords(rectangle(0, Math.sqrt(area))),
|
GeoUtils.worldToLatLonCoords(rectangle(0, Math.sqrt(area))),
|
||||||
|
|||||||
@@ -990,7 +990,7 @@ public class TransportationTest extends AbstractLayerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testPedestrianArea() {
|
public void testPedestrianArea() {
|
||||||
assertFeatures(10, List.of(Map.of(
|
Map<String, Object> pedestrianArea = Map.of(
|
||||||
"_layer", "transportation",
|
"_layer", "transportation",
|
||||||
"class", "path",
|
"class", "path",
|
||||||
"subclass", "pedestrian",
|
"subclass", "pedestrian",
|
||||||
@@ -998,13 +998,36 @@ public class TransportationTest extends AbstractLayerTest {
|
|||||||
"_minzoom", 13,
|
"_minzoom", 13,
|
||||||
"_maxzoom", 14,
|
"_maxzoom", 14,
|
||||||
"_type", "polygon"
|
"_type", "polygon"
|
||||||
)), process(polygonFeature(Map.of(
|
);
|
||||||
|
Map<String, Object> circularPath = Map.of(
|
||||||
|
"_layer", "transportation",
|
||||||
|
"class", "path",
|
||||||
|
"subclass", "pedestrian",
|
||||||
|
|
||||||
|
"_minzoom", 14,
|
||||||
|
"_maxzoom", 14,
|
||||||
|
"_type", "line"
|
||||||
|
);
|
||||||
|
assertFeatures(14, List.of(pedestrianArea), process(closedWayFeature(Map.of(
|
||||||
"highway", "pedestrian",
|
"highway", "pedestrian",
|
||||||
"area", "yes",
|
"area", "yes",
|
||||||
"foot", "yes"
|
"foot", "yes"
|
||||||
))));
|
))));
|
||||||
|
assertFeatures(14, List.of(pedestrianArea), process(polygonFeature(Map.of(
|
||||||
|
"highway", "pedestrian",
|
||||||
|
"foot", "yes"
|
||||||
|
))));
|
||||||
|
assertFeatures(14, List.of(circularPath), process(closedWayFeature(Map.of(
|
||||||
|
"highway", "pedestrian",
|
||||||
|
"foot", "yes"
|
||||||
|
))));
|
||||||
|
assertFeatures(14, List.of(circularPath), process(closedWayFeature(Map.of(
|
||||||
|
"highway", "pedestrian",
|
||||||
|
"foot", "yes",
|
||||||
|
"area", "no"
|
||||||
|
))));
|
||||||
// ignore underground pedestrian areas
|
// ignore underground pedestrian areas
|
||||||
assertFeatures(10, List.of(),
|
assertFeatures(14, List.of(),
|
||||||
process(polygonFeature(Map.of(
|
process(polygonFeature(Map.of(
|
||||||
"highway", "pedestrian",
|
"highway", "pedestrian",
|
||||||
"area", "yes",
|
"area", "yes",
|
||||||
|
|||||||
Reference in New Issue
Block a user