Skip to content

Commit 72763c4

Browse files
author
Peter
committed
better fix for graphhopper#172, maxspeed:backward not supported in default CarFlagEncoder
1 parent 2dc0be4 commit 72763c4

File tree

2 files changed

+24
-17
lines changed

2 files changed

+24
-17
lines changed

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

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -164,23 +164,18 @@ public long handleWayTags( OSMWay way, long allowed, long relationCode )
164164
{
165165
// get assumed speed from highway type
166166
double speed = getSpeed(way);
167-
if (way.hasTag("maxspeed"))
168-
{
169-
double maxspeed = parseSpeed(way.getTag("maxspeed"));
170-
// apply speed limit no matter of the road type
171-
if (maxspeed >= 0)
172-
// reduce speed limit to reflect average speed
173-
speed = maxspeed * 0.9;
174-
}
175-
176-
if (way.hasTag("maxspeed:forward") && way.hasTag("maxspeed:backward"))
177-
{
178-
double maxSpeed = parseSpeed(way.getTag("maxspeed:forward"));
179-
double backSpeed = parseSpeed(way.getTag("maxspeed:backward"));
180-
// can happen only if both exist at the same time
181-
if (maxSpeed >= 0 && backSpeed >= 0)
182-
speed = Math.min(maxSpeed, backSpeed) * 0.9;
183-
}
167+
double maxspeed = parseSpeed(way.getTag("maxspeed"));
168+
// apply speed limit no matter of the road type
169+
if (maxspeed >= 0)
170+
// reduce speed limit to reflect average speed
171+
speed = maxspeed * 0.9;
172+
173+
double maxSpeed = parseSpeed(way.getTag("maxspeed:forward"));
174+
double backSpeed = parseSpeed(way.getTag("maxspeed:backward"));
175+
if (maxSpeed >= 0)
176+
speed = maxSpeed * 0.9;
177+
if (backSpeed >= 0 && speed > backSpeed * 0.9)
178+
speed = backSpeed * 0.9;
184179

185180
// limit speed to max 30 km/h if bad surface
186181
if (speed > 30 && way.hasTag("surface", BAD_SURFACE))

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,18 @@ public void testMaxSpeed()
104104
way.setTag("maxspeed:forward", "20");
105105
encoded = encoder.handleWayTags(way, encoder.acceptWay(way), 0);
106106
assertEquals(10, encoder.getSpeed(encoded), 1e-1);
107+
108+
way = new OSMWay(1);
109+
way.setTag("highway", "primary");
110+
way.setTag("maxspeed:forward", "20");
111+
encoded = encoder.handleWayTags(way, encoder.acceptWay(way), 0);
112+
assertEquals(20, encoder.getSpeed(encoded), 1e-1);
113+
114+
way = new OSMWay(1);
115+
way.setTag("highway", "primary");
116+
way.setTag("maxspeed:backward", "20");
117+
encoded = encoder.handleWayTags(way, encoder.acceptWay(way), 0);
118+
assertEquals(20, encoder.getSpeed(encoded), 1e-1);
107119
}
108120

109121
@Test

0 commit comments

Comments
 (0)