Skip to content

Commit 71a40b0

Browse files
authored
Use fallback speed also for ways that are neither highways nor ferries (graphhopper#2845)
1 parent fc44291 commit 71a40b0

File tree

2 files changed

+37
-8
lines changed

2 files changed

+37
-8
lines changed

core/src/main/java/com/graphhopper/routing/util/parsers/CarAverageSpeedParser.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public CarAverageSpeedParser(DecimalEncodedValue speedEnc, double maxPossibleSpe
105105
}
106106

107107
protected double getSpeed(ReaderWay way) {
108-
String highwayValue = way.getTag("highway");
108+
String highwayValue = way.getTag("highway", "");
109109
Integer speed = defaultSpeedMap.get(highwayValue);
110110

111111
// even inaccessible edges get a speed assigned
@@ -126,13 +126,11 @@ protected double getSpeed(ReaderWay way) {
126126
@Override
127127
public void handleWayTags(int edgeId, EdgeIntAccess edgeIntAccess, ReaderWay way) {
128128
String highwayValue = way.getTag("highway");
129-
if (highwayValue == null) {
130-
if (way.hasTag("route", ferries)) {
131-
double ferrySpeed = ferrySpeedCalc.getSpeed(way);
132-
setSpeed(false, edgeId, edgeIntAccess, ferrySpeed);
133-
if (avgSpeedEnc.isStoreTwoDirections())
134-
setSpeed(true, edgeId, edgeIntAccess, ferrySpeed);
135-
}
129+
if (highwayValue == null && way.hasTag("route", ferries)) {
130+
double ferrySpeed = ferrySpeedCalc.getSpeed(way);
131+
setSpeed(false, edgeId, edgeIntAccess, ferrySpeed);
132+
if (avgSpeedEnc.isStoreTwoDirections())
133+
setSpeed(true, edgeId, edgeIntAccess, ferrySpeed);
136134
return;
137135
}
138136

core/src/test/java/com/graphhopper/routing/util/parsers/CarTagParserTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -730,4 +730,35 @@ void footway_etc_not_allowed_despite_vehicle_yes(String vehicle) {
730730
assertEquals(WayAccess.CAN_SKIP, parser.getAccess(way));
731731
}
732732
}
733+
734+
@Test
735+
void nonHighwaysFallbackSpeed_issue2845() {
736+
ReaderWay way = new ReaderWay(1);
737+
way.setTag("man_made", "pier");
738+
EdgeIntAccess edgeIntAccess = new ArrayEdgeIntAccess(em.getIntsForFlags());
739+
speedParser.handleWayTags(0, edgeIntAccess, way);
740+
assertEquals(10, avSpeedEnc.getDecimal(false, 0, edgeIntAccess), 1e-1);
741+
742+
way.clearTags();
743+
way.setTag("railway", "platform");
744+
speedParser.handleWayTags(0, edgeIntAccess = new ArrayEdgeIntAccess(em.getIntsForFlags()), way);
745+
assertEquals(10, avSpeedEnc.getDecimal(false, 0, edgeIntAccess), 1e-1);
746+
747+
way.clearTags();
748+
way.setTag("route", "ski");
749+
speedParser.handleWayTags(0, edgeIntAccess = new ArrayEdgeIntAccess(em.getIntsForFlags()), way);
750+
assertEquals(10, avSpeedEnc.getDecimal(false, 0, edgeIntAccess), 1e-1);
751+
752+
way.clearTags();
753+
way.setTag("highway", "abandoned");
754+
speedParser.handleWayTags(0, edgeIntAccess = new ArrayEdgeIntAccess(em.getIntsForFlags()), way);
755+
assertEquals(10, avSpeedEnc.getDecimal(false, 0, edgeIntAccess), 1e-1);
756+
757+
way.clearTags();
758+
way.setTag("highway", "construction");
759+
way.setTag("maxspeed", "100");
760+
speedParser.handleWayTags(0, edgeIntAccess = new ArrayEdgeIntAccess(em.getIntsForFlags()), way);
761+
// unknown highways can be quite fast in combination with maxspeed!?
762+
assertEquals(90, avSpeedEnc.getDecimal(false, 0, edgeIntAccess), 1e-1);
763+
}
733764
}

0 commit comments

Comments
 (0)