Skip to content

Commit e4ed0d1

Browse files
committed
include fence as absolute barrier, fixes graphhopper#1468
1 parent 2b94c0a commit e4ed0d1

File tree

5 files changed

+42
-2
lines changed

5 files changed

+42
-2
lines changed

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,10 @@ public int defineRelationBits(int index, int shift) {
221221

222222
/**
223223
* Parse tags on nodes. Node tags can add to speed (like traffic_signals) where the value is
224-
* strict negative or blocks access (like a barrier), then the value is strict positive.This
224+
* strict negative or blocks access (like a barrier), then the value is strictly positive. This
225225
* method is called in the second parsing step.
226+
*
227+
* @return encoded values or 0 if not blocking or no value stored
226228
*/
227229
public long handleNodeTags(ReaderNode node) {
228230
// absolute barriers always block
@@ -484,7 +486,7 @@ protected double getFerrySpeed(ReaderWay way) {
484486
}
485487

486488
if (durationInHours == 0) {
487-
if(estimatedLength != null && estimatedLength.doubleValue() <= 300)
489+
if (estimatedLength != null && estimatedLength.doubleValue() <= 300)
488490
return speedEncoder.factor / 2;
489491
// unknown speed -> put penalty on ferry transport
490492
return UNKNOWN_DURATION_FERRY_SPEED;

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ protected BikeCommonFlagEncoder(int speedBits, double speedFactor, int maxTurnCo
8888
// potentialBarriers.add("lift_gate");
8989
potentialBarriers.add("swing_gate");
9090

91+
absoluteBarriers.add("fence");
9192
absoluteBarriers.add("stile");
9293
absoluteBarriers.add("turnstile");
9394

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ public CarFlagEncoder(int speedBits, double speedFactor, int maxTurnCosts) {
8484
potentialBarriers.add("kissing_gate");
8585
potentialBarriers.add("swing_gate");
8686

87+
absoluteBarriers.add("fence");
8788
absoluteBarriers.add("bollard");
8889
absoluteBarriers.add("stile");
8990
absoluteBarriers.add("turnstile");

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ public FootFlagEncoder(int speedBits, double speedFactor) {
9393
sidewalkValues.add("right");
9494

9595
setBlockByDefault(false);
96+
absoluteBarriers.add("fence");
9697
potentialBarriers.add("gate");
9798

9899
safeHighwayTags.add("footway");

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

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,7 @@ public void handleWayTagsCircularJunction() {
377377
assertTrue(footEncoder.isBool(flags, FlagEncoder.K_ROUNDABOUT));
378378
}
379379

380+
@Test
380381
public void testFord() {
381382
// by default deny access through fords!
382383
ReaderNode node = new ReaderNode(1, -1, -1);
@@ -402,4 +403,38 @@ public void testFord() {
402403
node.setTag("ford", "yes");
403404
assertTrue(footEncoder.handleNodeTags(node) == 0);
404405
}
406+
407+
@Test
408+
public void testBlockByDefault() {
409+
FootFlagEncoder tmpFootEncoder = new FootFlagEncoder();
410+
new EncodingManager(tmpFootEncoder);
411+
412+
ReaderNode node = new ReaderNode(1, -1, -1);
413+
node.setTag("barrier", "gate");
414+
// potential barriers are no barrier by default
415+
assertTrue(tmpFootEncoder.handleNodeTags(node) == 0);
416+
node.setTag("access", "no");
417+
assertTrue(tmpFootEncoder.handleNodeTags(node) > 0);
418+
419+
// absolute barriers always block
420+
node = new ReaderNode(1, -1, -1);
421+
node.setTag("barrier", "fence");
422+
assertTrue(tmpFootEncoder.handleNodeTags(node) > 0);
423+
node.setTag("barrier", "fence");
424+
node.setTag("access", "yes");
425+
assertTrue(tmpFootEncoder.handleNodeTags(node) > 0);
426+
427+
// Now let's block potential barriers per default (if no other access tag exists)
428+
tmpFootEncoder.setBlockByDefault(true);
429+
430+
node = new ReaderNode(1, -1, -1);
431+
node.setTag("barrier", "gate");
432+
assertTrue(tmpFootEncoder.handleNodeTags(node) > 0);
433+
node.setTag("access", "yes");
434+
assertTrue(tmpFootEncoder.handleNodeTags(node) == 0);
435+
436+
node = new ReaderNode(1, -1, -1);
437+
node.setTag("barrier", "fence");
438+
assertTrue(tmpFootEncoder.handleNodeTags(node) > 0);
439+
}
405440
}

0 commit comments

Comments
 (0)