Skip to content

Commit e5b27a0

Browse files
authored
Merge pull request #106 from GIScience/fix/maxspeed_tag_for_ferries
fix: maxspeed tag for ferries
2 parents db45637 + 2b0f84d commit e5b27a0

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

core/src/main/java/com/graphhopper/routing/util/FerrySpeedCalculator.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,16 @@ public double getSpeed(ReaderWay way) {
7474
// OSM MOD start
7575
// Use maxspeed if available, see https://github.com/GIScience/openrouteservice/issues/620
7676
// Apply the same speed-reduction factor as in trip speed calculation above
77-
double maxSpeed = com.graphhopper.routing.util.parsers.helpers.OSMValueExtractor.stringToKmh(way.getTag("maxspeed")) / 1.4;
78-
if (maxSpeed > speedFactor / 2)
79-
return maxSpeed;
77+
if (way.hasTag("maxspeed")) {
78+
String maxspeedTagValue = way.getTag("maxspeed");
79+
double avarageSpeed = com.graphhopper.routing.util.parsers.helpers.OSMValueExtractor.stringToKmh(maxspeedTagValue) / 1.4;
80+
if (avarageSpeed < speedFactor / 2)
81+
return speedFactor / 2;
82+
if (avarageSpeed > maxSpeed)
83+
return maxSpeed;
84+
if (Double.isFinite(avarageSpeed))
85+
return avarageSpeed;
86+
}
8087
// OSM MOD end
8188
// unknown speed -> put penalty on ferry transport
8289
return unknownSpeed;

core/src/test/java/com/graphhopper/routing/util/FerrySpeedCalculatorTest.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,26 @@ private void checkSpeed(FerrySpeedCalculator calc, String duration, Double dista
7171
@Test
7272
void testMaxSpeedTag() {
7373
double speedFactor = 2;
74-
double maxSpeed = 55;
74+
double maxSpeed = 30;
7575
double longSpeed = 30;
7676
double shortSpeed = 20;
7777
double unknownSpeed = 5;
7878
FerrySpeedCalculator c = new FerrySpeedCalculator(speedFactor, maxSpeed, longSpeed, shortSpeed, unknownSpeed);
7979

80+
// valid
81+
checkMaxSpeed(c, "14", 10);
82+
// above max (capped to max)
83+
checkMaxSpeed(c, "45", maxSpeed);
84+
// below smallest storable non-zero value
85+
checkMaxSpeed(c, "1", speedFactor / 2);
86+
// invalid value
87+
checkMaxSpeed(c, "foo", unknownSpeed);
88+
}
89+
90+
private void checkMaxSpeed(FerrySpeedCalculator calc, String maxspeed, double expected) {
8091
ReaderWay way = new ReaderWay(0L);
81-
way.setTag("maxspeed", "14");
82-
assertEquals(10, c.getSpeed(way));
92+
way.setTag("maxspeed", maxspeed);
93+
assertEquals(expected, calc.getSpeed(way));
8394
}
8495
// ORS-GH MOD END
8596
}

0 commit comments

Comments
 (0)