diff --git a/application/src/main/java/org/opentripplanner/osm/tagmapping/GermanyMapper.java b/application/src/main/java/org/opentripplanner/osm/tagmapping/GermanyMapper.java index af56b572bd8..274f2253c19 100644 --- a/application/src/main/java/org/opentripplanner/osm/tagmapping/GermanyMapper.java +++ b/application/src/main/java/org/opentripplanner/osm/tagmapping/GermanyMapper.java @@ -57,10 +57,7 @@ public void populateProperties(WayPropertySet props) { withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(0.8) ); // Default was 2.5, we want to favor using mixed footways somewhat - props.setProperties( - "footway=sidewalk;highway=footway;bicycle=yes", - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(1.2) - ); + props.setMixinProperties("footway=sidewalk;highway=footway;bicycle=yes", ofBicycleSafety(0.6)); props.setMixinProperties("highway=tertiary", ofBicycleSafety(1.2)); props.setMixinProperties("maxspeed=70", ofBicycleSafety(1.5)); diff --git a/application/src/main/java/org/opentripplanner/osm/tagmapping/OsmTagMapper.java b/application/src/main/java/org/opentripplanner/osm/tagmapping/OsmTagMapper.java index 92eb02d4b78..dddcb2586f3 100644 --- a/application/src/main/java/org/opentripplanner/osm/tagmapping/OsmTagMapper.java +++ b/application/src/main/java/org/opentripplanner/osm/tagmapping/OsmTagMapper.java @@ -5,7 +5,6 @@ import static org.opentripplanner.osm.wayproperty.WayPropertiesBuilder.withModes; import static org.opentripplanner.street.model.StreetTraversalPermission.ALL; import static org.opentripplanner.street.model.StreetTraversalPermission.BICYCLE; -import static org.opentripplanner.street.model.StreetTraversalPermission.BICYCLE_AND_CAR; import static org.opentripplanner.street.model.StreetTraversalPermission.CAR; import static org.opentripplanner.street.model.StreetTraversalPermission.NONE; import static org.opentripplanner.street.model.StreetTraversalPermission.PEDESTRIAN; @@ -13,9 +12,13 @@ import org.opentripplanner.osm.model.OsmEntity; import org.opentripplanner.osm.model.TraverseDirection; +import org.opentripplanner.osm.wayproperty.MixinPropertiesBuilder; import org.opentripplanner.osm.wayproperty.WayProperties; import org.opentripplanner.osm.wayproperty.WayPropertySet; import org.opentripplanner.osm.wayproperty.specifier.BestMatchSpecifier; +import org.opentripplanner.osm.wayproperty.specifier.Condition; +import org.opentripplanner.osm.wayproperty.specifier.Condition.Equals; +import org.opentripplanner.osm.wayproperty.specifier.Condition.Not; import org.opentripplanner.osm.wayproperty.specifier.ExactMatchSpecifier; import org.opentripplanner.osm.wayproperty.specifier.LogicalOrSpecifier; import org.opentripplanner.routing.services.notes.StreetNotesService; @@ -52,8 +55,6 @@ public class OsmTagMapper { public void populateProperties(WayPropertySet props) { WayProperties allWayProperties = withModes(ALL).build(); WayProperties noneWayProperties = withModes(NONE).build(); - WayProperties pedestrianWayProperties = withModes(PEDESTRIAN).build(); - WayProperties pedestrianAndBicycleWayProperties = withModes(PEDESTRIAN_AND_BICYCLE).build(); /* no bicycle tags */ /* NONE */ @@ -64,25 +65,24 @@ public void populateProperties(WayPropertySet props) { props.setProperties("highway=bridleway", withModes(NONE).bicycleSafety(1.3)); /* PEDESTRIAN */ - props.setProperties("highway=corridor", pedestrianWayProperties); - props.setProperties("highway=steps", pedestrianWayProperties); - props.setProperties("highway=crossing", pedestrianWayProperties); - props.setProperties("highway=platform", pedestrianWayProperties); - props.setProperties("public_transport=platform", pedestrianWayProperties); - props.setProperties("railway=platform", pedestrianWayProperties); - props.setProperties("footway=sidewalk;highway=footway", pedestrianWayProperties); + props.setProperties("highway=corridor", withModes(PEDESTRIAN)); + props.setProperties("highway=steps", withModes(PEDESTRIAN)); + props.setProperties("highway=crossing", withModes(PEDESTRIAN)); + props.setProperties("highway=platform", withModes(PEDESTRIAN)); + props.setProperties("public_transport=platform", withModes(PEDESTRIAN)); + props.setProperties("railway=platform", withModes(PEDESTRIAN)); props.setProperties("highway=pedestrian", withModes(PEDESTRIAN).bicycleSafety(0.9)); props.setProperties("highway=footway", withModes(PEDESTRIAN).bicycleSafety(1.1)); - props.setProperties("mtb:scale=1", pedestrianWayProperties); - props.setProperties("mtb:scale=2", pedestrianWayProperties); - props.setProperties("indoor=area", pedestrianWayProperties); - props.setProperties("indoor=corridor", pedestrianWayProperties); + props.setProperties("mtb:scale=1", withModes(PEDESTRIAN).bicycleSafety(1.5)); + props.setProperties("mtb:scale=2", withModes(PEDESTRIAN).bicycleSafety(3.0)); + props.setProperties("indoor=area", withModes(PEDESTRIAN)); + props.setProperties("indoor=corridor", withModes(PEDESTRIAN)); /* BICYCLE */ props.setProperties("highway=cycleway", withModes(BICYCLE).bicycleSafety(0.6)); /* PEDESTRIAN_AND_BICYCLE */ - props.setProperties("mtb:scale=0", pedestrianAndBicycleWayProperties); + props.setProperties("mtb:scale=0", withModes(PEDESTRIAN_AND_BICYCLE)); props.setProperties("highway=path", withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(0.75)); /* ALL */ @@ -110,478 +110,100 @@ public void populateProperties(WayPropertySet props) { // Do not walk on "moottoriliikennetie"/"Kraftfahrstrasse"/"Limited access road" // https://en.wikipedia.org/wiki/Limited-access_road - props.setProperties( + props.setMixinProperties( new ExactMatchSpecifier("motorroad=yes"), - withModes(CAR).walkSafety(7.47).bicycleSafety(7.47) + new MixinPropertiesBuilder().removePermission(PEDESTRIAN_AND_BICYCLE) ); /* cycleway=lane */ - props.setProperties( - "highway=*;cycleway=lane", - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(0.87) - ); - props.setProperties("highway=service;cycleway=lane", withModes(ALL).bicycleSafety(0.77)); - props.setProperties("highway=residential;cycleway=lane", withModes(ALL).bicycleSafety(0.77)); - props.setProperties( - "highway=residential_link;cycleway=lane", - withModes(ALL).bicycleSafety(0.77) - ); - props.setProperties("highway=tertiary;cycleway=lane", withModes(ALL).bicycleSafety(0.87)); - props.setProperties("highway=tertiary_link;cycleway=lane", withModes(ALL).bicycleSafety(0.87)); - props.setProperties("highway=secondary;cycleway=lane", withModes(ALL).bicycleSafety(0.96)); - props.setProperties("highway=secondary_link;cycleway=lane", withModes(ALL).bicycleSafety(0.96)); - props.setProperties("highway=primary;cycleway=lane", withModes(ALL).bicycleSafety(1.15)); - props.setProperties("highway=primary_link;cycleway=lane", withModes(ALL).bicycleSafety(1.15)); - - /* BICYCLE_AND_CAR */ - props.setProperties( - "highway=trunk;cycleway=lane", - withModes(ALL).walkSafety(7.47).bicycleSafety(1.5) - ); - props.setProperties( - "highway=trunk_link;cycleway=lane", - withModes(ALL).walkSafety(7.47).bicycleSafety(1.15) - ); - props.setProperties( - "highway=motorway;cycleway=lane", - withModes(BICYCLE_AND_CAR).bicycleSafety(2) - ); - props.setProperties( - "highway=motorway_link;cycleway=lane", - withModes(BICYCLE_AND_CAR).bicycleSafety(1.15) + props.setMixinProperties( + new ExactMatchSpecifier( + new Equals("cycleway", "lane"), + new Not(new Equals("highway", "cycleway")) + ), + ofBicycleSafety(0.87).addPermission(BICYCLE) ); /* cycleway=share_busway */ - props.setProperties( - "highway=*;cycleway=share_busway", - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(0.92) - ); - props.setProperties( - "highway=service;cycleway=share_busway", - withModes(ALL).bicycleSafety(0.85) - ); - props.setProperties( - "highway=residential;cycleway=share_busway", - withModes(ALL).bicycleSafety(0.85) - ); - props.setProperties( - "highway=residential_link;cycleway=share_busway", - withModes(ALL).bicycleSafety(0.85) - ); - props.setProperties( - "highway=tertiary;cycleway=share_busway", - withModes(ALL).bicycleSafety(0.92) - ); - props.setProperties( - "highway=tertiary_link;cycleway=share_busway", - withModes(ALL).bicycleSafety(0.92) - ); - props.setProperties( - "highway=secondary;cycleway=share_busway", - withModes(ALL).bicycleSafety(0.99) - ); - props.setProperties( - "highway=secondary_link;cycleway=share_busway", - withModes(ALL).bicycleSafety(0.99) - ); - props.setProperties( - "highway=primary;cycleway=share_busway", - withModes(ALL).bicycleSafety(1.25) - ); - props.setProperties( - "highway=primary_link;cycleway=share_busway", - withModes(ALL).bicycleSafety(1.25) - ); - props.setProperties( - "highway=trunk;cycleway=share_busway", - withModes(ALL).walkSafety(7.47).bicycleSafety(1.75) - ); - props.setProperties( - "highway=trunk_link;cycleway=share_busway", - withModes(ALL).walkSafety(7.47).bicycleSafety(1.25) - ); - props.setProperties( - "highway=motorway;cycleway=share_busway", - withModes(BICYCLE_AND_CAR).bicycleSafety(2.5) - ); - props.setProperties( - "highway=motorway_link;cycleway=share_busway", - withModes(BICYCLE_AND_CAR).bicycleSafety(1.25) + props.setMixinProperties( + new ExactMatchSpecifier( + new Equals("cycleway", "share_busway"), + new Not(new Equals("highway", "cycleway")) + ), + ofBicycleSafety(0.92).addPermission(BICYCLE) ); /* cycleway=opposite_lane */ - props.setProperties( - "highway=*;cycleway=opposite_lane", - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(1), - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(1), - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(0.87) - ); - props.setProperties( - "highway=service;cycleway=opposite_lane", - withModes(ALL).bicycleSafety(1.1), - withModes(ALL).bicycleSafety(1.1), - withModes(ALL).bicycleSafety(0.77) - ); - props.setProperties( - "highway=residential;cycleway=opposite_lane", - withModes(ALL).bicycleSafety(0.98), - withModes(ALL).bicycleSafety(0.98), - withModes(ALL).bicycleSafety(0.77) - ); - props.setProperties( - "highway=residential_link;cycleway=opposite_lane", - withModes(ALL).bicycleSafety(0.98), - withModes(ALL).bicycleSafety(0.98), - withModes(ALL).bicycleSafety(0.77) - ); - props.setProperties( - "highway=tertiary;cycleway=opposite_lane", - withModes(ALL).bicycleSafety(1), - withModes(ALL).bicycleSafety(1), - withModes(ALL).bicycleSafety(0.87) - ); - props.setProperties( - "highway=tertiary_link;cycleway=opposite_lane", - withModes(ALL).bicycleSafety(1), - withModes(ALL).bicycleSafety(1), - withModes(ALL).bicycleSafety(0.87) - ); - props.setProperties( - "highway=secondary;cycleway=opposite_lane", - withModes(ALL).bicycleSafety(1.5), - withModes(ALL).bicycleSafety(1.5), - withModes(ALL).bicycleSafety(0.96) - ); - props.setProperties( - "highway=secondary_link;cycleway=opposite_lane", - withModes(ALL).bicycleSafety(1.5), - withModes(ALL).bicycleSafety(1.5), - withModes(ALL).bicycleSafety(0.96) - ); - props.setProperties( - "highway=primary;cycleway=opposite_lane", - withModes(ALL).bicycleSafety(2.06), - withModes(ALL).bicycleSafety(2.06), - withModes(ALL).bicycleSafety(1.15) - ); - props.setProperties( - "highway=primary_link;cycleway=opposite_lane", - withModes(ALL).bicycleSafety(2.06), - withModes(ALL).bicycleSafety(2.06), - withModes(ALL).bicycleSafety(1.15) - ); - props.setProperties( - "highway=trunk;cycleway=opposite_lane", - withModes(ALL).walkSafety(7.47).bicycleSafety(7.47), - withModes(ALL).walkSafety(7.47).bicycleSafety(7.47), - withModes(ALL).walkSafety(7.47).bicycleSafety(1.15) - ); - props.setProperties( - "highway=trunk_link;cycleway=opposite_lane", - withModes(ALL).walkSafety(7.47).bicycleSafety(2.06), - withModes(ALL).walkSafety(7.47).bicycleSafety(2.06), - withModes(ALL).walkSafety(7.47).bicycleSafety(1.15) + props.setMixinProperties( + new ExactMatchSpecifier( + new Equals("cycleway", "opposite_lane"), + new Not(new Equals("highway", "cycleway")) + ), + new MixinPropertiesBuilder() + .directional(TraverseDirection.BACKWARD, builder -> + builder.withBicycleSafety(0.87).addPermission(BICYCLE) + ) ); /* cycleway=track */ - props.setProperties( - "highway=*;cycleway=track", - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(0.75) - ); - props.setProperties("highway=service;cycleway=track", withModes(ALL).bicycleSafety(0.65)); - props.setProperties("highway=residential;cycleway=track", withModes(ALL).bicycleSafety(0.65)); - props.setProperties( - "highway=residential_link;cycleway=track", - withModes(ALL).bicycleSafety(0.65) - ); - props.setProperties("highway=tertiary;cycleway=track", withModes(ALL).bicycleSafety(0.75)); - props.setProperties("highway=tertiary_link;cycleway=track", withModes(ALL).bicycleSafety(0.75)); - props.setProperties("highway=secondary;cycleway=track", withModes(ALL).bicycleSafety(0.8)); - props.setProperties("highway=secondary_link;cycleway=track", withModes(ALL).bicycleSafety(0.8)); - props.setProperties("highway=primary;cycleway=track", withModes(ALL).bicycleSafety(0.85)); - props.setProperties("highway=primary_link;cycleway=track", withModes(ALL).bicycleSafety(0.85)); - props.setProperties( - "highway=trunk;cycleway=track", - withModes(ALL).walkSafety(7.47).bicycleSafety(0.95) - ); - props.setProperties( - "highway=trunk_link;cycleway=track", - withModes(ALL).walkSafety(7.47).bicycleSafety(0.85) + props.setMixinProperties( + new ExactMatchSpecifier( + new Equals("cycleway", "track"), + new Not(new Equals("highway", "cycleway")) + ), + ofBicycleSafety(0.75).addPermission(BICYCLE) ); /* cycleway=opposite_track */ - props.setProperties( - "highway=*;cycleway=opposite_track", - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(1.0), - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(1.0), - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(0.75) - ); - props.setProperties( - "highway=service;cycleway=opposite_track", - withModes(ALL).bicycleSafety(1.1), - withModes(ALL).bicycleSafety(1.1), - withModes(ALL).bicycleSafety(0.65) - ); - props.setProperties( - "highway=residential;cycleway=opposite_track", - withModes(ALL).bicycleSafety(0.98), - withModes(ALL).bicycleSafety(0.98), - withModes(ALL).bicycleSafety(0.65) - ); - props.setProperties( - "highway=residential_link;cycleway=opposite_track", - withModes(ALL).bicycleSafety(0.98), - withModes(ALL).bicycleSafety(0.98), - withModes(ALL).bicycleSafety(0.65) - ); - props.setProperties( - "highway=tertiary;cycleway=opposite_track", - withModes(ALL).bicycleSafety(1), - withModes(ALL).bicycleSafety(1), - withModes(ALL).bicycleSafety(0.75) - ); - props.setProperties( - "highway=tertiary_link;cycleway=opposite_track", - withModes(ALL).bicycleSafety(1), - withModes(ALL).bicycleSafety(1), - withModes(ALL).bicycleSafety(0.75) - ); - props.setProperties( - "highway=secondary;cycleway=opposite_track", - withModes(ALL).bicycleSafety(1.5), - withModes(ALL).bicycleSafety(1.5), - withModes(ALL).bicycleSafety(0.8) - ); - props.setProperties( - "highway=secondary_link;cycleway=opposite_track", - withModes(ALL).bicycleSafety(1.5), - withModes(ALL).bicycleSafety(1.5), - withModes(ALL).bicycleSafety(0.8) - ); - props.setProperties( - "highway=primary;cycleway=opposite_track", - withModes(ALL).bicycleSafety(2.06), - withModes(ALL).bicycleSafety(2.06), - withModes(ALL).bicycleSafety(0.85) - ); - props.setProperties( - "highway=primary_link;cycleway=opposite_track", - withModes(ALL).bicycleSafety(2.06), - withModes(ALL).bicycleSafety(2.06), - withModes(ALL).bicycleSafety(0.85) - ); - props.setProperties( - "highway=trunk;cycleway=opposite_track", - withModes(ALL).walkSafety(7.47).bicycleSafety(7.47), - withModes(ALL).walkSafety(7.47).bicycleSafety(7.47), - withModes(ALL).walkSafety(7.47).bicycleSafety(0.95) - ); - props.setProperties( - "highway=trunk_link;cycleway=opposite_track", - withModes(ALL).walkSafety(7.47).bicycleSafety(2.06), - withModes(ALL).walkSafety(7.47).bicycleSafety(2.06), - withModes(ALL).walkSafety(7.47).bicycleSafety(0.85) + props.setMixinProperties( + new ExactMatchSpecifier( + new Equals("cycleway", "opposite_track"), + new Not(new Equals("highway", "cycleway")) + ), + new MixinPropertiesBuilder() + .directional(TraverseDirection.BACKWARD, builder -> + builder.withBicycleSafety(0.75).addPermission(BICYCLE) + ) ); /* cycleway=shared_lane a.k.a. bike boulevards or neighborhood greenways */ - props.setProperties( - "highway=*;cycleway=shared_lane", - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(0.77) - ); - props.setProperties("highway=service;cycleway=shared_lane", withModes(ALL).bicycleSafety(0.73)); - props.setProperties( - "highway=residential;cycleway=shared_lane", - withModes(ALL).bicycleSafety(0.77) - ); - props.setProperties( - "highway=residential_link;cycleway=shared_lane", - withModes(ALL).bicycleSafety(0.77) - ); - props.setProperties( - "highway=tertiary;cycleway=shared_lane", - withModes(ALL).bicycleSafety(0.83) - ); - props.setProperties( - "highway=tertiary_link;cycleway=shared_lane", - withModes(ALL).bicycleSafety(0.83) - ); - props.setProperties( - "highway=secondary;cycleway=shared_lane", - withModes(ALL).bicycleSafety(1.25) - ); - props.setProperties( - "highway=secondary_link;cycleway=shared_lane", - withModes(ALL).bicycleSafety(1.25) - ); - props.setProperties("highway=primary;cycleway=shared_lane", withModes(ALL).bicycleSafety(1.75)); - props.setProperties( - "highway=primary_link;cycleway=shared_lane", - withModes(ALL).bicycleSafety(1.75) + props.setMixinProperties( + new ExactMatchSpecifier( + new Equals("cycleway", "shared_lane"), + new Not(new Equals("highway", "cycleway")) + ), + ofBicycleSafety(0.77).addPermission(BICYCLE) ); /* cycleway=opposite */ - props.setProperties( - "highway=*;cycleway=opposite", - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(1), - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(1), - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(1.4) - ); - props.setProperties("highway=service;cycleway=opposite", withModes(ALL).bicycleSafety(1.1)); - props.setProperties( - "highway=residential;cycleway=opposite", - withModes(ALL).bicycleSafety(0.98) - ); - props.setProperties( - "highway=residential_link;cycleway=opposite", - withModes(ALL).bicycleSafety(0.98) - ); - props.setProperties("highway=tertiary;cycleway=opposite", allWayProperties); - props.setProperties("highway=tertiary_link;cycleway=opposite", allWayProperties); - props.setProperties( - "highway=secondary;cycleway=opposite", - withModes(ALL).bicycleSafety(1.5), - withModes(ALL).bicycleSafety(1.5), - withModes(ALL).bicycleSafety(1.71) - ); - props.setProperties( - "highway=secondary_link;cycleway=opposite", - withModes(ALL).bicycleSafety(1.5), - withModes(ALL).bicycleSafety(1.5), - withModes(ALL).bicycleSafety(1.71) - ); - props.setProperties( - "highway=primary;cycleway=opposite", - withModes(ALL).bicycleSafety(2.06), - withModes(ALL).bicycleSafety(2.06), - withModes(ALL).bicycleSafety(2.99) - ); - props.setProperties( - "highway=primary_link;cycleway=opposite", - withModes(ALL).bicycleSafety(2.06), - withModes(ALL).bicycleSafety(2.06), - withModes(ALL).bicycleSafety(2.99) - ); - - /* - * path designed for bicycles (should be treated exactly as a cycleway is), this is a multi-use path (MUP) - */ - props.setProperties( - "highway=path;bicycle=designated", - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(0.60) - ); - - /* special cases for footway, pedestrian and bicycles */ - props.setProperties( - "highway=footway;bicycle=designated", - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(0.75) - ); - props.setProperties( - new ExactMatchSpecifier("highway=footway;bicycle=yes;area=yes"), - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(0.9) - ); - props.setProperties( - "highway=pedestrian;bicycle=designated", - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(0.75) + props.setMixinProperties( + new ExactMatchSpecifier( + new Equals("cycleway", "opposite"), + new Not(new Equals("highway", "cycleway")) + ), + new MixinPropertiesBuilder() + .directional(TraverseDirection.BACKWARD, builder -> + builder.withBicycleSafety(1.4).addPermission(BICYCLE) + ) ); /* sidewalk and crosswalk */ - props.setProperties( - "footway=sidewalk;highway=footway;bicycle=yes", - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(2.5) - ); - props.setProperties( - "footway=sidewalk;highway=footway;bicycle=designated", - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(1.1) - ); - props.setProperties( - "highway=footway;footway=crossing", - withModes(PEDESTRIAN).bicycleSafety(2.5) - ); - props.setProperties( - "highway=footway;footway=crossing;bicycle=designated", - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(1.1) - ); - - /* - * bicycles on tracks (tracks are defined in OSM as: Roads for agricultural use, gravel roads in the forest etc.; usually unpaved/unsealed but - * may occasionally apply to paved tracks as well.) - */ - props.setProperties( - "highway=track;bicycle=yes", - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(1.18) - ); - props.setProperties( - "highway=track;bicycle=designated", - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(0.99) - ); - props.setProperties( - "highway=track;bicycle=yes;surface=*", - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(1.18) - ); - props.setProperties( - "highway=track;bicycle=designated;surface=*", - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(0.99) - ); - /* this is to avoid double counting since tracks are almost of surface type that is penalized */ - props.setProperties( - "highway=track;surface=*", - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(1.3) - ); + props.setMixinProperties("footway=sidewalk", ofBicycleSafety(2.5)); + props.setMixinProperties("footway=crossing", ofBicycleSafety(1.5)); /* bicycle=designated, but no bike infrastructure is present */ - props.setProperties("highway=*;bicycle=designated", withModes(BICYCLE).bicycleSafety(0.97)); - props.setProperties( - "highway=footway;bicycle=designated", - withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(0.8) - ); - props.setProperties( - "highway=cycleway;bicycle=designated", - withModes(BICYCLE).bicycleSafety(0.6) - ); - props.setProperties( - "highway=bridleway;bicycle=designated", - withModes(BICYCLE).bicycleSafety(0.8) - ); - props.setProperties("highway=service;bicycle=designated", withModes(ALL).bicycleSafety(0.84)); - props.setProperties( - "highway=residential;bicycle=designated", - withModes(ALL).bicycleSafety(0.95) - ); - props.setProperties( - "highway=unclassified;bicycle=designated", - withModes(ALL).bicycleSafety(0.95) - ); - props.setProperties( - "highway=residential_link;bicycle=designated", - withModes(ALL).bicycleSafety(0.95) - ); - props.setProperties("highway=tertiary;bicycle=designated", withModes(ALL).bicycleSafety(0.97)); - props.setProperties( - "highway=tertiary_link;bicycle=designated", - withModes(ALL).bicycleSafety(0.97) - ); - props.setProperties("highway=secondary;bicycle=designated", withModes(ALL).bicycleSafety(1.46)); - props.setProperties( - "highway=secondary_link;bicycle=designated", - withModes(ALL).bicycleSafety(1.46) - ); - props.setProperties("highway=primary;bicycle=designated", withModes(ALL).bicycleSafety(2)); - props.setProperties("highway=primary_link;bicycle=designated", withModes(ALL).bicycleSafety(2)); - props.setProperties( - "highway=trunk;bicycle=designated", - withModes(ALL).walkSafety(7.47).bicycleSafety(7.25) - ); - props.setProperties( - "highway=trunk_link;bicycle=designated", - withModes(ALL).walkSafety(7.47).bicycleSafety(2) - ); - props.setProperties( - "highway=motorway;bicycle=designated", - withModes(BICYCLE_AND_CAR).bicycleSafety(7.76) - ); - props.setProperties( - "highway=motorway_link;bicycle=designated", - withModes(BICYCLE_AND_CAR).bicycleSafety(2) + props.setMixinProperties( + new ExactMatchSpecifier( + new Equals("bicycle", "designated"), + new Condition.OneOfOrAbsent("cycleway"), + new Not(new Equals("highway", "cycleway")), + new Not(new Equals("lcn", "yes")), + new Not(new Equals("rcn", "yes")), + new Not(new Equals("ncn", "yes")), + new Not(new Equals("bicycle_road", "yes")), + new Not(new Equals("cyclestreet", "yes")) + ), + ofBicycleSafety(0.8) ); // We assume highway/cycleway of a cycle network to be safer (for bicycle network relations, their network is copied to way in postLoad) diff --git a/application/src/main/java/org/opentripplanner/osm/tagmapping/UKMapper.java b/application/src/main/java/org/opentripplanner/osm/tagmapping/UKMapper.java index ae7d76bf28c..546dee9ac7e 100644 --- a/application/src/main/java/org/opentripplanner/osm/tagmapping/UKMapper.java +++ b/application/src/main/java/org/opentripplanner/osm/tagmapping/UKMapper.java @@ -32,62 +32,6 @@ public void populateProperties(WayPropertySet props) { // reduce trunk safety compared to default mapper props.setProperties("highway=trunk", withModes(ALL).walkSafety(2.5).bicycleSafety(2.5)); props.setProperties("highway=trunk_link", withModes(ALL).walkSafety(2.5).bicycleSafety(2.06)); - props.setProperties( - "highway=trunk;cycleway=lane", - withModes(ALL).walkSafety(2.5).bicycleSafety(1.5) - ); - props.setProperties( - "highway=trunk_link;cycleway=lane", - withModes(ALL).walkSafety(2.5).bicycleSafety(1.15) - ); - props.setProperties( - "highway=trunk;cycleway=share_busway", - withModes(ALL).walkSafety(2.5).bicycleSafety(1.75) - ); - props.setProperties( - "highway=trunk_link;cycleway=share_busway", - withModes(ALL).walkSafety(2.5).bicycleSafety(1.25) - ); - props.setProperties( - "highway=trunk;cycleway=opposite_lane", - withModes(ALL).walkSafety(2.5).bicycleSafety(2.5), - withModes(ALL).walkSafety(2.5).bicycleSafety(2.5), - withModes(ALL).walkSafety(2.5).bicycleSafety(1.5) - ); - props.setProperties( - "highway=trunk_link;cycleway=opposite_lane", - withModes(ALL).walkSafety(2.5).bicycleSafety(2.06), - withModes(ALL).walkSafety(2.5).bicycleSafety(2.06), - withModes(ALL).walkSafety(2.5).bicycleSafety(1.15) - ); - props.setProperties( - "highway=trunk;cycleway=track", - withModes(ALL).walkSafety(2.5).bicycleSafety(0.95) - ); - props.setProperties( - "highway=trunk_link;cycleway=track", - withModes(ALL).walkSafety(2.5).bicycleSafety(0.85) - ); - props.setProperties( - "highway=trunk;cycleway=opposite_track", - withModes(ALL).walkSafety(2.5).bicycleSafety(2.5), - withModes(ALL).walkSafety(2.5).bicycleSafety(2.5), - withModes(ALL).walkSafety(2.5).bicycleSafety(0.95) - ); - props.setProperties( - "highway=trunk_link;cycleway=opposite_track", - withModes(ALL).walkSafety(2.5).bicycleSafety(2.5), - withModes(ALL).walkSafety(2.5).bicycleSafety(2.5), - withModes(ALL).walkSafety(2.5).bicycleSafety(0.85) - ); - props.setProperties( - "highway=trunk;bicycle=designated", - withModes(ALL).walkSafety(2.5).bicycleSafety(1.75) - ); - props.setProperties( - "highway=trunk_link;bicycle=designated", - withModes(ALL).walkSafety(2.5).bicycleSafety(1.75) - ); props.setMixinProperties( "expressway=yes", diff --git a/application/src/main/java/org/opentripplanner/osm/wayproperty/MixinDirectionalProperties.java b/application/src/main/java/org/opentripplanner/osm/wayproperty/MixinDirectionalProperties.java index 8b5de5164eb..e6e72230d56 100644 --- a/application/src/main/java/org/opentripplanner/osm/wayproperty/MixinDirectionalProperties.java +++ b/application/src/main/java/org/opentripplanner/osm/wayproperty/MixinDirectionalProperties.java @@ -1,3 +1,10 @@ package org.opentripplanner.osm.wayproperty; -public record MixinDirectionalProperties(double walkSafety, double bicycleSafety) {} +import org.opentripplanner.street.model.StreetTraversalPermission; + +public record MixinDirectionalProperties( + StreetTraversalPermission addedPermission, + StreetTraversalPermission removedPermission, + double walkSafety, + double bicycleSafety +) {} diff --git a/application/src/main/java/org/opentripplanner/osm/wayproperty/MixinDirectionalPropertiesBuilder.java b/application/src/main/java/org/opentripplanner/osm/wayproperty/MixinDirectionalPropertiesBuilder.java index 29d77020a0d..5e27c7113f8 100644 --- a/application/src/main/java/org/opentripplanner/osm/wayproperty/MixinDirectionalPropertiesBuilder.java +++ b/application/src/main/java/org/opentripplanner/osm/wayproperty/MixinDirectionalPropertiesBuilder.java @@ -1,5 +1,7 @@ package org.opentripplanner.osm.wayproperty; +import org.opentripplanner.street.model.StreetTraversalPermission; + /** * Builder for {@link MixinDirectionalProperties}. If you don't set the safety features they will have a default * value of 1, which means no change. @@ -8,6 +10,8 @@ public class MixinDirectionalPropertiesBuilder { private double walkSafety = 1; private double bicycleSafety = 1; + private StreetTraversalPermission addedPermission = StreetTraversalPermission.NONE; + private StreetTraversalPermission removedPermission = StreetTraversalPermission.NONE; public static MixinDirectionalPropertiesBuilder ofWalkSafety(double safety) { return new MixinDirectionalPropertiesBuilder().withWalkSafety(safety); @@ -39,7 +43,24 @@ public MixinDirectionalPropertiesBuilder withWalkSafety(double walkSafety) { return this; } + public MixinDirectionalPropertiesBuilder addPermission(StreetTraversalPermission permission) { + removedPermission = removedPermission.remove(permission); + addedPermission = addedPermission.add(permission); + return this; + } + + public MixinDirectionalPropertiesBuilder removePermission(StreetTraversalPermission permission) { + removedPermission = removedPermission.add(permission); + addedPermission = addedPermission.remove(permission); + return this; + } + public MixinDirectionalProperties build() { - return new MixinDirectionalProperties(walkSafety, bicycleSafety); + return new MixinDirectionalProperties( + addedPermission, + removedPermission, + walkSafety, + bicycleSafety + ); } } diff --git a/application/src/main/java/org/opentripplanner/osm/wayproperty/MixinProperties.java b/application/src/main/java/org/opentripplanner/osm/wayproperty/MixinProperties.java index 1acdc5ab764..951f1437023 100644 --- a/application/src/main/java/org/opentripplanner/osm/wayproperty/MixinProperties.java +++ b/application/src/main/java/org/opentripplanner/osm/wayproperty/MixinProperties.java @@ -4,8 +4,7 @@ import org.opentripplanner.osm.wayproperty.specifier.OsmSpecifier; /** - * Mixins are like {@link WayProperties} but they only contain walk and bicycle safety features (not - * modes). + * Mixins are like {@link WayProperties} but they are applied on top of the way properties. *

* They don't override other properties but their safety values are multiplied with the existing * values. As opposed to way properties, more than one mixins can apply to a single way. diff --git a/application/src/main/java/org/opentripplanner/osm/wayproperty/MixinPropertiesBuilder.java b/application/src/main/java/org/opentripplanner/osm/wayproperty/MixinPropertiesBuilder.java index e5a53e3a7fe..c4ec1877b89 100644 --- a/application/src/main/java/org/opentripplanner/osm/wayproperty/MixinPropertiesBuilder.java +++ b/application/src/main/java/org/opentripplanner/osm/wayproperty/MixinPropertiesBuilder.java @@ -1,6 +1,9 @@ package org.opentripplanner.osm.wayproperty; +import java.util.function.Consumer; +import org.opentripplanner.osm.model.TraverseDirection; import org.opentripplanner.osm.wayproperty.specifier.OsmSpecifier; +import org.opentripplanner.street.model.StreetTraversalPermission; /** * Builder for {@link MixinProperties}. If you don't set the safety features they will have a default @@ -50,6 +53,40 @@ public MixinPropertiesBuilder walkSafety(double walkSafety) { return this; } + /** + * Add the same permission to all directions + */ + public MixinPropertiesBuilder addPermission(StreetTraversalPermission permission) { + this.defaultBuilder.addPermission(permission); + this.forwardBuilder.addPermission(permission); + this.backwardBuilder.addPermission(permission); + return this; + } + + /** + * Remove the same permission to all directions + */ + public MixinPropertiesBuilder removePermission(StreetTraversalPermission permission) { + this.defaultBuilder.removePermission(permission); + this.forwardBuilder.removePermission(permission); + this.backwardBuilder.removePermission(permission); + return this; + } + + public MixinPropertiesBuilder directional( + TraverseDirection direction, + Consumer action + ) { + var builder = + switch (direction) { + case DIRECTIONLESS -> defaultBuilder; + case FORWARD -> forwardBuilder; + case BACKWARD -> backwardBuilder; + }; + action.accept(builder); + return this; + } + public MixinProperties build(OsmSpecifier spec) { return new MixinProperties( spec, diff --git a/application/src/main/java/org/opentripplanner/osm/wayproperty/WayPropertySet.java b/application/src/main/java/org/opentripplanner/osm/wayproperty/WayPropertySet.java index c07968ac1b5..aa0f7d8e9b9 100644 --- a/application/src/main/java/org/opentripplanner/osm/wayproperty/WayPropertySet.java +++ b/application/src/main/java/org/opentripplanner/osm/wayproperty/WayPropertySet.java @@ -547,11 +547,20 @@ private WayProperties applyMixins( ) { double bicycle = result.bicycleSafety(); double walk = result.walkSafety(); + StreetTraversalPermission permission = result.getPermission(); for (var mixin : mixins) { var properties = mixin.getDirectionalProperties(direction); bicycle *= properties.bicycleSafety(); walk *= properties.walkSafety(); + permission = permission + .add(properties.addedPermission()) + .remove(properties.removedPermission()); } - return result.mutate().bicycleSafety(bicycle).walkSafety(walk).build(); + return result + .mutate() + .bicycleSafety(bicycle) + .walkSafety(walk) + .withPermission(permission) + .build(); } } diff --git a/application/src/main/java/org/opentripplanner/osm/wayproperty/specifier/Condition.java b/application/src/main/java/org/opentripplanner/osm/wayproperty/specifier/Condition.java index cb13c152255..9b4e4c55b9b 100644 --- a/application/src/main/java/org/opentripplanner/osm/wayproperty/specifier/Condition.java +++ b/application/src/main/java/org/opentripplanner/osm/wayproperty/specifier/Condition.java @@ -107,6 +107,26 @@ enum MatchResult { NONE, } + /** + * Negates the condition + */ + record Not(Condition condition) implements Condition { + @Override + public String key() { + return condition.key(); + } + + @Override + public boolean isExtendedKeyMatch(OsmEntity way, String exKey) { + return !condition.isExtendedKeyMatch(way, exKey); + } + + @Override + public String toString() { + return "not(%s)".formatted(condition.toString()); + } + } + /** * Selects tags where a given key/value matches. */ diff --git a/application/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java b/application/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java index 3eccb479428..570632186bc 100644 --- a/application/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java +++ b/application/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java @@ -11,6 +11,7 @@ import static org.opentripplanner.osm.tagmapping.OsmTagMapperSource.HAMBURG; import static org.opentripplanner.osm.tagmapping.OsmTagMapperSource.HOUSTON; import static org.opentripplanner.osm.tagmapping.OsmTagMapperSource.PORTLAND; +import static org.opentripplanner.street.model.StreetTraversalPermission.NONE; import java.io.File; import java.util.Arrays; @@ -22,6 +23,7 @@ import org.opentripplanner.osm.tagmapping.OsmTagMapper; import org.opentripplanner.osm.tagmapping.OsmTagMapperSource; import org.opentripplanner.osm.wayproperty.WayPropertySet; +import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.utils.text.Table; import org.opentripplanner.utils.text.TableBuilder; @@ -96,11 +98,27 @@ private static Table propTable(WayPropertySet wps) { private static Table mixinTable(WayPropertySet wps) { var propTable = new TableBuilder(); - propTable.withHeaders("matcher", "bicycle safety", "walk safety"); + propTable.withHeaders( + "matcher", + "add permission", + "remove permission", + "bicycle safety", + "walk safety" + ); for (var prop : wps.getMixins()) { propTable.addRow( "`%s`".formatted(prop.specifier().toDocString()), + tableValues( + prop.directionlessProperties().addedPermission(), + prop.forwardProperties().addedPermission(), + prop.backwardProperties().addedPermission() + ), + tableValues( + prop.directionlessProperties().removedPermission(), + prop.forwardProperties().removedPermission(), + prop.backwardProperties().removedPermission() + ), tableValues( prop.directionlessProperties().bicycleSafety(), prop.forwardProperties().bicycleSafety(), @@ -116,6 +134,36 @@ private static Table mixinTable(WayPropertySet wps) { return propTable.build(); } + private static String tableValues( + StreetTraversalPermission value, + StreetTraversalPermission forward, + StreetTraversalPermission backward + ) { + if (value == NONE && forward == NONE && backward == NONE) { + return ""; + } else if (value == forward && value == backward) { + return value.toString(); + } else { + StringBuilder result = new StringBuilder(); + if (value != NONE) { + result.append("no direction: ").append(value); + } + if (forward != NONE) { + if (!result.isEmpty()) { + result.append("
"); + } + result.append("forward: ").append(forward); + } + if (backward != NONE) { + if (!result.isEmpty()) { + result.append("
"); + } + result.append("backward: ").append(backward); + } + return result.toString(); + } + } + private static String tableValues(double value, double forward, double backward) { if (value == 1.0 && forward == 1.0 && backward == 1.0) { return ""; diff --git a/application/src/test/java/org/opentripplanner/graph_builder/module/linking/LinkingTest.java b/application/src/test/java/org/opentripplanner/graph_builder/module/linking/LinkingTest.java index 390a72bf870..617de7edd7d 100644 --- a/application/src/test/java/org/opentripplanner/graph_builder/module/linking/LinkingTest.java +++ b/application/src/test/java/org/opentripplanner/graph_builder/module/linking/LinkingTest.java @@ -148,7 +148,7 @@ public void testStopsLinkedIdentically() { assertEquals(v1.getLon(), v2.getLon(), 1e-10); } } - assertEquals(153, unlinkedStopsCounter); + assertEquals(155, unlinkedStopsCounter); } /** Build a graph in Columbus, OH with no transit */ diff --git a/application/src/test/java/org/opentripplanner/osm/tagmapping/GermanyMapperTest.java b/application/src/test/java/org/opentripplanner/osm/tagmapping/GermanyMapperTest.java index 6d8854e6ea6..270b14b7afa 100644 --- a/application/src/test/java/org/opentripplanner/osm/tagmapping/GermanyMapperTest.java +++ b/application/src/test/java/org/opentripplanner/osm/tagmapping/GermanyMapperTest.java @@ -107,8 +107,8 @@ void testPermissions() { way.addTag("highway", "track"); way.addTag("tracktype", "grade1"); assertEquals( - wps.getDataForEntity(way).getPermission(), - StreetTraversalPermission.PEDESTRIAN_AND_BICYCLE + StreetTraversalPermission.PEDESTRIAN_AND_BICYCLE, + wps.getDataForEntity(way).getPermission() ); // https://www.openstreetmap.org/way/5155805 diff --git a/application/src/test/java/org/opentripplanner/osm/tagmapping/OsmTagMapperTest.java b/application/src/test/java/org/opentripplanner/osm/tagmapping/OsmTagMapperTest.java index ee883237fe8..9ff3777cfa6 100644 --- a/application/src/test/java/org/opentripplanner/osm/tagmapping/OsmTagMapperTest.java +++ b/application/src/test/java/org/opentripplanner/osm/tagmapping/OsmTagMapperTest.java @@ -99,7 +99,8 @@ void testAccessPrivate() { @Test void testFootway() { - assertEquals(PEDESTRIAN, wps.getDataForEntity(WayTestData.footway()).getPermission()); + OsmWay footway = WayTestData.footway(); + assertEquals(PEDESTRIAN, wps.getDataForEntity(footway).getPermission()); } @Test diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/__snapshots__/ElevationSnapshotTest.snap b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/__snapshots__/ElevationSnapshotTest.snap index 772fa85f84a..29daaadcac7 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/__snapshots__/ElevationSnapshotTest.snap +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/__snapshots__/ElevationSnapshotTest.snap @@ -10,7 +10,7 @@ org.opentripplanner.routing.algorithm.mapping.ElevationSnapshotTest.directBike=[ "details" : { }, "fare" : { } }, - "generalizedCost" : 1705, + "generalizedCost" : 1680, "legs" : [ { "agencyTimeZoneOffset" : -25200000, @@ -25,7 +25,7 @@ org.opentripplanner.routing.algorithm.mapping.ElevationSnapshotTest.directBike=[ "name" : "SW Johnson St. & NW 24th Ave. (P1)", "vertexType" : "NORMAL" }, - "generalizedCost" : 1704, + "generalizedCost" : 1680, "interlineWithPreviousLeg" : false, "legElevation" : "0,63.7,1,63.7,11,63.4,21,63.2,31,63.3,41,63.5,51,63.3,61,62.9,71,62.5,81,62.2,91,62.0,101,61.7,111,61.5,121,61.2,131,60.9,141,60.6,151,60.3,160,60.2,240,60.2,1032,60.2,1190,55.5,1430,55.5,1506,40.4,1849,40.4,1919,37.3,1931,37.3,2078,55.5,2503,55.5,2503,NaN,2635,NaN", "legGeometry" : { }, diff --git a/doc/user/osm/Finland.md b/doc/user/osm/Finland.md index db17d739dd9..53dccd333d2 100644 --- a/doc/user/osm/Finland.md +++ b/doc/user/osm/Finland.md @@ -22,208 +22,91 @@ Lower safety values make an OSM way more desirable and higher values less desira -| specifier | permission | bike safety | walk safety | -|---------------------------------------------------------------------------------|--------------------------|-------------------------------------------------------|-------------| -| `highway=living_street` | `ALL` | 0.9 | | -| `highway=unclassified` | `ALL` | | | -| `highway=road` | `ALL` | | | -| `highway=byway` | `ALL` | 1.3 | | -| `highway=track` | `ALL` | 1.3 | | -| `highway=service` | `ALL` | 1.1 | | -| `highway=residential` | `ALL` | 0.98 | | -| `highway=residential_link` | `ALL` | 0.98 | | -| `highway=tertiary` | `ALL` | | | -| `highway=tertiary_link` | `ALL` | | | -| `highway=secondary` | `ALL` | 1.5 | | -| `highway=secondary_link` | `ALL` | 1.5 | | -| `highway=primary` | `ALL` | 2.06 | | -| `highway=primary_link` | `ALL` | 2.06 | | -| `highway=trunk_link` | `ALL` | 2.06 | | -| `highway=trunk` | `ALL` | 7.47 | | -| `highway=trunk; tunnel=yes` | `CAR` | 7.47 | | -| `present(highway); informal=yes` | `NONE` | | | -| `highway=service; access=private` | `NONE` | | | -| `highway=trail` | `NONE` | | | -| `present(highway); seasonal=winter` | `NONE` | | | -| `present(highway); ice_road=yes` | `NONE` | | | -| `present(highway); winter_road=yes` | `NONE` | | | -| `highway=footway` | `PEDESTRIAN` | | | -| `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | -| `highway=pedestrian` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | -| `highway=cycleway` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | 2.0 | -| `highway=cycleway; segregated=yes` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | 1.1 | -| `highway=footway; bridge=yes` | `PEDESTRIAN` | | | -| `highway=footway; tunnel=yes` | `PEDESTRIAN` | | | -| `highway=cycleway; bridge=yes` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | -| `highway=cycleway; tunnel=yes` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | -| `highway=footway; footway=crossing; crossing=traffic_signals` | `PEDESTRIAN` | | 1.1 | -| `highway=footway; footway=crossing` | `PEDESTRIAN` | | 1.2 | -| `highway=cycleway; cycleway=crossing; segregated=yes; crossing=traffic_signals` | `PEDESTRIAN_AND_BICYCLE` | 0.8 | 1.1 | -| `highway=cycleway; footway=crossing; segregated=yes; crossing=traffic_signals` | `PEDESTRIAN` | 0.8 | 1.1 | -| `highway=cycleway; cycleway=crossing; segregated=yes` | `PEDESTRIAN_AND_BICYCLE` | 1.2 | 1.2 | -| `highway=cycleway; footway=crossing; segregated=yes` | `PEDESTRIAN` | 1.2 | 1.2 | -| `highway=cycleway; cycleway=crossing; crossing=traffic_signals` | `PEDESTRIAN_AND_BICYCLE` | 0.8 | 1.15 | -| `highway=cycleway; footway=crossing; crossing=traffic_signals` | `PEDESTRIAN_AND_BICYCLE` | 0.8 | 1.15 | -| `highway=cycleway; cycleway=crossing` | `PEDESTRIAN_AND_BICYCLE` | 1.2 | 1.25 | -| `highway=cycleway; footway=crossing` | `PEDESTRIAN_AND_BICYCLE` | 1.2 | 1.25 | -| `highway=cycleway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | -| `highway=service; tunnel=yes; access=destination` | `NONE` | | | -| `highway=service; access=destination` | `ALL` | 1.1 | | -| `mtb:scale=3` | `NONE` | | | -| `mtb:scale=4` | `NONE` | | | -| `mtb:scale=5` | `NONE` | | | -| `mtb:scale=6` | `NONE` | | | -| `highway=bridleway` | `NONE` | 1.3 | | -| `highway=corridor` | `PEDESTRIAN` | | | -| `highway=steps` | `PEDESTRIAN` | | | -| `highway=crossing` | `PEDESTRIAN` | | | -| `highway=platform` | `PEDESTRIAN` | | | -| `public_transport=platform` | `PEDESTRIAN` | | | -| `railway=platform` | `PEDESTRIAN` | | | -| `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | -| `highway=pedestrian` | `PEDESTRIAN` | 0.9 | | -| `highway=footway` | `PEDESTRIAN` | 1.1 | | -| `mtb:scale=1` | `PEDESTRIAN` | | | -| `mtb:scale=2` | `PEDESTRIAN` | | | -| `indoor=area` | `PEDESTRIAN` | | | -| `indoor=corridor` | `PEDESTRIAN` | | | -| `highway=cycleway` | `BICYCLE` | 0.6 | | -| `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | -| `highway=path` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | -| `highway=living_street` | `ALL` | 0.9 | | -| `highway=unclassified` | `ALL` | | | -| `highway=road` | `ALL` | | | -| `highway=byway` | `ALL` | 1.3 | | -| `highway=track` | `ALL` | 1.3 | | -| `highway=service` | `ALL` | 1.1 | | -| `highway=residential` | `ALL` | 0.98 | | -| `highway=residential_link` | `ALL` | 0.98 | | -| `highway=tertiary` | `ALL` | | | -| `highway=tertiary_link` | `ALL` | | | -| `highway=secondary` | `ALL` | 1.5 | | -| `highway=secondary_link` | `ALL` | 1.5 | | -| `highway=primary` | `ALL` | 2.06 | | -| `highway=primary_link` | `ALL` | 2.06 | | -| `highway=trunk` | `ALL` | 7.47 | 7.47 | -| `highway=trunk_link` | `ALL` | 2.06 | 7.47 | -| `highway=motorway_link` | `CAR` | 2.06 | | -| `highway=motorway` | `CAR` | 8.0 | | -| `motorroad=yes` | `CAR` | 7.47 | 7.47 | -| `present(highway); cycleway=lane` | `PEDESTRIAN_AND_BICYCLE` | 0.87 | | -| `highway=service; cycleway=lane` | `ALL` | 0.77 | | -| `highway=residential; cycleway=lane` | `ALL` | 0.77 | | -| `highway=residential_link; cycleway=lane` | `ALL` | 0.77 | | -| `highway=tertiary; cycleway=lane` | `ALL` | 0.87 | | -| `highway=tertiary_link; cycleway=lane` | `ALL` | 0.87 | | -| `highway=secondary; cycleway=lane` | `ALL` | 0.96 | | -| `highway=secondary_link; cycleway=lane` | `ALL` | 0.96 | | -| `highway=primary; cycleway=lane` | `ALL` | 1.15 | | -| `highway=primary_link; cycleway=lane` | `ALL` | 1.15 | | -| `highway=trunk; cycleway=lane` | `ALL` | 1.5 | 7.47 | -| `highway=trunk_link; cycleway=lane` | `ALL` | 1.15 | 7.47 | -| `highway=motorway; cycleway=lane` | `BICYCLE_AND_CAR` | 2.0 | | -| `highway=motorway_link; cycleway=lane` | `BICYCLE_AND_CAR` | 1.15 | | -| `present(highway); cycleway=share_busway` | `PEDESTRIAN_AND_BICYCLE` | 0.92 | | -| `highway=service; cycleway=share_busway` | `ALL` | 0.85 | | -| `highway=residential; cycleway=share_busway` | `ALL` | 0.85 | | -| `highway=residential_link; cycleway=share_busway` | `ALL` | 0.85 | | -| `highway=tertiary; cycleway=share_busway` | `ALL` | 0.92 | | -| `highway=tertiary_link; cycleway=share_busway` | `ALL` | 0.92 | | -| `highway=secondary; cycleway=share_busway` | `ALL` | 0.99 | | -| `highway=secondary_link; cycleway=share_busway` | `ALL` | 0.99 | | -| `highway=primary; cycleway=share_busway` | `ALL` | 1.25 | | -| `highway=primary_link; cycleway=share_busway` | `ALL` | 1.25 | | -| `highway=trunk; cycleway=share_busway` | `ALL` | 1.75 | 7.47 | -| `highway=trunk_link; cycleway=share_busway` | `ALL` | 1.25 | 7.47 | -| `highway=motorway; cycleway=share_busway` | `BICYCLE_AND_CAR` | 2.5 | | -| `highway=motorway_link; cycleway=share_busway` | `BICYCLE_AND_CAR` | 1.25 | | -| `present(highway); cycleway=opposite_lane` | `PEDESTRIAN_AND_BICYCLE` | no direction: 1.0
forward: 1.0
back: 0.87 | | -| `highway=service; cycleway=opposite_lane` | `ALL` | no direction: 1.1
forward: 1.1
back: 0.77 | | -| `highway=residential; cycleway=opposite_lane` | `ALL` | no direction: 0.98
forward: 0.98
back: 0.77 | | -| `highway=residential_link; cycleway=opposite_lane` | `ALL` | no direction: 0.98
forward: 0.98
back: 0.77 | | -| `highway=tertiary; cycleway=opposite_lane` | `ALL` | no direction: 1.0
forward: 1.0
back: 0.87 | | -| `highway=tertiary_link; cycleway=opposite_lane` | `ALL` | no direction: 1.0
forward: 1.0
back: 0.87 | | -| `highway=secondary; cycleway=opposite_lane` | `ALL` | no direction: 1.5
forward: 1.5
back: 0.96 | | -| `highway=secondary_link; cycleway=opposite_lane` | `ALL` | no direction: 1.5
forward: 1.5
back: 0.96 | | -| `highway=primary; cycleway=opposite_lane` | `ALL` | no direction: 2.06
forward: 2.06
back: 1.15 | | -| `highway=primary_link; cycleway=opposite_lane` | `ALL` | no direction: 2.06
forward: 2.06
back: 1.15 | | -| `highway=trunk; cycleway=opposite_lane` | `ALL` | no direction: 7.47
forward: 7.47
back: 1.15 | 7.47 | -| `highway=trunk_link; cycleway=opposite_lane` | `ALL` | no direction: 2.06
forward: 2.06
back: 1.15 | 7.47 | -| `present(highway); cycleway=track` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | -| `highway=service; cycleway=track` | `ALL` | 0.65 | | -| `highway=residential; cycleway=track` | `ALL` | 0.65 | | -| `highway=residential_link; cycleway=track` | `ALL` | 0.65 | | -| `highway=tertiary; cycleway=track` | `ALL` | 0.75 | | -| `highway=tertiary_link; cycleway=track` | `ALL` | 0.75 | | -| `highway=secondary; cycleway=track` | `ALL` | 0.8 | | -| `highway=secondary_link; cycleway=track` | `ALL` | 0.8 | | -| `highway=primary; cycleway=track` | `ALL` | 0.85 | | -| `highway=primary_link; cycleway=track` | `ALL` | 0.85 | | -| `highway=trunk; cycleway=track` | `ALL` | 0.95 | 7.47 | -| `highway=trunk_link; cycleway=track` | `ALL` | 0.85 | 7.47 | -| `present(highway); cycleway=opposite_track` | `PEDESTRIAN_AND_BICYCLE` | no direction: 1.0
forward: 1.0
back: 0.75 | | -| `highway=service; cycleway=opposite_track` | `ALL` | no direction: 1.1
forward: 1.1
back: 0.65 | | -| `highway=residential; cycleway=opposite_track` | `ALL` | no direction: 0.98
forward: 0.98
back: 0.65 | | -| `highway=residential_link; cycleway=opposite_track` | `ALL` | no direction: 0.98
forward: 0.98
back: 0.65 | | -| `highway=tertiary; cycleway=opposite_track` | `ALL` | no direction: 1.0
forward: 1.0
back: 0.75 | | -| `highway=tertiary_link; cycleway=opposite_track` | `ALL` | no direction: 1.0
forward: 1.0
back: 0.75 | | -| `highway=secondary; cycleway=opposite_track` | `ALL` | no direction: 1.5
forward: 1.5
back: 0.8 | | -| `highway=secondary_link; cycleway=opposite_track` | `ALL` | no direction: 1.5
forward: 1.5
back: 0.8 | | -| `highway=primary; cycleway=opposite_track` | `ALL` | no direction: 2.06
forward: 2.06
back: 0.85 | | -| `highway=primary_link; cycleway=opposite_track` | `ALL` | no direction: 2.06
forward: 2.06
back: 0.85 | | -| `highway=trunk; cycleway=opposite_track` | `ALL` | no direction: 7.47
forward: 7.47
back: 0.95 | 7.47 | -| `highway=trunk_link; cycleway=opposite_track` | `ALL` | no direction: 2.06
forward: 2.06
back: 0.85 | 7.47 | -| `present(highway); cycleway=shared_lane` | `PEDESTRIAN_AND_BICYCLE` | 0.77 | | -| `highway=service; cycleway=shared_lane` | `ALL` | 0.73 | | -| `highway=residential; cycleway=shared_lane` | `ALL` | 0.77 | | -| `highway=residential_link; cycleway=shared_lane` | `ALL` | 0.77 | | -| `highway=tertiary; cycleway=shared_lane` | `ALL` | 0.83 | | -| `highway=tertiary_link; cycleway=shared_lane` | `ALL` | 0.83 | | -| `highway=secondary; cycleway=shared_lane` | `ALL` | 1.25 | | -| `highway=secondary_link; cycleway=shared_lane` | `ALL` | 1.25 | | -| `highway=primary; cycleway=shared_lane` | `ALL` | 1.75 | | -| `highway=primary_link; cycleway=shared_lane` | `ALL` | 1.75 | | -| `present(highway); cycleway=opposite` | `PEDESTRIAN_AND_BICYCLE` | no direction: 1.0
forward: 1.0
back: 1.4 | | -| `highway=service; cycleway=opposite` | `ALL` | 1.1 | | -| `highway=residential; cycleway=opposite` | `ALL` | 0.98 | | -| `highway=residential_link; cycleway=opposite` | `ALL` | 0.98 | | -| `highway=tertiary; cycleway=opposite` | `ALL` | | | -| `highway=tertiary_link; cycleway=opposite` | `ALL` | | | -| `highway=secondary; cycleway=opposite` | `ALL` | no direction: 1.5
forward: 1.5
back: 1.71 | | -| `highway=secondary_link; cycleway=opposite` | `ALL` | no direction: 1.5
forward: 1.5
back: 1.71 | | -| `highway=primary; cycleway=opposite` | `ALL` | no direction: 2.06
forward: 2.06
back: 2.99 | | -| `highway=primary_link; cycleway=opposite` | `ALL` | no direction: 2.06
forward: 2.06
back: 2.99 | | -| `highway=path; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | -| `highway=footway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | -| `highway=footway; bicycle=yes; area=yes` | `PEDESTRIAN_AND_BICYCLE` | 0.9 | | -| `highway=pedestrian; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | -| `footway=sidewalk; highway=footway; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 2.5 | | -| `footway=sidewalk; highway=footway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | -| `highway=footway; footway=crossing` | `PEDESTRIAN` | 2.5 | | -| `highway=footway; footway=crossing; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | -| `highway=track; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 1.18 | | -| `highway=track; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.99 | | -| `highway=track; bicycle=yes; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 1.18 | | -| `highway=track; bicycle=designated; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 0.99 | | -| `highway=track; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 1.3 | | -| `present(highway); bicycle=designated` | `BICYCLE` | 0.97 | | -| `highway=footway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.8 | | -| `highway=cycleway; bicycle=designated` | `BICYCLE` | 0.6 | | -| `highway=bridleway; bicycle=designated` | `BICYCLE` | 0.8 | | -| `highway=service; bicycle=designated` | `ALL` | 0.84 | | -| `highway=residential; bicycle=designated` | `ALL` | 0.95 | | -| `highway=unclassified; bicycle=designated` | `ALL` | 0.95 | | -| `highway=residential_link; bicycle=designated` | `ALL` | 0.95 | | -| `highway=tertiary; bicycle=designated` | `ALL` | 0.97 | | -| `highway=tertiary_link; bicycle=designated` | `ALL` | 0.97 | | -| `highway=secondary; bicycle=designated` | `ALL` | 1.46 | | -| `highway=secondary_link; bicycle=designated` | `ALL` | 1.46 | | -| `highway=primary; bicycle=designated` | `ALL` | 2.0 | | -| `highway=primary_link; bicycle=designated` | `ALL` | 2.0 | | -| `highway=trunk; bicycle=designated` | `ALL` | 7.25 | 7.47 | -| `highway=trunk_link; bicycle=designated` | `ALL` | 2.0 | 7.47 | -| `highway=motorway; bicycle=designated` | `BICYCLE_AND_CAR` | 7.76 | | -| `highway=motorway_link; bicycle=designated` | `BICYCLE_AND_CAR` | 2.0 | | +| specifier | permission | bike safety | walk safety | +|---------------------------------------------------------------------------------|--------------------------|-------------|-------------| +| `highway=living_street` | `ALL` | 0.9 | | +| `highway=unclassified` | `ALL` | | | +| `highway=road` | `ALL` | | | +| `highway=byway` | `ALL` | 1.3 | | +| `highway=track` | `ALL` | 1.3 | | +| `highway=service` | `ALL` | 1.1 | | +| `highway=residential` | `ALL` | 0.98 | | +| `highway=residential_link` | `ALL` | 0.98 | | +| `highway=tertiary` | `ALL` | | | +| `highway=tertiary_link` | `ALL` | | | +| `highway=secondary` | `ALL` | 1.5 | | +| `highway=secondary_link` | `ALL` | 1.5 | | +| `highway=primary` | `ALL` | 2.06 | | +| `highway=primary_link` | `ALL` | 2.06 | | +| `highway=trunk_link` | `ALL` | 2.06 | | +| `highway=trunk` | `ALL` | 7.47 | | +| `highway=trunk; tunnel=yes` | `CAR` | 7.47 | | +| `present(highway); informal=yes` | `NONE` | | | +| `highway=service; access=private` | `NONE` | | | +| `highway=trail` | `NONE` | | | +| `present(highway); seasonal=winter` | `NONE` | | | +| `present(highway); ice_road=yes` | `NONE` | | | +| `present(highway); winter_road=yes` | `NONE` | | | +| `highway=footway` | `PEDESTRIAN` | | | +| `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | +| `highway=pedestrian` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | +| `highway=cycleway` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | 2.0 | +| `highway=cycleway; segregated=yes` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | 1.1 | +| `highway=footway; bridge=yes` | `PEDESTRIAN` | | | +| `highway=footway; tunnel=yes` | `PEDESTRIAN` | | | +| `highway=cycleway; bridge=yes` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | +| `highway=cycleway; tunnel=yes` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | +| `highway=footway; footway=crossing; crossing=traffic_signals` | `PEDESTRIAN` | | 1.1 | +| `highway=footway; footway=crossing` | `PEDESTRIAN` | | 1.2 | +| `highway=cycleway; cycleway=crossing; segregated=yes; crossing=traffic_signals` | `PEDESTRIAN_AND_BICYCLE` | 0.8 | 1.1 | +| `highway=cycleway; footway=crossing; segregated=yes; crossing=traffic_signals` | `PEDESTRIAN` | 0.8 | 1.1 | +| `highway=cycleway; cycleway=crossing; segregated=yes` | `PEDESTRIAN_AND_BICYCLE` | 1.2 | 1.2 | +| `highway=cycleway; footway=crossing; segregated=yes` | `PEDESTRIAN` | 1.2 | 1.2 | +| `highway=cycleway; cycleway=crossing; crossing=traffic_signals` | `PEDESTRIAN_AND_BICYCLE` | 0.8 | 1.15 | +| `highway=cycleway; footway=crossing; crossing=traffic_signals` | `PEDESTRIAN_AND_BICYCLE` | 0.8 | 1.15 | +| `highway=cycleway; cycleway=crossing` | `PEDESTRIAN_AND_BICYCLE` | 1.2 | 1.25 | +| `highway=cycleway; footway=crossing` | `PEDESTRIAN_AND_BICYCLE` | 1.2 | 1.25 | +| `highway=cycleway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | +| `highway=service; tunnel=yes; access=destination` | `NONE` | | | +| `highway=service; access=destination` | `ALL` | 1.1 | | +| `mtb:scale=3` | `NONE` | | | +| `mtb:scale=4` | `NONE` | | | +| `mtb:scale=5` | `NONE` | | | +| `mtb:scale=6` | `NONE` | | | +| `highway=bridleway` | `NONE` | 1.3 | | +| `highway=corridor` | `PEDESTRIAN` | | | +| `highway=steps` | `PEDESTRIAN` | | | +| `highway=crossing` | `PEDESTRIAN` | | | +| `highway=platform` | `PEDESTRIAN` | | | +| `public_transport=platform` | `PEDESTRIAN` | | | +| `railway=platform` | `PEDESTRIAN` | | | +| `highway=pedestrian` | `PEDESTRIAN` | 0.9 | | +| `highway=footway` | `PEDESTRIAN` | 1.1 | | +| `mtb:scale=1` | `PEDESTRIAN` | 1.5 | | +| `mtb:scale=2` | `PEDESTRIAN` | 3.0 | | +| `indoor=area` | `PEDESTRIAN` | | | +| `indoor=corridor` | `PEDESTRIAN` | | | +| `highway=cycleway` | `BICYCLE` | 0.6 | | +| `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=path` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `highway=living_street` | `ALL` | 0.9 | | +| `highway=unclassified` | `ALL` | | | +| `highway=road` | `ALL` | | | +| `highway=byway` | `ALL` | 1.3 | | +| `highway=track` | `ALL` | 1.3 | | +| `highway=service` | `ALL` | 1.1 | | +| `highway=residential` | `ALL` | 0.98 | | +| `highway=residential_link` | `ALL` | 0.98 | | +| `highway=tertiary` | `ALL` | | | +| `highway=tertiary_link` | `ALL` | | | +| `highway=secondary` | `ALL` | 1.5 | | +| `highway=secondary_link` | `ALL` | 1.5 | | +| `highway=primary` | `ALL` | 2.06 | | +| `highway=primary_link` | `ALL` | 2.06 | | +| `highway=trunk` | `ALL` | 7.47 | 7.47 | +| `highway=trunk_link` | `ALL` | 2.06 | 7.47 | +| `highway=motorway_link` | `CAR` | 2.06 | | +| `highway=motorway` | `CAR` | 8.0 | | @@ -236,33 +119,44 @@ way properties. Multiple mixins can apply to the same way and their effects comp -| matcher | bicycle safety | walk safety | -|-----------------------------------------------------------------------------------------------------------------------|----------------|-------------| -| `bicycle=use_sidepath` | | 5.0 | -| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 0.7 | | -| `highway=trunk; sidewalk=yes¦highway=trunk; sidewalk=left¦highway=trunk; sidewalk=right¦highway=trunk; sidewalk=both` | | 0.25 | -| `highway=trunk; sidewalk=lane` | | 0.6 | -| `surface=unpaved` | 1.18 | | -| `surface=compacted` | 1.18 | | -| `surface=wood` | 1.18 | | -| `surface=cobblestone` | 1.3 | | -| `surface=sett` | 1.3 | | -| `surface=unhewn_cobblestone` | 1.5 | | -| `surface=grass_paver` | 1.3 | | -| `surface=pebblestone` | 1.3 | | -| `surface=metal` | 1.3 | | -| `surface=ground` | 1.5 | | -| `surface=dirt` | 1.5 | | -| `surface=earth` | 1.5 | | -| `surface=grass` | 1.5 | | -| `surface=mud` | 1.5 | | -| `surface=woodchip` | 1.5 | | -| `surface=gravel` | 1.5 | | -| `surface=artifical_turf` | 1.5 | | -| `surface=sand` | 100.0 | | -| `foot=discouraged` | | 3.0 | -| `bicycle=discouraged` | 3.0 | | -| `foot=use_sidepath` | | 5.0 | -| `bicycle=use_sidepath` | 5.0 | | +| matcher | add permission | remove permission | bicycle safety | walk safety | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------|------------------------|-----------------------------------------------------|-------------| +| `bicycle=use_sidepath` | | | | 5.0 | +| `motorroad=yes` | | PEDESTRIAN_AND_BICYCLE | | | +| `cycleway=lane; not(highway=cycleway)` | BICYCLE | | 0.87 | | +| `cycleway=share_busway; not(highway=cycleway)` | BICYCLE | | 0.92 | | +| `cycleway=opposite_lane; not(highway=cycleway)` | backward: BICYCLE | | no direction: 1.0
forward: 1.0
back: 0.87 | | +| `cycleway=track; not(highway=cycleway)` | BICYCLE | | 0.75 | | +| `cycleway=opposite_track; not(highway=cycleway)` | backward: BICYCLE | | no direction: 1.0
forward: 1.0
back: 0.75 | | +| `cycleway=shared_lane; not(highway=cycleway)` | BICYCLE | | 0.77 | | +| `cycleway=opposite; not(highway=cycleway)` | backward: BICYCLE | | no direction: 1.0
forward: 1.0
back: 1.4 | | +| `footway=sidewalk` | | | 2.5 | | +| `footway=crossing` | | | 1.5 | | +| `bicycle=designated; cycleway not one of [no, none] or absent; not(highway=cycleway); not(lcn=yes); not(rcn=yes); not(ncn=yes); not(bicycle_road=yes); not(cyclestreet=yes)` | | | 0.8 | | +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | | | 0.7 | | +| `highway=trunk; sidewalk=yes¦highway=trunk; sidewalk=left¦highway=trunk; sidewalk=right¦highway=trunk; sidewalk=both` | | | | 0.25 | +| `highway=trunk; sidewalk=lane` | | | | 0.6 | +| `surface=unpaved` | | | 1.18 | | +| `surface=compacted` | | | 1.18 | | +| `surface=wood` | | | 1.18 | | +| `surface=cobblestone` | | | 1.3 | | +| `surface=sett` | | | 1.3 | | +| `surface=unhewn_cobblestone` | | | 1.5 | | +| `surface=grass_paver` | | | 1.3 | | +| `surface=pebblestone` | | | 1.3 | | +| `surface=metal` | | | 1.3 | | +| `surface=ground` | | | 1.5 | | +| `surface=dirt` | | | 1.5 | | +| `surface=earth` | | | 1.5 | | +| `surface=grass` | | | 1.5 | | +| `surface=mud` | | | 1.5 | | +| `surface=woodchip` | | | 1.5 | | +| `surface=gravel` | | | 1.5 | | +| `surface=artifical_turf` | | | 1.5 | | +| `surface=sand` | | | 100.0 | | +| `foot=discouraged` | | | | 3.0 | +| `bicycle=discouraged` | | | 3.0 | | +| `foot=use_sidepath` | | | | 5.0 | +| `bicycle=use_sidepath` | | | 5.0 | | diff --git a/doc/user/osm/Germany.md b/doc/user/osm/Germany.md index 579cc4e5c4e..38d6134ac7d 100644 --- a/doc/user/osm/Germany.md +++ b/doc/user/osm/Germany.md @@ -22,172 +22,54 @@ Lower safety values make an OSM way more desirable and higher values less desira -| specifier | permission | bike safety | walk safety | -|---------------------------------------------------------|--------------------------|-------------------------------------------------------|-------------| -| `highway=track` | `PEDESTRIAN_AND_BICYCLE` | | | -| `highway=track; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | | | -| `highway=residential; junction=roundabout` | `ALL` | 0.98 | | -| `present(highway); junction=roundabout` | `BICYCLE_AND_CAR` | | | -| `highway=pedestrian` | `PEDESTRIAN` | | | -| `highway=residential; maxspeed=30` | `ALL` | 0.9 | | -| `highway=footway; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 0.8 | | -| `footway=sidewalk; highway=footway; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 1.2 | | -| `highway=unclassified; cycleway=lane` | `ALL` | 0.87 | | -| `mtb:scale=3` | `NONE` | | | -| `mtb:scale=4` | `NONE` | | | -| `mtb:scale=5` | `NONE` | | | -| `mtb:scale=6` | `NONE` | | | -| `highway=bridleway` | `NONE` | 1.3 | | -| `highway=corridor` | `PEDESTRIAN` | | | -| `highway=steps` | `PEDESTRIAN` | | | -| `highway=crossing` | `PEDESTRIAN` | | | -| `highway=platform` | `PEDESTRIAN` | | | -| `public_transport=platform` | `PEDESTRIAN` | | | -| `railway=platform` | `PEDESTRIAN` | | | -| `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | -| `highway=pedestrian` | `PEDESTRIAN` | 0.9 | | -| `highway=footway` | `PEDESTRIAN` | 1.1 | | -| `mtb:scale=1` | `PEDESTRIAN` | | | -| `mtb:scale=2` | `PEDESTRIAN` | | | -| `indoor=area` | `PEDESTRIAN` | | | -| `indoor=corridor` | `PEDESTRIAN` | | | -| `highway=cycleway` | `BICYCLE` | 0.6 | | -| `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | -| `highway=path` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | -| `highway=living_street` | `ALL` | 0.9 | | -| `highway=unclassified` | `ALL` | | | -| `highway=road` | `ALL` | | | -| `highway=byway` | `ALL` | 1.3 | | -| `highway=track` | `ALL` | 1.3 | | -| `highway=service` | `ALL` | 1.1 | | -| `highway=residential` | `ALL` | 0.98 | | -| `highway=residential_link` | `ALL` | 0.98 | | -| `highway=tertiary` | `ALL` | | | -| `highway=tertiary_link` | `ALL` | | | -| `highway=secondary` | `ALL` | 1.5 | | -| `highway=secondary_link` | `ALL` | 1.5 | | -| `highway=primary` | `ALL` | 2.06 | | -| `highway=primary_link` | `ALL` | 2.06 | | -| `highway=trunk` | `ALL` | 7.47 | 7.47 | -| `highway=trunk_link` | `ALL` | 2.06 | 7.47 | -| `highway=motorway_link` | `CAR` | 2.06 | | -| `highway=motorway` | `CAR` | 8.0 | | -| `motorroad=yes` | `CAR` | 7.47 | 7.47 | -| `present(highway); cycleway=lane` | `PEDESTRIAN_AND_BICYCLE` | 0.87 | | -| `highway=service; cycleway=lane` | `ALL` | 0.77 | | -| `highway=residential; cycleway=lane` | `ALL` | 0.77 | | -| `highway=residential_link; cycleway=lane` | `ALL` | 0.77 | | -| `highway=tertiary; cycleway=lane` | `ALL` | 0.87 | | -| `highway=tertiary_link; cycleway=lane` | `ALL` | 0.87 | | -| `highway=secondary; cycleway=lane` | `ALL` | 0.96 | | -| `highway=secondary_link; cycleway=lane` | `ALL` | 0.96 | | -| `highway=primary; cycleway=lane` | `ALL` | 1.15 | | -| `highway=primary_link; cycleway=lane` | `ALL` | 1.15 | | -| `highway=trunk; cycleway=lane` | `ALL` | 1.5 | 7.47 | -| `highway=trunk_link; cycleway=lane` | `ALL` | 1.15 | 7.47 | -| `highway=motorway; cycleway=lane` | `BICYCLE_AND_CAR` | 2.0 | | -| `highway=motorway_link; cycleway=lane` | `BICYCLE_AND_CAR` | 1.15 | | -| `present(highway); cycleway=share_busway` | `PEDESTRIAN_AND_BICYCLE` | 0.92 | | -| `highway=service; cycleway=share_busway` | `ALL` | 0.85 | | -| `highway=residential; cycleway=share_busway` | `ALL` | 0.85 | | -| `highway=residential_link; cycleway=share_busway` | `ALL` | 0.85 | | -| `highway=tertiary; cycleway=share_busway` | `ALL` | 0.92 | | -| `highway=tertiary_link; cycleway=share_busway` | `ALL` | 0.92 | | -| `highway=secondary; cycleway=share_busway` | `ALL` | 0.99 | | -| `highway=secondary_link; cycleway=share_busway` | `ALL` | 0.99 | | -| `highway=primary; cycleway=share_busway` | `ALL` | 1.25 | | -| `highway=primary_link; cycleway=share_busway` | `ALL` | 1.25 | | -| `highway=trunk; cycleway=share_busway` | `ALL` | 1.75 | 7.47 | -| `highway=trunk_link; cycleway=share_busway` | `ALL` | 1.25 | 7.47 | -| `highway=motorway; cycleway=share_busway` | `BICYCLE_AND_CAR` | 2.5 | | -| `highway=motorway_link; cycleway=share_busway` | `BICYCLE_AND_CAR` | 1.25 | | -| `present(highway); cycleway=opposite_lane` | `PEDESTRIAN_AND_BICYCLE` | no direction: 1.0
forward: 1.0
back: 0.87 | | -| `highway=service; cycleway=opposite_lane` | `ALL` | no direction: 1.1
forward: 1.1
back: 0.77 | | -| `highway=residential; cycleway=opposite_lane` | `ALL` | no direction: 0.98
forward: 0.98
back: 0.77 | | -| `highway=residential_link; cycleway=opposite_lane` | `ALL` | no direction: 0.98
forward: 0.98
back: 0.77 | | -| `highway=tertiary; cycleway=opposite_lane` | `ALL` | no direction: 1.0
forward: 1.0
back: 0.87 | | -| `highway=tertiary_link; cycleway=opposite_lane` | `ALL` | no direction: 1.0
forward: 1.0
back: 0.87 | | -| `highway=secondary; cycleway=opposite_lane` | `ALL` | no direction: 1.5
forward: 1.5
back: 0.96 | | -| `highway=secondary_link; cycleway=opposite_lane` | `ALL` | no direction: 1.5
forward: 1.5
back: 0.96 | | -| `highway=primary; cycleway=opposite_lane` | `ALL` | no direction: 2.06
forward: 2.06
back: 1.15 | | -| `highway=primary_link; cycleway=opposite_lane` | `ALL` | no direction: 2.06
forward: 2.06
back: 1.15 | | -| `highway=trunk; cycleway=opposite_lane` | `ALL` | no direction: 7.47
forward: 7.47
back: 1.15 | 7.47 | -| `highway=trunk_link; cycleway=opposite_lane` | `ALL` | no direction: 2.06
forward: 2.06
back: 1.15 | 7.47 | -| `present(highway); cycleway=track` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | -| `highway=service; cycleway=track` | `ALL` | 0.65 | | -| `highway=residential; cycleway=track` | `ALL` | 0.65 | | -| `highway=residential_link; cycleway=track` | `ALL` | 0.65 | | -| `highway=tertiary; cycleway=track` | `ALL` | 0.75 | | -| `highway=tertiary_link; cycleway=track` | `ALL` | 0.75 | | -| `highway=secondary; cycleway=track` | `ALL` | 0.8 | | -| `highway=secondary_link; cycleway=track` | `ALL` | 0.8 | | -| `highway=primary; cycleway=track` | `ALL` | 0.85 | | -| `highway=primary_link; cycleway=track` | `ALL` | 0.85 | | -| `highway=trunk; cycleway=track` | `ALL` | 0.95 | 7.47 | -| `highway=trunk_link; cycleway=track` | `ALL` | 0.85 | 7.47 | -| `present(highway); cycleway=opposite_track` | `PEDESTRIAN_AND_BICYCLE` | no direction: 1.0
forward: 1.0
back: 0.75 | | -| `highway=service; cycleway=opposite_track` | `ALL` | no direction: 1.1
forward: 1.1
back: 0.65 | | -| `highway=residential; cycleway=opposite_track` | `ALL` | no direction: 0.98
forward: 0.98
back: 0.65 | | -| `highway=residential_link; cycleway=opposite_track` | `ALL` | no direction: 0.98
forward: 0.98
back: 0.65 | | -| `highway=tertiary; cycleway=opposite_track` | `ALL` | no direction: 1.0
forward: 1.0
back: 0.75 | | -| `highway=tertiary_link; cycleway=opposite_track` | `ALL` | no direction: 1.0
forward: 1.0
back: 0.75 | | -| `highway=secondary; cycleway=opposite_track` | `ALL` | no direction: 1.5
forward: 1.5
back: 0.8 | | -| `highway=secondary_link; cycleway=opposite_track` | `ALL` | no direction: 1.5
forward: 1.5
back: 0.8 | | -| `highway=primary; cycleway=opposite_track` | `ALL` | no direction: 2.06
forward: 2.06
back: 0.85 | | -| `highway=primary_link; cycleway=opposite_track` | `ALL` | no direction: 2.06
forward: 2.06
back: 0.85 | | -| `highway=trunk; cycleway=opposite_track` | `ALL` | no direction: 7.47
forward: 7.47
back: 0.95 | 7.47 | -| `highway=trunk_link; cycleway=opposite_track` | `ALL` | no direction: 2.06
forward: 2.06
back: 0.85 | 7.47 | -| `present(highway); cycleway=shared_lane` | `PEDESTRIAN_AND_BICYCLE` | 0.77 | | -| `highway=service; cycleway=shared_lane` | `ALL` | 0.73 | | -| `highway=residential; cycleway=shared_lane` | `ALL` | 0.77 | | -| `highway=residential_link; cycleway=shared_lane` | `ALL` | 0.77 | | -| `highway=tertiary; cycleway=shared_lane` | `ALL` | 0.83 | | -| `highway=tertiary_link; cycleway=shared_lane` | `ALL` | 0.83 | | -| `highway=secondary; cycleway=shared_lane` | `ALL` | 1.25 | | -| `highway=secondary_link; cycleway=shared_lane` | `ALL` | 1.25 | | -| `highway=primary; cycleway=shared_lane` | `ALL` | 1.75 | | -| `highway=primary_link; cycleway=shared_lane` | `ALL` | 1.75 | | -| `present(highway); cycleway=opposite` | `PEDESTRIAN_AND_BICYCLE` | no direction: 1.0
forward: 1.0
back: 1.4 | | -| `highway=service; cycleway=opposite` | `ALL` | 1.1 | | -| `highway=residential; cycleway=opposite` | `ALL` | 0.98 | | -| `highway=residential_link; cycleway=opposite` | `ALL` | 0.98 | | -| `highway=tertiary; cycleway=opposite` | `ALL` | | | -| `highway=tertiary_link; cycleway=opposite` | `ALL` | | | -| `highway=secondary; cycleway=opposite` | `ALL` | no direction: 1.5
forward: 1.5
back: 1.71 | | -| `highway=secondary_link; cycleway=opposite` | `ALL` | no direction: 1.5
forward: 1.5
back: 1.71 | | -| `highway=primary; cycleway=opposite` | `ALL` | no direction: 2.06
forward: 2.06
back: 2.99 | | -| `highway=primary_link; cycleway=opposite` | `ALL` | no direction: 2.06
forward: 2.06
back: 2.99 | | -| `highway=path; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | -| `highway=footway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | -| `highway=footway; bicycle=yes; area=yes` | `PEDESTRIAN_AND_BICYCLE` | 0.9 | | -| `highway=pedestrian; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | -| `footway=sidewalk; highway=footway; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 2.5 | | -| `footway=sidewalk; highway=footway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | -| `highway=footway; footway=crossing` | `PEDESTRIAN` | 2.5 | | -| `highway=footway; footway=crossing; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | -| `highway=track; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 1.18 | | -| `highway=track; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.99 | | -| `highway=track; bicycle=yes; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 1.18 | | -| `highway=track; bicycle=designated; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 0.99 | | -| `highway=track; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 1.3 | | -| `present(highway); bicycle=designated` | `BICYCLE` | 0.97 | | -| `highway=footway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.8 | | -| `highway=cycleway; bicycle=designated` | `BICYCLE` | 0.6 | | -| `highway=bridleway; bicycle=designated` | `BICYCLE` | 0.8 | | -| `highway=service; bicycle=designated` | `ALL` | 0.84 | | -| `highway=residential; bicycle=designated` | `ALL` | 0.95 | | -| `highway=unclassified; bicycle=designated` | `ALL` | 0.95 | | -| `highway=residential_link; bicycle=designated` | `ALL` | 0.95 | | -| `highway=tertiary; bicycle=designated` | `ALL` | 0.97 | | -| `highway=tertiary_link; bicycle=designated` | `ALL` | 0.97 | | -| `highway=secondary; bicycle=designated` | `ALL` | 1.46 | | -| `highway=secondary_link; bicycle=designated` | `ALL` | 1.46 | | -| `highway=primary; bicycle=designated` | `ALL` | 2.0 | | -| `highway=primary_link; bicycle=designated` | `ALL` | 2.0 | | -| `highway=trunk; bicycle=designated` | `ALL` | 7.25 | 7.47 | -| `highway=trunk_link; bicycle=designated` | `ALL` | 2.0 | 7.47 | -| `highway=motorway; bicycle=designated` | `BICYCLE_AND_CAR` | 7.76 | | -| `highway=motorway_link; bicycle=designated` | `BICYCLE_AND_CAR` | 2.0 | | +| specifier | permission | bike safety | walk safety | +|--------------------------------------------|--------------------------|-------------|-------------| +| `highway=track` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=track; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=residential; junction=roundabout` | `ALL` | 0.98 | | +| `present(highway); junction=roundabout` | `BICYCLE_AND_CAR` | | | +| `highway=pedestrian` | `PEDESTRIAN` | | | +| `highway=residential; maxspeed=30` | `ALL` | 0.9 | | +| `highway=footway; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 0.8 | | +| `highway=unclassified; cycleway=lane` | `ALL` | 0.87 | | +| `mtb:scale=3` | `NONE` | | | +| `mtb:scale=4` | `NONE` | | | +| `mtb:scale=5` | `NONE` | | | +| `mtb:scale=6` | `NONE` | | | +| `highway=bridleway` | `NONE` | 1.3 | | +| `highway=corridor` | `PEDESTRIAN` | | | +| `highway=steps` | `PEDESTRIAN` | | | +| `highway=crossing` | `PEDESTRIAN` | | | +| `highway=platform` | `PEDESTRIAN` | | | +| `public_transport=platform` | `PEDESTRIAN` | | | +| `railway=platform` | `PEDESTRIAN` | | | +| `highway=pedestrian` | `PEDESTRIAN` | 0.9 | | +| `highway=footway` | `PEDESTRIAN` | 1.1 | | +| `mtb:scale=1` | `PEDESTRIAN` | 1.5 | | +| `mtb:scale=2` | `PEDESTRIAN` | 3.0 | | +| `indoor=area` | `PEDESTRIAN` | | | +| `indoor=corridor` | `PEDESTRIAN` | | | +| `highway=cycleway` | `BICYCLE` | 0.6 | | +| `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=path` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `highway=living_street` | `ALL` | 0.9 | | +| `highway=unclassified` | `ALL` | | | +| `highway=road` | `ALL` | | | +| `highway=byway` | `ALL` | 1.3 | | +| `highway=track` | `ALL` | 1.3 | | +| `highway=service` | `ALL` | 1.1 | | +| `highway=residential` | `ALL` | 0.98 | | +| `highway=residential_link` | `ALL` | 0.98 | | +| `highway=tertiary` | `ALL` | | | +| `highway=tertiary_link` | `ALL` | | | +| `highway=secondary` | `ALL` | 1.5 | | +| `highway=secondary_link` | `ALL` | 1.5 | | +| `highway=primary` | `ALL` | 2.06 | | +| `highway=primary_link` | `ALL` | 2.06 | | +| `highway=trunk` | `ALL` | 7.47 | 7.47 | +| `highway=trunk_link` | `ALL` | 2.06 | 7.47 | +| `highway=motorway_link` | `CAR` | 2.06 | | +| `highway=motorway` | `CAR` | 8.0 | | @@ -200,43 +82,55 @@ way properties. Multiple mixins can apply to the same way and their effects comp -| matcher | bicycle safety | walk safety | -|-----------------------------------------------------------------------------------------------------------------------|----------------|-------------| -| `highway=tertiary` | 1.2 | | -| `maxspeed=70` | 1.5 | | -| `maxspeed=80` | 2.0 | | -| `maxspeed=90` | 3.0 | | -| `maxspeed=100` | 5.0 | | -| `tracktype=grade1` | | | -| `tracktype=grade2` | 1.1 | | -| `tracktype=grade3` | 1.15 | | -| `tracktype=grade4` | 1.3 | | -| `tracktype=grade5` | 1.5 | | -| `lit=no` | 1.05 | | -| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 0.7 | | -| `highway=trunk; sidewalk=yes¦highway=trunk; sidewalk=left¦highway=trunk; sidewalk=right¦highway=trunk; sidewalk=both` | | 0.25 | -| `highway=trunk; sidewalk=lane` | | 0.6 | -| `surface=unpaved` | 1.18 | | -| `surface=compacted` | 1.18 | | -| `surface=wood` | 1.18 | | -| `surface=cobblestone` | 1.3 | | -| `surface=sett` | 1.3 | | -| `surface=unhewn_cobblestone` | 1.5 | | -| `surface=grass_paver` | 1.3 | | -| `surface=pebblestone` | 1.3 | | -| `surface=metal` | 1.3 | | -| `surface=ground` | 1.5 | | -| `surface=dirt` | 1.5 | | -| `surface=earth` | 1.5 | | -| `surface=grass` | 1.5 | | -| `surface=mud` | 1.5 | | -| `surface=woodchip` | 1.5 | | -| `surface=gravel` | 1.5 | | -| `surface=artifical_turf` | 1.5 | | -| `surface=sand` | 100.0 | | -| `foot=discouraged` | | 3.0 | -| `bicycle=discouraged` | 3.0 | | -| `foot=use_sidepath` | | 5.0 | -| `bicycle=use_sidepath` | 5.0 | | +| matcher | add permission | remove permission | bicycle safety | walk safety | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------|------------------------|-----------------------------------------------------|-------------| +| `footway=sidewalk; highway=footway; bicycle=yes` | | | 0.6 | | +| `highway=tertiary` | | | 1.2 | | +| `maxspeed=70` | | | 1.5 | | +| `maxspeed=80` | | | 2.0 | | +| `maxspeed=90` | | | 3.0 | | +| `maxspeed=100` | | | 5.0 | | +| `tracktype=grade1` | | | | | +| `tracktype=grade2` | | | 1.1 | | +| `tracktype=grade3` | | | 1.15 | | +| `tracktype=grade4` | | | 1.3 | | +| `tracktype=grade5` | | | 1.5 | | +| `lit=no` | | | 1.05 | | +| `motorroad=yes` | | PEDESTRIAN_AND_BICYCLE | | | +| `cycleway=lane; not(highway=cycleway)` | BICYCLE | | 0.87 | | +| `cycleway=share_busway; not(highway=cycleway)` | BICYCLE | | 0.92 | | +| `cycleway=opposite_lane; not(highway=cycleway)` | backward: BICYCLE | | no direction: 1.0
forward: 1.0
back: 0.87 | | +| `cycleway=track; not(highway=cycleway)` | BICYCLE | | 0.75 | | +| `cycleway=opposite_track; not(highway=cycleway)` | backward: BICYCLE | | no direction: 1.0
forward: 1.0
back: 0.75 | | +| `cycleway=shared_lane; not(highway=cycleway)` | BICYCLE | | 0.77 | | +| `cycleway=opposite; not(highway=cycleway)` | backward: BICYCLE | | no direction: 1.0
forward: 1.0
back: 1.4 | | +| `footway=sidewalk` | | | 2.5 | | +| `footway=crossing` | | | 1.5 | | +| `bicycle=designated; cycleway not one of [no, none] or absent; not(highway=cycleway); not(lcn=yes); not(rcn=yes); not(ncn=yes); not(bicycle_road=yes); not(cyclestreet=yes)` | | | 0.8 | | +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | | | 0.7 | | +| `highway=trunk; sidewalk=yes¦highway=trunk; sidewalk=left¦highway=trunk; sidewalk=right¦highway=trunk; sidewalk=both` | | | | 0.25 | +| `highway=trunk; sidewalk=lane` | | | | 0.6 | +| `surface=unpaved` | | | 1.18 | | +| `surface=compacted` | | | 1.18 | | +| `surface=wood` | | | 1.18 | | +| `surface=cobblestone` | | | 1.3 | | +| `surface=sett` | | | 1.3 | | +| `surface=unhewn_cobblestone` | | | 1.5 | | +| `surface=grass_paver` | | | 1.3 | | +| `surface=pebblestone` | | | 1.3 | | +| `surface=metal` | | | 1.3 | | +| `surface=ground` | | | 1.5 | | +| `surface=dirt` | | | 1.5 | | +| `surface=earth` | | | 1.5 | | +| `surface=grass` | | | 1.5 | | +| `surface=mud` | | | 1.5 | | +| `surface=woodchip` | | | 1.5 | | +| `surface=gravel` | | | 1.5 | | +| `surface=artifical_turf` | | | 1.5 | | +| `surface=sand` | | | 100.0 | | +| `foot=discouraged` | | | | 3.0 | +| `bicycle=discouraged` | | | 3.0 | | +| `foot=use_sidepath` | | | | 5.0 | +| `bicycle=use_sidepath` | | | 5.0 | | diff --git a/doc/user/osm/Norway.md b/doc/user/osm/Norway.md index d637c6b24b8..c700d578fc5 100644 --- a/doc/user/osm/Norway.md +++ b/doc/user/osm/Norway.md @@ -81,42 +81,42 @@ way properties. Multiple mixins can apply to the same way and their effects comp -| matcher | bicycle safety | walk safety | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------|-------------| -| `cycleway=shared_lane; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | 0.85 | | -| `lcn=yes¦rcn=yes¦ncn=yes` | 0.85 | | -| `oneway=yes; cycleway not one of [no, none] or absent; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | no direction: 1.0
forward: 1.0
back: 1.15 | | -| `embedded_rails one of [tram, light_rail, disused]` | 1.2 | | -| `tunnel=yes; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified]` | 2.0 | 2.0 | -| `bridge=yes; sidewalk not one of [no, separate] or absent; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified]¦verge=no; sidewalk not one of [no, separate] or absent; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified]` | | 2.0 | -| `junction=roundabout; sidewalk not one of [no, separate] or absent` | | 2.0 | -| `surface=grass_paver` | 1.2 | | -| `surface=sett` | 1.2 | | -| `surface=cobblestone` | 1.2 | | -| `surface=unhewn_cobblestone` | 3.0 | | -| `surface=metal_grid` | 1.2 | | -| `surface=metal` | 1.2 | | -| `smoothness=intermediate; surface one of [asfalt, concrete, paving_stones, paved, wood]` | 1.2 | | -| `smoothness=bad; surface one of [asfalt, concrete, paving_stones, paved, wood]` | 1.4 | 1.6 | -| `surface=unpaved; !tracktype` | 1.8 | 1.6 | -| `surface=compacted` | 1.4 | 1.4 | -| `surface=fine_gravel` | 1.8 | 1.6 | -| `surface=pebblestone` | 1.8 | 1.6 | -| `surface=gravel` | 1.8 | 1.6 | -| `surface=woodchip` | 1.8 | 1.6 | -| `surface=ground` | 2.3 | 2.4 | -| `surface=dirt` | 2.3 | 2.4 | -| `surface=earth` | 2.3 | 2.4 | -| `surface=grass` | 2.3 | 1.8 | -| `surface=mud` | 3.0 | 3.0 | -| `surface=sand` | 3.0 | 1.8 | -| `!tracktype; surface not one of [unpaved] or absent; highway one of [track, bridleway]` | 1.8 | 1.6 | -| `tracktype=grade2; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 1.4 | 1.4 | -| `tracktype=grade3; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 1.8 | 1.6 | -| `tracktype=grade4; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 2.3 | 1.8 | -| `tracktype=grade5; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 2.3 | 2.4 | -| `surface not one of [no, none] or absent; highway=path` | 2.3 | 2.4 | -| `sac_scale=mountain_hiking` | | 1.8 | -| `trail_visibility=intermediate` | | 1.8 | +| matcher | add permission | remove permission | bicycle safety | walk safety | +|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------|-------------------|-----------------------------------------------------|-------------| +| `cycleway=shared_lane; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | | | 0.85 | | +| `lcn=yes¦rcn=yes¦ncn=yes` | | | 0.85 | | +| `oneway=yes; cycleway not one of [no, none] or absent; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | | | no direction: 1.0
forward: 1.0
back: 1.15 | | +| `embedded_rails one of [tram, light_rail, disused]` | | | 1.2 | | +| `tunnel=yes; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified]` | | | 2.0 | 2.0 | +| `bridge=yes; sidewalk not one of [no, separate] or absent; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified]¦verge=no; sidewalk not one of [no, separate] or absent; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified]` | | | | 2.0 | +| `junction=roundabout; sidewalk not one of [no, separate] or absent` | | | | 2.0 | +| `surface=grass_paver` | | | 1.2 | | +| `surface=sett` | | | 1.2 | | +| `surface=cobblestone` | | | 1.2 | | +| `surface=unhewn_cobblestone` | | | 3.0 | | +| `surface=metal_grid` | | | 1.2 | | +| `surface=metal` | | | 1.2 | | +| `smoothness=intermediate; surface one of [asfalt, concrete, paving_stones, paved, wood]` | | | 1.2 | | +| `smoothness=bad; surface one of [asfalt, concrete, paving_stones, paved, wood]` | | | 1.4 | 1.6 | +| `surface=unpaved; !tracktype` | | | 1.8 | 1.6 | +| `surface=compacted` | | | 1.4 | 1.4 | +| `surface=fine_gravel` | | | 1.8 | 1.6 | +| `surface=pebblestone` | | | 1.8 | 1.6 | +| `surface=gravel` | | | 1.8 | 1.6 | +| `surface=woodchip` | | | 1.8 | 1.6 | +| `surface=ground` | | | 2.3 | 2.4 | +| `surface=dirt` | | | 2.3 | 2.4 | +| `surface=earth` | | | 2.3 | 2.4 | +| `surface=grass` | | | 2.3 | 1.8 | +| `surface=mud` | | | 3.0 | 3.0 | +| `surface=sand` | | | 3.0 | 1.8 | +| `!tracktype; surface not one of [unpaved] or absent; highway one of [track, bridleway]` | | | 1.8 | 1.6 | +| `tracktype=grade2; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | | | 1.4 | 1.4 | +| `tracktype=grade3; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | | | 1.8 | 1.6 | +| `tracktype=grade4; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | | | 2.3 | 1.8 | +| `tracktype=grade5; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | | | 2.3 | 2.4 | +| `surface not one of [no, none] or absent; highway=path` | | | 2.3 | 2.4 | +| `sac_scale=mountain_hiking` | | | | 1.8 | +| `trail_visibility=intermediate` | | | | 1.8 | diff --git a/doc/user/osm/OsmTag.md b/doc/user/osm/OsmTag.md index a539b5631fe..1b2912b8ed9 100644 --- a/doc/user/osm/OsmTag.md +++ b/doc/user/osm/OsmTag.md @@ -22,163 +22,46 @@ Lower safety values make an OSM way more desirable and higher values less desira -| specifier | permission | bike safety | walk safety | -|---------------------------------------------------------|--------------------------|-------------------------------------------------------|-------------| -| `mtb:scale=3` | `NONE` | | | -| `mtb:scale=4` | `NONE` | | | -| `mtb:scale=5` | `NONE` | | | -| `mtb:scale=6` | `NONE` | | | -| `highway=bridleway` | `NONE` | 1.3 | | -| `highway=corridor` | `PEDESTRIAN` | | | -| `highway=steps` | `PEDESTRIAN` | | | -| `highway=crossing` | `PEDESTRIAN` | | | -| `highway=platform` | `PEDESTRIAN` | | | -| `public_transport=platform` | `PEDESTRIAN` | | | -| `railway=platform` | `PEDESTRIAN` | | | -| `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | -| `highway=pedestrian` | `PEDESTRIAN` | 0.9 | | -| `highway=footway` | `PEDESTRIAN` | 1.1 | | -| `mtb:scale=1` | `PEDESTRIAN` | | | -| `mtb:scale=2` | `PEDESTRIAN` | | | -| `indoor=area` | `PEDESTRIAN` | | | -| `indoor=corridor` | `PEDESTRIAN` | | | -| `highway=cycleway` | `BICYCLE` | 0.6 | | -| `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | -| `highway=path` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | -| `highway=living_street` | `ALL` | 0.9 | | -| `highway=unclassified` | `ALL` | | | -| `highway=road` | `ALL` | | | -| `highway=byway` | `ALL` | 1.3 | | -| `highway=track` | `ALL` | 1.3 | | -| `highway=service` | `ALL` | 1.1 | | -| `highway=residential` | `ALL` | 0.98 | | -| `highway=residential_link` | `ALL` | 0.98 | | -| `highway=tertiary` | `ALL` | | | -| `highway=tertiary_link` | `ALL` | | | -| `highway=secondary` | `ALL` | 1.5 | | -| `highway=secondary_link` | `ALL` | 1.5 | | -| `highway=primary` | `ALL` | 2.06 | | -| `highway=primary_link` | `ALL` | 2.06 | | -| `highway=trunk` | `ALL` | 7.47 | 7.47 | -| `highway=trunk_link` | `ALL` | 2.06 | 7.47 | -| `highway=motorway_link` | `CAR` | 2.06 | | -| `highway=motorway` | `CAR` | 8.0 | | -| `motorroad=yes` | `CAR` | 7.47 | 7.47 | -| `present(highway); cycleway=lane` | `PEDESTRIAN_AND_BICYCLE` | 0.87 | | -| `highway=service; cycleway=lane` | `ALL` | 0.77 | | -| `highway=residential; cycleway=lane` | `ALL` | 0.77 | | -| `highway=residential_link; cycleway=lane` | `ALL` | 0.77 | | -| `highway=tertiary; cycleway=lane` | `ALL` | 0.87 | | -| `highway=tertiary_link; cycleway=lane` | `ALL` | 0.87 | | -| `highway=secondary; cycleway=lane` | `ALL` | 0.96 | | -| `highway=secondary_link; cycleway=lane` | `ALL` | 0.96 | | -| `highway=primary; cycleway=lane` | `ALL` | 1.15 | | -| `highway=primary_link; cycleway=lane` | `ALL` | 1.15 | | -| `highway=trunk; cycleway=lane` | `ALL` | 1.5 | 7.47 | -| `highway=trunk_link; cycleway=lane` | `ALL` | 1.15 | 7.47 | -| `highway=motorway; cycleway=lane` | `BICYCLE_AND_CAR` | 2.0 | | -| `highway=motorway_link; cycleway=lane` | `BICYCLE_AND_CAR` | 1.15 | | -| `present(highway); cycleway=share_busway` | `PEDESTRIAN_AND_BICYCLE` | 0.92 | | -| `highway=service; cycleway=share_busway` | `ALL` | 0.85 | | -| `highway=residential; cycleway=share_busway` | `ALL` | 0.85 | | -| `highway=residential_link; cycleway=share_busway` | `ALL` | 0.85 | | -| `highway=tertiary; cycleway=share_busway` | `ALL` | 0.92 | | -| `highway=tertiary_link; cycleway=share_busway` | `ALL` | 0.92 | | -| `highway=secondary; cycleway=share_busway` | `ALL` | 0.99 | | -| `highway=secondary_link; cycleway=share_busway` | `ALL` | 0.99 | | -| `highway=primary; cycleway=share_busway` | `ALL` | 1.25 | | -| `highway=primary_link; cycleway=share_busway` | `ALL` | 1.25 | | -| `highway=trunk; cycleway=share_busway` | `ALL` | 1.75 | 7.47 | -| `highway=trunk_link; cycleway=share_busway` | `ALL` | 1.25 | 7.47 | -| `highway=motorway; cycleway=share_busway` | `BICYCLE_AND_CAR` | 2.5 | | -| `highway=motorway_link; cycleway=share_busway` | `BICYCLE_AND_CAR` | 1.25 | | -| `present(highway); cycleway=opposite_lane` | `PEDESTRIAN_AND_BICYCLE` | no direction: 1.0
forward: 1.0
back: 0.87 | | -| `highway=service; cycleway=opposite_lane` | `ALL` | no direction: 1.1
forward: 1.1
back: 0.77 | | -| `highway=residential; cycleway=opposite_lane` | `ALL` | no direction: 0.98
forward: 0.98
back: 0.77 | | -| `highway=residential_link; cycleway=opposite_lane` | `ALL` | no direction: 0.98
forward: 0.98
back: 0.77 | | -| `highway=tertiary; cycleway=opposite_lane` | `ALL` | no direction: 1.0
forward: 1.0
back: 0.87 | | -| `highway=tertiary_link; cycleway=opposite_lane` | `ALL` | no direction: 1.0
forward: 1.0
back: 0.87 | | -| `highway=secondary; cycleway=opposite_lane` | `ALL` | no direction: 1.5
forward: 1.5
back: 0.96 | | -| `highway=secondary_link; cycleway=opposite_lane` | `ALL` | no direction: 1.5
forward: 1.5
back: 0.96 | | -| `highway=primary; cycleway=opposite_lane` | `ALL` | no direction: 2.06
forward: 2.06
back: 1.15 | | -| `highway=primary_link; cycleway=opposite_lane` | `ALL` | no direction: 2.06
forward: 2.06
back: 1.15 | | -| `highway=trunk; cycleway=opposite_lane` | `ALL` | no direction: 7.47
forward: 7.47
back: 1.15 | 7.47 | -| `highway=trunk_link; cycleway=opposite_lane` | `ALL` | no direction: 2.06
forward: 2.06
back: 1.15 | 7.47 | -| `present(highway); cycleway=track` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | -| `highway=service; cycleway=track` | `ALL` | 0.65 | | -| `highway=residential; cycleway=track` | `ALL` | 0.65 | | -| `highway=residential_link; cycleway=track` | `ALL` | 0.65 | | -| `highway=tertiary; cycleway=track` | `ALL` | 0.75 | | -| `highway=tertiary_link; cycleway=track` | `ALL` | 0.75 | | -| `highway=secondary; cycleway=track` | `ALL` | 0.8 | | -| `highway=secondary_link; cycleway=track` | `ALL` | 0.8 | | -| `highway=primary; cycleway=track` | `ALL` | 0.85 | | -| `highway=primary_link; cycleway=track` | `ALL` | 0.85 | | -| `highway=trunk; cycleway=track` | `ALL` | 0.95 | 7.47 | -| `highway=trunk_link; cycleway=track` | `ALL` | 0.85 | 7.47 | -| `present(highway); cycleway=opposite_track` | `PEDESTRIAN_AND_BICYCLE` | no direction: 1.0
forward: 1.0
back: 0.75 | | -| `highway=service; cycleway=opposite_track` | `ALL` | no direction: 1.1
forward: 1.1
back: 0.65 | | -| `highway=residential; cycleway=opposite_track` | `ALL` | no direction: 0.98
forward: 0.98
back: 0.65 | | -| `highway=residential_link; cycleway=opposite_track` | `ALL` | no direction: 0.98
forward: 0.98
back: 0.65 | | -| `highway=tertiary; cycleway=opposite_track` | `ALL` | no direction: 1.0
forward: 1.0
back: 0.75 | | -| `highway=tertiary_link; cycleway=opposite_track` | `ALL` | no direction: 1.0
forward: 1.0
back: 0.75 | | -| `highway=secondary; cycleway=opposite_track` | `ALL` | no direction: 1.5
forward: 1.5
back: 0.8 | | -| `highway=secondary_link; cycleway=opposite_track` | `ALL` | no direction: 1.5
forward: 1.5
back: 0.8 | | -| `highway=primary; cycleway=opposite_track` | `ALL` | no direction: 2.06
forward: 2.06
back: 0.85 | | -| `highway=primary_link; cycleway=opposite_track` | `ALL` | no direction: 2.06
forward: 2.06
back: 0.85 | | -| `highway=trunk; cycleway=opposite_track` | `ALL` | no direction: 7.47
forward: 7.47
back: 0.95 | 7.47 | -| `highway=trunk_link; cycleway=opposite_track` | `ALL` | no direction: 2.06
forward: 2.06
back: 0.85 | 7.47 | -| `present(highway); cycleway=shared_lane` | `PEDESTRIAN_AND_BICYCLE` | 0.77 | | -| `highway=service; cycleway=shared_lane` | `ALL` | 0.73 | | -| `highway=residential; cycleway=shared_lane` | `ALL` | 0.77 | | -| `highway=residential_link; cycleway=shared_lane` | `ALL` | 0.77 | | -| `highway=tertiary; cycleway=shared_lane` | `ALL` | 0.83 | | -| `highway=tertiary_link; cycleway=shared_lane` | `ALL` | 0.83 | | -| `highway=secondary; cycleway=shared_lane` | `ALL` | 1.25 | | -| `highway=secondary_link; cycleway=shared_lane` | `ALL` | 1.25 | | -| `highway=primary; cycleway=shared_lane` | `ALL` | 1.75 | | -| `highway=primary_link; cycleway=shared_lane` | `ALL` | 1.75 | | -| `present(highway); cycleway=opposite` | `PEDESTRIAN_AND_BICYCLE` | no direction: 1.0
forward: 1.0
back: 1.4 | | -| `highway=service; cycleway=opposite` | `ALL` | 1.1 | | -| `highway=residential; cycleway=opposite` | `ALL` | 0.98 | | -| `highway=residential_link; cycleway=opposite` | `ALL` | 0.98 | | -| `highway=tertiary; cycleway=opposite` | `ALL` | | | -| `highway=tertiary_link; cycleway=opposite` | `ALL` | | | -| `highway=secondary; cycleway=opposite` | `ALL` | no direction: 1.5
forward: 1.5
back: 1.71 | | -| `highway=secondary_link; cycleway=opposite` | `ALL` | no direction: 1.5
forward: 1.5
back: 1.71 | | -| `highway=primary; cycleway=opposite` | `ALL` | no direction: 2.06
forward: 2.06
back: 2.99 | | -| `highway=primary_link; cycleway=opposite` | `ALL` | no direction: 2.06
forward: 2.06
back: 2.99 | | -| `highway=path; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | -| `highway=footway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | -| `highway=footway; bicycle=yes; area=yes` | `PEDESTRIAN_AND_BICYCLE` | 0.9 | | -| `highway=pedestrian; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | -| `footway=sidewalk; highway=footway; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 2.5 | | -| `footway=sidewalk; highway=footway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | -| `highway=footway; footway=crossing` | `PEDESTRIAN` | 2.5 | | -| `highway=footway; footway=crossing; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | -| `highway=track; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 1.18 | | -| `highway=track; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.99 | | -| `highway=track; bicycle=yes; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 1.18 | | -| `highway=track; bicycle=designated; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 0.99 | | -| `highway=track; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 1.3 | | -| `present(highway); bicycle=designated` | `BICYCLE` | 0.97 | | -| `highway=footway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.8 | | -| `highway=cycleway; bicycle=designated` | `BICYCLE` | 0.6 | | -| `highway=bridleway; bicycle=designated` | `BICYCLE` | 0.8 | | -| `highway=service; bicycle=designated` | `ALL` | 0.84 | | -| `highway=residential; bicycle=designated` | `ALL` | 0.95 | | -| `highway=unclassified; bicycle=designated` | `ALL` | 0.95 | | -| `highway=residential_link; bicycle=designated` | `ALL` | 0.95 | | -| `highway=tertiary; bicycle=designated` | `ALL` | 0.97 | | -| `highway=tertiary_link; bicycle=designated` | `ALL` | 0.97 | | -| `highway=secondary; bicycle=designated` | `ALL` | 1.46 | | -| `highway=secondary_link; bicycle=designated` | `ALL` | 1.46 | | -| `highway=primary; bicycle=designated` | `ALL` | 2.0 | | -| `highway=primary_link; bicycle=designated` | `ALL` | 2.0 | | -| `highway=trunk; bicycle=designated` | `ALL` | 7.25 | 7.47 | -| `highway=trunk_link; bicycle=designated` | `ALL` | 2.0 | 7.47 | -| `highway=motorway; bicycle=designated` | `BICYCLE_AND_CAR` | 7.76 | | -| `highway=motorway_link; bicycle=designated` | `BICYCLE_AND_CAR` | 2.0 | | +| specifier | permission | bike safety | walk safety | +|-----------------------------|--------------------------|-------------|-------------| +| `mtb:scale=3` | `NONE` | | | +| `mtb:scale=4` | `NONE` | | | +| `mtb:scale=5` | `NONE` | | | +| `mtb:scale=6` | `NONE` | | | +| `highway=bridleway` | `NONE` | 1.3 | | +| `highway=corridor` | `PEDESTRIAN` | | | +| `highway=steps` | `PEDESTRIAN` | | | +| `highway=crossing` | `PEDESTRIAN` | | | +| `highway=platform` | `PEDESTRIAN` | | | +| `public_transport=platform` | `PEDESTRIAN` | | | +| `railway=platform` | `PEDESTRIAN` | | | +| `highway=pedestrian` | `PEDESTRIAN` | 0.9 | | +| `highway=footway` | `PEDESTRIAN` | 1.1 | | +| `mtb:scale=1` | `PEDESTRIAN` | 1.5 | | +| `mtb:scale=2` | `PEDESTRIAN` | 3.0 | | +| `indoor=area` | `PEDESTRIAN` | | | +| `indoor=corridor` | `PEDESTRIAN` | | | +| `highway=cycleway` | `BICYCLE` | 0.6 | | +| `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=path` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `highway=living_street` | `ALL` | 0.9 | | +| `highway=unclassified` | `ALL` | | | +| `highway=road` | `ALL` | | | +| `highway=byway` | `ALL` | 1.3 | | +| `highway=track` | `ALL` | 1.3 | | +| `highway=service` | `ALL` | 1.1 | | +| `highway=residential` | `ALL` | 0.98 | | +| `highway=residential_link` | `ALL` | 0.98 | | +| `highway=tertiary` | `ALL` | | | +| `highway=tertiary_link` | `ALL` | | | +| `highway=secondary` | `ALL` | 1.5 | | +| `highway=secondary_link` | `ALL` | 1.5 | | +| `highway=primary` | `ALL` | 2.06 | | +| `highway=primary_link` | `ALL` | 2.06 | | +| `highway=trunk` | `ALL` | 7.47 | 7.47 | +| `highway=trunk_link` | `ALL` | 2.06 | 7.47 | +| `highway=motorway_link` | `CAR` | 2.06 | | +| `highway=motorway` | `CAR` | 8.0 | | @@ -191,32 +74,43 @@ way properties. Multiple mixins can apply to the same way and their effects comp -| matcher | bicycle safety | walk safety | -|-----------------------------------------------------------------------------------------------------------------------|----------------|-------------| -| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 0.7 | | -| `highway=trunk; sidewalk=yes¦highway=trunk; sidewalk=left¦highway=trunk; sidewalk=right¦highway=trunk; sidewalk=both` | | 0.25 | -| `highway=trunk; sidewalk=lane` | | 0.6 | -| `surface=unpaved` | 1.18 | | -| `surface=compacted` | 1.18 | | -| `surface=wood` | 1.18 | | -| `surface=cobblestone` | 1.3 | | -| `surface=sett` | 1.3 | | -| `surface=unhewn_cobblestone` | 1.5 | | -| `surface=grass_paver` | 1.3 | | -| `surface=pebblestone` | 1.3 | | -| `surface=metal` | 1.3 | | -| `surface=ground` | 1.5 | | -| `surface=dirt` | 1.5 | | -| `surface=earth` | 1.5 | | -| `surface=grass` | 1.5 | | -| `surface=mud` | 1.5 | | -| `surface=woodchip` | 1.5 | | -| `surface=gravel` | 1.5 | | -| `surface=artifical_turf` | 1.5 | | -| `surface=sand` | 100.0 | | -| `foot=discouraged` | | 3.0 | -| `bicycle=discouraged` | 3.0 | | -| `foot=use_sidepath` | | 5.0 | -| `bicycle=use_sidepath` | 5.0 | | +| matcher | add permission | remove permission | bicycle safety | walk safety | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------|------------------------|-----------------------------------------------------|-------------| +| `motorroad=yes` | | PEDESTRIAN_AND_BICYCLE | | | +| `cycleway=lane; not(highway=cycleway)` | BICYCLE | | 0.87 | | +| `cycleway=share_busway; not(highway=cycleway)` | BICYCLE | | 0.92 | | +| `cycleway=opposite_lane; not(highway=cycleway)` | backward: BICYCLE | | no direction: 1.0
forward: 1.0
back: 0.87 | | +| `cycleway=track; not(highway=cycleway)` | BICYCLE | | 0.75 | | +| `cycleway=opposite_track; not(highway=cycleway)` | backward: BICYCLE | | no direction: 1.0
forward: 1.0
back: 0.75 | | +| `cycleway=shared_lane; not(highway=cycleway)` | BICYCLE | | 0.77 | | +| `cycleway=opposite; not(highway=cycleway)` | backward: BICYCLE | | no direction: 1.0
forward: 1.0
back: 1.4 | | +| `footway=sidewalk` | | | 2.5 | | +| `footway=crossing` | | | 1.5 | | +| `bicycle=designated; cycleway not one of [no, none] or absent; not(highway=cycleway); not(lcn=yes); not(rcn=yes); not(ncn=yes); not(bicycle_road=yes); not(cyclestreet=yes)` | | | 0.8 | | +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | | | 0.7 | | +| `highway=trunk; sidewalk=yes¦highway=trunk; sidewalk=left¦highway=trunk; sidewalk=right¦highway=trunk; sidewalk=both` | | | | 0.25 | +| `highway=trunk; sidewalk=lane` | | | | 0.6 | +| `surface=unpaved` | | | 1.18 | | +| `surface=compacted` | | | 1.18 | | +| `surface=wood` | | | 1.18 | | +| `surface=cobblestone` | | | 1.3 | | +| `surface=sett` | | | 1.3 | | +| `surface=unhewn_cobblestone` | | | 1.5 | | +| `surface=grass_paver` | | | 1.3 | | +| `surface=pebblestone` | | | 1.3 | | +| `surface=metal` | | | 1.3 | | +| `surface=ground` | | | 1.5 | | +| `surface=dirt` | | | 1.5 | | +| `surface=earth` | | | 1.5 | | +| `surface=grass` | | | 1.5 | | +| `surface=mud` | | | 1.5 | | +| `surface=woodchip` | | | 1.5 | | +| `surface=gravel` | | | 1.5 | | +| `surface=artifical_turf` | | | 1.5 | | +| `surface=sand` | | | 100.0 | | +| `foot=discouraged` | | | | 3.0 | +| `bicycle=discouraged` | | | 3.0 | | +| `foot=use_sidepath` | | | | 5.0 | +| `bicycle=use_sidepath` | | | 5.0 | | diff --git a/doc/user/osm/UK.md b/doc/user/osm/UK.md index 87ee6603f2a..7599558f1eb 100644 --- a/doc/user/osm/UK.md +++ b/doc/user/osm/UK.md @@ -22,179 +22,50 @@ Lower safety values make an OSM way more desirable and higher values less desira -| specifier | permission | bike safety | walk safety | -|---------------------------------------------------------|--------------------------|-------------------------------------------------------|-------------| -| `highway=cycleway` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | -| `highway=bridleway` | `PEDESTRIAN_AND_BICYCLE` | 1.3 | | -| `highway=trunk` | `ALL` | 2.5 | 2.5 | -| `highway=trunk_link` | `ALL` | 2.06 | 2.5 | -| `highway=trunk; cycleway=lane` | `ALL` | 1.5 | 2.5 | -| `highway=trunk_link; cycleway=lane` | `ALL` | 1.15 | 2.5 | -| `highway=trunk; cycleway=share_busway` | `ALL` | 1.75 | 2.5 | -| `highway=trunk_link; cycleway=share_busway` | `ALL` | 1.25 | 2.5 | -| `highway=trunk; cycleway=opposite_lane` | `ALL` | no direction: 2.5
forward: 2.5
back: 1.5 | 2.5 | -| `highway=trunk_link; cycleway=opposite_lane` | `ALL` | no direction: 2.06
forward: 2.06
back: 1.15 | 2.5 | -| `highway=trunk; cycleway=track` | `ALL` | 0.95 | 2.5 | -| `highway=trunk_link; cycleway=track` | `ALL` | 0.85 | 2.5 | -| `highway=trunk; cycleway=opposite_track` | `ALL` | no direction: 2.5
forward: 2.5
back: 0.95 | 2.5 | -| `highway=trunk_link; cycleway=opposite_track` | `ALL` | no direction: 2.5
forward: 2.5
back: 0.85 | 2.5 | -| `highway=trunk; bicycle=designated` | `ALL` | 1.75 | 2.5 | -| `highway=trunk_link; bicycle=designated` | `ALL` | 1.75 | 2.5 | -| `mtb:scale=3` | `NONE` | | | -| `mtb:scale=4` | `NONE` | | | -| `mtb:scale=5` | `NONE` | | | -| `mtb:scale=6` | `NONE` | | | -| `highway=bridleway` | `NONE` | 1.3 | | -| `highway=corridor` | `PEDESTRIAN` | | | -| `highway=steps` | `PEDESTRIAN` | | | -| `highway=crossing` | `PEDESTRIAN` | | | -| `highway=platform` | `PEDESTRIAN` | | | -| `public_transport=platform` | `PEDESTRIAN` | | | -| `railway=platform` | `PEDESTRIAN` | | | -| `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | -| `highway=pedestrian` | `PEDESTRIAN` | 0.9 | | -| `highway=footway` | `PEDESTRIAN` | 1.1 | | -| `mtb:scale=1` | `PEDESTRIAN` | | | -| `mtb:scale=2` | `PEDESTRIAN` | | | -| `indoor=area` | `PEDESTRIAN` | | | -| `indoor=corridor` | `PEDESTRIAN` | | | -| `highway=cycleway` | `BICYCLE` | 0.6 | | -| `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | -| `highway=path` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | -| `highway=living_street` | `ALL` | 0.9 | | -| `highway=unclassified` | `ALL` | | | -| `highway=road` | `ALL` | | | -| `highway=byway` | `ALL` | 1.3 | | -| `highway=track` | `ALL` | 1.3 | | -| `highway=service` | `ALL` | 1.1 | | -| `highway=residential` | `ALL` | 0.98 | | -| `highway=residential_link` | `ALL` | 0.98 | | -| `highway=tertiary` | `ALL` | | | -| `highway=tertiary_link` | `ALL` | | | -| `highway=secondary` | `ALL` | 1.5 | | -| `highway=secondary_link` | `ALL` | 1.5 | | -| `highway=primary` | `ALL` | 2.06 | | -| `highway=primary_link` | `ALL` | 2.06 | | -| `highway=trunk` | `ALL` | 7.47 | 7.47 | -| `highway=trunk_link` | `ALL` | 2.06 | 7.47 | -| `highway=motorway_link` | `CAR` | 2.06 | | -| `highway=motorway` | `CAR` | 8.0 | | -| `motorroad=yes` | `CAR` | 7.47 | 7.47 | -| `present(highway); cycleway=lane` | `PEDESTRIAN_AND_BICYCLE` | 0.87 | | -| `highway=service; cycleway=lane` | `ALL` | 0.77 | | -| `highway=residential; cycleway=lane` | `ALL` | 0.77 | | -| `highway=residential_link; cycleway=lane` | `ALL` | 0.77 | | -| `highway=tertiary; cycleway=lane` | `ALL` | 0.87 | | -| `highway=tertiary_link; cycleway=lane` | `ALL` | 0.87 | | -| `highway=secondary; cycleway=lane` | `ALL` | 0.96 | | -| `highway=secondary_link; cycleway=lane` | `ALL` | 0.96 | | -| `highway=primary; cycleway=lane` | `ALL` | 1.15 | | -| `highway=primary_link; cycleway=lane` | `ALL` | 1.15 | | -| `highway=trunk; cycleway=lane` | `ALL` | 1.5 | 7.47 | -| `highway=trunk_link; cycleway=lane` | `ALL` | 1.15 | 7.47 | -| `highway=motorway; cycleway=lane` | `BICYCLE_AND_CAR` | 2.0 | | -| `highway=motorway_link; cycleway=lane` | `BICYCLE_AND_CAR` | 1.15 | | -| `present(highway); cycleway=share_busway` | `PEDESTRIAN_AND_BICYCLE` | 0.92 | | -| `highway=service; cycleway=share_busway` | `ALL` | 0.85 | | -| `highway=residential; cycleway=share_busway` | `ALL` | 0.85 | | -| `highway=residential_link; cycleway=share_busway` | `ALL` | 0.85 | | -| `highway=tertiary; cycleway=share_busway` | `ALL` | 0.92 | | -| `highway=tertiary_link; cycleway=share_busway` | `ALL` | 0.92 | | -| `highway=secondary; cycleway=share_busway` | `ALL` | 0.99 | | -| `highway=secondary_link; cycleway=share_busway` | `ALL` | 0.99 | | -| `highway=primary; cycleway=share_busway` | `ALL` | 1.25 | | -| `highway=primary_link; cycleway=share_busway` | `ALL` | 1.25 | | -| `highway=trunk; cycleway=share_busway` | `ALL` | 1.75 | 7.47 | -| `highway=trunk_link; cycleway=share_busway` | `ALL` | 1.25 | 7.47 | -| `highway=motorway; cycleway=share_busway` | `BICYCLE_AND_CAR` | 2.5 | | -| `highway=motorway_link; cycleway=share_busway` | `BICYCLE_AND_CAR` | 1.25 | | -| `present(highway); cycleway=opposite_lane` | `PEDESTRIAN_AND_BICYCLE` | no direction: 1.0
forward: 1.0
back: 0.87 | | -| `highway=service; cycleway=opposite_lane` | `ALL` | no direction: 1.1
forward: 1.1
back: 0.77 | | -| `highway=residential; cycleway=opposite_lane` | `ALL` | no direction: 0.98
forward: 0.98
back: 0.77 | | -| `highway=residential_link; cycleway=opposite_lane` | `ALL` | no direction: 0.98
forward: 0.98
back: 0.77 | | -| `highway=tertiary; cycleway=opposite_lane` | `ALL` | no direction: 1.0
forward: 1.0
back: 0.87 | | -| `highway=tertiary_link; cycleway=opposite_lane` | `ALL` | no direction: 1.0
forward: 1.0
back: 0.87 | | -| `highway=secondary; cycleway=opposite_lane` | `ALL` | no direction: 1.5
forward: 1.5
back: 0.96 | | -| `highway=secondary_link; cycleway=opposite_lane` | `ALL` | no direction: 1.5
forward: 1.5
back: 0.96 | | -| `highway=primary; cycleway=opposite_lane` | `ALL` | no direction: 2.06
forward: 2.06
back: 1.15 | | -| `highway=primary_link; cycleway=opposite_lane` | `ALL` | no direction: 2.06
forward: 2.06
back: 1.15 | | -| `highway=trunk; cycleway=opposite_lane` | `ALL` | no direction: 7.47
forward: 7.47
back: 1.15 | 7.47 | -| `highway=trunk_link; cycleway=opposite_lane` | `ALL` | no direction: 2.06
forward: 2.06
back: 1.15 | 7.47 | -| `present(highway); cycleway=track` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | -| `highway=service; cycleway=track` | `ALL` | 0.65 | | -| `highway=residential; cycleway=track` | `ALL` | 0.65 | | -| `highway=residential_link; cycleway=track` | `ALL` | 0.65 | | -| `highway=tertiary; cycleway=track` | `ALL` | 0.75 | | -| `highway=tertiary_link; cycleway=track` | `ALL` | 0.75 | | -| `highway=secondary; cycleway=track` | `ALL` | 0.8 | | -| `highway=secondary_link; cycleway=track` | `ALL` | 0.8 | | -| `highway=primary; cycleway=track` | `ALL` | 0.85 | | -| `highway=primary_link; cycleway=track` | `ALL` | 0.85 | | -| `highway=trunk; cycleway=track` | `ALL` | 0.95 | 7.47 | -| `highway=trunk_link; cycleway=track` | `ALL` | 0.85 | 7.47 | -| `present(highway); cycleway=opposite_track` | `PEDESTRIAN_AND_BICYCLE` | no direction: 1.0
forward: 1.0
back: 0.75 | | -| `highway=service; cycleway=opposite_track` | `ALL` | no direction: 1.1
forward: 1.1
back: 0.65 | | -| `highway=residential; cycleway=opposite_track` | `ALL` | no direction: 0.98
forward: 0.98
back: 0.65 | | -| `highway=residential_link; cycleway=opposite_track` | `ALL` | no direction: 0.98
forward: 0.98
back: 0.65 | | -| `highway=tertiary; cycleway=opposite_track` | `ALL` | no direction: 1.0
forward: 1.0
back: 0.75 | | -| `highway=tertiary_link; cycleway=opposite_track` | `ALL` | no direction: 1.0
forward: 1.0
back: 0.75 | | -| `highway=secondary; cycleway=opposite_track` | `ALL` | no direction: 1.5
forward: 1.5
back: 0.8 | | -| `highway=secondary_link; cycleway=opposite_track` | `ALL` | no direction: 1.5
forward: 1.5
back: 0.8 | | -| `highway=primary; cycleway=opposite_track` | `ALL` | no direction: 2.06
forward: 2.06
back: 0.85 | | -| `highway=primary_link; cycleway=opposite_track` | `ALL` | no direction: 2.06
forward: 2.06
back: 0.85 | | -| `highway=trunk; cycleway=opposite_track` | `ALL` | no direction: 7.47
forward: 7.47
back: 0.95 | 7.47 | -| `highway=trunk_link; cycleway=opposite_track` | `ALL` | no direction: 2.06
forward: 2.06
back: 0.85 | 7.47 | -| `present(highway); cycleway=shared_lane` | `PEDESTRIAN_AND_BICYCLE` | 0.77 | | -| `highway=service; cycleway=shared_lane` | `ALL` | 0.73 | | -| `highway=residential; cycleway=shared_lane` | `ALL` | 0.77 | | -| `highway=residential_link; cycleway=shared_lane` | `ALL` | 0.77 | | -| `highway=tertiary; cycleway=shared_lane` | `ALL` | 0.83 | | -| `highway=tertiary_link; cycleway=shared_lane` | `ALL` | 0.83 | | -| `highway=secondary; cycleway=shared_lane` | `ALL` | 1.25 | | -| `highway=secondary_link; cycleway=shared_lane` | `ALL` | 1.25 | | -| `highway=primary; cycleway=shared_lane` | `ALL` | 1.75 | | -| `highway=primary_link; cycleway=shared_lane` | `ALL` | 1.75 | | -| `present(highway); cycleway=opposite` | `PEDESTRIAN_AND_BICYCLE` | no direction: 1.0
forward: 1.0
back: 1.4 | | -| `highway=service; cycleway=opposite` | `ALL` | 1.1 | | -| `highway=residential; cycleway=opposite` | `ALL` | 0.98 | | -| `highway=residential_link; cycleway=opposite` | `ALL` | 0.98 | | -| `highway=tertiary; cycleway=opposite` | `ALL` | | | -| `highway=tertiary_link; cycleway=opposite` | `ALL` | | | -| `highway=secondary; cycleway=opposite` | `ALL` | no direction: 1.5
forward: 1.5
back: 1.71 | | -| `highway=secondary_link; cycleway=opposite` | `ALL` | no direction: 1.5
forward: 1.5
back: 1.71 | | -| `highway=primary; cycleway=opposite` | `ALL` | no direction: 2.06
forward: 2.06
back: 2.99 | | -| `highway=primary_link; cycleway=opposite` | `ALL` | no direction: 2.06
forward: 2.06
back: 2.99 | | -| `highway=path; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | -| `highway=footway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | -| `highway=footway; bicycle=yes; area=yes` | `PEDESTRIAN_AND_BICYCLE` | 0.9 | | -| `highway=pedestrian; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | -| `footway=sidewalk; highway=footway; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 2.5 | | -| `footway=sidewalk; highway=footway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | -| `highway=footway; footway=crossing` | `PEDESTRIAN` | 2.5 | | -| `highway=footway; footway=crossing; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | -| `highway=track; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 1.18 | | -| `highway=track; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.99 | | -| `highway=track; bicycle=yes; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 1.18 | | -| `highway=track; bicycle=designated; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 0.99 | | -| `highway=track; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 1.3 | | -| `present(highway); bicycle=designated` | `BICYCLE` | 0.97 | | -| `highway=footway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.8 | | -| `highway=cycleway; bicycle=designated` | `BICYCLE` | 0.6 | | -| `highway=bridleway; bicycle=designated` | `BICYCLE` | 0.8 | | -| `highway=service; bicycle=designated` | `ALL` | 0.84 | | -| `highway=residential; bicycle=designated` | `ALL` | 0.95 | | -| `highway=unclassified; bicycle=designated` | `ALL` | 0.95 | | -| `highway=residential_link; bicycle=designated` | `ALL` | 0.95 | | -| `highway=tertiary; bicycle=designated` | `ALL` | 0.97 | | -| `highway=tertiary_link; bicycle=designated` | `ALL` | 0.97 | | -| `highway=secondary; bicycle=designated` | `ALL` | 1.46 | | -| `highway=secondary_link; bicycle=designated` | `ALL` | 1.46 | | -| `highway=primary; bicycle=designated` | `ALL` | 2.0 | | -| `highway=primary_link; bicycle=designated` | `ALL` | 2.0 | | -| `highway=trunk; bicycle=designated` | `ALL` | 7.25 | 7.47 | -| `highway=trunk_link; bicycle=designated` | `ALL` | 2.0 | 7.47 | -| `highway=motorway; bicycle=designated` | `BICYCLE_AND_CAR` | 7.76 | | -| `highway=motorway_link; bicycle=designated` | `BICYCLE_AND_CAR` | 2.0 | | +| specifier | permission | bike safety | walk safety | +|-----------------------------|--------------------------|-------------|-------------| +| `highway=cycleway` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | +| `highway=bridleway` | `PEDESTRIAN_AND_BICYCLE` | 1.3 | | +| `highway=trunk` | `ALL` | 2.5 | 2.5 | +| `highway=trunk_link` | `ALL` | 2.06 | 2.5 | +| `mtb:scale=3` | `NONE` | | | +| `mtb:scale=4` | `NONE` | | | +| `mtb:scale=5` | `NONE` | | | +| `mtb:scale=6` | `NONE` | | | +| `highway=bridleway` | `NONE` | 1.3 | | +| `highway=corridor` | `PEDESTRIAN` | | | +| `highway=steps` | `PEDESTRIAN` | | | +| `highway=crossing` | `PEDESTRIAN` | | | +| `highway=platform` | `PEDESTRIAN` | | | +| `public_transport=platform` | `PEDESTRIAN` | | | +| `railway=platform` | `PEDESTRIAN` | | | +| `highway=pedestrian` | `PEDESTRIAN` | 0.9 | | +| `highway=footway` | `PEDESTRIAN` | 1.1 | | +| `mtb:scale=1` | `PEDESTRIAN` | 1.5 | | +| `mtb:scale=2` | `PEDESTRIAN` | 3.0 | | +| `indoor=area` | `PEDESTRIAN` | | | +| `indoor=corridor` | `PEDESTRIAN` | | | +| `highway=cycleway` | `BICYCLE` | 0.6 | | +| `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=path` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `highway=living_street` | `ALL` | 0.9 | | +| `highway=unclassified` | `ALL` | | | +| `highway=road` | `ALL` | | | +| `highway=byway` | `ALL` | 1.3 | | +| `highway=track` | `ALL` | 1.3 | | +| `highway=service` | `ALL` | 1.1 | | +| `highway=residential` | `ALL` | 0.98 | | +| `highway=residential_link` | `ALL` | 0.98 | | +| `highway=tertiary` | `ALL` | | | +| `highway=tertiary_link` | `ALL` | | | +| `highway=secondary` | `ALL` | 1.5 | | +| `highway=secondary_link` | `ALL` | 1.5 | | +| `highway=primary` | `ALL` | 2.06 | | +| `highway=primary_link` | `ALL` | 2.06 | | +| `highway=trunk` | `ALL` | 7.47 | 7.47 | +| `highway=trunk_link` | `ALL` | 2.06 | 7.47 | +| `highway=motorway_link` | `CAR` | 2.06 | | +| `highway=motorway` | `CAR` | 8.0 | | @@ -207,33 +78,44 @@ way properties. Multiple mixins can apply to the same way and their effects comp -| matcher | bicycle safety | walk safety | -|-----------------------------------------------------------------------------------------------------------------------|----------------|-------------| -| `expressway=yes` | 5.0 | 5.0 | -| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 0.7 | | -| `highway=trunk; sidewalk=yes¦highway=trunk; sidewalk=left¦highway=trunk; sidewalk=right¦highway=trunk; sidewalk=both` | | 0.25 | -| `highway=trunk; sidewalk=lane` | | 0.6 | -| `surface=unpaved` | 1.18 | | -| `surface=compacted` | 1.18 | | -| `surface=wood` | 1.18 | | -| `surface=cobblestone` | 1.3 | | -| `surface=sett` | 1.3 | | -| `surface=unhewn_cobblestone` | 1.5 | | -| `surface=grass_paver` | 1.3 | | -| `surface=pebblestone` | 1.3 | | -| `surface=metal` | 1.3 | | -| `surface=ground` | 1.5 | | -| `surface=dirt` | 1.5 | | -| `surface=earth` | 1.5 | | -| `surface=grass` | 1.5 | | -| `surface=mud` | 1.5 | | -| `surface=woodchip` | 1.5 | | -| `surface=gravel` | 1.5 | | -| `surface=artifical_turf` | 1.5 | | -| `surface=sand` | 100.0 | | -| `foot=discouraged` | | 3.0 | -| `bicycle=discouraged` | 3.0 | | -| `foot=use_sidepath` | | 5.0 | -| `bicycle=use_sidepath` | 5.0 | | +| matcher | add permission | remove permission | bicycle safety | walk safety | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------|------------------------|-----------------------------------------------------|-------------| +| `expressway=yes` | | | 5.0 | 5.0 | +| `motorroad=yes` | | PEDESTRIAN_AND_BICYCLE | | | +| `cycleway=lane; not(highway=cycleway)` | BICYCLE | | 0.87 | | +| `cycleway=share_busway; not(highway=cycleway)` | BICYCLE | | 0.92 | | +| `cycleway=opposite_lane; not(highway=cycleway)` | backward: BICYCLE | | no direction: 1.0
forward: 1.0
back: 0.87 | | +| `cycleway=track; not(highway=cycleway)` | BICYCLE | | 0.75 | | +| `cycleway=opposite_track; not(highway=cycleway)` | backward: BICYCLE | | no direction: 1.0
forward: 1.0
back: 0.75 | | +| `cycleway=shared_lane; not(highway=cycleway)` | BICYCLE | | 0.77 | | +| `cycleway=opposite; not(highway=cycleway)` | backward: BICYCLE | | no direction: 1.0
forward: 1.0
back: 1.4 | | +| `footway=sidewalk` | | | 2.5 | | +| `footway=crossing` | | | 1.5 | | +| `bicycle=designated; cycleway not one of [no, none] or absent; not(highway=cycleway); not(lcn=yes); not(rcn=yes); not(ncn=yes); not(bicycle_road=yes); not(cyclestreet=yes)` | | | 0.8 | | +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | | | 0.7 | | +| `highway=trunk; sidewalk=yes¦highway=trunk; sidewalk=left¦highway=trunk; sidewalk=right¦highway=trunk; sidewalk=both` | | | | 0.25 | +| `highway=trunk; sidewalk=lane` | | | | 0.6 | +| `surface=unpaved` | | | 1.18 | | +| `surface=compacted` | | | 1.18 | | +| `surface=wood` | | | 1.18 | | +| `surface=cobblestone` | | | 1.3 | | +| `surface=sett` | | | 1.3 | | +| `surface=unhewn_cobblestone` | | | 1.5 | | +| `surface=grass_paver` | | | 1.3 | | +| `surface=pebblestone` | | | 1.3 | | +| `surface=metal` | | | 1.3 | | +| `surface=ground` | | | 1.5 | | +| `surface=dirt` | | | 1.5 | | +| `surface=earth` | | | 1.5 | | +| `surface=grass` | | | 1.5 | | +| `surface=mud` | | | 1.5 | | +| `surface=woodchip` | | | 1.5 | | +| `surface=gravel` | | | 1.5 | | +| `surface=artifical_turf` | | | 1.5 | | +| `surface=sand` | | | 100.0 | | +| `foot=discouraged` | | | | 3.0 | +| `bicycle=discouraged` | | | 3.0 | | +| `foot=use_sidepath` | | | | 5.0 | +| `bicycle=use_sidepath` | | | 5.0 | |