Skip to content

Commit

Permalink
value can be no for oneway:bicycle but also for cycleway:right:oneway,
Browse files Browse the repository at this point in the history
…fixes #2694
  • Loading branch information
karussell committed Nov 11, 2022
1 parent b17d84a commit ab5a8b2
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 4 deletions.
Expand Up @@ -504,11 +504,13 @@ void collect(ReaderWay way, double wayTypeSpeed, TreeMap<Double, Integer> weight
}

protected void handleAccess(IntsRef edgeFlags, ReaderWay way) {
// handle oneways
// oneway=-1 requires special handling
// handle oneways. The value -1 means it is a oneway but for reverse direction of stored geometry.
// The tagging oneway:bicycle=no or cycleway:right:oneway=no or cycleway:left:oneway=no lifts the generic oneway restriction of the way for bike
boolean isOneway = way.hasTag("oneway", oneways) && !way.hasTag("oneway", "-1") && !way.hasTag("bicycle:backward", intendedValues)
|| way.hasTag("oneway", "-1") && !way.hasTag("bicycle:forward", intendedValues)
|| way.hasTag("oneway:bicycle", oneways)
|| way.hasTag("cycleway:left:oneway", oneways)
|| way.hasTag("cycleway:right:oneway", oneways)
|| way.hasTag("vehicle:backward", restrictedValues) && !way.hasTag("bicycle:forward", intendedValues)
|| way.hasTag("vehicle:forward", restrictedValues) && !way.hasTag("bicycle:backward", intendedValues)
|| way.hasTag("bicycle:forward", restrictedValues)
Expand All @@ -519,10 +521,12 @@ protected void handleAccess(IntsRef edgeFlags, ReaderWay way) {
&& !way.hasTag("cycleway", oppositeLanes)
&& !way.hasTag("cycleway:left", oppositeLanes)
&& !way.hasTag("cycleway:right", oppositeLanes)
&& !way.hasTag("cycleway:left:oneway", "-1")
&& !way.hasTag("cycleway:right:oneway", "-1")) {
&& !way.hasTag("cycleway:left:oneway", "no")
&& !way.hasTag("cycleway:right:oneway", "no")) {
boolean isBackward = way.hasTag("oneway", "-1")
|| way.hasTag("oneway:bicycle", "-1")
|| way.hasTag("cycleway:left:oneway", "-1")
|| way.hasTag("cycleway:right:oneway", "-1")
|| way.hasTag("vehicle:forward", restrictedValues)
|| way.hasTag("bicycle:forward", restrictedValues);
accessEnc.setBool(isBackward, edgeFlags, true);
Expand Down
Expand Up @@ -390,6 +390,37 @@ public void testOneway() {
assertTrue(parser.getAccessEnc().getBool(false, flags));
assertFalse(parser.getAccessEnc().getBool(true, flags));
way.clearTags();
way.setTag("highway", "tertiary");
way.setTag("oneway", "yes");
way.setTag("oneway:bicycle", "no");
flags = parser.handleWayTags(encodingManager.createEdgeFlags(), way);
assertTrue(parser.getAccessEnc().getBool(false, flags));
assertTrue(parser.getAccessEnc().getBool(true, flags));
way.clearTags();

way.setTag("highway", "tertiary");
way.setTag("oneway", "yes");
way.setTag("oneway:bicycle", "-1");
flags = parser.handleWayTags(encodingManager.createEdgeFlags(), way);
assertFalse(parser.getAccessEnc().getBool(false, flags));
assertTrue(parser.getAccessEnc().getBool(true, flags));
way.clearTags();

way.setTag("highway", "tertiary");
way.setTag("oneway", "yes");
way.setTag("cycleway:right:oneway", "no");
flags = parser.handleWayTags(encodingManager.createEdgeFlags(), way);
assertTrue(parser.getAccessEnc().getBool(false, flags));
assertTrue(parser.getAccessEnc().getBool(true, flags));
way.clearTags();

way.setTag("highway", "tertiary");
way.setTag("oneway", "yes");
way.setTag("cycleway:right:oneway", "-1");
flags = parser.handleWayTags(encodingManager.createEdgeFlags(), way);
assertFalse(parser.getAccessEnc().getBool(false, flags));
assertTrue(parser.getAccessEnc().getBool(true, flags));
way.clearTags();

way.setTag("highway", "tertiary");
flags = parser.handleWayTags(encodingManager.createEdgeFlags(), way);
Expand Down

0 comments on commit ab5a8b2

Please sign in to comment.