From 4e3d1e34c6880150699a4a53d97ec97c1963555e Mon Sep 17 00:00:00 2001 From: Sachin Goel Date: Tue, 17 Dec 2024 12:05:27 -0800 Subject: [PATCH 1/2] feat: pick more route paths - add test for narrow gauge ways - the ways that are allowed and disallowed are defined in the paper doc https://paper.dropbox.com/doc/Rail-routing-types-and-appearances--CcscJphcnWQ4gQHZUZ7Gkcn7Ag-K1oQPVSL3s8eXf6SLyyow --- .../railway_routing/parsers/RailAccessParser.java | 7 ++++++- .../railway_routing/parsers/RailAccessParserTest.java | 9 +++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/geofabrik/railway_routing/parsers/RailAccessParser.java b/src/main/java/de/geofabrik/railway_routing/parsers/RailAccessParser.java index 9a4807e..47e3ea6 100644 --- a/src/main/java/de/geofabrik/railway_routing/parsers/RailAccessParser.java +++ b/src/main/java/de/geofabrik/railway_routing/parsers/RailAccessParser.java @@ -1,5 +1,7 @@ package de.geofabrik.railway_routing.parsers; +import java.util.Set; + import com.graphhopper.reader.ReaderWay; import com.graphhopper.routing.ev.EncodedValueLookup; import com.graphhopper.routing.ev.VehicleAccess; @@ -13,6 +15,9 @@ public class RailAccessParser extends AbstractAccessParser { public static final String DEFAULT_NAME = "rail"; + private static final Set ALLOWED_RAIL_TYPES = Set.of( + "rail", "light_rail", "tram", "subway", "construction", "proposed", "funicular", "monorail" + ); public RailAccessParser(BooleanEncodedValue accessEnc) { super(accessEnc, TransportationMode.TRAIN); @@ -29,7 +34,7 @@ public WayAccess getAccess(ReaderWay way) { if (railway == null) { return WayAccess.CAN_SKIP; } - if (railway.equals("rail") || railway.equals("light_rail") || railway.equals("tram") || railway.equals("subway") || railway.equals("narrow_gauge")) { + if (ALLOWED_RAIL_TYPES.contains(railway)) { return WayAccess.WAY; } return WayAccess.CAN_SKIP; diff --git a/src/test/java/de/geofabrik/railway_routing/parsers/RailAccessParserTest.java b/src/test/java/de/geofabrik/railway_routing/parsers/RailAccessParserTest.java index d8b28d7..a4a9e70 100644 --- a/src/test/java/de/geofabrik/railway_routing/parsers/RailAccessParserTest.java +++ b/src/test/java/de/geofabrik/railway_routing/parsers/RailAccessParserTest.java @@ -55,4 +55,13 @@ public void testRejectRoad() { way.setTag("railway", "rail"); assertEquals(WayAccess.WAY, e.getAccess(way)); } + + @Test + public void testRejectsNarrowGauge() { + PMap properties = new PMap(); + RailAccessParser e = createAccessParser(createEncodingManager(), properties); + ReaderWay way = new ReaderWay(1); + way.setTag("railway", "narrow_gauge"); + assertEquals(WayAccess.CAN_SKIP, e.getAccess(way)); + } } From 416e7aa594a3e3c0f93805aa5ca28e42421477ae Mon Sep 17 00:00:00 2001 From: David Mejorado Date: Wed, 18 Dec 2024 11:35:05 -0800 Subject: [PATCH 2/2] feat: add construction to railway class We want to properly extract and categorize paths marked as construction, instead of `other`, so we can set the corresponding style in the mvt layer. --- .conform.yaml | 2 -- .../de/geofabrik/railway_routing/ev/RailwayClass.java | 4 ++-- .../parsers/OSMRailwayClassParserTest.java | 8 +++++++- .../railway_routing/parsers/RailAccessParserTest.java | 9 +++++++++ 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/.conform.yaml b/.conform.yaml index 61580d0..7db7eab 100644 --- a/.conform.yaml +++ b/.conform.yaml @@ -9,8 +9,6 @@ policies: body: required: true dco: false - gpg: - required: true spellcheck: locale: US maximumOfOneCommit: false diff --git a/src/main/java/de/geofabrik/railway_routing/ev/RailwayClass.java b/src/main/java/de/geofabrik/railway_routing/ev/RailwayClass.java index 2495a25..be530b9 100644 --- a/src/main/java/de/geofabrik/railway_routing/ev/RailwayClass.java +++ b/src/main/java/de/geofabrik/railway_routing/ev/RailwayClass.java @@ -7,7 +7,7 @@ * This enum defines the railway class of an edge. It maps the railway=* key of OSM to an enum. All edges that do not fit get OTHER as value. */ public enum RailwayClass { - OTHER, RAIL, SUBWAY, TRAM, NARROW_GAUGE, LIGHT_RAIL, FUNICULAR; + OTHER, RAIL, SUBWAY, TRAM, NARROW_GAUGE, LIGHT_RAIL, FUNICULAR, CONSTRUCTION; public static final String KEY = "railway_class"; @@ -29,4 +29,4 @@ public static RailwayClass find(String name) { return OTHER; } } -} \ No newline at end of file +} diff --git a/src/test/java/de/geofabrik/railway_routing/parsers/OSMRailwayClassParserTest.java b/src/test/java/de/geofabrik/railway_routing/parsers/OSMRailwayClassParserTest.java index a15101d..0cb9212 100644 --- a/src/test/java/de/geofabrik/railway_routing/parsers/OSMRailwayClassParserTest.java +++ b/src/test/java/de/geofabrik/railway_routing/parsers/OSMRailwayClassParserTest.java @@ -70,6 +70,12 @@ void railwayClass() { way.setTag("railway", "rail;tram"); parser.handleWayTags(edgeId, edgeIntAccess, way, relFlags); assertEquals(RailwayClass.OTHER, classEnc.getEnum(false, edgeId, edgeIntAccess)); + + edgeIntAccess = new ArrayEdgeIntAccess(1); + way = new ReaderWay(29L); + way.setTag("railway", "construction"); + parser.handleWayTags(edgeId, edgeIntAccess, way, relFlags); + assertEquals(RailwayClass.CONSTRUCTION, classEnc.getEnum(false, edgeId, edgeIntAccess)); } -} \ No newline at end of file +} diff --git a/src/test/java/de/geofabrik/railway_routing/parsers/RailAccessParserTest.java b/src/test/java/de/geofabrik/railway_routing/parsers/RailAccessParserTest.java index a4a9e70..c3d6295 100644 --- a/src/test/java/de/geofabrik/railway_routing/parsers/RailAccessParserTest.java +++ b/src/test/java/de/geofabrik/railway_routing/parsers/RailAccessParserTest.java @@ -45,6 +45,15 @@ public void testAcceptsTrack() { assertEquals(e.getAccess(way), WayAccess.WAY); } + @Test + public void testAcceptsConstruction() { + PMap properties = new PMap(); + RailAccessParser e = createAccessParser(createEncodingManager(), properties); + ReaderWay way = new ReaderWay(1); + way.setTag("railway", "construction"); + assertEquals(e.getAccess(way), WayAccess.WAY); + } + @Test public void testRejectRoad() { PMap properties = new PMap();