Skip to content

Commit

Permalink
Merge pull request #1730 from buma/master_useSidepathTag
Browse files Browse the repository at this point in the history
Adds support for use_sidepath tag
  • Loading branch information
abyrd committed Feb 4, 2015
2 parents 8ea5520 + 9d17343 commit 03e743d
Show file tree
Hide file tree
Showing 4 changed files with 121 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,18 @@ public static P2<StreetTraversalPermission> getPermissions(
}
}

//This needs to be after adding permissions for oneway:bicycle=no
//removes bicycle permission when bicycles need to use sidepath
//TAG: bicycle:forward=use_sidepath
if (way.isForwardDirectionSidepath()) {
permissionsFront = permissionsFront.remove(StreetTraversalPermission.BICYCLE);
}

//TAG bicycle:backward=use_sidepath
if (way.isReverseDirectionSidepath()) {
permissionsBack = permissionsBack.remove(StreetTraversalPermission.BICYCLE);
}

if (way.isOpposableCycleway()) {
permissionsBack = permissionsBack.add(StreetTraversalPermission.BICYCLE);
}
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/org/opentripplanner/openstreetmap/model/OSMWay.java
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,24 @@ public boolean isOneWayReverseBicycle() {
return "-1".equals(getTag("oneway:bicycle"));
}

/**
* Returns true if bikes must use sidepath in forward direction
*
* @return
*/
public boolean isForwardDirectionSidepath() {
return "use_sidepath".equals(getTag("bicycle:forward"));
}

/**
* Returns true if bikes must use sidepath in reverse direction
*
* @return
*/
public boolean isReverseDirectionSidepath() {
return "use_sidepath".equals(getTag("bicycle:backward"));
}

/**
* Some cycleways allow contraflow biking.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,10 +233,11 @@ public boolean isMotorcarExplicitlyAllowed() {
/**
* Returns true if bikes are explicitly denied access.
*
* bicycle is denied if bicycle:no, bicycle:license or bicycle:use_sidepath
* @return
*/
public boolean isBicycleExplicitlyDenied() {
return isTagDeniedAccess("bicycle");
return isTagDeniedAccess("bicycle") || "use_sidepath".equals(getTag("bicycle"));
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ the License, or (at your option) any later version.
import static org.junit.Assert.*;

import org.junit.Test;
import org.opentripplanner.common.model.P2;
import org.opentripplanner.graph_builder.impl.osm.OSMFilter;
import org.opentripplanner.graph_builder.impl.osm.WayProperties;
import org.opentripplanner.graph_builder.impl.osm.WayPropertySet;
import org.opentripplanner.routing.edgetype.StreetTraversalPermission;

public class OSMWayTest {

Expand Down Expand Up @@ -90,6 +95,21 @@ public void testIsOneWayBicycle() {
assertTrue(way.isOneWayReverseBicycle());
}

@Test
public void testIsOneDirectionSidepath() {
OSMWay way = new OSMWay();
assertFalse(way.isForwardDirectionSidepath());
assertFalse(way.isReverseDirectionSidepath());

way.addTag("bicycle:forward", "use_sidepath");
assertTrue(way.isForwardDirectionSidepath());
assertFalse(way.isReverseDirectionSidepath());

way.addTag("bicycle:backward", "use_sidepath");
assertTrue(way.isForwardDirectionSidepath());
assertTrue(way.isReverseDirectionSidepath());
}

@Test
public void testIsOpposableCycleway() {
OSMWay way = new OSMWay();
Expand All @@ -108,4 +128,73 @@ public void testIsOpposableCycleway() {
way.addTag("cycleway:left", "opposite_side");
assertTrue(way.isOpposableCycleway());
}

private P2<StreetTraversalPermission> getWayProperties(OSMWay way) {
WayPropertySet wayPropertySet = new WayPropertySet();
WayProperties wayData = wayPropertySet.getDataForWay(way);

StreetTraversalPermission permissions = OSMFilter.getPermissionsForWay(way,
wayData.getPermission(), null);
return OSMFilter.getPermissions(permissions,
way);
}

@Test
public void testSidepathPermissions() {
OSMWay way = new OSMWay();
way.addTag("bicycle", "use_sidepath");
way.addTag("highway", "primary");
way.addTag("lanes", "2");
way.addTag("maxspeed", "70");
way.addTag("oneway", "yes");
P2<StreetTraversalPermission> permissionPair = getWayProperties(way);

assertFalse(permissionPair.first.allows(StreetTraversalPermission.BICYCLE));
assertFalse(permissionPair.second.allows(StreetTraversalPermission.BICYCLE));

assertTrue(permissionPair.first.allows(StreetTraversalPermission.CAR));
assertFalse(permissionPair.second.allows(StreetTraversalPermission.CAR));

way = new OSMWay();
way.addTag("bicycle:forward", "use_sidepath");
way.addTag("highway", "tertiary");
permissionPair = getWayProperties(way);

assertFalse(permissionPair.first.allows(StreetTraversalPermission.BICYCLE));
assertTrue(permissionPair.second.allows(StreetTraversalPermission.BICYCLE));

assertTrue(permissionPair.first.allows(StreetTraversalPermission.CAR));
assertTrue(permissionPair.second.allows(StreetTraversalPermission.CAR));

way = new OSMWay();
way.addTag("bicycle:backward", "use_sidepath");
way.addTag("highway", "tertiary");
permissionPair = getWayProperties(way);

assertTrue(permissionPair.first.allows(StreetTraversalPermission.BICYCLE));
assertFalse(permissionPair.second.allows(StreetTraversalPermission.BICYCLE));

assertTrue(permissionPair.first.allows(StreetTraversalPermission.CAR));
assertTrue(permissionPair.second.allows(StreetTraversalPermission.CAR));

way = new OSMWay();
way.addTag("highway", "tertiary");
way.addTag("oneway", "yes");
way.addTag("oneway:bicycle", "no");
permissionPair = getWayProperties(way);

assertTrue(permissionPair.first.allows(StreetTraversalPermission.BICYCLE));
assertTrue(permissionPair.second.allows(StreetTraversalPermission.BICYCLE));

assertTrue(permissionPair.first.allows(StreetTraversalPermission.CAR));
assertFalse(permissionPair.second.allows(StreetTraversalPermission.CAR));

way.addTag("bicycle:forward", "use_sidepath");
permissionPair = getWayProperties(way);
assertFalse(permissionPair.first.allows(StreetTraversalPermission.BICYCLE));
assertTrue(permissionPair.second.allows(StreetTraversalPermission.BICYCLE));

assertTrue(permissionPair.first.allows(StreetTraversalPermission.CAR));
assertFalse(permissionPair.second.allows(StreetTraversalPermission.CAR));
}
}

0 comments on commit 03e743d

Please sign in to comment.