Skip to content

Commit 1ed4bee

Browse files
authored
avoid rounding down small speed (graphhopper#2726)
1 parent cdd131d commit 1ed4bee

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,9 @@ public final BooleanEncodedValue getAccessEnc() {
195195
}
196196

197197
protected void setSpeed(boolean reverse, IntsRef edgeFlags, double speed) {
198+
// special case when speed is non-zero but would be "rounded down" to 0 due to the low precision of the EncodedValue
199+
if (speed > 0.1 && speed < avgSpeedEnc.getSmallestNonZeroValue())
200+
speed = avgSpeedEnc.getSmallestNonZeroValue();
198201
if (speed < avgSpeedEnc.getSmallestNonZeroValue()) {
199202
avgSpeedEnc.setDecimal(reverse, edgeFlags, 0);
200203
accessEnc.setBool(reverse, edgeFlags, false);

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -360,12 +360,12 @@ public void testSetSpeed() {
360360
}
361361

362362
@Test
363-
public void testSetSpeed0_issue367() {
363+
public void testSetSpeed0_issue367_issue1234() {
364364
IntsRef edgeFlags = em.createEdgeFlags();
365365
accessEnc.setBool(false, edgeFlags, true);
366366
accessEnc.setBool(true, edgeFlags, true);
367367

368-
parser.setSpeed(false, edgeFlags, parser.avgSpeedEnc.getSmallestNonZeroValue() - 0.01);
368+
parser.setSpeed(false, edgeFlags, 0.01);
369369

370370
// one direction effects the other direction as one encoder for speed but this is not true for access
371371
assertEquals(0, avSpeedEnc.getDecimal(false, edgeFlags), .1);
@@ -374,7 +374,7 @@ public void testSetSpeed0_issue367() {
374374
assertTrue(accessEnc.getBool(true, edgeFlags));
375375

376376
// so always call this method with reverse=true too
377-
parser.setSpeed(true, edgeFlags, parser.avgSpeedEnc.getSmallestNonZeroValue() - 0.01);
377+
parser.setSpeed(true, edgeFlags, 0.01);
378378
assertFalse(accessEnc.getBool(true, edgeFlags));
379379
}
380380

0 commit comments

Comments
 (0)