From 01df869d893d503d24906d1a0fb23cd0646f0c8d Mon Sep 17 00:00:00 2001 From: sharhio Date: Fri, 14 Jun 2024 09:55:52 +0300 Subject: [PATCH 01/54] return systemUrl, filter neareast by network, hide unwanted networks in maplayer, handle empty name --- .../vehiclerental/VehicleRentalLayerBuilder.java | 3 +++ .../apis/gtfs/datafetchers/QueryTypeImpl.java | 2 ++ .../apis/gtfs/datafetchers/RentalVehicleImpl.java | 5 +++++ .../apis/gtfs/generated/GraphQLDataFetchers.java | 2 ++ .../apis/gtfs/generated/GraphQLTypes.java | 10 ++++++++++ .../apis/transmodel/TransmodelGraphQLSchema.java | 10 ++++++++++ .../inspector/vector/LayerParameters.java | 8 +++++++- .../routing/graphfinder/DirectGraphFinder.java | 1 + .../routing/graphfinder/GraphFinder.java | 1 + .../graphfinder/PlaceFinderTraverseVisitor.java | 6 ++++++ .../routing/graphfinder/StreetGraphFinder.java | 2 ++ .../datasources/GbfsGeofencingZoneMapper.java | 3 ++- .../org/opentripplanner/apis/gtfs/schema.graphqls | 6 ++++++ .../apis/transmodel/schema.graphql | 3 +++ .../apis/gtfs/GraphQLIntegrationTest.java | 1 + .../PlaceFinderTraverseVisitorTest.java | 6 ++++++ .../graphfinder/StreetGraphFinderTest.java | 15 +++++++++++++++ 17 files changed, 82 insertions(+), 2 deletions(-) diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java index 0869aeb2ba8..24d922bffb3 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java @@ -18,6 +18,7 @@ abstract class VehicleRentalLayerBuilder extends LayerBuilder { private final VehicleRentalService service; + private final List hideNetworks; public VehicleRentalLayerBuilder( VehicleRentalService service, @@ -30,6 +31,7 @@ public VehicleRentalLayerBuilder( layerParameters.expansionFactor() ); this.service = service; + this.hideNetworks = layerParameters.hideNetworks(); } @Override @@ -39,6 +41,7 @@ protected List getGeometries(Envelope query) { } return getVehicleRentalPlaces(service) .stream() + .filter(rental -> !hideNetworks.contains(rental.getNetwork())) .map(rental -> { Coordinate coordinate = new Coordinate(rental.getLongitude(), rental.getLatitude()); Point point = GeometryUtils.getGeometryFactory().createPoint(coordinate); diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java index eae4bc2ad33..d46fa2a8cf1 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java @@ -330,6 +330,7 @@ public DataFetcher> nearest() { List filterByPlaceTypes = args.getGraphQLFilterByPlaceTypes() != null ? args.getGraphQLFilterByPlaceTypes().stream().map(GraphQLUtils::toModel).toList() : DEFAULT_PLACE_TYPES; + List filterByNetworkNames = args.getGraphQLFilterByNetworkNames(); List places; try { @@ -347,6 +348,7 @@ public DataFetcher> nearest() { filterByStations, filterByRoutes, filterByBikeRentalStations, + filterByNetworkNames, getTransitService(environment) ) ); diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java index 53c3ba1343d..84b45270a8b 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java @@ -61,6 +61,11 @@ public DataFetcher vehicleType() { return environment -> getSource(environment).vehicleType; } + @Override + public DataFetcher systemUrl() { + return environment -> getSource(environment).system.url; + } + private VehicleRentalVehicle getSource(DataFetchingEnvironment environment) { return environment.getSource(); } diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java index 6c66d3992f4..7b35af403cc 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java @@ -857,6 +857,8 @@ public interface GraphQLRentalVehicle { public DataFetcher vehicleId(); public DataFetcher vehicleType(); + + DataFetcher systemUrl(); } public interface GraphQLRentalVehicleEntityCounts { diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java index 3c187ca3bbe..0608e97aa77 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java @@ -2416,6 +2416,7 @@ public static class GraphQLQueryTypeNearestArgs { private Double lon; private Integer maxDistance; private Integer maxResults; + private List filterByNetworkNames; public GraphQLQueryTypeNearestArgs(Map args) { if (args != null) { @@ -2447,6 +2448,7 @@ public GraphQLQueryTypeNearestArgs(Map args) { this.lon = (Double) args.get("lon"); this.maxDistance = (Integer) args.get("maxDistance"); this.maxResults = (Integer) args.get("maxResults"); + this.filterByNetworkNames = (List) args.get("filterByNetworkNames"); } } @@ -2537,6 +2539,14 @@ public void setGraphQLMaxDistance(Integer maxDistance) { public void setGraphQLMaxResults(Integer maxResults) { this.maxResults = maxResults; } + + public List getGraphQLFilterByNetworkNames() { + return this.filterByNetworkNames; + } + + public void setGraphQLFilterByNetworkNames(List networkNames) { + this.filterByNetworkNames = networkNames; + } } public static class GraphQLQueryTypeNodeArgs { diff --git a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java index 638d7783e9a..455c7400718 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java @@ -847,6 +847,14 @@ private GraphQLSchema create() { .type(Scalars.GraphQLInt) .build() ) + .argument( + GraphQLArgument + .newArgument() + .name("filterByNetworkNames") + .description("Only include places that match one of the given network names.") + .type(new GraphQLList(Scalars.GraphQLString)) + .build() + ) .argument( GraphQLArgument .newArgument() @@ -937,6 +945,7 @@ private GraphQLSchema create() { if (placeTypes.contains(TransmodelPlaceType.STOP_PLACE)) { maxResults *= 5; } + List filterByNetworkNames = environment.getArgument("filterByNetworkNames"); List places; places = @@ -953,6 +962,7 @@ private GraphQLSchema create() { filterByStations, filterByRoutes, filterByBikeRentalStations, + filterByNetworkNames, GqlUtil.getTransitService(environment) ); diff --git a/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java b/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java index ca4a6a64c76..23d5d3c2f59 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java +++ b/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java @@ -1,5 +1,7 @@ package org.opentripplanner.inspector.vector; +import java.util.ArrayList; +import java.util.List; import org.opentripplanner.apis.support.mapping.PropertyMapper; /** @@ -10,7 +12,7 @@ public interface LayerParameters> { int MAX_ZOOM = 20; int CACHE_MAX_SECONDS = -1; double EXPANSION_FACTOR = 0.25d; - + List HIDE_NETWORKS = new ArrayList<>(); /** * User-visible name of the layer */ @@ -54,4 +56,8 @@ default int cacheMaxSeconds() { default double expansionFactor() { return EXPANSION_FACTOR; } + + default List hideNetworks() { + return HIDE_NETWORKS; + } } diff --git a/src/main/java/org/opentripplanner/routing/graphfinder/DirectGraphFinder.java b/src/main/java/org/opentripplanner/routing/graphfinder/DirectGraphFinder.java index 5ffa7cd2301..7eaf60e38f1 100644 --- a/src/main/java/org/opentripplanner/routing/graphfinder/DirectGraphFinder.java +++ b/src/main/java/org/opentripplanner/routing/graphfinder/DirectGraphFinder.java @@ -63,6 +63,7 @@ public List findClosestPlaces( List filterByStations, List filterByRoutes, List filterByBikeRentalStations, + List filterByNetworkNames, TransitService transitService ) { throw new UnsupportedOperationException("Not implemented"); diff --git a/src/main/java/org/opentripplanner/routing/graphfinder/GraphFinder.java b/src/main/java/org/opentripplanner/routing/graphfinder/GraphFinder.java index 4c0b0c81144..eecc4f8015a 100644 --- a/src/main/java/org/opentripplanner/routing/graphfinder/GraphFinder.java +++ b/src/main/java/org/opentripplanner/routing/graphfinder/GraphFinder.java @@ -69,6 +69,7 @@ List findClosestPlaces( List filterByStations, List filterByRoutes, List filterByBikeRentalStations, + List filterByNetworkNames, TransitService transitService ); } diff --git a/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java b/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java index e71504d58f3..6b06e358103 100644 --- a/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java +++ b/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java @@ -44,6 +44,7 @@ public class PlaceFinderTraverseVisitor implements TraverseVisitor private final boolean includeStations; private final int maxResults; private final double radiusMeters; + private final Set filterByNetworkNames; /** * @param transitService A TransitService used in finding information about the @@ -69,6 +70,7 @@ public PlaceFinderTraverseVisitor( List filterByStations, List filterByRoutes, List filterByBikeRentalStations, + List filterByNetworkNames, int maxResults, double radiusMeters ) { @@ -82,6 +84,7 @@ public PlaceFinderTraverseVisitor( this.filterByStations = toSet(filterByStations); this.filterByRoutes = toSet(filterByRoutes); this.filterByVehicleRental = toSet(filterByBikeRentalStations); + this.filterByNetworkNames = toSet(filterByNetworkNames); includeStops = shouldInclude(filterByPlaceTypes, PlaceType.STOP); includePatternAtStops = shouldInclude(filterByPlaceTypes, PlaceType.PATTERN_AT_STOP); @@ -264,6 +267,9 @@ private void handleVehicleRental(VehicleRentalPlace station, double distance) { if (seenVehicleRentalPlaces.contains(station.getId())) { return; } + if (!filterByNetworkNames.isEmpty() && !filterByNetworkNames.contains(station.getNetwork())) { + return; + } seenVehicleRentalPlaces.add(station.getId()); placesFound.add(new PlaceAtDistance(station, distance)); } diff --git a/src/main/java/org/opentripplanner/routing/graphfinder/StreetGraphFinder.java b/src/main/java/org/opentripplanner/routing/graphfinder/StreetGraphFinder.java index 1b2b1d8f522..48b4236cd5b 100644 --- a/src/main/java/org/opentripplanner/routing/graphfinder/StreetGraphFinder.java +++ b/src/main/java/org/opentripplanner/routing/graphfinder/StreetGraphFinder.java @@ -56,6 +56,7 @@ public List findClosestPlaces( List filterByStations, List filterByRoutes, List filterByBikeRentalStations, + List filterByNetworkNames, TransitService transitService ) { PlaceFinderTraverseVisitor visitor = new PlaceFinderTraverseVisitor( @@ -66,6 +67,7 @@ public List findClosestPlaces( filterByStations, filterByRoutes, filterByBikeRentalStations, + filterByNetworkNames, maxResults, radiusMeters ); diff --git a/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java b/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java index caf5d97c0d4..78fa7533d58 100644 --- a/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java +++ b/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java @@ -51,7 +51,8 @@ private GeofencingZone toInternalModel(GBFSFeature f) { LOG.error("Could not convert geofencing zone", e); return null; } - var name = Objects.requireNonNullElseGet(f.getProperties().getName(), () -> fallbackId(g)); + var nameFromData = f.getProperties().getName().isEmpty() ? null : f.getProperties().getName(); + var name = Objects.requireNonNullElseGet(nameFromData, () -> fallbackId(g)); var dropOffBanned = !f.getProperties().getRules().get(0).getRideAllowed(); var passThroughBanned = !f.getProperties().getRules().get(0).getRideThroughAllowed(); return new GeofencingZone( diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index 79a794b3607..f0fc391a31e 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -742,6 +742,9 @@ type RentalVehicle implements Node & PlaceInterface { """The type of the rental vehicle (scooter, bicycle, car...)""" vehicleType: RentalVehicleType + + """The rental vehicle operator's system URL.""" + systemUrl: String! } type BikeRentalStationUris { @@ -3543,6 +3546,9 @@ type QueryType { """ filterByModes: [Mode] + """Only include places that match one of the given network names.""" + filterByNetworkNames: [String] + """Only include places that match one of the given GTFS ids.""" filterByIds: InputFilters @deprecated(reason: "Not actively maintained") before: String diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index fbaa2418d7e..7b9fdb3f386 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -675,6 +675,8 @@ type QueryType { filterByInUse: Boolean = false, "Only include places that include this mode. Only checked for places with mode i.e. quays, departures." filterByModes: [TransportMode], + """Only include places that match one of the given network names.""" + filterByNetworkNames: [String], "Only include places of given types if set. Default accepts all types" filterByPlaceTypes: [FilterPlaceType] = [quay, stopPlace, bicycleRent, bikePark, carPark], "fetching only the first certain number of nodes" @@ -953,6 +955,7 @@ type RentalVehicle implements PlaceInterface { longitude: Float! network: String! vehicleType: RentalVehicleType! + systemUrl: String! } type RentalVehicleType { diff --git a/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java b/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java index 614c8778c6b..cb1d919637e 100644 --- a/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java +++ b/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java @@ -448,6 +448,7 @@ public List findClosestPlaces( List filterByStations, List filterByRoutes, List filterByBikeRentalStations, + List filterByNetworkNames, TransitService transitService ) { return List diff --git a/src/test/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitorTest.java b/src/test/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitorTest.java index 1ef675c8101..0796176d9bb 100644 --- a/src/test/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitorTest.java +++ b/src/test/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitorTest.java @@ -96,6 +96,7 @@ void stopsOnly() { null, null, null, + null, 1, 500 ); @@ -124,6 +125,7 @@ void stationsOnly() { null, null, null, + null, 1, 500 ); @@ -152,6 +154,7 @@ void stopsAndStations() { null, null, null, + null, 1, 500 ); @@ -183,6 +186,7 @@ void stopsAndStationsWithStationFilter() { List.of(STATION1.getId()), null, null, + null, 1, 500 ); @@ -217,6 +221,7 @@ void stopsAndStationsWithStopFilter() { null, null, null, + null, 1, 500 ); @@ -250,6 +255,7 @@ void stopsAndStationsWithStopAndStationFilter() { List.of(STATION1.getId()), null, null, + null, 1, 500 ); diff --git a/src/test/java/org/opentripplanner/routing/graphfinder/StreetGraphFinderTest.java b/src/test/java/org/opentripplanner/routing/graphfinder/StreetGraphFinderTest.java index 3285e27594c..76f231577dd 100644 --- a/src/test/java/org/opentripplanner/routing/graphfinder/StreetGraphFinderTest.java +++ b/src/test/java/org/opentripplanner/routing/graphfinder/StreetGraphFinderTest.java @@ -156,6 +156,7 @@ void findClosestPlacesLimiting() { null, null, null, + null, transitService ) ); @@ -179,6 +180,7 @@ void findClosestPlacesLimiting() { null, null, null, + null, transitService ) ); @@ -196,6 +198,7 @@ void findClosestPlacesLimiting() { null, null, null, + null, transitService ) ); @@ -220,6 +223,7 @@ void findClosestPlacesWithAModeFilter() { null, null, null, + null, transitService ) ); @@ -237,6 +241,7 @@ void findClosestPlacesWithAModeFilter() { null, null, null, + null, transitService ) ); @@ -262,6 +267,7 @@ void findClosestPlacesWithAStopFilter() { null, null, null, + null, transitService ) ); @@ -279,6 +285,7 @@ void findClosestPlacesWithAStopFilter() { null, null, null, + null, transitService ) ); @@ -304,6 +311,7 @@ void findClosestPlacesWithAStopAndRouteFilter() { null, null, null, + null, transitService ) ); @@ -321,6 +329,7 @@ void findClosestPlacesWithAStopAndRouteFilter() { null, List.of(R1.getId()), null, + null, transitService ) ); @@ -347,6 +356,7 @@ void findClosestPlacesWithARouteFilter() { null, null, null, + null, transitService ) ); @@ -364,6 +374,7 @@ void findClosestPlacesWithARouteFilter() { null, List.of(R2.getId()), null, + null, transitService ) ); @@ -387,6 +398,7 @@ void findClosestPlacesWithAVehicleRentalFilter() { null, null, null, + null, transitService ) ); @@ -404,6 +416,7 @@ void findClosestPlacesWithAVehicleRentalFilter() { null, null, List.of("BR2"), + null, transitService ) ); @@ -426,6 +439,7 @@ void findClosestPlacesWithABikeParkFilter() { null, null, null, + null, transitService ) ); @@ -448,6 +462,7 @@ void findClosestPlacesWithACarParkFilter() { null, null, null, + null, transitService ) ); From d8b5fc7c526391c5c191049ad6e92f23b00614da Mon Sep 17 00:00:00 2001 From: sharhio Date: Fri, 14 Jun 2024 10:35:57 +0300 Subject: [PATCH 02/54] schema --- .../resources/org/opentripplanner/apis/gtfs/schema.graphqls | 4 +++- .../org/opentripplanner/apis/transmodel/schema.graphql | 3 +-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index f0fc391a31e..a4f53553e71 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -3546,7 +3546,9 @@ type QueryType { """ filterByModes: [Mode] - """Only include places that match one of the given network names.""" + """ + Only include places that match one of the given network names. + """ filterByNetworkNames: [String] """Only include places that match one of the given GTFS ids.""" diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index 7b9fdb3f386..03b97cab376 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -675,7 +675,7 @@ type QueryType { filterByInUse: Boolean = false, "Only include places that include this mode. Only checked for places with mode i.e. quays, departures." filterByModes: [TransportMode], - """Only include places that match one of the given network names.""" + "Only include places that match one of the given network names." filterByNetworkNames: [String], "Only include places of given types if set. Default accepts all types" filterByPlaceTypes: [FilterPlaceType] = [quay, stopPlace, bicycleRent, bikePark, carPark], @@ -955,7 +955,6 @@ type RentalVehicle implements PlaceInterface { longitude: Float! network: String! vehicleType: RentalVehicleType! - systemUrl: String! } type RentalVehicleType { From 7f69e900fa643fa6c4d40a4eb905d439524bfc46 Mon Sep 17 00:00:00 2001 From: sharhio Date: Fri, 14 Jun 2024 10:49:00 +0300 Subject: [PATCH 03/54] docs --- .../org/opentripplanner/inspector/vector/LayerParameters.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java b/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java index 23d5d3c2f59..0348cf0265e 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java +++ b/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java @@ -57,6 +57,9 @@ default double expansionFactor() { return EXPANSION_FACTOR; } + /** + * A list of networks to hide from the results. + */ default List hideNetworks() { return HIDE_NETWORKS; } From d88617c897c71b4dd53f228e3256ae59b8b18f1f Mon Sep 17 00:00:00 2001 From: sharhio Date: Mon, 17 Jun 2024 12:32:12 +0300 Subject: [PATCH 04/54] Use vehicleRentalSystemType to return system url --- .../apis/gtfs/datafetchers/RentalVehicleImpl.java | 5 +++-- .../apis/gtfs/generated/GraphQLDataFetchers.java | 3 ++- .../org/opentripplanner/apis/gtfs/schema.graphqls | 9 +++++++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java index 84b45270a8b..71dc9ad8fa7 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java @@ -6,6 +6,7 @@ import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; import org.opentripplanner.service.vehiclerental.model.RentalVehicleType; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem; import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; public class RentalVehicleImpl implements GraphQLDataFetchers.GraphQLRentalVehicle { @@ -62,8 +63,8 @@ public DataFetcher vehicleType() { } @Override - public DataFetcher systemUrl() { - return environment -> getSource(environment).system.url; + public DataFetcher vehicleRentalSystem() { + return environment -> getSource(environment).system; } private VehicleRentalVehicle getSource(DataFetchingEnvironment environment) { diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java index 7b35af403cc..fef1c0b35d4 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java @@ -58,6 +58,7 @@ import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem; import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; import org.opentripplanner.transit.model.basic.Money; import org.opentripplanner.transit.model.network.Route; @@ -858,7 +859,7 @@ public interface GraphQLRentalVehicle { public DataFetcher vehicleType(); - DataFetcher systemUrl(); + DataFetcher vehicleRentalSystem(); } public interface GraphQLRentalVehicleEntityCounts { diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index a4f53553e71..324360e3375 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -743,8 +743,8 @@ type RentalVehicle implements Node & PlaceInterface { """The type of the rental vehicle (scooter, bicycle, car...)""" vehicleType: RentalVehicleType - """The rental vehicle operator's system URL.""" - systemUrl: String! + """The vehicle rental system information.""" + vehicleRentalSystem: VehicleRentalSystemType } type BikeRentalStationUris { @@ -798,6 +798,11 @@ type RentalVehicleType { propulsionType: PropulsionType } +type VehicleRentalSystemType { + """The rental vehicle operator's system URL.""" + url: String +} + enum FormFactor { """A bicycle""" BICYCLE From 814846ee28575380a650e33e52329c6109cc62e0 Mon Sep 17 00:00:00 2001 From: sharhio Date: Mon, 17 Jun 2024 14:24:08 +0300 Subject: [PATCH 05/54] replace name with default if empty --- .../datasources/GbfsGeofencingZoneMapper.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java b/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java index 78fa7533d58..c98680d8c35 100644 --- a/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java +++ b/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java @@ -51,8 +51,10 @@ private GeofencingZone toInternalModel(GBFSFeature f) { LOG.error("Could not convert geofencing zone", e); return null; } - var nameFromData = f.getProperties().getName().isEmpty() ? null : f.getProperties().getName(); - var name = Objects.requireNonNullElseGet(nameFromData, () -> fallbackId(g)); + var name = Objects.requireNonNullElseGet(f.getProperties().getName(), () -> fallbackId(g)); + if (name.isEmpty()) { + name = fallbackId(g); + } var dropOffBanned = !f.getProperties().getRules().get(0).getRideAllowed(); var passThroughBanned = !f.getProperties().getRules().get(0).getRideThroughAllowed(); return new GeofencingZone( From 778d0dee35f3c3d196b689bf60df9440e8a900d6 Mon Sep 17 00:00:00 2001 From: sharhio Date: Mon, 17 Jun 2024 15:19:00 +0300 Subject: [PATCH 06/54] filterByNetwork naming --- .../apis/gtfs/datafetchers/QueryTypeImpl.java | 4 ++-- .../apis/gtfs/generated/GraphQLTypes.java | 12 ++++++------ .../apis/transmodel/TransmodelGraphQLSchema.java | 6 +++--- .../routing/graphfinder/DirectGraphFinder.java | 2 +- .../routing/graphfinder/GraphFinder.java | 2 +- .../graphfinder/PlaceFinderTraverseVisitor.java | 8 ++++---- .../routing/graphfinder/StreetGraphFinder.java | 4 ++-- .../org/opentripplanner/apis/gtfs/schema.graphqls | 2 +- .../opentripplanner/apis/transmodel/schema.graphql | 2 +- .../apis/gtfs/GraphQLIntegrationTest.java | 2 +- 10 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java index d46fa2a8cf1..f187a49d9c7 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java @@ -330,7 +330,7 @@ public DataFetcher> nearest() { List filterByPlaceTypes = args.getGraphQLFilterByPlaceTypes() != null ? args.getGraphQLFilterByPlaceTypes().stream().map(GraphQLUtils::toModel).toList() : DEFAULT_PLACE_TYPES; - List filterByNetworkNames = args.getGraphQLFilterByNetworkNames(); + List filterByNetwork = args.getGraphQLFilterByNetwork(); List places; try { @@ -348,7 +348,7 @@ public DataFetcher> nearest() { filterByStations, filterByRoutes, filterByBikeRentalStations, - filterByNetworkNames, + filterByNetwork, getTransitService(environment) ) ); diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java index 0608e97aa77..b191cc0830b 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java @@ -2416,7 +2416,7 @@ public static class GraphQLQueryTypeNearestArgs { private Double lon; private Integer maxDistance; private Integer maxResults; - private List filterByNetworkNames; + private List filterByNetwork; public GraphQLQueryTypeNearestArgs(Map args) { if (args != null) { @@ -2448,7 +2448,7 @@ public GraphQLQueryTypeNearestArgs(Map args) { this.lon = (Double) args.get("lon"); this.maxDistance = (Integer) args.get("maxDistance"); this.maxResults = (Integer) args.get("maxResults"); - this.filterByNetworkNames = (List) args.get("filterByNetworkNames"); + this.filterByNetwork = (List) args.get("filterByNetwork"); } } @@ -2540,12 +2540,12 @@ public void setGraphQLMaxResults(Integer maxResults) { this.maxResults = maxResults; } - public List getGraphQLFilterByNetworkNames() { - return this.filterByNetworkNames; + public List getGraphQLFilterByNetwork() { + return this.filterByNetwork; } - public void setGraphQLFilterByNetworkNames(List networkNames) { - this.filterByNetworkNames = networkNames; + public void setGraphQLFilterByNetwork(List networks) { + this.filterByNetwork = networks; } } diff --git a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java index 455c7400718..af0d9b79bbb 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java @@ -850,7 +850,7 @@ private GraphQLSchema create() { .argument( GraphQLArgument .newArgument() - .name("filterByNetworkNames") + .name("filterByNetwork") .description("Only include places that match one of the given network names.") .type(new GraphQLList(Scalars.GraphQLString)) .build() @@ -945,7 +945,7 @@ private GraphQLSchema create() { if (placeTypes.contains(TransmodelPlaceType.STOP_PLACE)) { maxResults *= 5; } - List filterByNetworkNames = environment.getArgument("filterByNetworkNames"); + List filterByNetwork = environment.getArgument("filterByNetwork"); List places; places = @@ -962,7 +962,7 @@ private GraphQLSchema create() { filterByStations, filterByRoutes, filterByBikeRentalStations, - filterByNetworkNames, + filterByNetwork, GqlUtil.getTransitService(environment) ); diff --git a/src/main/java/org/opentripplanner/routing/graphfinder/DirectGraphFinder.java b/src/main/java/org/opentripplanner/routing/graphfinder/DirectGraphFinder.java index 7eaf60e38f1..c36efc59e5b 100644 --- a/src/main/java/org/opentripplanner/routing/graphfinder/DirectGraphFinder.java +++ b/src/main/java/org/opentripplanner/routing/graphfinder/DirectGraphFinder.java @@ -63,7 +63,7 @@ public List findClosestPlaces( List filterByStations, List filterByRoutes, List filterByBikeRentalStations, - List filterByNetworkNames, + List filterByNetwork, TransitService transitService ) { throw new UnsupportedOperationException("Not implemented"); diff --git a/src/main/java/org/opentripplanner/routing/graphfinder/GraphFinder.java b/src/main/java/org/opentripplanner/routing/graphfinder/GraphFinder.java index eecc4f8015a..063ed221dd5 100644 --- a/src/main/java/org/opentripplanner/routing/graphfinder/GraphFinder.java +++ b/src/main/java/org/opentripplanner/routing/graphfinder/GraphFinder.java @@ -69,7 +69,7 @@ List findClosestPlaces( List filterByStations, List filterByRoutes, List filterByBikeRentalStations, - List filterByNetworkNames, + List filterByNetwork, TransitService transitService ); } diff --git a/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java b/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java index 6b06e358103..41b8ea6cbc4 100644 --- a/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java +++ b/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java @@ -44,7 +44,7 @@ public class PlaceFinderTraverseVisitor implements TraverseVisitor private final boolean includeStations; private final int maxResults; private final double radiusMeters; - private final Set filterByNetworkNames; + private final Set filterByNetwork; /** * @param transitService A TransitService used in finding information about the @@ -70,7 +70,7 @@ public PlaceFinderTraverseVisitor( List filterByStations, List filterByRoutes, List filterByBikeRentalStations, - List filterByNetworkNames, + List filterByNetwork, int maxResults, double radiusMeters ) { @@ -84,7 +84,7 @@ public PlaceFinderTraverseVisitor( this.filterByStations = toSet(filterByStations); this.filterByRoutes = toSet(filterByRoutes); this.filterByVehicleRental = toSet(filterByBikeRentalStations); - this.filterByNetworkNames = toSet(filterByNetworkNames); + this.filterByNetwork = toSet(filterByNetwork); includeStops = shouldInclude(filterByPlaceTypes, PlaceType.STOP); includePatternAtStops = shouldInclude(filterByPlaceTypes, PlaceType.PATTERN_AT_STOP); @@ -267,7 +267,7 @@ private void handleVehicleRental(VehicleRentalPlace station, double distance) { if (seenVehicleRentalPlaces.contains(station.getId())) { return; } - if (!filterByNetworkNames.isEmpty() && !filterByNetworkNames.contains(station.getNetwork())) { + if (!filterByNetwork.isEmpty() && !filterByNetwork.contains(station.getNetwork())) { return; } seenVehicleRentalPlaces.add(station.getId()); diff --git a/src/main/java/org/opentripplanner/routing/graphfinder/StreetGraphFinder.java b/src/main/java/org/opentripplanner/routing/graphfinder/StreetGraphFinder.java index 48b4236cd5b..71f65209ddf 100644 --- a/src/main/java/org/opentripplanner/routing/graphfinder/StreetGraphFinder.java +++ b/src/main/java/org/opentripplanner/routing/graphfinder/StreetGraphFinder.java @@ -56,7 +56,7 @@ public List findClosestPlaces( List filterByStations, List filterByRoutes, List filterByBikeRentalStations, - List filterByNetworkNames, + List filterByNetwork, TransitService transitService ) { PlaceFinderTraverseVisitor visitor = new PlaceFinderTraverseVisitor( @@ -67,7 +67,7 @@ public List findClosestPlaces( filterByStations, filterByRoutes, filterByBikeRentalStations, - filterByNetworkNames, + filterByNetwork, maxResults, radiusMeters ); diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index 324360e3375..8b872900238 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -3554,7 +3554,7 @@ type QueryType { """ Only include places that match one of the given network names. """ - filterByNetworkNames: [String] + filterByNetwork: [String] """Only include places that match one of the given GTFS ids.""" filterByIds: InputFilters @deprecated(reason: "Not actively maintained") diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index 03b97cab376..17f44b5cd97 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -676,7 +676,7 @@ type QueryType { "Only include places that include this mode. Only checked for places with mode i.e. quays, departures." filterByModes: [TransportMode], "Only include places that match one of the given network names." - filterByNetworkNames: [String], + filterByNetwork: [String], "Only include places of given types if set. Default accepts all types" filterByPlaceTypes: [FilterPlaceType] = [quay, stopPlace, bicycleRent, bikePark, carPark], "fetching only the first certain number of nodes" diff --git a/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java b/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java index cb1d919637e..c73a607b594 100644 --- a/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java +++ b/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java @@ -448,7 +448,7 @@ public List findClosestPlaces( List filterByStations, List filterByRoutes, List filterByBikeRentalStations, - List filterByNetworkNames, + List filterByNetwork, TransitService transitService ) { return List From fa4627fbaef75da48583722294816315435d4d68 Mon Sep 17 00:00:00 2001 From: sharhio Date: Mon, 17 Jun 2024 17:25:00 +0300 Subject: [PATCH 07/54] removed network hiding option in maplayers --- .../layers/vehiclerental/VehicleRentalLayerBuilder.java | 3 --- .../opentripplanner/inspector/vector/LayerParameters.java | 7 ------- 2 files changed, 10 deletions(-) diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java index 24d922bffb3..0869aeb2ba8 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java @@ -18,7 +18,6 @@ abstract class VehicleRentalLayerBuilder extends LayerBuilder { private final VehicleRentalService service; - private final List hideNetworks; public VehicleRentalLayerBuilder( VehicleRentalService service, @@ -31,7 +30,6 @@ public VehicleRentalLayerBuilder( layerParameters.expansionFactor() ); this.service = service; - this.hideNetworks = layerParameters.hideNetworks(); } @Override @@ -41,7 +39,6 @@ protected List getGeometries(Envelope query) { } return getVehicleRentalPlaces(service) .stream() - .filter(rental -> !hideNetworks.contains(rental.getNetwork())) .map(rental -> { Coordinate coordinate = new Coordinate(rental.getLongitude(), rental.getLatitude()); Point point = GeometryUtils.getGeometryFactory().createPoint(coordinate); diff --git a/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java b/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java index 0348cf0265e..0d6a4b23d6b 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java +++ b/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java @@ -56,11 +56,4 @@ default int cacheMaxSeconds() { default double expansionFactor() { return EXPANSION_FACTOR; } - - /** - * A list of networks to hide from the results. - */ - default List hideNetworks() { - return HIDE_NETWORKS; - } } From 5ef5fb518007e8ac40e0202b947860be2f284077 Mon Sep 17 00:00:00 2001 From: sharhio Date: Mon, 17 Jun 2024 18:48:33 +0300 Subject: [PATCH 08/54] filterByNetwork description --- .../apis/transmodel/TransmodelGraphQLSchema.java | 4 +++- .../resources/org/opentripplanner/apis/gtfs/schema.graphqls | 2 +- .../org/opentripplanner/apis/transmodel/schema.graphql | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java index af0d9b79bbb..7d6e5750627 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java @@ -851,7 +851,9 @@ private GraphQLSchema create() { GraphQLArgument .newArgument() .name("filterByNetwork") - .description("Only include places that match one of the given network names.") + .description( + "Only include vehicle rental networks that match one of the given network names." + ) .type(new GraphQLList(Scalars.GraphQLString)) .build() ) diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index 8b872900238..36fa16a632c 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -3552,7 +3552,7 @@ type QueryType { filterByModes: [Mode] """ - Only include places that match one of the given network names. + Only include vehicle rental networks that match one of the given network names. """ filterByNetwork: [String] diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index 17f44b5cd97..46ee3305259 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -675,7 +675,7 @@ type QueryType { filterByInUse: Boolean = false, "Only include places that include this mode. Only checked for places with mode i.e. quays, departures." filterByModes: [TransportMode], - "Only include places that match one of the given network names." + "Only include vehicle rental networks that match one of the given network names." filterByNetwork: [String], "Only include places of given types if set. Default accepts all types" filterByPlaceTypes: [FilterPlaceType] = [quay, stopPlace, bicycleRent, bikePark, carPark], From e6603e1854b5e767c9c49f2204c92afa8843de2b Mon Sep 17 00:00:00 2001 From: sharhio Date: Tue, 18 Jun 2024 11:48:26 +0300 Subject: [PATCH 09/54] Fixed vehiclerentalsystem --- .../apis/gtfs/datafetchers/RentalVehicleImpl.java | 2 +- .../apis/gtfs/datafetchers/VehicleRentalStationImpl.java | 6 ++++++ .../apis/gtfs/generated/GraphQLDataFetchers.java | 2 ++ .../apis/gtfs/generated/graphql-codegen.yml | 1 + .../service/vehiclerental/model/VehicleRentalPlace.java | 3 +++ .../service/vehiclerental/model/VehicleRentalStation.java | 5 +++++ .../service/vehiclerental/model/VehicleRentalVehicle.java | 5 +++++ .../org/opentripplanner/apis/gtfs/schema.graphqls | 7 +++++-- 8 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java index 71dc9ad8fa7..1449c44e315 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java @@ -64,7 +64,7 @@ public DataFetcher vehicleType() { @Override public DataFetcher vehicleRentalSystem() { - return environment -> getSource(environment).system; + return environment -> getSource(environment).getVehicleRentalSystem(); } private VehicleRentalVehicle getSource(DataFetchingEnvironment environment) { diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalStationImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalStationImpl.java index dc60a7c76e8..117061b988e 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalStationImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalStationImpl.java @@ -7,6 +7,7 @@ import org.opentripplanner.service.vehiclerental.model.RentalVehicleEntityCounts; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem; public class VehicleRentalStationImpl implements GraphQLDataFetchers.GraphQLVehicleRentalStation { @@ -107,6 +108,11 @@ public DataFetcher availableSpaces() { return environment -> getSource(environment).getVehicleSpaceCounts(); } + @Override + public DataFetcher vehicleRentalSystem() { + return environment -> getSource(environment).getVehicleRentalSystem(); + } + private VehicleRentalStation getSource(DataFetchingEnvironment environment) { return environment.getSource(); } diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java index fef1c0b35d4..c956eddd954 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java @@ -1303,6 +1303,8 @@ public interface GraphQLVehicleRentalStation { public DataFetcher rentalUris(); + public DataFetcher vehicleRentalSystem(); + public DataFetcher spacesAvailable(); public DataFetcher stationId(); diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml b/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml index ff9af6f6aa0..6e5cbf7bd71 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml @@ -47,6 +47,7 @@ config: BikeRentalStation: org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace#VehicleRentalPlace BikeRentalStationUris: org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris#VehicleRentalStationUris VehicleRentalStation: org.opentripplanner.service.vehiclerental.model.VehicleRentalStation#VehicleRentalStation + VehicleRentalSystem: org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem#VehicleRentalSystem RentalVehicleEntityCounts: org.opentripplanner.service.vehiclerental.model.RentalVehicleEntityCounts#RentalVehicleEntityCounts RentalVehicleTypeCount: org.opentripplanner.service.vehiclerental.model.RentalVehicleTypeCount#RentalVehicleTypeCount RentalVehicle: org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle#VehicleRentalVehicle diff --git a/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalPlace.java b/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalPlace.java index 1725e7df2dd..cd806603c9d 100644 --- a/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalPlace.java +++ b/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalPlace.java @@ -80,6 +80,9 @@ public interface VehicleRentalPlace { /** Deep links for this rental station or individual vehicle */ VehicleRentalStationUris getRentalUris(); + /** System information for the vehicle rental provider */ + VehicleRentalSystem getVehicleRentalSystem(); + default boolean networkIsNotAllowed(VehicleRentalPreferences preferences) { if ( getNetwork() == null && diff --git a/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalStation.java b/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalStation.java index a31e5e88a0e..d6e72023a31 100644 --- a/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalStation.java +++ b/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalStation.java @@ -172,6 +172,11 @@ public VehicleRentalStationUris getRentalUris() { return rentalUris; } + @Override + public VehicleRentalSystem getVehicleRentalSystem() { + return system; + } + @Override public String toString() { return String.format( diff --git a/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalVehicle.java b/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalVehicle.java index 7dba5e714b4..042e608c88f 100644 --- a/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalVehicle.java +++ b/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalVehicle.java @@ -128,4 +128,9 @@ public boolean isRealTimeData() { public VehicleRentalStationUris getRentalUris() { return rentalUris; } + + @Override + public VehicleRentalSystem getVehicleRentalSystem() { + return system; + } } diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index 36fa16a632c..bbb02b73f33 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -687,6 +687,9 @@ type VehicleRentalStation implements Node & PlaceInterface { If true, station is on and in service. """ operative: Boolean + + """The vehicle rental system information.""" + vehicleRentalSystem: VehicleRentalSystem } type RentalVehicleEntityCounts { @@ -744,7 +747,7 @@ type RentalVehicle implements Node & PlaceInterface { vehicleType: RentalVehicleType """The vehicle rental system information.""" - vehicleRentalSystem: VehicleRentalSystemType + vehicleRentalSystem: VehicleRentalSystem } type BikeRentalStationUris { @@ -798,7 +801,7 @@ type RentalVehicleType { propulsionType: PropulsionType } -type VehicleRentalSystemType { +type VehicleRentalSystem { """The rental vehicle operator's system URL.""" url: String } From aa8d4ae6150addb7dff2921f426b2e91f02cecc3 Mon Sep 17 00:00:00 2001 From: sharhio Date: Tue, 18 Jun 2024 13:24:03 +0300 Subject: [PATCH 10/54] no network filtering in transmodel --- .../apis/transmodel/TransmodelGraphQLSchema.java | 12 +----------- .../opentripplanner/apis/transmodel/schema.graphql | 2 -- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java index 7d6e5750627..cc3c6cdbcea 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java @@ -847,16 +847,6 @@ private GraphQLSchema create() { .type(Scalars.GraphQLInt) .build() ) - .argument( - GraphQLArgument - .newArgument() - .name("filterByNetwork") - .description( - "Only include vehicle rental networks that match one of the given network names." - ) - .type(new GraphQLList(Scalars.GraphQLString)) - .build() - ) .argument( GraphQLArgument .newArgument() @@ -915,6 +905,7 @@ private GraphQLSchema create() { List filterByBikeRentalStations = null; List filterByBikeParks = null; List filterByCarParks = null; + List filterByNetwork = null; @SuppressWarnings("rawtypes") Map filterByIds = environment.getArgument("filterByIds"); if (filterByIds != null) { @@ -947,7 +938,6 @@ private GraphQLSchema create() { if (placeTypes.contains(TransmodelPlaceType.STOP_PLACE)) { maxResults *= 5; } - List filterByNetwork = environment.getArgument("filterByNetwork"); List places; places = diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index 46ee3305259..fbaa2418d7e 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -675,8 +675,6 @@ type QueryType { filterByInUse: Boolean = false, "Only include places that include this mode. Only checked for places with mode i.e. quays, departures." filterByModes: [TransportMode], - "Only include vehicle rental networks that match one of the given network names." - filterByNetwork: [String], "Only include places of given types if set. Default accepts all types" filterByPlaceTypes: [FilterPlaceType] = [quay, stopPlace, bicycleRent, bikePark, carPark], "fetching only the first certain number of nodes" From 8a77828cff450d7ac7ac49debd41125b3fd2ee46 Mon Sep 17 00:00:00 2001 From: sharhio <113033056+sharhio@users.noreply.github.com> Date: Wed, 19 Jun 2024 12:03:28 +0300 Subject: [PATCH 11/54] Update src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java Co-authored-by: Leonard Ehrenfried --- .../vehicle_rental/datasources/GbfsGeofencingZoneMapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java b/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java index c98680d8c35..0a79d45d4ee 100644 --- a/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java +++ b/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java @@ -52,7 +52,7 @@ private GeofencingZone toInternalModel(GBFSFeature f) { return null; } var name = Objects.requireNonNullElseGet(f.getProperties().getName(), () -> fallbackId(g)); - if (name.isEmpty()) { + if (StringUtils.hasValue(name)) { name = fallbackId(g); } var dropOffBanned = !f.getProperties().getRules().get(0).getRideAllowed(); From f70c31d383bca32982ff2fa737a2a19e64ba06b8 Mon Sep 17 00:00:00 2001 From: sharhio Date: Wed, 19 Jun 2024 12:33:39 +0300 Subject: [PATCH 12/54] import fixed --- .../vehicle_rental/datasources/GbfsGeofencingZoneMapper.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java b/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java index 0a79d45d4ee..32d428ee14d 100644 --- a/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java +++ b/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java @@ -10,6 +10,7 @@ import org.mobilitydata.gbfs.v2_3.geofencing_zones.GBFSGeofencingZones; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.geometry.UnsupportedGeometryException; +import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.service.vehiclerental.model.GeofencingZone; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.slf4j.Logger; From 8523e34937a772a2232470a57fd21b0364d872f7 Mon Sep 17 00:00:00 2001 From: sharhio Date: Wed, 19 Jun 2024 13:52:33 +0300 Subject: [PATCH 13/54] mapper class, fix name check --- .../apis/gtfs/GtfsGraphQLIndex.java | 2 ++ .../datafetchers/VehicleRentalSystemImpl.java | 18 ++++++++++++++++++ .../gtfs/generated/GraphQLDataFetchers.java | 4 ++++ .../datasources/GbfsGeofencingZoneMapper.java | 2 +- 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalSystemImpl.java diff --git a/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java b/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java index 9175d3486e1..4f6060a47e0 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java @@ -76,6 +76,7 @@ import org.opentripplanner.apis.gtfs.datafetchers.VehicleParkingImpl; import org.opentripplanner.apis.gtfs.datafetchers.VehiclePositionImpl; import org.opentripplanner.apis.gtfs.datafetchers.VehicleRentalStationImpl; +import org.opentripplanner.apis.gtfs.datafetchers.VehicleRentalSystemImpl; import org.opentripplanner.apis.gtfs.datafetchers.debugOutputImpl; import org.opentripplanner.apis.gtfs.datafetchers.elevationProfileComponentImpl; import org.opentripplanner.apis.gtfs.datafetchers.placeAtDistanceImpl; @@ -165,6 +166,7 @@ protected static GraphQLSchema buildSchema() { .type(typeWiring.build(BookingTimeImpl.class)) .type(typeWiring.build(BookingInfoImpl.class)) .type(typeWiring.build(VehicleRentalStationImpl.class)) + .type(typeWiring.build(VehicleRentalSystemImpl.class)) .type(typeWiring.build(RentalVehicleImpl.class)) .type(typeWiring.build(RentalVehicleTypeImpl.class)) .type(typeWiring.build(StopOnRouteImpl.class)) diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalSystemImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalSystemImpl.java new file mode 100644 index 00000000000..7256ab5aaa3 --- /dev/null +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalSystemImpl.java @@ -0,0 +1,18 @@ +package org.opentripplanner.apis.gtfs.datafetchers; + +import graphql.schema.DataFetcher; +import graphql.schema.DataFetchingEnvironment; +import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem; + +public class VehicleRentalSystemImpl implements GraphQLDataFetchers.GraphQLVehicleRentalSystem { + + @Override + public DataFetcher url() { + return environment -> getSource(environment).url; + } + + private VehicleRentalSystem getSource(DataFetchingEnvironment environment) { + return environment.getSource(); + } +} diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java index c956eddd954..be74354e284 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java @@ -1312,6 +1312,10 @@ public interface GraphQLVehicleRentalStation { public DataFetcher vehiclesAvailable(); } + public interface GraphQLVehicleRentalSystem { + public DataFetcher url(); + } + public interface GraphQLVehicleRentalUris { public DataFetcher android(); diff --git a/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java b/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java index 32d428ee14d..22a4131f338 100644 --- a/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java +++ b/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java @@ -53,7 +53,7 @@ private GeofencingZone toInternalModel(GBFSFeature f) { return null; } var name = Objects.requireNonNullElseGet(f.getProperties().getName(), () -> fallbackId(g)); - if (StringUtils.hasValue(name)) { + if (!StringUtils.hasValue(name)) { name = fallbackId(g); } var dropOffBanned = !f.getProperties().getRules().get(0).getRideAllowed(); From f00e907777bd586cec393a57f2721ae93e328dcd Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 25 Jun 2024 17:45:34 +0200 Subject: [PATCH 14/54] Document integration with OSM --- doc-templates/OsmMapper.md | 17 + docs/osm/Atlanta.md | 1270 +++++++++++++ docs/osm/Default.md | 1254 +++++++++++++ docs/osm/Finland.md | 1607 +++++++++++++++++ docs/osm/Germany.md | 1337 ++++++++++++++ docs/osm/Hamburg.md | 217 +++ docs/osm/Houston.md | 1262 +++++++++++++ docs/osm/Norway.md | 428 +++++ docs/osm/Portland.md | 1275 +++++++++++++ docs/osm/UK.md | 1366 ++++++++++++++ mkdocs.yml | 9 + .../tagmapping/NorwayMapper.java | 78 +- .../tagmapping/OsmTagMapperSource.java | 4 + .../wayproperty/SafetyFeatures.java | 4 + .../specifier/BestMatchSpecifier.java | 7 + .../wayproperty/specifier/Condition.java | 46 +- .../specifier/ExactMatchSpecifier.java | 6 + .../specifier/LogicalOrSpecifier.java | 10 +- .../wayproperty/specifier/OsmSpecifier.java | 2 + .../generate/doc/OsmMapperDocTest.java | 141 ++ .../wayproperty/specifier/ConditionTest.java | 6 +- 21 files changed, 10297 insertions(+), 49 deletions(-) create mode 100644 doc-templates/OsmMapper.md create mode 100644 docs/osm/Atlanta.md create mode 100644 docs/osm/Default.md create mode 100644 docs/osm/Finland.md create mode 100644 docs/osm/Germany.md create mode 100644 docs/osm/Hamburg.md create mode 100644 docs/osm/Houston.md create mode 100644 docs/osm/Norway.md create mode 100644 docs/osm/Portland.md create mode 100644 docs/osm/UK.md create mode 100644 src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java diff --git a/doc-templates/OsmMapper.md b/doc-templates/OsmMapper.md new file mode 100644 index 00000000000..555805f0c8d --- /dev/null +++ b/doc-templates/OsmMapper.md @@ -0,0 +1,17 @@ +## OSM tag mapping + +### Way properties + +Way properties set a way's permission and optionally influences its walk and bicycle safety factors. +These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. + + + + + +### Bicycle and walking safety mixins + +Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the +permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. + + diff --git a/docs/osm/Atlanta.md b/docs/osm/Atlanta.md new file mode 100644 index 00000000000..da8caa3b433 --- /dev/null +++ b/docs/osm/Atlanta.md @@ -0,0 +1,1270 @@ +## OSM tag mapping + +### Way properties + +Way properties set a way's permission and optionally influences its walk and bicycle safety factors. +These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. + + + + +| specifier | permission | safety | +|---------------------------------------------------------|------------------------|--------| +| `highway=trunk_link` | ALL | 🚴 | +| `highway=trunk` | ALL | 🚴 | +| `mtb:scale=3` | NONE | | +| `mtb:scale=4` | NONE | | +| `mtb:scale=5` | NONE | | +| `mtb:scale=6` | NONE | | +| `highway=corridor` | PEDESTRIAN | | +| `highway=steps` | PEDESTRIAN | | +| `highway=crossing` | PEDESTRIAN | | +| `highway=platform` | PEDESTRIAN | | +| `public_transport=platform` | PEDESTRIAN | | +| `railway=platform` | PEDESTRIAN | | +| `footway=sidewalk; highway=footway` | PEDESTRIAN | | +| `mtb:scale=1` | PEDESTRIAN | | +| `mtb:scale=2` | PEDESTRIAN | | +| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=living_street` | ALL | 🚴 | +| `highway=unclassified` | ALL | | +| `highway=road` | ALL | | +| `highway=byway` | ALL | 🚴 | +| `highway=track` | ALL | 🚴 | +| `highway=service` | ALL | 🚴 | +| `highway=residential` | ALL | 🚴 | +| `highway=residential_link` | ALL | 🚴 | +| `highway=tertiary` | ALL | | +| `highway=tertiary_link` | ALL | | +| `highway=secondary` | ALL | 🚴 | +| `highway=secondary_link` | ALL | 🚴 | +| `highway=primary` | ALL | 🚴 | +| `highway=primary_link` | ALL | 🚴 | +| `highway=trunk_link` | CAR | 🚴 | +| `highway=motorway_link` | CAR | 🚴 | +| `highway=trunk` | CAR | 🚴 | +| `highway=motorway` | CAR | 🚴 | +| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=lane` | ALL | 🚴 | +| `highway=residential; cycleway=lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | +| `highway=secondary; cycleway=lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | +| `highway=primary; cycleway=lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=lane` | ALL | 🚴 | +| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=track` | ALL | 🚴 | +| `highway=residential; cycleway=track` | ALL | 🚴 | +| `highway=residential_link; cycleway=track` | ALL | 🚴 | +| `highway=tertiary; cycleway=track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | +| `highway=secondary; cycleway=track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=track` | ALL | 🚴 | +| `highway=primary; cycleway=track` | ALL | 🚴 | +| `highway=primary_link; cycleway=track` | ALL | 🚴 | +| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | +| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite` | ALL | 🚴 | +| `highway=residential; cycleway=opposite` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite` | ALL | | +| `highway=tertiary_link; cycleway=opposite` | ALL | | +| `highway=secondary; cycleway=opposite` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=primary; cycleway=opposite` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `present(highway); bicycle=designated` | ALL | 🚴 | +| `highway=service; bicycle=designated` | ALL | 🚴 | +| `highway=residential; bicycle=designated` | ALL | 🚴 | +| `highway=unclassified; bicycle=designated` | ALL | 🚴 | +| `highway=residential_link; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | +| `highway=secondary; bicycle=designated` | ALL | 🚴 | +| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | +| `highway=primary; bicycle=designated` | ALL | 🚴 | +| `highway=primary_link; bicycle=designated` | ALL | 🚴 | +| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | + + + + + + +

Rule #0

+ +**Specifier:** `highway=trunk_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #1

+ +**Specifier:** `highway=trunk` +**Permission:** ALL +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #2

+ +**Specifier:** `mtb:scale=3` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #3

+ +**Specifier:** `mtb:scale=4` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #4

+ +**Specifier:** `mtb:scale=5` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #5

+ +**Specifier:** `mtb:scale=6` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #6

+ +**Specifier:** `highway=corridor` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #7

+ +**Specifier:** `highway=steps` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #8

+ +**Specifier:** `highway=crossing` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #9

+ +**Specifier:** `highway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #10

+ +**Specifier:** `public_transport=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #11

+ +**Specifier:** `railway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #12

+ +**Specifier:** `footway=sidewalk; highway=footway` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #13

+ +**Specifier:** `mtb:scale=1` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #14

+ +**Specifier:** `mtb:scale=2` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #15

+ +**Specifier:** `mtb:scale=0` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #16

+ +**Specifier:** `highway=cycleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #17

+ +**Specifier:** `highway=path` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #18

+ +**Specifier:** `highway=pedestrian` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #19

+ +**Specifier:** `highway=footway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #20

+ +**Specifier:** `highway=bridleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #21

+ +**Specifier:** `highway=living_street` +**Permission:** ALL +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #22

+ +**Specifier:** `highway=unclassified` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #23

+ +**Specifier:** `highway=road` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #24

+ +**Specifier:** `highway=byway` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #25

+ +**Specifier:** `highway=track` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #26

+ +**Specifier:** `highway=service` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #27

+ +**Specifier:** `highway=residential` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #28

+ +**Specifier:** `highway=residential_link` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #29

+ +**Specifier:** `highway=tertiary` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #30

+ +**Specifier:** `highway=tertiary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #31

+ +**Specifier:** `highway=secondary` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #32

+ +**Specifier:** `highway=secondary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #33

+ +**Specifier:** `highway=primary` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #34

+ +**Specifier:** `highway=primary_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #35

+ +**Specifier:** `highway=trunk_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #36

+ +**Specifier:** `highway=motorway_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #37

+ +**Specifier:** `highway=trunk` +**Permission:** CAR +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #38

+ +**Specifier:** `highway=motorway` +**Permission:** CAR +**Bike safety factor:** forward: 8.0, back: 8.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #39

+ +**Specifier:** `present(highway); cycleway=lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #40

+ +**Specifier:** `highway=service; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #41

+ +**Specifier:** `highway=residential; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #42

+ +**Specifier:** `highway=residential_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #43

+ +**Specifier:** `highway=tertiary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #44

+ +**Specifier:** `highway=tertiary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #45

+ +**Specifier:** `highway=secondary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #46

+ +**Specifier:** `highway=secondary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #47

+ +**Specifier:** `highway=primary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #48

+ +**Specifier:** `highway=primary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #49

+ +**Specifier:** `highway=trunk; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #50

+ +**Specifier:** `highway=trunk_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #51

+ +**Specifier:** `highway=motorway; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #52

+ +**Specifier:** `highway=motorway_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #53

+ +**Specifier:** `present(highway); cycleway=share_busway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #54

+ +**Specifier:** `highway=service; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #55

+ +**Specifier:** `highway=residential; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #56

+ +**Specifier:** `highway=residential_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #57

+ +**Specifier:** `highway=tertiary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #58

+ +**Specifier:** `highway=tertiary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #59

+ +**Specifier:** `highway=secondary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #60

+ +**Specifier:** `highway=secondary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #61

+ +**Specifier:** `highway=primary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #62

+ +**Specifier:** `highway=primary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #63

+ +**Specifier:** `highway=trunk; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #64

+ +**Specifier:** `highway=trunk_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #65

+ +**Specifier:** `highway=motorway; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #66

+ +**Specifier:** `highway=motorway_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #67

+ +**Specifier:** `present(highway); cycleway=opposite_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #68

+ +**Specifier:** `highway=service; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #69

+ +**Specifier:** `highway=residential; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #70

+ +**Specifier:** `highway=residential_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #71

+ +**Specifier:** `highway=tertiary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #72

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #73

+ +**Specifier:** `highway=secondary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #74

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #75

+ +**Specifier:** `highway=primary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #76

+ +**Specifier:** `highway=primary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #77

+ +**Specifier:** `highway=trunk; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #78

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #79

+ +**Specifier:** `present(highway); cycleway=track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #80

+ +**Specifier:** `highway=service; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #81

+ +**Specifier:** `highway=residential; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #82

+ +**Specifier:** `highway=residential_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #83

+ +**Specifier:** `highway=tertiary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #84

+ +**Specifier:** `highway=tertiary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #85

+ +**Specifier:** `highway=secondary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #86

+ +**Specifier:** `highway=secondary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #87

+ +**Specifier:** `highway=primary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #88

+ +**Specifier:** `highway=primary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #89

+ +**Specifier:** `highway=trunk; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #90

+ +**Specifier:** `highway=trunk_link; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #91

+ +**Specifier:** `present(highway); cycleway=opposite_track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #92

+ +**Specifier:** `highway=service; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #93

+ +**Specifier:** `highway=residential; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #94

+ +**Specifier:** `highway=residential_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #95

+ +**Specifier:** `highway=tertiary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #96

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #97

+ +**Specifier:** `highway=secondary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #98

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #99

+ +**Specifier:** `highway=primary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #100

+ +**Specifier:** `highway=primary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #101

+ +**Specifier:** `highway=trunk; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #102

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #103

+ +**Specifier:** `present(highway); cycleway=shared_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #104

+ +**Specifier:** `highway=service; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.73, back: 0.73 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #105

+ +**Specifier:** `highway=residential; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #106

+ +**Specifier:** `highway=residential_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #107

+ +**Specifier:** `highway=tertiary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #108

+ +**Specifier:** `highway=tertiary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #109

+ +**Specifier:** `highway=secondary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #110

+ +**Specifier:** `highway=secondary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #111

+ +**Specifier:** `highway=primary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #112

+ +**Specifier:** `highway=primary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #113

+ +**Specifier:** `present(highway); cycleway=opposite` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.4 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #114

+ +**Specifier:** `highway=service; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #115

+ +**Specifier:** `highway=residential; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #116

+ +**Specifier:** `highway=residential_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #117

+ +**Specifier:** `highway=tertiary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #118

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #119

+ +**Specifier:** `highway=secondary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #120

+ +**Specifier:** `highway=secondary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #121

+ +**Specifier:** `highway=primary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #122

+ +**Specifier:** `highway=primary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #123

+ +**Specifier:** `highway=path; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #124

+ +**Specifier:** `highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #125

+ +**Specifier:** `highway=footway; bicycle=yes; area=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #126

+ +**Specifier:** `highway=pedestrian; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #127

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #128

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #129

+ +**Specifier:** `highway=footway; footway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #130

+ +**Specifier:** `highway=footway; footway=crossing; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #131

+ +**Specifier:** `highway=track; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #132

+ +**Specifier:** `highway=track; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #133

+ +**Specifier:** `highway=track; bicycle=yes; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #134

+ +**Specifier:** `highway=track; bicycle=designated; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #135

+ +**Specifier:** `highway=track; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #136

+ +**Specifier:** `present(highway); bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #137

+ +**Specifier:** `highway=service; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.84, back: 0.84 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #138

+ +**Specifier:** `highway=residential; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #139

+ +**Specifier:** `highway=unclassified; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #140

+ +**Specifier:** `highway=residential_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #141

+ +**Specifier:** `highway=tertiary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #142

+ +**Specifier:** `highway=tertiary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #143

+ +**Specifier:** `highway=secondary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #144

+ +**Specifier:** `highway=secondary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #145

+ +**Specifier:** `highway=primary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #146

+ +**Specifier:** `highway=primary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #147

+ +**Specifier:** `highway=trunk; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.25, back: 7.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #148

+ +**Specifier:** `highway=trunk_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #149

+ +**Specifier:** `highway=motorway; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.76, back: 7.76 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #150

+ +**Specifier:** `highway=motorway_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + + + + +### Bicycle and walking safety mixins + +Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the +permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. + + + + +| matcher | modifications | +|------------------------------------------------------------|---------------| +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | +| `surface=unpaved` | 🚴 | +| `surface=compacted` | 🚴 | +| `surface=wood` | 🚴 | +| `surface=cobblestone` | 🚴 | +| `surface=sett` | 🚴 | +| `surface=unhewn_cobblestone` | 🚴 | +| `surface=grass_paver` | 🚴 | +| `surface=pebblestone` | 🚴 | +| `surface=metal` | 🚴 | +| `surface=ground` | 🚴 | +| `surface=dirt` | 🚴 | +| `surface=earth` | 🚴 | +| `surface=grass` | 🚴 | +| `surface=mud` | 🚴 | +| `surface=woodchip` | 🚴 | +| `surface=gravel` | 🚴 | +| `surface=artifical_turf` | 🚴 | +| `surface=sand` | 🚴 | +| `rlis:bicycle=caution_area` | 🚴 | +| `rlis:bicycle:right=caution_area` | 🚴 | +| `rlis:bicycle:left=caution_area` | 🚴 | +| `ccgis:bicycle=caution_area` | 🚴 | +| `ccgis:bicycle:right=caution_area` | 🚴 | +| `ccgis:bicycle:left=caution_area` | 🚴 | +| `foot=discouraged` | 🚶 | +| `bicycle=discouraged` | 🚴 | +| `foot=use_sidepath` | 🚶 | +| `bicycle=use_sidepath` | 🚴 | + + diff --git a/docs/osm/Default.md b/docs/osm/Default.md new file mode 100644 index 00000000000..fe2b8895b23 --- /dev/null +++ b/docs/osm/Default.md @@ -0,0 +1,1254 @@ +## OSM tag mapping + +### Way properties + +Way properties set a way's permission and optionally influences its walk and bicycle safety factors. +These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. + + + + +| specifier | permission | safety | +|---------------------------------------------------------|------------------------|--------| +| `mtb:scale=3` | NONE | | +| `mtb:scale=4` | NONE | | +| `mtb:scale=5` | NONE | | +| `mtb:scale=6` | NONE | | +| `highway=corridor` | PEDESTRIAN | | +| `highway=steps` | PEDESTRIAN | | +| `highway=crossing` | PEDESTRIAN | | +| `highway=platform` | PEDESTRIAN | | +| `public_transport=platform` | PEDESTRIAN | | +| `railway=platform` | PEDESTRIAN | | +| `footway=sidewalk; highway=footway` | PEDESTRIAN | | +| `mtb:scale=1` | PEDESTRIAN | | +| `mtb:scale=2` | PEDESTRIAN | | +| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=living_street` | ALL | 🚴 | +| `highway=unclassified` | ALL | | +| `highway=road` | ALL | | +| `highway=byway` | ALL | 🚴 | +| `highway=track` | ALL | 🚴 | +| `highway=service` | ALL | 🚴 | +| `highway=residential` | ALL | 🚴 | +| `highway=residential_link` | ALL | 🚴 | +| `highway=tertiary` | ALL | | +| `highway=tertiary_link` | ALL | | +| `highway=secondary` | ALL | 🚴 | +| `highway=secondary_link` | ALL | 🚴 | +| `highway=primary` | ALL | 🚴 | +| `highway=primary_link` | ALL | 🚴 | +| `highway=trunk_link` | CAR | 🚴 | +| `highway=motorway_link` | CAR | 🚴 | +| `highway=trunk` | CAR | 🚴 | +| `highway=motorway` | CAR | 🚴 | +| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=lane` | ALL | 🚴 | +| `highway=residential; cycleway=lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | +| `highway=secondary; cycleway=lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | +| `highway=primary; cycleway=lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=lane` | ALL | 🚴 | +| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=track` | ALL | 🚴 | +| `highway=residential; cycleway=track` | ALL | 🚴 | +| `highway=residential_link; cycleway=track` | ALL | 🚴 | +| `highway=tertiary; cycleway=track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | +| `highway=secondary; cycleway=track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=track` | ALL | 🚴 | +| `highway=primary; cycleway=track` | ALL | 🚴 | +| `highway=primary_link; cycleway=track` | ALL | 🚴 | +| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | +| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite` | ALL | 🚴 | +| `highway=residential; cycleway=opposite` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite` | ALL | | +| `highway=tertiary_link; cycleway=opposite` | ALL | | +| `highway=secondary; cycleway=opposite` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=primary; cycleway=opposite` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `present(highway); bicycle=designated` | ALL | 🚴 | +| `highway=service; bicycle=designated` | ALL | 🚴 | +| `highway=residential; bicycle=designated` | ALL | 🚴 | +| `highway=unclassified; bicycle=designated` | ALL | 🚴 | +| `highway=residential_link; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | +| `highway=secondary; bicycle=designated` | ALL | 🚴 | +| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | +| `highway=primary; bicycle=designated` | ALL | 🚴 | +| `highway=primary_link; bicycle=designated` | ALL | 🚴 | +| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | + + + + + + +

Rule #0

+ +**Specifier:** `mtb:scale=3` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #1

+ +**Specifier:** `mtb:scale=4` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #2

+ +**Specifier:** `mtb:scale=5` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #3

+ +**Specifier:** `mtb:scale=6` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #4

+ +**Specifier:** `highway=corridor` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #5

+ +**Specifier:** `highway=steps` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #6

+ +**Specifier:** `highway=crossing` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #7

+ +**Specifier:** `highway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #8

+ +**Specifier:** `public_transport=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #9

+ +**Specifier:** `railway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #10

+ +**Specifier:** `footway=sidewalk; highway=footway` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #11

+ +**Specifier:** `mtb:scale=1` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #12

+ +**Specifier:** `mtb:scale=2` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #13

+ +**Specifier:** `mtb:scale=0` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #14

+ +**Specifier:** `highway=cycleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #15

+ +**Specifier:** `highway=path` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #16

+ +**Specifier:** `highway=pedestrian` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #17

+ +**Specifier:** `highway=footway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #18

+ +**Specifier:** `highway=bridleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #19

+ +**Specifier:** `highway=living_street` +**Permission:** ALL +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #20

+ +**Specifier:** `highway=unclassified` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #21

+ +**Specifier:** `highway=road` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #22

+ +**Specifier:** `highway=byway` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #23

+ +**Specifier:** `highway=track` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #24

+ +**Specifier:** `highway=service` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #25

+ +**Specifier:** `highway=residential` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #26

+ +**Specifier:** `highway=residential_link` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #27

+ +**Specifier:** `highway=tertiary` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #28

+ +**Specifier:** `highway=tertiary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #29

+ +**Specifier:** `highway=secondary` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #30

+ +**Specifier:** `highway=secondary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #31

+ +**Specifier:** `highway=primary` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #32

+ +**Specifier:** `highway=primary_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #33

+ +**Specifier:** `highway=trunk_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #34

+ +**Specifier:** `highway=motorway_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #35

+ +**Specifier:** `highway=trunk` +**Permission:** CAR +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #36

+ +**Specifier:** `highway=motorway` +**Permission:** CAR +**Bike safety factor:** forward: 8.0, back: 8.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #37

+ +**Specifier:** `present(highway); cycleway=lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #38

+ +**Specifier:** `highway=service; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #39

+ +**Specifier:** `highway=residential; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #40

+ +**Specifier:** `highway=residential_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #41

+ +**Specifier:** `highway=tertiary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #42

+ +**Specifier:** `highway=tertiary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #43

+ +**Specifier:** `highway=secondary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #44

+ +**Specifier:** `highway=secondary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #45

+ +**Specifier:** `highway=primary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #46

+ +**Specifier:** `highway=primary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #47

+ +**Specifier:** `highway=trunk; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #48

+ +**Specifier:** `highway=trunk_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #49

+ +**Specifier:** `highway=motorway; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #50

+ +**Specifier:** `highway=motorway_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #51

+ +**Specifier:** `present(highway); cycleway=share_busway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #52

+ +**Specifier:** `highway=service; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #53

+ +**Specifier:** `highway=residential; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #54

+ +**Specifier:** `highway=residential_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #55

+ +**Specifier:** `highway=tertiary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #56

+ +**Specifier:** `highway=tertiary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #57

+ +**Specifier:** `highway=secondary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #58

+ +**Specifier:** `highway=secondary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #59

+ +**Specifier:** `highway=primary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #60

+ +**Specifier:** `highway=primary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #61

+ +**Specifier:** `highway=trunk; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #62

+ +**Specifier:** `highway=trunk_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #63

+ +**Specifier:** `highway=motorway; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #64

+ +**Specifier:** `highway=motorway_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #65

+ +**Specifier:** `present(highway); cycleway=opposite_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #66

+ +**Specifier:** `highway=service; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #67

+ +**Specifier:** `highway=residential; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #68

+ +**Specifier:** `highway=residential_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #69

+ +**Specifier:** `highway=tertiary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #70

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #71

+ +**Specifier:** `highway=secondary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #72

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #73

+ +**Specifier:** `highway=primary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #74

+ +**Specifier:** `highway=primary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #75

+ +**Specifier:** `highway=trunk; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #76

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #77

+ +**Specifier:** `present(highway); cycleway=track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #78

+ +**Specifier:** `highway=service; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #79

+ +**Specifier:** `highway=residential; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #80

+ +**Specifier:** `highway=residential_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #81

+ +**Specifier:** `highway=tertiary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #82

+ +**Specifier:** `highway=tertiary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #83

+ +**Specifier:** `highway=secondary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #84

+ +**Specifier:** `highway=secondary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #85

+ +**Specifier:** `highway=primary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #86

+ +**Specifier:** `highway=primary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #87

+ +**Specifier:** `highway=trunk; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #88

+ +**Specifier:** `highway=trunk_link; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #89

+ +**Specifier:** `present(highway); cycleway=opposite_track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #90

+ +**Specifier:** `highway=service; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #91

+ +**Specifier:** `highway=residential; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #92

+ +**Specifier:** `highway=residential_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #93

+ +**Specifier:** `highway=tertiary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #94

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #95

+ +**Specifier:** `highway=secondary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #96

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #97

+ +**Specifier:** `highway=primary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #98

+ +**Specifier:** `highway=primary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #99

+ +**Specifier:** `highway=trunk; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #100

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #101

+ +**Specifier:** `present(highway); cycleway=shared_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #102

+ +**Specifier:** `highway=service; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.73, back: 0.73 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #103

+ +**Specifier:** `highway=residential; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #104

+ +**Specifier:** `highway=residential_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #105

+ +**Specifier:** `highway=tertiary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #106

+ +**Specifier:** `highway=tertiary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #107

+ +**Specifier:** `highway=secondary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #108

+ +**Specifier:** `highway=secondary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #109

+ +**Specifier:** `highway=primary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #110

+ +**Specifier:** `highway=primary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #111

+ +**Specifier:** `present(highway); cycleway=opposite` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.4 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #112

+ +**Specifier:** `highway=service; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #113

+ +**Specifier:** `highway=residential; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #114

+ +**Specifier:** `highway=residential_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #115

+ +**Specifier:** `highway=tertiary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #116

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #117

+ +**Specifier:** `highway=secondary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #118

+ +**Specifier:** `highway=secondary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #119

+ +**Specifier:** `highway=primary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #120

+ +**Specifier:** `highway=primary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #121

+ +**Specifier:** `highway=path; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #122

+ +**Specifier:** `highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #123

+ +**Specifier:** `highway=footway; bicycle=yes; area=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #124

+ +**Specifier:** `highway=pedestrian; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #125

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #126

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #127

+ +**Specifier:** `highway=footway; footway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #128

+ +**Specifier:** `highway=footway; footway=crossing; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #129

+ +**Specifier:** `highway=track; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #130

+ +**Specifier:** `highway=track; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #131

+ +**Specifier:** `highway=track; bicycle=yes; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #132

+ +**Specifier:** `highway=track; bicycle=designated; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #133

+ +**Specifier:** `highway=track; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #134

+ +**Specifier:** `present(highway); bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #135

+ +**Specifier:** `highway=service; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.84, back: 0.84 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #136

+ +**Specifier:** `highway=residential; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #137

+ +**Specifier:** `highway=unclassified; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #138

+ +**Specifier:** `highway=residential_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #139

+ +**Specifier:** `highway=tertiary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #140

+ +**Specifier:** `highway=tertiary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #141

+ +**Specifier:** `highway=secondary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #142

+ +**Specifier:** `highway=secondary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #143

+ +**Specifier:** `highway=primary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #144

+ +**Specifier:** `highway=primary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #145

+ +**Specifier:** `highway=trunk; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.25, back: 7.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #146

+ +**Specifier:** `highway=trunk_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #147

+ +**Specifier:** `highway=motorway; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.76, back: 7.76 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #148

+ +**Specifier:** `highway=motorway_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + + + + +### Bicycle and walking safety mixins + +Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the +permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. + + + + +| matcher | modifications | +|------------------------------------------------------------|---------------| +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | +| `surface=unpaved` | 🚴 | +| `surface=compacted` | 🚴 | +| `surface=wood` | 🚴 | +| `surface=cobblestone` | 🚴 | +| `surface=sett` | 🚴 | +| `surface=unhewn_cobblestone` | 🚴 | +| `surface=grass_paver` | 🚴 | +| `surface=pebblestone` | 🚴 | +| `surface=metal` | 🚴 | +| `surface=ground` | 🚴 | +| `surface=dirt` | 🚴 | +| `surface=earth` | 🚴 | +| `surface=grass` | 🚴 | +| `surface=mud` | 🚴 | +| `surface=woodchip` | 🚴 | +| `surface=gravel` | 🚴 | +| `surface=artifical_turf` | 🚴 | +| `surface=sand` | 🚴 | +| `rlis:bicycle=caution_area` | 🚴 | +| `rlis:bicycle:right=caution_area` | 🚴 | +| `rlis:bicycle:left=caution_area` | 🚴 | +| `ccgis:bicycle=caution_area` | 🚴 | +| `ccgis:bicycle:right=caution_area` | 🚴 | +| `ccgis:bicycle:left=caution_area` | 🚴 | +| `foot=discouraged` | 🚶 | +| `bicycle=discouraged` | 🚴 | +| `foot=use_sidepath` | 🚶 | +| `bicycle=use_sidepath` | 🚴 | + + diff --git a/docs/osm/Finland.md b/docs/osm/Finland.md new file mode 100644 index 00000000000..2cd77be22ea --- /dev/null +++ b/docs/osm/Finland.md @@ -0,0 +1,1607 @@ +## OSM tag mapping + +### Way properties + +Way properties set a way's permission and optionally influences its walk and bicycle safety factors. +These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. + + + + +| specifier | permission | safety | +|---------------------------------------------------------------------------------|------------------------|--------| +| `highway=living_street` | ALL | 🚴 | +| `highway=unclassified` | ALL | | +| `highway=road` | ALL | | +| `highway=byway` | ALL | 🚴 | +| `highway=track` | ALL | 🚴 | +| `highway=service` | ALL | 🚴 | +| `highway=residential` | ALL | 🚴 | +| `highway=residential_link` | ALL | 🚴 | +| `highway=tertiary` | ALL | | +| `highway=tertiary_link` | ALL | | +| `highway=secondary` | ALL | 🚴 | +| `highway=secondary_link` | ALL | 🚴 | +| `highway=primary` | ALL | 🚴 | +| `highway=primary_link` | ALL | 🚴 | +| `highway=trunk_link` | ALL | 🚴 | +| `highway=trunk` | ALL | 🚴 | +| `highway=trunk; tunnel=yes` | CAR | 🚴 | +| `motorroad=yes` | CAR | 🚴 | +| `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=cycleway; segregated=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=footway; bridge=yes` | PEDESTRIAN | | +| `highway=footway; tunnel=yes` | PEDESTRIAN | | +| `highway=cycleway; bridge=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=cycleway; tunnel=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing; crossing=traffic_signals` | PEDESTRIAN | 🚶 | +| `highway=footway; footway=crossing` | PEDESTRIAN | 🚶 | +| `highway=cycleway; cycleway=crossing; segregated=yes; crossing=traffic_signals` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=cycleway; footway=crossing; segregated=yes; crossing=traffic_signals` | PEDESTRIAN | 🚴 🚶 | +| `highway=cycleway; cycleway=crossing; segregated=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=cycleway; footway=crossing; segregated=yes` | PEDESTRIAN | 🚴 🚶 | +| `highway=cycleway; cycleway=crossing; crossing=traffic_signals` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=cycleway; footway=crossing; crossing=traffic_signals` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=cycleway; cycleway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=cycleway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=cycleway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; tunnel=yes; access=destination` | NONE | | +| `highway=service; access=destination` | ALL | 🚴 | +| `mtb:scale=3` | NONE | | +| `mtb:scale=4` | NONE | | +| `mtb:scale=5` | NONE | | +| `mtb:scale=6` | NONE | | +| `highway=corridor` | PEDESTRIAN | | +| `highway=steps` | PEDESTRIAN | | +| `highway=crossing` | PEDESTRIAN | | +| `highway=platform` | PEDESTRIAN | | +| `public_transport=platform` | PEDESTRIAN | | +| `railway=platform` | PEDESTRIAN | | +| `footway=sidewalk; highway=footway` | PEDESTRIAN | | +| `mtb:scale=1` | PEDESTRIAN | | +| `mtb:scale=2` | PEDESTRIAN | | +| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=living_street` | ALL | 🚴 | +| `highway=unclassified` | ALL | | +| `highway=road` | ALL | | +| `highway=byway` | ALL | 🚴 | +| `highway=track` | ALL | 🚴 | +| `highway=service` | ALL | 🚴 | +| `highway=residential` | ALL | 🚴 | +| `highway=residential_link` | ALL | 🚴 | +| `highway=tertiary` | ALL | | +| `highway=tertiary_link` | ALL | | +| `highway=secondary` | ALL | 🚴 | +| `highway=secondary_link` | ALL | 🚴 | +| `highway=primary` | ALL | 🚴 | +| `highway=primary_link` | ALL | 🚴 | +| `highway=trunk_link` | CAR | 🚴 | +| `highway=motorway_link` | CAR | 🚴 | +| `highway=trunk` | CAR | 🚴 | +| `highway=motorway` | CAR | 🚴 | +| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=lane` | ALL | 🚴 | +| `highway=residential; cycleway=lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | +| `highway=secondary; cycleway=lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | +| `highway=primary; cycleway=lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=lane` | ALL | 🚴 | +| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=track` | ALL | 🚴 | +| `highway=residential; cycleway=track` | ALL | 🚴 | +| `highway=residential_link; cycleway=track` | ALL | 🚴 | +| `highway=tertiary; cycleway=track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | +| `highway=secondary; cycleway=track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=track` | ALL | 🚴 | +| `highway=primary; cycleway=track` | ALL | 🚴 | +| `highway=primary_link; cycleway=track` | ALL | 🚴 | +| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | +| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite` | ALL | 🚴 | +| `highway=residential; cycleway=opposite` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite` | ALL | | +| `highway=tertiary_link; cycleway=opposite` | ALL | | +| `highway=secondary; cycleway=opposite` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=primary; cycleway=opposite` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `present(highway); bicycle=designated` | ALL | 🚴 | +| `highway=service; bicycle=designated` | ALL | 🚴 | +| `highway=residential; bicycle=designated` | ALL | 🚴 | +| `highway=unclassified; bicycle=designated` | ALL | 🚴 | +| `highway=residential_link; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | +| `highway=secondary; bicycle=designated` | ALL | 🚴 | +| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | +| `highway=primary; bicycle=designated` | ALL | 🚴 | +| `highway=primary_link; bicycle=designated` | ALL | 🚴 | +| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | + + + + + + +

Rule #0

+ +**Specifier:** `highway=living_street` +**Permission:** ALL +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #1

+ +**Specifier:** `highway=unclassified` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #2

+ +**Specifier:** `highway=road` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #3

+ +**Specifier:** `highway=byway` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #4

+ +**Specifier:** `highway=track` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #5

+ +**Specifier:** `highway=service` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #6

+ +**Specifier:** `highway=residential` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #7

+ +**Specifier:** `highway=residential_link` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #8

+ +**Specifier:** `highway=tertiary` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #9

+ +**Specifier:** `highway=tertiary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #10

+ +**Specifier:** `highway=secondary` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #11

+ +**Specifier:** `highway=secondary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #12

+ +**Specifier:** `highway=primary` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #13

+ +**Specifier:** `highway=primary_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #14

+ +**Specifier:** `highway=trunk_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #15

+ +**Specifier:** `highway=trunk` +**Permission:** ALL +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #16

+ +**Specifier:** `highway=trunk; tunnel=yes` +**Permission:** CAR +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #17

+ +**Specifier:** `motorroad=yes` +**Permission:** CAR +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #18

+ +**Specifier:** `present(highway); informal=yes` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #19

+ +**Specifier:** `highway=service; access=private` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #20

+ +**Specifier:** `highway=trail` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #21

+ +**Specifier:** `present(highway); seasonal=winter` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #22

+ +**Specifier:** `present(highway); ice_road=yes` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #23

+ +**Specifier:** `present(highway); winter_road=yes` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #24

+ +**Specifier:** `highway=footway` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #25

+ +**Specifier:** `footway=sidewalk; highway=footway` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #26

+ +**Specifier:** `highway=cycleway; segregated=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.1, back: 1.1 + +

Rule #27

+ +**Specifier:** `highway=footway; bridge=yes` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #28

+ +**Specifier:** `highway=footway; tunnel=yes` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #29

+ +**Specifier:** `highway=cycleway; bridge=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #30

+ +**Specifier:** `highway=cycleway; tunnel=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #31

+ +**Specifier:** `highway=footway; footway=crossing; crossing=traffic_signals` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.1, back: 1.1 + +

Rule #32

+ +**Specifier:** `highway=footway; footway=crossing` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.2, back: 1.2 + +

Rule #33

+ +**Specifier:** `highway=cycleway; cycleway=crossing; segregated=yes; crossing=traffic_signals` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.1, back: 1.1 + +

Rule #34

+ +**Specifier:** `highway=cycleway; footway=crossing; segregated=yes; crossing=traffic_signals` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.1, back: 1.1 + +

Rule #35

+ +**Specifier:** `highway=cycleway; cycleway=crossing; segregated=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.2, back: 1.2 +**Walk safety factor:** forward: 1.2, back: 1.2 + +

Rule #36

+ +**Specifier:** `highway=cycleway; footway=crossing; segregated=yes` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.2, back: 1.2 +**Walk safety factor:** forward: 1.2, back: 1.2 + +

Rule #37

+ +**Specifier:** `highway=cycleway; cycleway=crossing; crossing=traffic_signals` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.15, back: 1.15 + +

Rule #38

+ +**Specifier:** `highway=cycleway; footway=crossing; crossing=traffic_signals` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.15, back: 1.15 + +

Rule #39

+ +**Specifier:** `highway=cycleway; cycleway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.2, back: 1.2 +**Walk safety factor:** forward: 1.25, back: 1.25 + +

Rule #40

+ +**Specifier:** `highway=cycleway; footway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.2, back: 1.2 +**Walk safety factor:** forward: 1.25, back: 1.25 + +

Rule #41

+ +**Specifier:** `highway=cycleway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #42

+ +**Specifier:** `highway=service; tunnel=yes; access=destination` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #43

+ +**Specifier:** `highway=service; access=destination` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #44

+ +**Specifier:** `mtb:scale=3` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #45

+ +**Specifier:** `mtb:scale=4` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #46

+ +**Specifier:** `mtb:scale=5` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #47

+ +**Specifier:** `mtb:scale=6` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #48

+ +**Specifier:** `highway=corridor` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #49

+ +**Specifier:** `highway=steps` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #50

+ +**Specifier:** `highway=crossing` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #51

+ +**Specifier:** `highway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #52

+ +**Specifier:** `public_transport=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #53

+ +**Specifier:** `railway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #54

+ +**Specifier:** `footway=sidewalk; highway=footway` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #55

+ +**Specifier:** `mtb:scale=1` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #56

+ +**Specifier:** `mtb:scale=2` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #57

+ +**Specifier:** `mtb:scale=0` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #58

+ +**Specifier:** `highway=cycleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #59

+ +**Specifier:** `highway=path` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #60

+ +**Specifier:** `highway=pedestrian` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #61

+ +**Specifier:** `highway=footway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #62

+ +**Specifier:** `highway=bridleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #63

+ +**Specifier:** `highway=living_street` +**Permission:** ALL +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #64

+ +**Specifier:** `highway=unclassified` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #65

+ +**Specifier:** `highway=road` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #66

+ +**Specifier:** `highway=byway` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #67

+ +**Specifier:** `highway=track` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #68

+ +**Specifier:** `highway=service` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #69

+ +**Specifier:** `highway=residential` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #70

+ +**Specifier:** `highway=residential_link` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #71

+ +**Specifier:** `highway=tertiary` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #72

+ +**Specifier:** `highway=tertiary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #73

+ +**Specifier:** `highway=secondary` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #74

+ +**Specifier:** `highway=secondary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #75

+ +**Specifier:** `highway=primary` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #76

+ +**Specifier:** `highway=primary_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #77

+ +**Specifier:** `highway=trunk_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #78

+ +**Specifier:** `highway=motorway_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #79

+ +**Specifier:** `highway=trunk` +**Permission:** CAR +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #80

+ +**Specifier:** `highway=motorway` +**Permission:** CAR +**Bike safety factor:** forward: 8.0, back: 8.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #81

+ +**Specifier:** `present(highway); cycleway=lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #82

+ +**Specifier:** `highway=service; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #83

+ +**Specifier:** `highway=residential; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #84

+ +**Specifier:** `highway=residential_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #85

+ +**Specifier:** `highway=tertiary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #86

+ +**Specifier:** `highway=tertiary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #87

+ +**Specifier:** `highway=secondary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #88

+ +**Specifier:** `highway=secondary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #89

+ +**Specifier:** `highway=primary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #90

+ +**Specifier:** `highway=primary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #91

+ +**Specifier:** `highway=trunk; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #92

+ +**Specifier:** `highway=trunk_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #93

+ +**Specifier:** `highway=motorway; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #94

+ +**Specifier:** `highway=motorway_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #95

+ +**Specifier:** `present(highway); cycleway=share_busway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #96

+ +**Specifier:** `highway=service; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #97

+ +**Specifier:** `highway=residential; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #98

+ +**Specifier:** `highway=residential_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #99

+ +**Specifier:** `highway=tertiary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #100

+ +**Specifier:** `highway=tertiary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #101

+ +**Specifier:** `highway=secondary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #102

+ +**Specifier:** `highway=secondary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #103

+ +**Specifier:** `highway=primary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #104

+ +**Specifier:** `highway=primary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #105

+ +**Specifier:** `highway=trunk; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #106

+ +**Specifier:** `highway=trunk_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #107

+ +**Specifier:** `highway=motorway; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #108

+ +**Specifier:** `highway=motorway_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #109

+ +**Specifier:** `present(highway); cycleway=opposite_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #110

+ +**Specifier:** `highway=service; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #111

+ +**Specifier:** `highway=residential; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #112

+ +**Specifier:** `highway=residential_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #113

+ +**Specifier:** `highway=tertiary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #114

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #115

+ +**Specifier:** `highway=secondary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #116

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #117

+ +**Specifier:** `highway=primary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #118

+ +**Specifier:** `highway=primary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #119

+ +**Specifier:** `highway=trunk; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #120

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #121

+ +**Specifier:** `present(highway); cycleway=track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #122

+ +**Specifier:** `highway=service; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #123

+ +**Specifier:** `highway=residential; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #124

+ +**Specifier:** `highway=residential_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #125

+ +**Specifier:** `highway=tertiary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #126

+ +**Specifier:** `highway=tertiary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #127

+ +**Specifier:** `highway=secondary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #128

+ +**Specifier:** `highway=secondary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #129

+ +**Specifier:** `highway=primary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #130

+ +**Specifier:** `highway=primary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #131

+ +**Specifier:** `highway=trunk; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #132

+ +**Specifier:** `highway=trunk_link; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #133

+ +**Specifier:** `present(highway); cycleway=opposite_track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #134

+ +**Specifier:** `highway=service; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #135

+ +**Specifier:** `highway=residential; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #136

+ +**Specifier:** `highway=residential_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #137

+ +**Specifier:** `highway=tertiary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #138

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #139

+ +**Specifier:** `highway=secondary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #140

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #141

+ +**Specifier:** `highway=primary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #142

+ +**Specifier:** `highway=primary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #143

+ +**Specifier:** `highway=trunk; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #144

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #145

+ +**Specifier:** `present(highway); cycleway=shared_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #146

+ +**Specifier:** `highway=service; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.73, back: 0.73 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #147

+ +**Specifier:** `highway=residential; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #148

+ +**Specifier:** `highway=residential_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #149

+ +**Specifier:** `highway=tertiary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #150

+ +**Specifier:** `highway=tertiary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #151

+ +**Specifier:** `highway=secondary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #152

+ +**Specifier:** `highway=secondary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #153

+ +**Specifier:** `highway=primary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #154

+ +**Specifier:** `highway=primary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #155

+ +**Specifier:** `present(highway); cycleway=opposite` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.4 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #156

+ +**Specifier:** `highway=service; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #157

+ +**Specifier:** `highway=residential; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #158

+ +**Specifier:** `highway=residential_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #159

+ +**Specifier:** `highway=tertiary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #160

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #161

+ +**Specifier:** `highway=secondary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #162

+ +**Specifier:** `highway=secondary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #163

+ +**Specifier:** `highway=primary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #164

+ +**Specifier:** `highway=primary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #165

+ +**Specifier:** `highway=path; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #166

+ +**Specifier:** `highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #167

+ +**Specifier:** `highway=footway; bicycle=yes; area=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #168

+ +**Specifier:** `highway=pedestrian; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #169

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #170

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #171

+ +**Specifier:** `highway=footway; footway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #172

+ +**Specifier:** `highway=footway; footway=crossing; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #173

+ +**Specifier:** `highway=track; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #174

+ +**Specifier:** `highway=track; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #175

+ +**Specifier:** `highway=track; bicycle=yes; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #176

+ +**Specifier:** `highway=track; bicycle=designated; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #177

+ +**Specifier:** `highway=track; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #178

+ +**Specifier:** `present(highway); bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #179

+ +**Specifier:** `highway=service; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.84, back: 0.84 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #180

+ +**Specifier:** `highway=residential; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #181

+ +**Specifier:** `highway=unclassified; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #182

+ +**Specifier:** `highway=residential_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #183

+ +**Specifier:** `highway=tertiary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #184

+ +**Specifier:** `highway=tertiary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #185

+ +**Specifier:** `highway=secondary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #186

+ +**Specifier:** `highway=secondary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #187

+ +**Specifier:** `highway=primary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #188

+ +**Specifier:** `highway=primary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #189

+ +**Specifier:** `highway=trunk; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.25, back: 7.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #190

+ +**Specifier:** `highway=trunk_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #191

+ +**Specifier:** `highway=motorway; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.76, back: 7.76 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #192

+ +**Specifier:** `highway=motorway_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + + + + +### Bicycle and walking safety mixins + +Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the +permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. + + + + +| matcher | modifications | +|------------------------------------------------------------|---------------| +| `bicycle=use_sidepath` | 🚶 | +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | +| `surface=unpaved` | 🚴 | +| `surface=compacted` | 🚴 | +| `surface=wood` | 🚴 | +| `surface=cobblestone` | 🚴 | +| `surface=sett` | 🚴 | +| `surface=unhewn_cobblestone` | 🚴 | +| `surface=grass_paver` | 🚴 | +| `surface=pebblestone` | 🚴 | +| `surface=metal` | 🚴 | +| `surface=ground` | 🚴 | +| `surface=dirt` | 🚴 | +| `surface=earth` | 🚴 | +| `surface=grass` | 🚴 | +| `surface=mud` | 🚴 | +| `surface=woodchip` | 🚴 | +| `surface=gravel` | 🚴 | +| `surface=artifical_turf` | 🚴 | +| `surface=sand` | 🚴 | +| `rlis:bicycle=caution_area` | 🚴 | +| `rlis:bicycle:right=caution_area` | 🚴 | +| `rlis:bicycle:left=caution_area` | 🚴 | +| `ccgis:bicycle=caution_area` | 🚴 | +| `ccgis:bicycle:right=caution_area` | 🚴 | +| `ccgis:bicycle:left=caution_area` | 🚴 | +| `foot=discouraged` | 🚶 | +| `bicycle=discouraged` | 🚴 | +| `foot=use_sidepath` | 🚶 | +| `bicycle=use_sidepath` | 🚴 | + + diff --git a/docs/osm/Germany.md b/docs/osm/Germany.md new file mode 100644 index 00000000000..b6d218f95e7 --- /dev/null +++ b/docs/osm/Germany.md @@ -0,0 +1,1337 @@ +## OSM tag mapping + +### Way properties + +Way properties set a way's permission and optionally influences its walk and bicycle safety factors. +These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. + + + + +| specifier | permission | safety | +|---------------------------------------------------------|------------------------|--------| +| `highway=track` | PEDESTRIAN_AND_BICYCLE | | +| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | | +| `highway=residential; junction=roundabout` | ALL | 🚴 | +| `present(highway); junction=roundabout` | BICYCLE_AND_CAR | | +| `highway=pedestrian` | PEDESTRIAN | | +| `highway=residential; maxspeed=30` | ALL | 🚴 | +| `highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=unclassified; cycleway=lane` | ALL | 🚴 | +| `mtb:scale=3` | NONE | | +| `mtb:scale=4` | NONE | | +| `mtb:scale=5` | NONE | | +| `mtb:scale=6` | NONE | | +| `highway=corridor` | PEDESTRIAN | | +| `highway=steps` | PEDESTRIAN | | +| `highway=crossing` | PEDESTRIAN | | +| `highway=platform` | PEDESTRIAN | | +| `public_transport=platform` | PEDESTRIAN | | +| `railway=platform` | PEDESTRIAN | | +| `footway=sidewalk; highway=footway` | PEDESTRIAN | | +| `mtb:scale=1` | PEDESTRIAN | | +| `mtb:scale=2` | PEDESTRIAN | | +| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=living_street` | ALL | 🚴 | +| `highway=unclassified` | ALL | | +| `highway=road` | ALL | | +| `highway=byway` | ALL | 🚴 | +| `highway=track` | ALL | 🚴 | +| `highway=service` | ALL | 🚴 | +| `highway=residential` | ALL | 🚴 | +| `highway=residential_link` | ALL | 🚴 | +| `highway=tertiary` | ALL | | +| `highway=tertiary_link` | ALL | | +| `highway=secondary` | ALL | 🚴 | +| `highway=secondary_link` | ALL | 🚴 | +| `highway=primary` | ALL | 🚴 | +| `highway=primary_link` | ALL | 🚴 | +| `highway=trunk_link` | CAR | 🚴 | +| `highway=motorway_link` | CAR | 🚴 | +| `highway=trunk` | CAR | 🚴 | +| `highway=motorway` | CAR | 🚴 | +| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=lane` | ALL | 🚴 | +| `highway=residential; cycleway=lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | +| `highway=secondary; cycleway=lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | +| `highway=primary; cycleway=lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=lane` | ALL | 🚴 | +| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=track` | ALL | 🚴 | +| `highway=residential; cycleway=track` | ALL | 🚴 | +| `highway=residential_link; cycleway=track` | ALL | 🚴 | +| `highway=tertiary; cycleway=track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | +| `highway=secondary; cycleway=track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=track` | ALL | 🚴 | +| `highway=primary; cycleway=track` | ALL | 🚴 | +| `highway=primary_link; cycleway=track` | ALL | 🚴 | +| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | +| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite` | ALL | 🚴 | +| `highway=residential; cycleway=opposite` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite` | ALL | | +| `highway=tertiary_link; cycleway=opposite` | ALL | | +| `highway=secondary; cycleway=opposite` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=primary; cycleway=opposite` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `present(highway); bicycle=designated` | ALL | 🚴 | +| `highway=service; bicycle=designated` | ALL | 🚴 | +| `highway=residential; bicycle=designated` | ALL | 🚴 | +| `highway=unclassified; bicycle=designated` | ALL | 🚴 | +| `highway=residential_link; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | +| `highway=secondary; bicycle=designated` | ALL | 🚴 | +| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | +| `highway=primary; bicycle=designated` | ALL | 🚴 | +| `highway=primary_link; bicycle=designated` | ALL | 🚴 | +| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | + + + + + + +

Rule #0

+ +**Specifier:** `highway=track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #1

+ +**Specifier:** `highway=track; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #2

+ +**Specifier:** `highway=residential; junction=roundabout` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #3

+ +**Specifier:** `present(highway); junction=roundabout` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #4

+ +**Specifier:** `highway=pedestrian` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #5

+ +**Specifier:** `highway=residential; maxspeed=30` +**Permission:** ALL +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #6

+ +**Specifier:** `highway=footway; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #7

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.2, back: 1.2 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #8

+ +**Specifier:** `highway=unclassified; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #9

+ +**Specifier:** `mtb:scale=3` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #10

+ +**Specifier:** `mtb:scale=4` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #11

+ +**Specifier:** `mtb:scale=5` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #12

+ +**Specifier:** `mtb:scale=6` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #13

+ +**Specifier:** `highway=corridor` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #14

+ +**Specifier:** `highway=steps` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #15

+ +**Specifier:** `highway=crossing` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #16

+ +**Specifier:** `highway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #17

+ +**Specifier:** `public_transport=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #18

+ +**Specifier:** `railway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #19

+ +**Specifier:** `footway=sidewalk; highway=footway` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #20

+ +**Specifier:** `mtb:scale=1` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #21

+ +**Specifier:** `mtb:scale=2` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #22

+ +**Specifier:** `mtb:scale=0` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #23

+ +**Specifier:** `highway=cycleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #24

+ +**Specifier:** `highway=path` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #25

+ +**Specifier:** `highway=pedestrian` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #26

+ +**Specifier:** `highway=footway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #27

+ +**Specifier:** `highway=bridleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #28

+ +**Specifier:** `highway=living_street` +**Permission:** ALL +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #29

+ +**Specifier:** `highway=unclassified` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #30

+ +**Specifier:** `highway=road` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #31

+ +**Specifier:** `highway=byway` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #32

+ +**Specifier:** `highway=track` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #33

+ +**Specifier:** `highway=service` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #34

+ +**Specifier:** `highway=residential` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #35

+ +**Specifier:** `highway=residential_link` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #36

+ +**Specifier:** `highway=tertiary` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #37

+ +**Specifier:** `highway=tertiary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #38

+ +**Specifier:** `highway=secondary` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #39

+ +**Specifier:** `highway=secondary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #40

+ +**Specifier:** `highway=primary` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #41

+ +**Specifier:** `highway=primary_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #42

+ +**Specifier:** `highway=trunk_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #43

+ +**Specifier:** `highway=motorway_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #44

+ +**Specifier:** `highway=trunk` +**Permission:** CAR +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #45

+ +**Specifier:** `highway=motorway` +**Permission:** CAR +**Bike safety factor:** forward: 8.0, back: 8.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #46

+ +**Specifier:** `present(highway); cycleway=lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #47

+ +**Specifier:** `highway=service; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #48

+ +**Specifier:** `highway=residential; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #49

+ +**Specifier:** `highway=residential_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #50

+ +**Specifier:** `highway=tertiary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #51

+ +**Specifier:** `highway=tertiary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #52

+ +**Specifier:** `highway=secondary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #53

+ +**Specifier:** `highway=secondary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #54

+ +**Specifier:** `highway=primary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #55

+ +**Specifier:** `highway=primary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #56

+ +**Specifier:** `highway=trunk; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #57

+ +**Specifier:** `highway=trunk_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #58

+ +**Specifier:** `highway=motorway; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #59

+ +**Specifier:** `highway=motorway_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #60

+ +**Specifier:** `present(highway); cycleway=share_busway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #61

+ +**Specifier:** `highway=service; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #62

+ +**Specifier:** `highway=residential; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #63

+ +**Specifier:** `highway=residential_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #64

+ +**Specifier:** `highway=tertiary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #65

+ +**Specifier:** `highway=tertiary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #66

+ +**Specifier:** `highway=secondary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #67

+ +**Specifier:** `highway=secondary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #68

+ +**Specifier:** `highway=primary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #69

+ +**Specifier:** `highway=primary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #70

+ +**Specifier:** `highway=trunk; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #71

+ +**Specifier:** `highway=trunk_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #72

+ +**Specifier:** `highway=motorway; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #73

+ +**Specifier:** `highway=motorway_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #74

+ +**Specifier:** `present(highway); cycleway=opposite_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #75

+ +**Specifier:** `highway=service; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #76

+ +**Specifier:** `highway=residential; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #77

+ +**Specifier:** `highway=residential_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #78

+ +**Specifier:** `highway=tertiary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #79

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #80

+ +**Specifier:** `highway=secondary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #81

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #82

+ +**Specifier:** `highway=primary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #83

+ +**Specifier:** `highway=primary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #84

+ +**Specifier:** `highway=trunk; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #85

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #86

+ +**Specifier:** `present(highway); cycleway=track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #87

+ +**Specifier:** `highway=service; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #88

+ +**Specifier:** `highway=residential; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #89

+ +**Specifier:** `highway=residential_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #90

+ +**Specifier:** `highway=tertiary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #91

+ +**Specifier:** `highway=tertiary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #92

+ +**Specifier:** `highway=secondary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #93

+ +**Specifier:** `highway=secondary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #94

+ +**Specifier:** `highway=primary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #95

+ +**Specifier:** `highway=primary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #96

+ +**Specifier:** `highway=trunk; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #97

+ +**Specifier:** `highway=trunk_link; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #98

+ +**Specifier:** `present(highway); cycleway=opposite_track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #99

+ +**Specifier:** `highway=service; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #100

+ +**Specifier:** `highway=residential; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #101

+ +**Specifier:** `highway=residential_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #102

+ +**Specifier:** `highway=tertiary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #103

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #104

+ +**Specifier:** `highway=secondary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #105

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #106

+ +**Specifier:** `highway=primary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #107

+ +**Specifier:** `highway=primary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #108

+ +**Specifier:** `highway=trunk; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #109

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #110

+ +**Specifier:** `present(highway); cycleway=shared_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #111

+ +**Specifier:** `highway=service; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.73, back: 0.73 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #112

+ +**Specifier:** `highway=residential; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #113

+ +**Specifier:** `highway=residential_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #114

+ +**Specifier:** `highway=tertiary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #115

+ +**Specifier:** `highway=tertiary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #116

+ +**Specifier:** `highway=secondary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #117

+ +**Specifier:** `highway=secondary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #118

+ +**Specifier:** `highway=primary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #119

+ +**Specifier:** `highway=primary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #120

+ +**Specifier:** `present(highway); cycleway=opposite` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.4 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #121

+ +**Specifier:** `highway=service; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #122

+ +**Specifier:** `highway=residential; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #123

+ +**Specifier:** `highway=residential_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #124

+ +**Specifier:** `highway=tertiary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #125

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #126

+ +**Specifier:** `highway=secondary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #127

+ +**Specifier:** `highway=secondary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #128

+ +**Specifier:** `highway=primary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #129

+ +**Specifier:** `highway=primary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #130

+ +**Specifier:** `highway=path; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #131

+ +**Specifier:** `highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #132

+ +**Specifier:** `highway=footway; bicycle=yes; area=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #133

+ +**Specifier:** `highway=pedestrian; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #134

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #135

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #136

+ +**Specifier:** `highway=footway; footway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #137

+ +**Specifier:** `highway=footway; footway=crossing; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #138

+ +**Specifier:** `highway=track; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #139

+ +**Specifier:** `highway=track; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #140

+ +**Specifier:** `highway=track; bicycle=yes; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #141

+ +**Specifier:** `highway=track; bicycle=designated; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #142

+ +**Specifier:** `highway=track; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #143

+ +**Specifier:** `present(highway); bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #144

+ +**Specifier:** `highway=service; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.84, back: 0.84 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #145

+ +**Specifier:** `highway=residential; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #146

+ +**Specifier:** `highway=unclassified; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #147

+ +**Specifier:** `highway=residential_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #148

+ +**Specifier:** `highway=tertiary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #149

+ +**Specifier:** `highway=tertiary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #150

+ +**Specifier:** `highway=secondary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #151

+ +**Specifier:** `highway=secondary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #152

+ +**Specifier:** `highway=primary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #153

+ +**Specifier:** `highway=primary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #154

+ +**Specifier:** `highway=trunk; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.25, back: 7.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #155

+ +**Specifier:** `highway=trunk_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #156

+ +**Specifier:** `highway=motorway; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.76, back: 7.76 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #157

+ +**Specifier:** `highway=motorway_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + + + + +### Bicycle and walking safety mixins + +Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the +permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. + + + + +| matcher | modifications | +|------------------------------------------------------------|---------------| +| `highway=tertiary` | 🚴 | +| `maxspeed=70` | 🚴 | +| `maxspeed=80` | 🚴 | +| `maxspeed=90` | 🚴 | +| `maxspeed=100` | 🚴 | +| `tracktype=grade1` | | +| `tracktype=grade2` | 🚴 | +| `tracktype=grade3` | 🚴 | +| `tracktype=grade4` | 🚴 | +| `tracktype=grade5` | 🚴 | +| `lit=no` | 🚴 | +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | +| `surface=unpaved` | 🚴 | +| `surface=compacted` | 🚴 | +| `surface=wood` | 🚴 | +| `surface=cobblestone` | 🚴 | +| `surface=sett` | 🚴 | +| `surface=unhewn_cobblestone` | 🚴 | +| `surface=grass_paver` | 🚴 | +| `surface=pebblestone` | 🚴 | +| `surface=metal` | 🚴 | +| `surface=ground` | 🚴 | +| `surface=dirt` | 🚴 | +| `surface=earth` | 🚴 | +| `surface=grass` | 🚴 | +| `surface=mud` | 🚴 | +| `surface=woodchip` | 🚴 | +| `surface=gravel` | 🚴 | +| `surface=artifical_turf` | 🚴 | +| `surface=sand` | 🚴 | +| `rlis:bicycle=caution_area` | 🚴 | +| `rlis:bicycle:right=caution_area` | 🚴 | +| `rlis:bicycle:left=caution_area` | 🚴 | +| `ccgis:bicycle=caution_area` | 🚴 | +| `ccgis:bicycle:right=caution_area` | 🚴 | +| `ccgis:bicycle:left=caution_area` | 🚴 | +| `foot=discouraged` | 🚶 | +| `bicycle=discouraged` | 🚴 | +| `foot=use_sidepath` | 🚶 | +| `bicycle=use_sidepath` | 🚴 | + + diff --git a/docs/osm/Hamburg.md b/docs/osm/Hamburg.md new file mode 100644 index 00000000000..2cdd3068ca6 --- /dev/null +++ b/docs/osm/Hamburg.md @@ -0,0 +1,217 @@ +## OSM tag mapping + + + + +| matcher | permission | safety | +|---------------------------------------------------------|------------------------|--------| +| `highway=track` | PEDESTRIAN_AND_BICYCLE | | +| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | | +| `highway=residential; junction=roundabout` | ALL | 🚴 | +| `present(highway); junction=roundabout` | BICYCLE_AND_CAR | | +| `highway=pedestrian` | PEDESTRIAN | | +| `highway=residential; maxspeed=30` | ALL | 🚴 | +| `highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=unclassified; cycleway=lane` | ALL | 🚴 | +| `mtb:scale=3` | NONE | | +| `mtb:scale=4` | NONE | | +| `mtb:scale=5` | NONE | | +| `mtb:scale=6` | NONE | | +| `highway=corridor` | PEDESTRIAN | | +| `highway=steps` | PEDESTRIAN | | +| `highway=crossing` | PEDESTRIAN | | +| `highway=platform` | PEDESTRIAN | | +| `public_transport=platform` | PEDESTRIAN | | +| `railway=platform` | PEDESTRIAN | | +| `footway=sidewalk; highway=footway` | PEDESTRIAN | | +| `mtb:scale=1` | PEDESTRIAN | | +| `mtb:scale=2` | PEDESTRIAN | | +| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=living_street` | ALL | 🚴 | +| `highway=unclassified` | ALL | | +| `highway=road` | ALL | | +| `highway=byway` | ALL | 🚴 | +| `highway=track` | ALL | 🚴 | +| `highway=service` | ALL | 🚴 | +| `highway=residential` | ALL | 🚴 | +| `highway=residential_link` | ALL | 🚴 | +| `highway=tertiary` | ALL | | +| `highway=tertiary_link` | ALL | | +| `highway=secondary` | ALL | 🚴 | +| `highway=secondary_link` | ALL | 🚴 | +| `highway=primary` | ALL | 🚴 | +| `highway=primary_link` | ALL | 🚴 | +| `highway=trunk_link` | CAR | 🚴 | +| `highway=motorway_link` | CAR | 🚴 | +| `highway=trunk` | CAR | 🚴 | +| `highway=motorway` | CAR | 🚴 | +| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=lane` | ALL | 🚴 | +| `highway=residential; cycleway=lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | +| `highway=secondary; cycleway=lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | +| `highway=primary; cycleway=lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=lane` | ALL | 🚴 | +| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=track` | ALL | 🚴 | +| `highway=residential; cycleway=track` | ALL | 🚴 | +| `highway=residential_link; cycleway=track` | ALL | 🚴 | +| `highway=tertiary; cycleway=track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | +| `highway=secondary; cycleway=track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=track` | ALL | 🚴 | +| `highway=primary; cycleway=track` | ALL | 🚴 | +| `highway=primary_link; cycleway=track` | ALL | 🚴 | +| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | +| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite` | ALL | 🚴 | +| `highway=residential; cycleway=opposite` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite` | ALL | | +| `highway=tertiary_link; cycleway=opposite` | ALL | | +| `highway=secondary; cycleway=opposite` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=primary; cycleway=opposite` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `present(highway); bicycle=designated` | ALL | 🚴 | +| `highway=service; bicycle=designated` | ALL | 🚴 | +| `highway=residential; bicycle=designated` | ALL | 🚴 | +| `highway=unclassified; bicycle=designated` | ALL | 🚴 | +| `highway=residential_link; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | +| `highway=secondary; bicycle=designated` | ALL | 🚴 | +| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | +| `highway=primary; bicycle=designated` | ALL | 🚴 | +| `highway=primary_link; bicycle=designated` | ALL | 🚴 | +| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | + + + +### Bicycle and walking safety mixins + + + + +| matcher | modifications | +|------------------------------------------------------------|---------------| +| `highway=tertiary` | 🚴 | +| `maxspeed=70` | 🚴 | +| `maxspeed=80` | 🚴 | +| `maxspeed=90` | 🚴 | +| `maxspeed=100` | 🚴 | +| `tracktype=grade1` | | +| `tracktype=grade2` | 🚴 | +| `tracktype=grade3` | 🚴 | +| `tracktype=grade4` | 🚴 | +| `tracktype=grade5` | 🚴 | +| `lit=no` | 🚴 | +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | +| `surface=unpaved` | 🚴 | +| `surface=compacted` | 🚴 | +| `surface=wood` | 🚴 | +| `surface=cobblestone` | 🚴 | +| `surface=sett` | 🚴 | +| `surface=unhewn_cobblestone` | 🚴 | +| `surface=grass_paver` | 🚴 | +| `surface=pebblestone` | 🚴 | +| `surface=metal` | 🚴 | +| `surface=ground` | 🚴 | +| `surface=dirt` | 🚴 | +| `surface=earth` | 🚴 | +| `surface=grass` | 🚴 | +| `surface=mud` | 🚴 | +| `surface=woodchip` | 🚴 | +| `surface=gravel` | 🚴 | +| `surface=artifical_turf` | 🚴 | +| `surface=sand` | 🚴 | +| `rlis:bicycle=caution_area` | 🚴 | +| `rlis:bicycle:right=caution_area` | 🚴 | +| `rlis:bicycle:left=caution_area` | 🚴 | +| `ccgis:bicycle=caution_area` | 🚴 | +| `ccgis:bicycle:right=caution_area` | 🚴 | +| `ccgis:bicycle:left=caution_area` | 🚴 | +| `foot=discouraged` | 🚶 | +| `bicycle=discouraged` | 🚴 | +| `foot=use_sidepath` | 🚶 | +| `bicycle=use_sidepath` | 🚴 | + + diff --git a/docs/osm/Houston.md b/docs/osm/Houston.md new file mode 100644 index 00000000000..8071d9a0a8a --- /dev/null +++ b/docs/osm/Houston.md @@ -0,0 +1,1262 @@ +## OSM tag mapping + +### Way properties + +Way properties set a way's permission and optionally influences its walk and bicycle safety factors. +These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. + + + + +| specifier | permission | safety | +|---------------------------------------------------------|------------------------|--------| +| `highway=footway; layer=-1; tunnel=yes; indoor=yes` | NONE | | +| `mtb:scale=3` | NONE | | +| `mtb:scale=4` | NONE | | +| `mtb:scale=5` | NONE | | +| `mtb:scale=6` | NONE | | +| `highway=corridor` | PEDESTRIAN | | +| `highway=steps` | PEDESTRIAN | | +| `highway=crossing` | PEDESTRIAN | | +| `highway=platform` | PEDESTRIAN | | +| `public_transport=platform` | PEDESTRIAN | | +| `railway=platform` | PEDESTRIAN | | +| `footway=sidewalk; highway=footway` | PEDESTRIAN | | +| `mtb:scale=1` | PEDESTRIAN | | +| `mtb:scale=2` | PEDESTRIAN | | +| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=living_street` | ALL | 🚴 | +| `highway=unclassified` | ALL | | +| `highway=road` | ALL | | +| `highway=byway` | ALL | 🚴 | +| `highway=track` | ALL | 🚴 | +| `highway=service` | ALL | 🚴 | +| `highway=residential` | ALL | 🚴 | +| `highway=residential_link` | ALL | 🚴 | +| `highway=tertiary` | ALL | | +| `highway=tertiary_link` | ALL | | +| `highway=secondary` | ALL | 🚴 | +| `highway=secondary_link` | ALL | 🚴 | +| `highway=primary` | ALL | 🚴 | +| `highway=primary_link` | ALL | 🚴 | +| `highway=trunk_link` | CAR | 🚴 | +| `highway=motorway_link` | CAR | 🚴 | +| `highway=trunk` | CAR | 🚴 | +| `highway=motorway` | CAR | 🚴 | +| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=lane` | ALL | 🚴 | +| `highway=residential; cycleway=lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | +| `highway=secondary; cycleway=lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | +| `highway=primary; cycleway=lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=lane` | ALL | 🚴 | +| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=track` | ALL | 🚴 | +| `highway=residential; cycleway=track` | ALL | 🚴 | +| `highway=residential_link; cycleway=track` | ALL | 🚴 | +| `highway=tertiary; cycleway=track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | +| `highway=secondary; cycleway=track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=track` | ALL | 🚴 | +| `highway=primary; cycleway=track` | ALL | 🚴 | +| `highway=primary_link; cycleway=track` | ALL | 🚴 | +| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | +| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite` | ALL | 🚴 | +| `highway=residential; cycleway=opposite` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite` | ALL | | +| `highway=tertiary_link; cycleway=opposite` | ALL | | +| `highway=secondary; cycleway=opposite` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=primary; cycleway=opposite` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `present(highway); bicycle=designated` | ALL | 🚴 | +| `highway=service; bicycle=designated` | ALL | 🚴 | +| `highway=residential; bicycle=designated` | ALL | 🚴 | +| `highway=unclassified; bicycle=designated` | ALL | 🚴 | +| `highway=residential_link; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | +| `highway=secondary; bicycle=designated` | ALL | 🚴 | +| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | +| `highway=primary; bicycle=designated` | ALL | 🚴 | +| `highway=primary_link; bicycle=designated` | ALL | 🚴 | +| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | + + + + + + +

Rule #0

+ +**Specifier:** `highway=footway; layer=-1; tunnel=yes; indoor=yes` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #1

+ +**Specifier:** `mtb:scale=3` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #2

+ +**Specifier:** `mtb:scale=4` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #3

+ +**Specifier:** `mtb:scale=5` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #4

+ +**Specifier:** `mtb:scale=6` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #5

+ +**Specifier:** `highway=corridor` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #6

+ +**Specifier:** `highway=steps` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #7

+ +**Specifier:** `highway=crossing` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #8

+ +**Specifier:** `highway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #9

+ +**Specifier:** `public_transport=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #10

+ +**Specifier:** `railway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #11

+ +**Specifier:** `footway=sidewalk; highway=footway` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #12

+ +**Specifier:** `mtb:scale=1` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #13

+ +**Specifier:** `mtb:scale=2` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #14

+ +**Specifier:** `mtb:scale=0` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #15

+ +**Specifier:** `highway=cycleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #16

+ +**Specifier:** `highway=path` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #17

+ +**Specifier:** `highway=pedestrian` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #18

+ +**Specifier:** `highway=footway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #19

+ +**Specifier:** `highway=bridleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #20

+ +**Specifier:** `highway=living_street` +**Permission:** ALL +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #21

+ +**Specifier:** `highway=unclassified` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #22

+ +**Specifier:** `highway=road` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #23

+ +**Specifier:** `highway=byway` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #24

+ +**Specifier:** `highway=track` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #25

+ +**Specifier:** `highway=service` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #26

+ +**Specifier:** `highway=residential` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #27

+ +**Specifier:** `highway=residential_link` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #28

+ +**Specifier:** `highway=tertiary` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #29

+ +**Specifier:** `highway=tertiary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #30

+ +**Specifier:** `highway=secondary` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #31

+ +**Specifier:** `highway=secondary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #32

+ +**Specifier:** `highway=primary` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #33

+ +**Specifier:** `highway=primary_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #34

+ +**Specifier:** `highway=trunk_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #35

+ +**Specifier:** `highway=motorway_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #36

+ +**Specifier:** `highway=trunk` +**Permission:** CAR +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #37

+ +**Specifier:** `highway=motorway` +**Permission:** CAR +**Bike safety factor:** forward: 8.0, back: 8.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #38

+ +**Specifier:** `present(highway); cycleway=lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #39

+ +**Specifier:** `highway=service; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #40

+ +**Specifier:** `highway=residential; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #41

+ +**Specifier:** `highway=residential_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #42

+ +**Specifier:** `highway=tertiary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #43

+ +**Specifier:** `highway=tertiary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #44

+ +**Specifier:** `highway=secondary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #45

+ +**Specifier:** `highway=secondary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #46

+ +**Specifier:** `highway=primary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #47

+ +**Specifier:** `highway=primary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #48

+ +**Specifier:** `highway=trunk; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #49

+ +**Specifier:** `highway=trunk_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #50

+ +**Specifier:** `highway=motorway; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #51

+ +**Specifier:** `highway=motorway_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #52

+ +**Specifier:** `present(highway); cycleway=share_busway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #53

+ +**Specifier:** `highway=service; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #54

+ +**Specifier:** `highway=residential; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #55

+ +**Specifier:** `highway=residential_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #56

+ +**Specifier:** `highway=tertiary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #57

+ +**Specifier:** `highway=tertiary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #58

+ +**Specifier:** `highway=secondary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #59

+ +**Specifier:** `highway=secondary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #60

+ +**Specifier:** `highway=primary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #61

+ +**Specifier:** `highway=primary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #62

+ +**Specifier:** `highway=trunk; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #63

+ +**Specifier:** `highway=trunk_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #64

+ +**Specifier:** `highway=motorway; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #65

+ +**Specifier:** `highway=motorway_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #66

+ +**Specifier:** `present(highway); cycleway=opposite_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #67

+ +**Specifier:** `highway=service; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #68

+ +**Specifier:** `highway=residential; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #69

+ +**Specifier:** `highway=residential_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #70

+ +**Specifier:** `highway=tertiary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #71

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #72

+ +**Specifier:** `highway=secondary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #73

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #74

+ +**Specifier:** `highway=primary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #75

+ +**Specifier:** `highway=primary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #76

+ +**Specifier:** `highway=trunk; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #77

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #78

+ +**Specifier:** `present(highway); cycleway=track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #79

+ +**Specifier:** `highway=service; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #80

+ +**Specifier:** `highway=residential; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #81

+ +**Specifier:** `highway=residential_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #82

+ +**Specifier:** `highway=tertiary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #83

+ +**Specifier:** `highway=tertiary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #84

+ +**Specifier:** `highway=secondary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #85

+ +**Specifier:** `highway=secondary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #86

+ +**Specifier:** `highway=primary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #87

+ +**Specifier:** `highway=primary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #88

+ +**Specifier:** `highway=trunk; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #89

+ +**Specifier:** `highway=trunk_link; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #90

+ +**Specifier:** `present(highway); cycleway=opposite_track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #91

+ +**Specifier:** `highway=service; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #92

+ +**Specifier:** `highway=residential; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #93

+ +**Specifier:** `highway=residential_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #94

+ +**Specifier:** `highway=tertiary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #95

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #96

+ +**Specifier:** `highway=secondary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #97

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #98

+ +**Specifier:** `highway=primary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #99

+ +**Specifier:** `highway=primary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #100

+ +**Specifier:** `highway=trunk; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #101

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #102

+ +**Specifier:** `present(highway); cycleway=shared_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #103

+ +**Specifier:** `highway=service; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.73, back: 0.73 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #104

+ +**Specifier:** `highway=residential; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #105

+ +**Specifier:** `highway=residential_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #106

+ +**Specifier:** `highway=tertiary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #107

+ +**Specifier:** `highway=tertiary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #108

+ +**Specifier:** `highway=secondary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #109

+ +**Specifier:** `highway=secondary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #110

+ +**Specifier:** `highway=primary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #111

+ +**Specifier:** `highway=primary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #112

+ +**Specifier:** `present(highway); cycleway=opposite` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.4 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #113

+ +**Specifier:** `highway=service; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #114

+ +**Specifier:** `highway=residential; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #115

+ +**Specifier:** `highway=residential_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #116

+ +**Specifier:** `highway=tertiary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #117

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #118

+ +**Specifier:** `highway=secondary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #119

+ +**Specifier:** `highway=secondary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #120

+ +**Specifier:** `highway=primary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #121

+ +**Specifier:** `highway=primary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #122

+ +**Specifier:** `highway=path; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #123

+ +**Specifier:** `highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #124

+ +**Specifier:** `highway=footway; bicycle=yes; area=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #125

+ +**Specifier:** `highway=pedestrian; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #126

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #127

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #128

+ +**Specifier:** `highway=footway; footway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #129

+ +**Specifier:** `highway=footway; footway=crossing; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #130

+ +**Specifier:** `highway=track; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #131

+ +**Specifier:** `highway=track; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #132

+ +**Specifier:** `highway=track; bicycle=yes; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #133

+ +**Specifier:** `highway=track; bicycle=designated; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #134

+ +**Specifier:** `highway=track; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #135

+ +**Specifier:** `present(highway); bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #136

+ +**Specifier:** `highway=service; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.84, back: 0.84 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #137

+ +**Specifier:** `highway=residential; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #138

+ +**Specifier:** `highway=unclassified; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #139

+ +**Specifier:** `highway=residential_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #140

+ +**Specifier:** `highway=tertiary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #141

+ +**Specifier:** `highway=tertiary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #142

+ +**Specifier:** `highway=secondary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #143

+ +**Specifier:** `highway=secondary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #144

+ +**Specifier:** `highway=primary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #145

+ +**Specifier:** `highway=primary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #146

+ +**Specifier:** `highway=trunk; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.25, back: 7.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #147

+ +**Specifier:** `highway=trunk_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #148

+ +**Specifier:** `highway=motorway; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.76, back: 7.76 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #149

+ +**Specifier:** `highway=motorway_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + + + + +### Bicycle and walking safety mixins + +Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the +permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. + + + + +| matcher | modifications | +|------------------------------------------------------------|---------------| +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | +| `surface=unpaved` | 🚴 | +| `surface=compacted` | 🚴 | +| `surface=wood` | 🚴 | +| `surface=cobblestone` | 🚴 | +| `surface=sett` | 🚴 | +| `surface=unhewn_cobblestone` | 🚴 | +| `surface=grass_paver` | 🚴 | +| `surface=pebblestone` | 🚴 | +| `surface=metal` | 🚴 | +| `surface=ground` | 🚴 | +| `surface=dirt` | 🚴 | +| `surface=earth` | 🚴 | +| `surface=grass` | 🚴 | +| `surface=mud` | 🚴 | +| `surface=woodchip` | 🚴 | +| `surface=gravel` | 🚴 | +| `surface=artifical_turf` | 🚴 | +| `surface=sand` | 🚴 | +| `rlis:bicycle=caution_area` | 🚴 | +| `rlis:bicycle:right=caution_area` | 🚴 | +| `rlis:bicycle:left=caution_area` | 🚴 | +| `ccgis:bicycle=caution_area` | 🚴 | +| `ccgis:bicycle:right=caution_area` | 🚴 | +| `ccgis:bicycle:left=caution_area` | 🚴 | +| `foot=discouraged` | 🚶 | +| `bicycle=discouraged` | 🚴 | +| `foot=use_sidepath` | 🚶 | +| `bicycle=use_sidepath` | 🚴 | + + diff --git a/docs/osm/Norway.md b/docs/osm/Norway.md new file mode 100644 index 00000000000..00ba1b4bf51 --- /dev/null +++ b/docs/osm/Norway.md @@ -0,0 +1,428 @@ +## OSM tag mapping + +### Way properties + +Way properties set a way's permission and optionally influences its walk and bicycle safety factors. +These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. + + + + +| specifier | permission | safety | +|------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------|--------| +| `highway one of [motorway, motorway_link]` | CAR | | +| `highway one of [trunk, trunk_link, primary, primary_link]; motorroad=yes` | CAR | | +| `highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | ALL | | +| `cycleway=track; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | ALL | | +| `cycleway=lane; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link]` | ALL | 🚴 | +| `cycleway=lane; maxspeed < 50; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link]` | ALL | 🚴 | +| `cycleway=lane; highway one of [unclassified, residential]` | ALL | 🚴 | +| `highway=service` | ALL | | +| `highway=service; service=parking_aisle` | ALL | 🚴 | +| `highway=service; service=drive-through` | ALL | 🚴 | +| `highway=living_street` | ALL | 🚴 | +| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=busway` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=service; bus one of [yes, designated]` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=cycleway; lanes > 1` | PEDESTRIAN_AND_BICYCLE | 🚶 | +| `highway=cycleway; oneway=yes` | PEDESTRIAN_AND_BICYCLE | 🚶 | +| `highway=cycleway; sidewalk one of [yes, left, right, both]` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=cycleway; lanes > 1; sidewalk one of [yes, left, right, both]` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway; oneway=yes; sidewalk one of [yes, left, right, both]` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway; foot=designated; segregated=no` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=path; foot=designated; bicycle=designated; segregated=no` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=cycleway; foot=designated; segregated=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=path; foot=designated; bicycle=designated; segregated=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=cycleway; foot=designated; segregated=yes; lanes > 1` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway; foot=designated; present(segregated); motor_vehicle=destination` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=path; foot=designated; bicycle=designated; present(segregated); motor_vehicle=destination` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=sidewalk` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=cycleway; cycleway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=track` | PEDESTRIAN_AND_BICYCLE | | +| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | | +| `highway=path` | PEDESTRIAN_AND_BICYCLE | | +| `highway=steps` | PEDESTRIAN | | +| `highway=corridor` | PEDESTRIAN | | +| `highway=footway; indoor=yes` | PEDESTRIAN | | +| `highway=platform` | PEDESTRIAN | | +| `public_transport=platform` | PEDESTRIAN | | +| `trail_visibility one of [bad, low, poor, horrible, no]; highway=path` | NONE | | +| `sac_scale one of [demanding_mountain_hiking, alpine_hiking, demanding_alpine_hiking, difficult_alpine_hiking]; highway one of [path, steps]` | NONE | | +| `smoothness one of [horrible, very_horrible]; highway one of [path, bridleway, track]` | PEDESTRIAN | 🚶 | +| `smoothness=impassable; highway one of [path, bridleway, track]` | NONE | | +| `1 > mtb:scale < 2; highway one of [path, bridleway, track]` | PEDESTRIAN | 🚶 | +| `mtb:scale > 2; highway one of [path, bridleway, track]` | NONE | | + + + + + + +

Rule #0

+ +**Specifier:** `highway one of [motorway, motorway_link]` +**Permission:** CAR +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #1

+ +**Specifier:** `highway one of [trunk, trunk_link, primary, primary_link]; motorroad=yes` +**Permission:** CAR +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #2

+ +**Specifier:** `highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #3

+ +**Specifier:** `cycleway=track; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #4

+ +**Specifier:** `cycleway=lane; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link]` +**Permission:** ALL +**Bike safety factor:** forward: 1.27, back: 1.27 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #5

+ +**Specifier:** `cycleway=lane; maxspeed < 50; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link]` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #6

+ +**Specifier:** `cycleway=lane; highway one of [unclassified, residential]` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #7

+ +**Specifier:** `highway=service` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #8

+ +**Specifier:** `highway=service; service=parking_aisle` +**Permission:** ALL +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #9

+ +**Specifier:** `highway=service; service=drive-through` +**Permission:** ALL +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #10

+ +**Specifier:** `highway=living_street` +**Permission:** ALL +**Bike safety factor:** forward: 1.83, back: 1.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #11

+ +**Specifier:** `highway=pedestrian` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.2, back: 1.2 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #12

+ +**Specifier:** `highway=busway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.37, back: 2.37 +**Walk safety factor:** forward: 1.9, back: 1.9 + +

Rule #13

+ +**Specifier:** `highway=service; bus one of [yes, designated]` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.37, back: 2.37 +**Walk safety factor:** forward: 1.9, back: 1.9 + +

Rule #14

+ +**Specifier:** `highway=footway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.42, back: 1.42 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #15

+ +**Specifier:** `highway=cycleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.05, back: 1.05 +**Walk safety factor:** forward: 1.4, back: 1.4 + +

Rule #16

+ +**Specifier:** `highway=cycleway; lanes > 1` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.4, back: 1.4 + +

Rule #17

+ +**Specifier:** `highway=cycleway; oneway=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.4, back: 1.4 + +

Rule #18

+ +**Specifier:** `highway=cycleway; sidewalk one of [yes, left, right, both]` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.05, back: 1.05 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #19

+ +**Specifier:** `highway=cycleway; lanes > 1; sidewalk one of [yes, left, right, both]` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #20

+ +**Specifier:** `highway=cycleway; oneway=yes; sidewalk one of [yes, left, right, both]` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #21

+ +**Specifier:** `highway=cycleway; foot=designated; segregated=no` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.05, back: 1.05 +**Walk safety factor:** forward: 1.15, back: 1.15 + +

Rule #22

+ +**Specifier:** `highway=path; foot=designated; bicycle=designated; segregated=no` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.05, back: 1.05 +**Walk safety factor:** forward: 1.15, back: 1.15 + +

Rule #23

+ +**Specifier:** `highway=cycleway; foot=designated; segregated=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.05, back: 1.05 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #24

+ +**Specifier:** `highway=path; foot=designated; bicycle=designated; segregated=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.05, back: 1.05 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #25

+ +**Specifier:** `highway=cycleway; foot=designated; segregated=yes; lanes > 1` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #26

+ +**Specifier:** `highway=cycleway; foot=designated; present(segregated); motor_vehicle=destination` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.57, back: 1.57 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #27

+ +**Specifier:** `highway=path; foot=designated; bicycle=designated; present(segregated); motor_vehicle=destination` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.57, back: 1.57 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #28

+ +**Specifier:** `highway=footway; footway=sidewalk` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.93, back: 1.93 +**Walk safety factor:** forward: 1.1, back: 1.1 + +

Rule #29

+ +**Specifier:** `highway=footway; footway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.33, back: 2.33 +**Walk safety factor:** forward: 1.35, back: 1.35 + +

Rule #30

+ +**Specifier:** `highway=cycleway; cycleway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.33, back: 2.33 +**Walk safety factor:** forward: 1.35, back: 1.35 + +

Rule #31

+ +**Specifier:** `highway=track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #32

+ +**Specifier:** `highway=bridleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #33

+ +**Specifier:** `highway=path` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #34

+ +**Specifier:** `highway=steps` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #35

+ +**Specifier:** `highway=corridor` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #36

+ +**Specifier:** `highway=footway; indoor=yes` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #37

+ +**Specifier:** `highway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #38

+ +**Specifier:** `public_transport=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #39

+ +**Specifier:** `trail_visibility one of [bad, low, poor, horrible, no]; highway=path` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #40

+ +**Specifier:** `sac_scale one of [demanding_mountain_hiking, alpine_hiking, demanding_alpine_hiking, difficult_alpine_hiking]; highway one of [path, steps]` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #41

+ +**Specifier:** `smoothness one of [horrible, very_horrible]; highway one of [path, bridleway, track]` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.15, back: 1.15 + +

Rule #42

+ +**Specifier:** `smoothness=impassable; highway one of [path, bridleway, track]` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #43

+ +**Specifier:** `1 > mtb:scale < 2; highway one of [path, bridleway, track]` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.15, back: 1.15 + +

Rule #44

+ +**Specifier:** `mtb:scale > 2; highway one of [path, bridleway, track]` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + + + + +### Bicycle and walking safety mixins + +Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the +permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. + + + + +| matcher | modifications | +|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------| +| `cycleway=shared_lane; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | 🚴 | +| `lcn=yes¦rcn=yes¦ncn=yes` | 🚴 | +| `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]` | 🚴 | +| `embedded_rails one of [tram, light_rail, disused]` | 🚴 | +| `tunnel=yes; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified]` | 🚶 | +| `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]` | 🚶 | +| `junction=roundabout; sidewalk not one of [no, separate] or absent` | 🚶 | +| `surface=grass_paver` | 🚴 | +| `surface=sett` | 🚴 | +| `surface=cobblestone` | 🚴 | +| `surface=unhewn_cobblestone` | 🚴 | +| `surface=metal_grid` | 🚴 | +| `surface=metal` | 🚴 | +| `smoothness=intermediate; surface one of [asfalt, concrete, paving_stones, paved, wood]` | 🚴 | +| `smoothness=bad; surface one of [asfalt, concrete, paving_stones, paved, wood]` | 🚴 🚶 | +| `surface=unpaved; !tracktype` | 🚴 🚶 | +| `surface=compacted` | 🚴 🚶 | +| `surface=fine_gravel` | 🚴 🚶 | +| `surface=pebblestone` | 🚴 🚶 | +| `surface=gravel` | 🚴 🚶 | +| `surface=woodchip` | 🚴 🚶 | +| `surface=ground` | 🚴 🚶 | +| `surface=dirt` | 🚴 🚶 | +| `surface=earth` | 🚴 🚶 | +| `surface=grass` | 🚴 🚶 | +| `surface=mud` | 🚴 🚶 | +| `surface=sand` | 🚴 🚶 | +| `!tracktype; surface not one of [unpaved] or absent; highway one of [track, bridleway]` | 🚴 🚶 | +| `tracktype=grade2; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 🚴 🚶 | +| `tracktype=grade3; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 🚴 🚶 | +| `tracktype=grade4; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 🚴 🚶 | +| `tracktype=grade5; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 🚴 🚶 | +| `surface not one of [no, none] or absent; highway=path` | 🚴 🚶 | +| `sac_scale=mountain_hiking` | 🚶 | +| `trail_visibility=intermediate` | 🚶 | + + diff --git a/docs/osm/Portland.md b/docs/osm/Portland.md new file mode 100644 index 00000000000..7f7baed3d8b --- /dev/null +++ b/docs/osm/Portland.md @@ -0,0 +1,1275 @@ +## OSM tag mapping + +### Way properties + +Way properties set a way's permission and optionally influences its walk and bicycle safety factors. +These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. + + + + +| specifier | permission | safety | +|---------------------------------------------------------|------------------------|--------| +| `mtb:scale=3` | NONE | | +| `mtb:scale=4` | NONE | | +| `mtb:scale=5` | NONE | | +| `mtb:scale=6` | NONE | | +| `highway=corridor` | PEDESTRIAN | | +| `highway=steps` | PEDESTRIAN | | +| `highway=crossing` | PEDESTRIAN | | +| `highway=platform` | PEDESTRIAN | | +| `public_transport=platform` | PEDESTRIAN | | +| `railway=platform` | PEDESTRIAN | | +| `footway=sidewalk; highway=footway` | PEDESTRIAN | | +| `mtb:scale=1` | PEDESTRIAN | | +| `mtb:scale=2` | PEDESTRIAN | | +| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=living_street` | ALL | 🚴 | +| `highway=unclassified` | ALL | | +| `highway=road` | ALL | | +| `highway=byway` | ALL | 🚴 | +| `highway=track` | ALL | 🚴 | +| `highway=service` | ALL | 🚴 | +| `highway=residential` | ALL | 🚴 | +| `highway=residential_link` | ALL | 🚴 | +| `highway=tertiary` | ALL | | +| `highway=tertiary_link` | ALL | | +| `highway=secondary` | ALL | 🚴 | +| `highway=secondary_link` | ALL | 🚴 | +| `highway=primary` | ALL | 🚴 | +| `highway=primary_link` | ALL | 🚴 | +| `highway=trunk_link` | CAR | 🚴 | +| `highway=motorway_link` | CAR | 🚴 | +| `highway=trunk` | CAR | 🚴 | +| `highway=motorway` | CAR | 🚴 | +| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=lane` | ALL | 🚴 | +| `highway=residential; cycleway=lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | +| `highway=secondary; cycleway=lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | +| `highway=primary; cycleway=lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=lane` | ALL | 🚴 | +| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=track` | ALL | 🚴 | +| `highway=residential; cycleway=track` | ALL | 🚴 | +| `highway=residential_link; cycleway=track` | ALL | 🚴 | +| `highway=tertiary; cycleway=track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | +| `highway=secondary; cycleway=track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=track` | ALL | 🚴 | +| `highway=primary; cycleway=track` | ALL | 🚴 | +| `highway=primary_link; cycleway=track` | ALL | 🚴 | +| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | +| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite` | ALL | 🚴 | +| `highway=residential; cycleway=opposite` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite` | ALL | | +| `highway=tertiary_link; cycleway=opposite` | ALL | | +| `highway=secondary; cycleway=opposite` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=primary; cycleway=opposite` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `present(highway); bicycle=designated` | ALL | 🚴 | +| `highway=service; bicycle=designated` | ALL | 🚴 | +| `highway=residential; bicycle=designated` | ALL | 🚴 | +| `highway=unclassified; bicycle=designated` | ALL | 🚴 | +| `highway=residential_link; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | +| `highway=secondary; bicycle=designated` | ALL | 🚴 | +| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | +| `highway=primary; bicycle=designated` | ALL | 🚴 | +| `highway=primary_link; bicycle=designated` | ALL | 🚴 | +| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | + + + + + + +

Rule #0

+ +**Specifier:** `mtb:scale=3` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #1

+ +**Specifier:** `mtb:scale=4` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #2

+ +**Specifier:** `mtb:scale=5` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #3

+ +**Specifier:** `mtb:scale=6` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #4

+ +**Specifier:** `highway=corridor` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #5

+ +**Specifier:** `highway=steps` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #6

+ +**Specifier:** `highway=crossing` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #7

+ +**Specifier:** `highway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #8

+ +**Specifier:** `public_transport=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #9

+ +**Specifier:** `railway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #10

+ +**Specifier:** `footway=sidewalk; highway=footway` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #11

+ +**Specifier:** `mtb:scale=1` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #12

+ +**Specifier:** `mtb:scale=2` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #13

+ +**Specifier:** `mtb:scale=0` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #14

+ +**Specifier:** `highway=cycleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #15

+ +**Specifier:** `highway=path` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #16

+ +**Specifier:** `highway=pedestrian` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #17

+ +**Specifier:** `highway=footway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #18

+ +**Specifier:** `highway=bridleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #19

+ +**Specifier:** `highway=living_street` +**Permission:** ALL +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #20

+ +**Specifier:** `highway=unclassified` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #21

+ +**Specifier:** `highway=road` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #22

+ +**Specifier:** `highway=byway` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #23

+ +**Specifier:** `highway=track` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #24

+ +**Specifier:** `highway=service` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #25

+ +**Specifier:** `highway=residential` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #26

+ +**Specifier:** `highway=residential_link` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #27

+ +**Specifier:** `highway=tertiary` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #28

+ +**Specifier:** `highway=tertiary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #29

+ +**Specifier:** `highway=secondary` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #30

+ +**Specifier:** `highway=secondary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #31

+ +**Specifier:** `highway=primary` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #32

+ +**Specifier:** `highway=primary_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #33

+ +**Specifier:** `highway=trunk_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #34

+ +**Specifier:** `highway=motorway_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #35

+ +**Specifier:** `highway=trunk` +**Permission:** CAR +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #36

+ +**Specifier:** `highway=motorway` +**Permission:** CAR +**Bike safety factor:** forward: 8.0, back: 8.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #37

+ +**Specifier:** `present(highway); cycleway=lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #38

+ +**Specifier:** `highway=service; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #39

+ +**Specifier:** `highway=residential; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #40

+ +**Specifier:** `highway=residential_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #41

+ +**Specifier:** `highway=tertiary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #42

+ +**Specifier:** `highway=tertiary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #43

+ +**Specifier:** `highway=secondary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #44

+ +**Specifier:** `highway=secondary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #45

+ +**Specifier:** `highway=primary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #46

+ +**Specifier:** `highway=primary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #47

+ +**Specifier:** `highway=trunk; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #48

+ +**Specifier:** `highway=trunk_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #49

+ +**Specifier:** `highway=motorway; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #50

+ +**Specifier:** `highway=motorway_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #51

+ +**Specifier:** `present(highway); cycleway=share_busway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #52

+ +**Specifier:** `highway=service; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #53

+ +**Specifier:** `highway=residential; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #54

+ +**Specifier:** `highway=residential_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #55

+ +**Specifier:** `highway=tertiary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #56

+ +**Specifier:** `highway=tertiary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #57

+ +**Specifier:** `highway=secondary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #58

+ +**Specifier:** `highway=secondary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #59

+ +**Specifier:** `highway=primary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #60

+ +**Specifier:** `highway=primary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #61

+ +**Specifier:** `highway=trunk; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #62

+ +**Specifier:** `highway=trunk_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #63

+ +**Specifier:** `highway=motorway; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #64

+ +**Specifier:** `highway=motorway_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #65

+ +**Specifier:** `present(highway); cycleway=opposite_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #66

+ +**Specifier:** `highway=service; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #67

+ +**Specifier:** `highway=residential; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #68

+ +**Specifier:** `highway=residential_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #69

+ +**Specifier:** `highway=tertiary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #70

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #71

+ +**Specifier:** `highway=secondary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #72

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #73

+ +**Specifier:** `highway=primary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #74

+ +**Specifier:** `highway=primary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #75

+ +**Specifier:** `highway=trunk; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #76

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #77

+ +**Specifier:** `present(highway); cycleway=track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #78

+ +**Specifier:** `highway=service; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #79

+ +**Specifier:** `highway=residential; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #80

+ +**Specifier:** `highway=residential_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #81

+ +**Specifier:** `highway=tertiary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #82

+ +**Specifier:** `highway=tertiary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #83

+ +**Specifier:** `highway=secondary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #84

+ +**Specifier:** `highway=secondary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #85

+ +**Specifier:** `highway=primary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #86

+ +**Specifier:** `highway=primary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #87

+ +**Specifier:** `highway=trunk; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #88

+ +**Specifier:** `highway=trunk_link; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #89

+ +**Specifier:** `present(highway); cycleway=opposite_track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #90

+ +**Specifier:** `highway=service; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #91

+ +**Specifier:** `highway=residential; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #92

+ +**Specifier:** `highway=residential_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #93

+ +**Specifier:** `highway=tertiary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #94

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #95

+ +**Specifier:** `highway=secondary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #96

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #97

+ +**Specifier:** `highway=primary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #98

+ +**Specifier:** `highway=primary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #99

+ +**Specifier:** `highway=trunk; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #100

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #101

+ +**Specifier:** `present(highway); cycleway=shared_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #102

+ +**Specifier:** `highway=service; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.73, back: 0.73 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #103

+ +**Specifier:** `highway=residential; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #104

+ +**Specifier:** `highway=residential_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #105

+ +**Specifier:** `highway=tertiary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #106

+ +**Specifier:** `highway=tertiary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #107

+ +**Specifier:** `highway=secondary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #108

+ +**Specifier:** `highway=secondary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #109

+ +**Specifier:** `highway=primary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #110

+ +**Specifier:** `highway=primary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #111

+ +**Specifier:** `present(highway); cycleway=opposite` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.4 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #112

+ +**Specifier:** `highway=service; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #113

+ +**Specifier:** `highway=residential; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #114

+ +**Specifier:** `highway=residential_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #115

+ +**Specifier:** `highway=tertiary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #116

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #117

+ +**Specifier:** `highway=secondary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #118

+ +**Specifier:** `highway=secondary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #119

+ +**Specifier:** `highway=primary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #120

+ +**Specifier:** `highway=primary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #121

+ +**Specifier:** `highway=path; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #122

+ +**Specifier:** `highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #123

+ +**Specifier:** `highway=footway; bicycle=yes; area=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #124

+ +**Specifier:** `highway=pedestrian; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #125

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #126

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #127

+ +**Specifier:** `highway=footway; footway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #128

+ +**Specifier:** `highway=footway; footway=crossing; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #129

+ +**Specifier:** `highway=track; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #130

+ +**Specifier:** `highway=track; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #131

+ +**Specifier:** `highway=track; bicycle=yes; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #132

+ +**Specifier:** `highway=track; bicycle=designated; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #133

+ +**Specifier:** `highway=track; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #134

+ +**Specifier:** `present(highway); bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #135

+ +**Specifier:** `highway=service; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.84, back: 0.84 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #136

+ +**Specifier:** `highway=residential; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #137

+ +**Specifier:** `highway=unclassified; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #138

+ +**Specifier:** `highway=residential_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #139

+ +**Specifier:** `highway=tertiary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #140

+ +**Specifier:** `highway=tertiary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #141

+ +**Specifier:** `highway=secondary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #142

+ +**Specifier:** `highway=secondary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #143

+ +**Specifier:** `highway=primary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #144

+ +**Specifier:** `highway=primary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #145

+ +**Specifier:** `highway=trunk; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.25, back: 7.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #146

+ +**Specifier:** `highway=trunk_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #147

+ +**Specifier:** `highway=motorway; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.76, back: 7.76 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #148

+ +**Specifier:** `highway=motorway_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + + + + +### Bicycle and walking safety mixins + +Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the +permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. + + + + +| matcher | modifications | +|------------------------------------------------------------|---------------| +| `footway=sidewalk` | 🚶 | +| `!name` | 🚶 | +| `highway=trunk` | 🚶 | +| `highway=trunk_link` | 🚶 | +| `highway=primary` | 🚶 | +| `highway=primary_link` | 🚶 | +| `highway=secondary` | 🚶 | +| `highway=secondary_link` | 🚶 | +| `highway=tertiary` | 🚶 | +| `highway=tertiary_link` | 🚶 | +| `lanes > 4` | 🚶 | +| `sidewalk=both` | 🚶 | +| `sidewalk=left` | 🚶 | +| `sidewalk=right` | 🚶 | +| `surface=unpaved` | 🚶 | +| `sidewalk=no; maxspeed=55 mph` | 🚶 | +| `sidewalk=no; maxspeed=50 mph` | 🚶 | +| `sidewalk=no; maxspeed=45 mph` | 🚶 | +| `sidewalk=no; maxspeed=40 mph` | 🚶 | +| `sidewalk=no; maxspeed=35 mph` | 🚶 | +| `sidewalk=no; maxspeed=30 mph` | 🚶 | +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | +| `surface=unpaved` | 🚴 | +| `surface=compacted` | 🚴 | +| `surface=wood` | 🚴 | +| `surface=cobblestone` | 🚴 | +| `surface=sett` | 🚴 | +| `surface=unhewn_cobblestone` | 🚴 | +| `surface=grass_paver` | 🚴 | +| `surface=pebblestone` | 🚴 | +| `surface=metal` | 🚴 | +| `surface=ground` | 🚴 | +| `surface=dirt` | 🚴 | +| `surface=earth` | 🚴 | +| `surface=grass` | 🚴 | +| `surface=mud` | 🚴 | +| `surface=woodchip` | 🚴 | +| `surface=gravel` | 🚴 | +| `surface=artifical_turf` | 🚴 | +| `surface=sand` | 🚴 | +| `rlis:bicycle=caution_area` | 🚴 | +| `rlis:bicycle:right=caution_area` | 🚴 | +| `rlis:bicycle:left=caution_area` | 🚴 | +| `ccgis:bicycle=caution_area` | 🚴 | +| `ccgis:bicycle:right=caution_area` | 🚴 | +| `ccgis:bicycle:left=caution_area` | 🚴 | +| `foot=discouraged` | 🚶 | +| `bicycle=discouraged` | 🚴 | +| `foot=use_sidepath` | 🚶 | +| `bicycle=use_sidepath` | 🚴 | + + diff --git a/docs/osm/UK.md b/docs/osm/UK.md new file mode 100644 index 00000000000..9a1f7388228 --- /dev/null +++ b/docs/osm/UK.md @@ -0,0 +1,1366 @@ +## OSM tag mapping + +### Way properties + +Way properties set a way's permission and optionally influences its walk and bicycle safety factors. +These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. + + + + +| specifier | permission | safety | +|---------------------------------------------------------|------------------------|--------| +| `highway=trunk_link` | ALL | 🚴 | +| `highway=trunk` | ALL | 🚴 | +| `highway=trunk; cycleway=lane` | ALL | 🚴 | +| `highway=trunk_link; cycleway=lane` | ALL | 🚴 | +| `highway=trunk; cycleway=share_busway` | ALL | 🚴 | +| `highway=trunk_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=trunk_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=trunk; cycleway=track` | ALL | 🚴 | +| `highway=trunk_link; cycleway=track` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_track` | ALL | 🚴 | +| `highway=trunk_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=trunk; bicycle=designated` | ALL | 🚴 | +| `highway=trunk_link; bicycle=designated` | ALL | 🚴 | +| `mtb:scale=3` | NONE | | +| `mtb:scale=4` | NONE | | +| `mtb:scale=5` | NONE | | +| `mtb:scale=6` | NONE | | +| `highway=corridor` | PEDESTRIAN | | +| `highway=steps` | PEDESTRIAN | | +| `highway=crossing` | PEDESTRIAN | | +| `highway=platform` | PEDESTRIAN | | +| `public_transport=platform` | PEDESTRIAN | | +| `railway=platform` | PEDESTRIAN | | +| `footway=sidewalk; highway=footway` | PEDESTRIAN | | +| `mtb:scale=1` | PEDESTRIAN | | +| `mtb:scale=2` | PEDESTRIAN | | +| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=living_street` | ALL | 🚴 | +| `highway=unclassified` | ALL | | +| `highway=road` | ALL | | +| `highway=byway` | ALL | 🚴 | +| `highway=track` | ALL | 🚴 | +| `highway=service` | ALL | 🚴 | +| `highway=residential` | ALL | 🚴 | +| `highway=residential_link` | ALL | 🚴 | +| `highway=tertiary` | ALL | | +| `highway=tertiary_link` | ALL | | +| `highway=secondary` | ALL | 🚴 | +| `highway=secondary_link` | ALL | 🚴 | +| `highway=primary` | ALL | 🚴 | +| `highway=primary_link` | ALL | 🚴 | +| `highway=trunk_link` | CAR | 🚴 | +| `highway=motorway_link` | CAR | 🚴 | +| `highway=trunk` | CAR | 🚴 | +| `highway=motorway` | CAR | 🚴 | +| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=lane` | ALL | 🚴 | +| `highway=residential; cycleway=lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | +| `highway=secondary; cycleway=lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | +| `highway=primary; cycleway=lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=lane` | ALL | 🚴 | +| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=track` | ALL | 🚴 | +| `highway=residential; cycleway=track` | ALL | 🚴 | +| `highway=residential_link; cycleway=track` | ALL | 🚴 | +| `highway=tertiary; cycleway=track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | +| `highway=secondary; cycleway=track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=track` | ALL | 🚴 | +| `highway=primary; cycleway=track` | ALL | 🚴 | +| `highway=primary_link; cycleway=track` | ALL | 🚴 | +| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | +| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite` | ALL | 🚴 | +| `highway=residential; cycleway=opposite` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite` | ALL | | +| `highway=tertiary_link; cycleway=opposite` | ALL | | +| `highway=secondary; cycleway=opposite` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=primary; cycleway=opposite` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `present(highway); bicycle=designated` | ALL | 🚴 | +| `highway=service; bicycle=designated` | ALL | 🚴 | +| `highway=residential; bicycle=designated` | ALL | 🚴 | +| `highway=unclassified; bicycle=designated` | ALL | 🚴 | +| `highway=residential_link; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | +| `highway=secondary; bicycle=designated` | ALL | 🚴 | +| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | +| `highway=primary; bicycle=designated` | ALL | 🚴 | +| `highway=primary_link; bicycle=designated` | ALL | 🚴 | +| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | + + + + + + +

Rule #0

+ +**Specifier:** `highway=trunk_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #1

+ +**Specifier:** `highway=trunk` +**Permission:** ALL +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #2

+ +**Specifier:** `highway=trunk; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #3

+ +**Specifier:** `highway=trunk_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #4

+ +**Specifier:** `highway=trunk; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #5

+ +**Specifier:** `highway=trunk_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #6

+ +**Specifier:** `highway=trunk; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 7.47, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #7

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #8

+ +**Specifier:** `highway=trunk; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #9

+ +**Specifier:** `highway=trunk_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #10

+ +**Specifier:** `highway=trunk; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 7.47, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #11

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #12

+ +**Specifier:** `highway=trunk; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 7.25, back: 7.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #13

+ +**Specifier:** `highway=trunk_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #14

+ +**Specifier:** `mtb:scale=3` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #15

+ +**Specifier:** `mtb:scale=4` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #16

+ +**Specifier:** `mtb:scale=5` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #17

+ +**Specifier:** `mtb:scale=6` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #18

+ +**Specifier:** `highway=corridor` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #19

+ +**Specifier:** `highway=steps` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #20

+ +**Specifier:** `highway=crossing` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #21

+ +**Specifier:** `highway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #22

+ +**Specifier:** `public_transport=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #23

+ +**Specifier:** `railway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #24

+ +**Specifier:** `footway=sidewalk; highway=footway` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #25

+ +**Specifier:** `mtb:scale=1` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #26

+ +**Specifier:** `mtb:scale=2` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #27

+ +**Specifier:** `mtb:scale=0` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #28

+ +**Specifier:** `highway=cycleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #29

+ +**Specifier:** `highway=path` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #30

+ +**Specifier:** `highway=pedestrian` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #31

+ +**Specifier:** `highway=footway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #32

+ +**Specifier:** `highway=bridleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #33

+ +**Specifier:** `highway=living_street` +**Permission:** ALL +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #34

+ +**Specifier:** `highway=unclassified` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #35

+ +**Specifier:** `highway=road` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #36

+ +**Specifier:** `highway=byway` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #37

+ +**Specifier:** `highway=track` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #38

+ +**Specifier:** `highway=service` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #39

+ +**Specifier:** `highway=residential` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #40

+ +**Specifier:** `highway=residential_link` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #41

+ +**Specifier:** `highway=tertiary` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #42

+ +**Specifier:** `highway=tertiary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #43

+ +**Specifier:** `highway=secondary` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #44

+ +**Specifier:** `highway=secondary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #45

+ +**Specifier:** `highway=primary` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #46

+ +**Specifier:** `highway=primary_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #47

+ +**Specifier:** `highway=trunk_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #48

+ +**Specifier:** `highway=motorway_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #49

+ +**Specifier:** `highway=trunk` +**Permission:** CAR +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #50

+ +**Specifier:** `highway=motorway` +**Permission:** CAR +**Bike safety factor:** forward: 8.0, back: 8.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #51

+ +**Specifier:** `present(highway); cycleway=lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #52

+ +**Specifier:** `highway=service; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #53

+ +**Specifier:** `highway=residential; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #54

+ +**Specifier:** `highway=residential_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #55

+ +**Specifier:** `highway=tertiary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #56

+ +**Specifier:** `highway=tertiary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #57

+ +**Specifier:** `highway=secondary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #58

+ +**Specifier:** `highway=secondary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #59

+ +**Specifier:** `highway=primary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #60

+ +**Specifier:** `highway=primary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #61

+ +**Specifier:** `highway=trunk; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #62

+ +**Specifier:** `highway=trunk_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #63

+ +**Specifier:** `highway=motorway; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #64

+ +**Specifier:** `highway=motorway_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #65

+ +**Specifier:** `present(highway); cycleway=share_busway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #66

+ +**Specifier:** `highway=service; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #67

+ +**Specifier:** `highway=residential; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #68

+ +**Specifier:** `highway=residential_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #69

+ +**Specifier:** `highway=tertiary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #70

+ +**Specifier:** `highway=tertiary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #71

+ +**Specifier:** `highway=secondary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #72

+ +**Specifier:** `highway=secondary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #73

+ +**Specifier:** `highway=primary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #74

+ +**Specifier:** `highway=primary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #75

+ +**Specifier:** `highway=trunk; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #76

+ +**Specifier:** `highway=trunk_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #77

+ +**Specifier:** `highway=motorway; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #78

+ +**Specifier:** `highway=motorway_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #79

+ +**Specifier:** `present(highway); cycleway=opposite_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #80

+ +**Specifier:** `highway=service; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #81

+ +**Specifier:** `highway=residential; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #82

+ +**Specifier:** `highway=residential_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #83

+ +**Specifier:** `highway=tertiary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #84

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #85

+ +**Specifier:** `highway=secondary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #86

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #87

+ +**Specifier:** `highway=primary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #88

+ +**Specifier:** `highway=primary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #89

+ +**Specifier:** `highway=trunk; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #90

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #91

+ +**Specifier:** `present(highway); cycleway=track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #92

+ +**Specifier:** `highway=service; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #93

+ +**Specifier:** `highway=residential; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #94

+ +**Specifier:** `highway=residential_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #95

+ +**Specifier:** `highway=tertiary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #96

+ +**Specifier:** `highway=tertiary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #97

+ +**Specifier:** `highway=secondary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #98

+ +**Specifier:** `highway=secondary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #99

+ +**Specifier:** `highway=primary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #100

+ +**Specifier:** `highway=primary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #101

+ +**Specifier:** `highway=trunk; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #102

+ +**Specifier:** `highway=trunk_link; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #103

+ +**Specifier:** `present(highway); cycleway=opposite_track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #104

+ +**Specifier:** `highway=service; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #105

+ +**Specifier:** `highway=residential; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #106

+ +**Specifier:** `highway=residential_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #107

+ +**Specifier:** `highway=tertiary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #108

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #109

+ +**Specifier:** `highway=secondary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #110

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #111

+ +**Specifier:** `highway=primary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #112

+ +**Specifier:** `highway=primary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #113

+ +**Specifier:** `highway=trunk; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #114

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #115

+ +**Specifier:** `present(highway); cycleway=shared_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #116

+ +**Specifier:** `highway=service; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.73, back: 0.73 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #117

+ +**Specifier:** `highway=residential; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #118

+ +**Specifier:** `highway=residential_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #119

+ +**Specifier:** `highway=tertiary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #120

+ +**Specifier:** `highway=tertiary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #121

+ +**Specifier:** `highway=secondary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #122

+ +**Specifier:** `highway=secondary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #123

+ +**Specifier:** `highway=primary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #124

+ +**Specifier:** `highway=primary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #125

+ +**Specifier:** `present(highway); cycleway=opposite` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.4 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #126

+ +**Specifier:** `highway=service; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #127

+ +**Specifier:** `highway=residential; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #128

+ +**Specifier:** `highway=residential_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #129

+ +**Specifier:** `highway=tertiary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #130

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #131

+ +**Specifier:** `highway=secondary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #132

+ +**Specifier:** `highway=secondary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #133

+ +**Specifier:** `highway=primary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #134

+ +**Specifier:** `highway=primary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #135

+ +**Specifier:** `highway=path; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #136

+ +**Specifier:** `highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #137

+ +**Specifier:** `highway=footway; bicycle=yes; area=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #138

+ +**Specifier:** `highway=pedestrian; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #139

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #140

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #141

+ +**Specifier:** `highway=footway; footway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #142

+ +**Specifier:** `highway=footway; footway=crossing; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #143

+ +**Specifier:** `highway=track; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #144

+ +**Specifier:** `highway=track; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #145

+ +**Specifier:** `highway=track; bicycle=yes; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #146

+ +**Specifier:** `highway=track; bicycle=designated; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #147

+ +**Specifier:** `highway=track; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #148

+ +**Specifier:** `present(highway); bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #149

+ +**Specifier:** `highway=service; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.84, back: 0.84 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #150

+ +**Specifier:** `highway=residential; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #151

+ +**Specifier:** `highway=unclassified; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #152

+ +**Specifier:** `highway=residential_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #153

+ +**Specifier:** `highway=tertiary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #154

+ +**Specifier:** `highway=tertiary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #155

+ +**Specifier:** `highway=secondary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #156

+ +**Specifier:** `highway=secondary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #157

+ +**Specifier:** `highway=primary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #158

+ +**Specifier:** `highway=primary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #159

+ +**Specifier:** `highway=trunk; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.25, back: 7.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #160

+ +**Specifier:** `highway=trunk_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #161

+ +**Specifier:** `highway=motorway; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.76, back: 7.76 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #162

+ +**Specifier:** `highway=motorway_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + + + + +### Bicycle and walking safety mixins + +Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the +permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. + + + + +| matcher | modifications | +|------------------------------------------------------------|---------------| +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | +| `surface=unpaved` | 🚴 | +| `surface=compacted` | 🚴 | +| `surface=wood` | 🚴 | +| `surface=cobblestone` | 🚴 | +| `surface=sett` | 🚴 | +| `surface=unhewn_cobblestone` | 🚴 | +| `surface=grass_paver` | 🚴 | +| `surface=pebblestone` | 🚴 | +| `surface=metal` | 🚴 | +| `surface=ground` | 🚴 | +| `surface=dirt` | 🚴 | +| `surface=earth` | 🚴 | +| `surface=grass` | 🚴 | +| `surface=mud` | 🚴 | +| `surface=woodchip` | 🚴 | +| `surface=gravel` | 🚴 | +| `surface=artifical_turf` | 🚴 | +| `surface=sand` | 🚴 | +| `rlis:bicycle=caution_area` | 🚴 | +| `rlis:bicycle:right=caution_area` | 🚴 | +| `rlis:bicycle:left=caution_area` | 🚴 | +| `ccgis:bicycle=caution_area` | 🚴 | +| `ccgis:bicycle:right=caution_area` | 🚴 | +| `ccgis:bicycle:left=caution_area` | 🚴 | +| `foot=discouraged` | 🚶 | +| `bicycle=discouraged` | 🚴 | +| `foot=use_sidepath` | 🚶 | +| `bicycle=use_sidepath` | 🚴 | + + diff --git a/mkdocs.yml b/mkdocs.yml index b8c257ceb7d..1a380e0fe9b 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -73,6 +73,15 @@ nav: - Configuration: - Introduction: 'Configuration.md' - Build: 'BuildConfiguration.md' + - OSM Tag Mapping: + - Default: 'osm/Default.md' + - Norway: 'osm/Norway.md' + - Germany: 'osm/Germany.md' + - Finland: 'osm/Finland.md' + - UK: 'osm/Finland.md' + - Atlanta: 'osm/Atlanta.md' + - Portland: 'osm/Portland.md' + - Houston: 'osm/Houston.md' - Router: 'RouterConfiguration.md' - "Route Request": 'RouteRequest.md' - "Realtime Updaters": 'UpdaterConfig.md' diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/NorwayMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/NorwayMapper.java index 9de824a145b..efe7850f08b 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/NorwayMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/NorwayMapper.java @@ -30,7 +30,7 @@ class NorwayMapper implements OsmTagMapper { @Override public void populateProperties(WayPropertySet props) { - var hasSidewalk = new Condition.EqualsAnyIn("sidewalk", "yes", "left", "right", "both"); + var hasSidewalk = new Condition.OneOf("sidewalk", "yes", "left", "right", "both"); var hasPrefixSidewalk = new Condition.Equals("sidewalk", "yes"); // e.g sidewalk:left=yes props.setDefaultWalkSafetyForPermission((permission, speedLimit, way) -> switch (permission) { @@ -74,16 +74,16 @@ else if (speedLimit >= 11.1f) { var cycleSafetyLowTraffic = 1.83; var cycleSafetyVeryLowTraffic = 1.57; - var isTrunkOrPrimary = new Condition.EqualsAnyIn( + var isTrunkOrPrimary = new Condition.OneOf( "highway", "trunk", "trunk_link", "primary", "primary_link" ); - var isSecondaryHighway = new Condition.EqualsAnyIn("highway", "secondary", "secondary_link"); - var isTertiaryHighway = new Condition.EqualsAnyIn("highway", "tertiary", "tertiary_link"); - var isClassifiedRoad = new Condition.EqualsAnyIn( + var isSecondaryHighway = new Condition.OneOf("highway", "secondary", "secondary_link"); + var isTertiaryHighway = new Condition.OneOf("highway", "tertiary", "tertiary_link"); + var isClassifiedRoad = new Condition.OneOf( "highway", "trunk", "trunk_link", @@ -94,7 +94,7 @@ else if (speedLimit >= 11.1f) { "tertiary", "tertiary_link" ); - var isClassifiedOrUnclassifiedRoad = new Condition.EqualsAnyIn( + var isClassifiedOrUnclassifiedRoad = new Condition.OneOf( "highway", "trunk", "trunk_link", @@ -107,7 +107,7 @@ else if (speedLimit >= 11.1f) { "unclassified" ); - var isNormalRoad = new Condition.EqualsAnyIn( + var isNormalRoad = new Condition.OneOf( "highway", "trunk", "trunk_link", @@ -166,7 +166,7 @@ else if (speedLimit >= 11.1f) { ); props.setProperties( - new ExactMatchSpecifier(new Condition.EqualsAnyIn("highway", "motorway", "motorway_link")), + new ExactMatchSpecifier(new Condition.OneOf("highway", "motorway", "motorway_link")), withModes(CAR) ); @@ -205,7 +205,7 @@ else if (speedLimit >= 11.1f) { props.setProperties( new ExactMatchSpecifier( new Condition.Equals("cycleway", "lane"), - new Condition.EqualsAnyIn("highway", "unclassified", "residential") + new Condition.OneOf("highway", "unclassified", "residential") ), cycleLaneInLowTraffic ); @@ -224,7 +224,7 @@ else if (speedLimit >= 11.1f) { props.setMixinProperties( new ExactMatchSpecifier( new Condition.Equals("oneway", "yes"), - new Condition.EqualsAnyInOrAbsent("cycleway"), + new Condition.OneOfOrAbsent("cycleway"), isNormalRoad ), ofBicycleSafety(1, 1.15) @@ -233,7 +233,7 @@ else if (speedLimit >= 11.1f) { // Discourage cycling along tram tracks props.setMixinProperties( new ExactMatchSpecifier( - new Condition.EqualsAnyIn("embedded_rails", "tram", "light_rail", "disused") + new Condition.OneOf("embedded_rails", "tram", "light_rail", "disused") ), ofBicycleSafety(1.2) ); @@ -252,12 +252,12 @@ else if (speedLimit >= 11.1f) { new LogicalOrSpecifier( new ExactMatchSpecifier( new Condition.Equals("bridge", "yes"), - new Condition.EqualsAnyInOrAbsent("sidewalk", "no", "separate"), + new Condition.OneOfOrAbsent("sidewalk", "no", "separate"), isClassifiedOrUnclassifiedRoad ), new ExactMatchSpecifier( new Condition.Equals("verge", "no"), - new Condition.EqualsAnyInOrAbsent("sidewalk", "no", "separate"), + new Condition.OneOfOrAbsent("sidewalk", "no", "separate"), isClassifiedOrUnclassifiedRoad ) ), @@ -268,7 +268,7 @@ else if (speedLimit >= 11.1f) { props.setMixinProperties( new ExactMatchSpecifier( new Condition.Equals("junction", "roundabout"), - new Condition.EqualsAnyInOrAbsent("sidewalk", "no", "separate") + new Condition.OneOfOrAbsent("sidewalk", "no", "separate") ), ofWalkSafety(2.) ); @@ -297,7 +297,7 @@ else if (speedLimit >= 11.1f) { props.setProperties( new ExactMatchSpecifier( new Condition.Equals("highway", "service"), - new Condition.EqualsAnyIn("bus", "yes", "designated") + new Condition.OneOf("bus", "yes", "designated") ), withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(cycleSafetyMediumLowTraffic).walkSafety(1.9) ); @@ -404,49 +404,49 @@ else if (speedLimit >= 11.1f) { props.setProperties( new ExactMatchSpecifier( - new Condition.EqualsAnyIn("trail_visibility", "bad", "low", "poor", "horrible", "no"), + new Condition.OneOf("trail_visibility", "bad", "low", "poor", "horrible", "no"), new Condition.Equals("highway", "path") ), withModes(NONE) ); props.setProperties( new ExactMatchSpecifier( - new Condition.EqualsAnyIn( + new Condition.OneOf( "sac_scale", "demanding_mountain_hiking", "alpine_hiking", "demanding_alpine_hiking", "difficult_alpine_hiking" ), - new Condition.EqualsAnyIn("highway", "path", "steps") + new Condition.OneOf("highway", "path", "steps") ), withModes(NONE) ); props.setProperties( new ExactMatchSpecifier( - new Condition.EqualsAnyIn("smoothness", "horrible", "very_horrible"), - new Condition.EqualsAnyIn("highway", "path", "bridleway", "track") + new Condition.OneOf("smoothness", "horrible", "very_horrible"), + new Condition.OneOf("highway", "path", "bridleway", "track") ), withModes(PEDESTRIAN).walkSafety(1.15) ); props.setProperties( new ExactMatchSpecifier( new Condition.Equals("smoothness", "impassable"), - new Condition.EqualsAnyIn("highway", "path", "bridleway", "track") + new Condition.OneOf("highway", "path", "bridleway", "track") ), withModes(NONE) ); props.setProperties( new ExactMatchSpecifier( new Condition.InclusiveRange("mtb:scale", 2, 1), - new Condition.EqualsAnyIn("highway", "path", "bridleway", "track") + new Condition.OneOf("highway", "path", "bridleway", "track") ), withModes(PEDESTRIAN).walkSafety(1.15) ); props.setProperties( new ExactMatchSpecifier( new Condition.GreaterThan("mtb:scale", 2), - new Condition.EqualsAnyIn("highway", "path", "bridleway", "track") + new Condition.OneOf("highway", "path", "bridleway", "track") ), withModes(NONE) ); @@ -461,7 +461,7 @@ else if (speedLimit >= 11.1f) { props.setMixinProperties("surface=metal_grid", ofBicycleSafety(1.2)); props.setMixinProperties("surface=metal", ofBicycleSafety(1.2)); // Paved but damaged - var isPaved = new Condition.EqualsAnyIn( + var isPaved = new Condition.OneOf( "surface", "asfalt", "concrete", @@ -502,46 +502,46 @@ else if (speedLimit >= 11.1f) { props.setMixinProperties( new ExactMatchSpecifier( new Condition.Absent("tracktype"), - new Condition.EqualsAnyInOrAbsent("surface", "unpaved"), - new Condition.EqualsAnyIn("highway", "track", "bridleway") + new Condition.OneOfOrAbsent("surface", "unpaved"), + new Condition.OneOf("highway", "track", "bridleway") ), ofBicycleSafety(1.8).walkSafety(1.6) ); props.setMixinProperties( new ExactMatchSpecifier( new Condition.Equals("tracktype", "grade2"), - new Condition.EqualsAnyInOrAbsent("surface", "unpaved"), - new Condition.EqualsAnyIn("highway", "track", "bridleway", "service", "unclassified") + new Condition.OneOfOrAbsent("surface", "unpaved"), + new Condition.OneOf("highway", "track", "bridleway", "service", "unclassified") ), ofBicycleSafety(1.4).walkSafety(1.4) ); props.setMixinProperties( new ExactMatchSpecifier( new Condition.Equals("tracktype", "grade3"), - new Condition.EqualsAnyInOrAbsent("surface", "unpaved"), - new Condition.EqualsAnyIn("highway", "track", "bridleway", "service", "unclassified") + new Condition.OneOfOrAbsent("surface", "unpaved"), + new Condition.OneOf("highway", "track", "bridleway", "service", "unclassified") ), ofBicycleSafety(1.8).walkSafety(1.6) ); props.setMixinProperties( new ExactMatchSpecifier( new Condition.Equals("tracktype", "grade4"), - new Condition.EqualsAnyInOrAbsent("surface", "unpaved"), - new Condition.EqualsAnyIn("highway", "track", "bridleway", "service", "unclassified") + new Condition.OneOfOrAbsent("surface", "unpaved"), + new Condition.OneOf("highway", "track", "bridleway", "service", "unclassified") ), ofBicycleSafety(2.3).walkSafety(1.8) ); props.setMixinProperties( new ExactMatchSpecifier( new Condition.Equals("tracktype", "grade5"), - new Condition.EqualsAnyInOrAbsent("surface", "unpaved"), - new Condition.EqualsAnyIn("highway", "track", "bridleway", "service", "unclassified") + new Condition.OneOfOrAbsent("surface", "unpaved"), + new Condition.OneOf("highway", "track", "bridleway", "service", "unclassified") ), ofBicycleSafety(2.3).walkSafety(2.4) ); props.setMixinProperties( new ExactMatchSpecifier( - new Condition.EqualsAnyInOrAbsent("surface"), + new Condition.OneOfOrAbsent("surface"), new Condition.Equals("highway", "path") ), ofBicycleSafety(2.3).walkSafety(2.4) @@ -560,7 +560,7 @@ else if (speedLimit >= 11.1f) { */ props.setCarSpeed( - new ExactMatchSpecifier(new Condition.EqualsAnyIn("highway", "motorway", "motorway_link")), + new ExactMatchSpecifier(new Condition.OneOf("highway", "motorway", "motorway_link")), 30.56f // 110 km/t ); @@ -570,7 +570,7 @@ else if (speedLimit >= 11.1f) { ); props.setCarSpeed( new ExactMatchSpecifier( - new Condition.EqualsAnyIn( + new Condition.OneOf( "highway", "trunk", "trunk_link", @@ -589,8 +589,8 @@ else if (speedLimit >= 11.1f) { ); props.setCarSpeed( new ExactMatchSpecifier( - new Condition.EqualsAnyIn("sidewalk", "yes", "both", "left", "right", "separate"), - new Condition.EqualsAnyIn( + new Condition.OneOf("sidewalk", "yes", "both", "left", "right", "separate"), + new Condition.OneOf( "highway", "trunk", "trunk_link", diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java index d430ad05f7d..e43b50c46ef 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java @@ -30,4 +30,8 @@ public OsmTagMapper getInstance() { case CONSTANT_SPEED_FINLAND -> new ConstantSpeedFinlandMapper(); }; } + + public boolean needsDocumentation() { + return this != CONSTANT_SPEED_FINLAND; + } } diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java index fc166a69927..fa9d174f583 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java @@ -5,4 +5,8 @@ */ public record SafetyFeatures(double forward, double back) { public static final SafetyFeatures DEFAULT = new SafetyFeatures(1, 1); + + public boolean modifies() { + return !(forward == 1 && back == 1); + } } diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/BestMatchSpecifier.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/BestMatchSpecifier.java index d9f194aa4e5..2c33470f2f7 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/BestMatchSpecifier.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/BestMatchSpecifier.java @@ -1,5 +1,7 @@ package org.opentripplanner.openstreetmap.wayproperty.specifier; +import java.util.Arrays; +import java.util.stream.Collectors; import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.openstreetmap.model.OSMWithTags; @@ -72,6 +74,11 @@ public int matchScore(OSMWithTags way) { return score; } + @Override + public String toMarkdown() { + return Arrays.stream(conditions).map(Object::toString).collect(Collectors.joining("; ")); + } + @Override public String toString() { return ToStringBuilder.of(this.getClass()).addObj("conditions", conditions).toString(); diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java index 4d8381963b3..89448cad158 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java @@ -112,6 +112,11 @@ record Equals(String key, String value) implements Condition { public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { return way.hasTag(exKey) && way.isTag(exKey, value); } + + @Override + public String toString() { + return "%s=%s".formatted(key, value); + } } record Present(String key) implements Condition { @@ -123,6 +128,11 @@ public MatchResult matchType() { public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { return way.hasTag(exKey); } + + @Override + public String toString() { + return "present(%s)".formatted(key); + } } record Absent(String key) implements Condition { @@ -130,6 +140,11 @@ record Absent(String key) implements Condition { public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { return !way.hasTag(exKey); } + + @Override + public String toString() { + return "!%s".formatted(key); + } } record GreaterThan(String key, int value) implements Condition { @@ -138,6 +153,11 @@ public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { var maybeInt = way.getTagAsInt(exKey, ignored -> {}); return maybeInt.isPresent() && maybeInt.getAsInt() > value; } + + @Override + public String toString() { + return "%s > %s".formatted(key, value); + } } record LessThan(String key, int value) implements Condition { @@ -146,6 +166,11 @@ public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { var maybeInt = way.getTagAsInt(exKey, ignored -> {}); return maybeInt.isPresent() && maybeInt.getAsInt() < value; } + + @Override + public String toString() { + return "%s < %s".formatted(key, value); + } } record InclusiveRange(String key, int upper, int lower) implements Condition { @@ -160,18 +185,28 @@ public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { var maybeInt = way.getTagAsInt(exKey, ignored -> {}); return maybeInt.isPresent() && maybeInt.getAsInt() >= lower && maybeInt.getAsInt() <= upper; } + + @Override + public String toString() { + return "%s > %s < %s".formatted(lower, key, upper); + } } - record EqualsAnyIn(String key, String... values) implements Condition { + record OneOf(String key, String... values) implements Condition { @Override public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { return Arrays.stream(values).anyMatch(value -> way.isTag(exKey, value)); } + + @Override + public String toString() { + return "%s one of [%s]".formatted(key, String.join(", ", values)); + } } - record EqualsAnyInOrAbsent(String key, String... values) implements Condition { + record OneOfOrAbsent(String key, String... values) implements Condition { /* A use case for this is to detect the absence of a sidewalk, cycle lane or verge*/ - public EqualsAnyInOrAbsent(String key) { + public OneOfOrAbsent(String key) { this(key, "no", "none"); } @@ -181,5 +216,10 @@ public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { !way.hasTag(exKey) || Arrays.stream(values).anyMatch(value -> way.isTag(exKey, value)) ); } + + @Override + public String toString() { + return "%s not one of [%s] or absent".formatted(key, String.join(", ", values)); + } } } diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ExactMatchSpecifier.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ExactMatchSpecifier.java index e6eb3f37940..4c26784682f 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ExactMatchSpecifier.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ExactMatchSpecifier.java @@ -2,6 +2,7 @@ import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import org.opentripplanner.openstreetmap.model.OSMWithTags; /** @@ -54,6 +55,11 @@ public int matchScore(OSMWithTags way) { } } + @Override + public String toMarkdown() { + return conditions.stream().map(Object::toString).collect(Collectors.joining("; ")); + } + public boolean allTagsMatch(OSMWithTags way) { return conditions.stream().allMatch(o -> o.isMatch(way)); } diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/LogicalOrSpecifier.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/LogicalOrSpecifier.java index 229b26fa25a..1a0691deb08 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/LogicalOrSpecifier.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/LogicalOrSpecifier.java @@ -2,6 +2,7 @@ import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import org.opentripplanner.openstreetmap.model.OSMWithTags; /** @@ -25,10 +26,6 @@ public LogicalOrSpecifier(ExactMatchSpecifier... specifiers) { this.subSpecs = Arrays.asList(specifiers); } - public LogicalOrSpecifier(Condition... conditions) { - this.subSpecs = Arrays.stream(conditions).map(ExactMatchSpecifier::new).toList(); - } - public LogicalOrSpecifier(String... specs) { this.subSpecs = Arrays.stream(specs).map(ExactMatchSpecifier::new).toList(); } @@ -47,4 +44,9 @@ public int matchScore(OSMWithTags way) { return 0; } } + + @Override + public String toMarkdown() { + return subSpecs.stream().map(ExactMatchSpecifier::toMarkdown).collect(Collectors.joining("|")); + } } diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/OsmSpecifier.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/OsmSpecifier.java index 1e6c53a25c9..f87845e729f 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/OsmSpecifier.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/OsmSpecifier.java @@ -42,6 +42,8 @@ static Condition[] parseConditions(String spec, String separator) { */ int matchScore(OSMWithTags way); + String toMarkdown(); + record Scores(int forward, int backward) { public static Scores of(int s) { return new Scores(s, s); diff --git a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java new file mode 100644 index 00000000000..16930febdf1 --- /dev/null +++ b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java @@ -0,0 +1,141 @@ +package org.opentripplanner.generate.doc; + +import static org.opentripplanner.framework.io.FileUtils.assertFileEquals; +import static org.opentripplanner.framework.io.FileUtils.readFile; +import static org.opentripplanner.framework.io.FileUtils.writeFile; +import static org.opentripplanner.framework.text.MarkdownFormatter.bold; +import static org.opentripplanner.generate.doc.framework.DocsTestConstants.DOCS_ROOT; +import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_ROOT; +import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceSection; +import static org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource.CONSTANT_SPEED_FINLAND; +import static org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource.HAMBURG; + +import java.io.File; +import java.util.Arrays; +import java.util.List; +import java.util.Set; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.opentripplanner.framework.text.Table; +import org.opentripplanner.framework.text.TableBuilder; +import org.opentripplanner.generate.doc.framework.DocBuilder; +import org.opentripplanner.generate.doc.framework.GeneratesDocumentation; +import org.opentripplanner.openstreetmap.tagmapping.OsmTagMapper; +import org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource; +import org.opentripplanner.openstreetmap.wayproperty.SafetyFeatures; +import org.opentripplanner.openstreetmap.wayproperty.WayPropertyPicker; +import org.opentripplanner.openstreetmap.wayproperty.WayPropertySet; + +@GeneratesDocumentation +public class OsmMapperDocTest { + + private static final String FILE_NAME = "OsmMapper.md"; + private static final File TEMPLATE = new File(TEMPLATE_ROOT, FILE_NAME); + + public static List mappers() { + return Arrays + .stream(OsmTagMapperSource.values()) + .filter(m -> !Set.of(HAMBURG, CONSTANT_SPEED_FINLAND).contains(m)) + .toList(); + } + + @ParameterizedTest + @MethodSource("mappers") + public void updateDocs(OsmTagMapperSource source) { + var mapper = source.getInstance(); + var wps = new WayPropertySet(); + mapper.populateProperties(wps); + + var outFile = outputFile(mapper); + + // Read and close input file (same as output file) + String template = readFile(TEMPLATE); + String original = readFile(outFile); + + var propTable = propTable(wps); + var mixinTable = mixinTable(wps); + + template = replaceSection(template, "props", propTable.toMarkdownTable()); + template = replaceSection(template, "prop-details", propDetails(wps)); + template = replaceSection(template, "mixins", mixinTable.toMarkdownTable()); + writeFile(outFile, template); + assertFileEquals(original, outFile); + } + + private static File outputFile(OsmTagMapper mapper) { + var name = mapper.getClass().getSimpleName().replaceAll("Mapper", ".md"); + return new File("%s/osm/".formatted(DOCS_ROOT), name); + } + + private static Table propTable(WayPropertySet wps) { + var propTable = new TableBuilder(); + propTable.withHeaders("specifier", "permission", "safety"); + + for (var prop : wps.getWayProperties()) { + propTable.addRow( + "`%s`".formatted(prop.specifier().toMarkdown()), + prop.properties().getPermission(), + emojiModifications(prop.properties().bicycleSafety(), prop.properties().walkSafety()) + ); + } + return propTable.build(); + } + + private static String propDetails(WayPropertySet wps) { + var docBuilder = new DocBuilder(); + + var wayProperties = wps.getWayProperties(); + for (var prop : wayProperties) { + var index = wayProperties.indexOf(prop); + + docBuilder.header(3, "Rule #%s".formatted(index), Integer.toString(index)); + docBuilder + .text(bold("Specifier:")) + .text("`%s`".formatted(prop.specifier().toMarkdown())) + .lineBreak(); + + docBuilder.text(bold("Permission:")).text(prop.properties().getPermission()); + docBuilder.lineBreak(); + var bike = prop.properties().bicycleSafety(); + docBuilder + .text(bold("Bike safety factor:")) + .text("forward: %s, back: %s".formatted(bike.forward(), bike.back())); + docBuilder.lineBreak(); + var walk = prop.properties().walkSafety(); + docBuilder + .text(bold("Walk safety factor:")) + .text("forward: %s, back: %s".formatted(walk.forward(), walk.back())); + docBuilder.endParagraph(); + } + return docBuilder.toString(); + } + + private static String hash(WayPropertyPicker prop) { + return prop.specifier().toMarkdown().replaceAll(" ", "").toLowerCase(); + } + + private static Table mixinTable(WayPropertySet wps) { + var propTable = new TableBuilder(); + propTable.withHeaders("matcher", "modifications"); + + for (var prop : wps.getMixins()) { + propTable.addRow( + "`%s`".formatted(prop.specifier().toMarkdown()), + emojiModifications(prop.bicycleSafety(), prop.walkSafety()) + ); + } + return propTable.build(); + } + + private static String emojiModifications(SafetyFeatures bicycle, SafetyFeatures walk) { + return emojiIfModifies(bicycle, "\uD83D\uDEB4") + " " + emojiIfModifies(walk, "\uD83D\uDEB6"); + } + + private static String emojiIfModifies(SafetyFeatures prop, String value) { + if (prop.modifies()) { + return value; + } else { + return ""; + } + } +} diff --git a/src/test/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ConditionTest.java b/src/test/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ConditionTest.java index def272652f6..6386aa902e2 100644 --- a/src/test/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ConditionTest.java +++ b/src/test/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ConditionTest.java @@ -29,11 +29,11 @@ import org.opentripplanner.openstreetmap.model.OSMWithTags; import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.Absent; import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.Equals; -import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.EqualsAnyIn; import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.GreaterThan; import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.InclusiveRange; import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.LessThan; import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.MatchResult; +import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.OneOf; import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.Present; class ConditionTest { @@ -46,7 +46,7 @@ class ConditionTest { static Condition moreThanFourLanes = new GreaterThan("lanes", 4); static Condition lessThanFourLanes = new LessThan("lanes", 4); static Condition betweenFiveAndThreeLanes = new InclusiveRange("lanes", 5, 3); - static Condition smoothnessBadAndWorseThanBad = new EqualsAnyIn( + static Condition smoothnessBadAndWorseThanBad = new OneOf( "smoothness", "bad", "very_bad", @@ -54,7 +54,7 @@ class ConditionTest { "very_horrible", "impassable" ); - static Condition noSidewalk = new Condition.EqualsAnyInOrAbsent("sidewalk"); + static Condition noSidewalk = new Condition.OneOfOrAbsent("sidewalk"); static Stream equalsCases() { return Stream.of( From e942193474fa29fcb8d16e47219f50237559a287 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 26 Jun 2024 10:07:35 +0200 Subject: [PATCH 15/54] Skip more mappers --- docs/osm/Atlanta.md | 1270 ---------------- docs/osm/Hamburg.md | 217 --- docs/osm/Houston.md | 1262 ---------------- docs/osm/Portland.md | 1275 ----------------- mkdocs.yml | 3 - .../generate/doc/OsmMapperDocTest.java | 17 +- 6 files changed, 11 insertions(+), 4033 deletions(-) delete mode 100644 docs/osm/Atlanta.md delete mode 100644 docs/osm/Hamburg.md delete mode 100644 docs/osm/Houston.md delete mode 100644 docs/osm/Portland.md diff --git a/docs/osm/Atlanta.md b/docs/osm/Atlanta.md deleted file mode 100644 index da8caa3b433..00000000000 --- a/docs/osm/Atlanta.md +++ /dev/null @@ -1,1270 +0,0 @@ -## OSM tag mapping - -### Way properties - -Way properties set a way's permission and optionally influences its walk and bicycle safety factors. -These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. - - - - -| specifier | permission | safety | -|---------------------------------------------------------|------------------------|--------| -| `highway=trunk_link` | ALL | 🚴 | -| `highway=trunk` | ALL | 🚴 | -| `mtb:scale=3` | NONE | | -| `mtb:scale=4` | NONE | | -| `mtb:scale=5` | NONE | | -| `mtb:scale=6` | NONE | | -| `highway=corridor` | PEDESTRIAN | | -| `highway=steps` | PEDESTRIAN | | -| `highway=crossing` | PEDESTRIAN | | -| `highway=platform` | PEDESTRIAN | | -| `public_transport=platform` | PEDESTRIAN | | -| `railway=platform` | PEDESTRIAN | | -| `footway=sidewalk; highway=footway` | PEDESTRIAN | | -| `mtb:scale=1` | PEDESTRIAN | | -| `mtb:scale=2` | PEDESTRIAN | | -| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=living_street` | ALL | 🚴 | -| `highway=unclassified` | ALL | | -| `highway=road` | ALL | | -| `highway=byway` | ALL | 🚴 | -| `highway=track` | ALL | 🚴 | -| `highway=service` | ALL | 🚴 | -| `highway=residential` | ALL | 🚴 | -| `highway=residential_link` | ALL | 🚴 | -| `highway=tertiary` | ALL | | -| `highway=tertiary_link` | ALL | | -| `highway=secondary` | ALL | 🚴 | -| `highway=secondary_link` | ALL | 🚴 | -| `highway=primary` | ALL | 🚴 | -| `highway=primary_link` | ALL | 🚴 | -| `highway=trunk_link` | CAR | 🚴 | -| `highway=motorway_link` | CAR | 🚴 | -| `highway=trunk` | CAR | 🚴 | -| `highway=motorway` | CAR | 🚴 | -| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=lane` | ALL | 🚴 | -| `highway=residential; cycleway=lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | -| `highway=secondary; cycleway=lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | -| `highway=primary; cycleway=lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=lane` | ALL | 🚴 | -| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=track` | ALL | 🚴 | -| `highway=residential; cycleway=track` | ALL | 🚴 | -| `highway=residential_link; cycleway=track` | ALL | 🚴 | -| `highway=tertiary; cycleway=track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | -| `highway=secondary; cycleway=track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=track` | ALL | 🚴 | -| `highway=primary; cycleway=track` | ALL | 🚴 | -| `highway=primary_link; cycleway=track` | ALL | 🚴 | -| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | -| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite` | ALL | 🚴 | -| `highway=residential; cycleway=opposite` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite` | ALL | | -| `highway=tertiary_link; cycleway=opposite` | ALL | | -| `highway=secondary; cycleway=opposite` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=primary; cycleway=opposite` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `present(highway); bicycle=designated` | ALL | 🚴 | -| `highway=service; bicycle=designated` | ALL | 🚴 | -| `highway=residential; bicycle=designated` | ALL | 🚴 | -| `highway=unclassified; bicycle=designated` | ALL | 🚴 | -| `highway=residential_link; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | -| `highway=secondary; bicycle=designated` | ALL | 🚴 | -| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | -| `highway=primary; bicycle=designated` | ALL | 🚴 | -| `highway=primary_link; bicycle=designated` | ALL | 🚴 | -| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | - - - - - - -

Rule #0

- -**Specifier:** `highway=trunk_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #1

- -**Specifier:** `highway=trunk` -**Permission:** ALL -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #2

- -**Specifier:** `mtb:scale=3` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #3

- -**Specifier:** `mtb:scale=4` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #4

- -**Specifier:** `mtb:scale=5` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #5

- -**Specifier:** `mtb:scale=6` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #6

- -**Specifier:** `highway=corridor` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #7

- -**Specifier:** `highway=steps` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #8

- -**Specifier:** `highway=crossing` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #9

- -**Specifier:** `highway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #10

- -**Specifier:** `public_transport=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #11

- -**Specifier:** `railway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #12

- -**Specifier:** `footway=sidewalk; highway=footway` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #13

- -**Specifier:** `mtb:scale=1` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #14

- -**Specifier:** `mtb:scale=2` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #15

- -**Specifier:** `mtb:scale=0` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #16

- -**Specifier:** `highway=cycleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #17

- -**Specifier:** `highway=path` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #18

- -**Specifier:** `highway=pedestrian` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #19

- -**Specifier:** `highway=footway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #20

- -**Specifier:** `highway=bridleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #21

- -**Specifier:** `highway=living_street` -**Permission:** ALL -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #22

- -**Specifier:** `highway=unclassified` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #23

- -**Specifier:** `highway=road` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #24

- -**Specifier:** `highway=byway` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #25

- -**Specifier:** `highway=track` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #26

- -**Specifier:** `highway=service` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #27

- -**Specifier:** `highway=residential` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #28

- -**Specifier:** `highway=residential_link` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #29

- -**Specifier:** `highway=tertiary` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #30

- -**Specifier:** `highway=tertiary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #31

- -**Specifier:** `highway=secondary` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #32

- -**Specifier:** `highway=secondary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #33

- -**Specifier:** `highway=primary` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #34

- -**Specifier:** `highway=primary_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #35

- -**Specifier:** `highway=trunk_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #36

- -**Specifier:** `highway=motorway_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #37

- -**Specifier:** `highway=trunk` -**Permission:** CAR -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #38

- -**Specifier:** `highway=motorway` -**Permission:** CAR -**Bike safety factor:** forward: 8.0, back: 8.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #39

- -**Specifier:** `present(highway); cycleway=lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #40

- -**Specifier:** `highway=service; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #41

- -**Specifier:** `highway=residential; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #42

- -**Specifier:** `highway=residential_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #43

- -**Specifier:** `highway=tertiary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #44

- -**Specifier:** `highway=tertiary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #45

- -**Specifier:** `highway=secondary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #46

- -**Specifier:** `highway=secondary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #47

- -**Specifier:** `highway=primary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #48

- -**Specifier:** `highway=primary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #49

- -**Specifier:** `highway=trunk; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #50

- -**Specifier:** `highway=trunk_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #51

- -**Specifier:** `highway=motorway; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #52

- -**Specifier:** `highway=motorway_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #53

- -**Specifier:** `present(highway); cycleway=share_busway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #54

- -**Specifier:** `highway=service; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #55

- -**Specifier:** `highway=residential; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #56

- -**Specifier:** `highway=residential_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #57

- -**Specifier:** `highway=tertiary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #58

- -**Specifier:** `highway=tertiary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #59

- -**Specifier:** `highway=secondary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #60

- -**Specifier:** `highway=secondary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #61

- -**Specifier:** `highway=primary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #62

- -**Specifier:** `highway=primary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #63

- -**Specifier:** `highway=trunk; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #64

- -**Specifier:** `highway=trunk_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #65

- -**Specifier:** `highway=motorway; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #66

- -**Specifier:** `highway=motorway_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #67

- -**Specifier:** `present(highway); cycleway=opposite_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #68

- -**Specifier:** `highway=service; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #69

- -**Specifier:** `highway=residential; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #70

- -**Specifier:** `highway=residential_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #71

- -**Specifier:** `highway=tertiary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #72

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #73

- -**Specifier:** `highway=secondary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #74

- -**Specifier:** `highway=secondary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #75

- -**Specifier:** `highway=primary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #76

- -**Specifier:** `highway=primary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #77

- -**Specifier:** `highway=trunk; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #78

- -**Specifier:** `highway=trunk_link; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #79

- -**Specifier:** `present(highway); cycleway=track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #80

- -**Specifier:** `highway=service; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #81

- -**Specifier:** `highway=residential; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #82

- -**Specifier:** `highway=residential_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #83

- -**Specifier:** `highway=tertiary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #84

- -**Specifier:** `highway=tertiary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #85

- -**Specifier:** `highway=secondary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #86

- -**Specifier:** `highway=secondary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #87

- -**Specifier:** `highway=primary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #88

- -**Specifier:** `highway=primary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #89

- -**Specifier:** `highway=trunk; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #90

- -**Specifier:** `highway=trunk_link; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #91

- -**Specifier:** `present(highway); cycleway=opposite_track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #92

- -**Specifier:** `highway=service; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #93

- -**Specifier:** `highway=residential; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #94

- -**Specifier:** `highway=residential_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #95

- -**Specifier:** `highway=tertiary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #96

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #97

- -**Specifier:** `highway=secondary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #98

- -**Specifier:** `highway=secondary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #99

- -**Specifier:** `highway=primary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #100

- -**Specifier:** `highway=primary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #101

- -**Specifier:** `highway=trunk; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #102

- -**Specifier:** `highway=trunk_link; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #103

- -**Specifier:** `present(highway); cycleway=shared_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #104

- -**Specifier:** `highway=service; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.73, back: 0.73 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #105

- -**Specifier:** `highway=residential; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #106

- -**Specifier:** `highway=residential_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #107

- -**Specifier:** `highway=tertiary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #108

- -**Specifier:** `highway=tertiary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #109

- -**Specifier:** `highway=secondary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #110

- -**Specifier:** `highway=secondary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #111

- -**Specifier:** `highway=primary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #112

- -**Specifier:** `highway=primary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #113

- -**Specifier:** `present(highway); cycleway=opposite` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.4 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #114

- -**Specifier:** `highway=service; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #115

- -**Specifier:** `highway=residential; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #116

- -**Specifier:** `highway=residential_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #117

- -**Specifier:** `highway=tertiary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #118

- -**Specifier:** `highway=tertiary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #119

- -**Specifier:** `highway=secondary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #120

- -**Specifier:** `highway=secondary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #121

- -**Specifier:** `highway=primary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #122

- -**Specifier:** `highway=primary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #123

- -**Specifier:** `highway=path; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #124

- -**Specifier:** `highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #125

- -**Specifier:** `highway=footway; bicycle=yes; area=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #126

- -**Specifier:** `highway=pedestrian; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #127

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #128

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #129

- -**Specifier:** `highway=footway; footway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #130

- -**Specifier:** `highway=footway; footway=crossing; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #131

- -**Specifier:** `highway=track; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #132

- -**Specifier:** `highway=track; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #133

- -**Specifier:** `highway=track; bicycle=yes; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #134

- -**Specifier:** `highway=track; bicycle=designated; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #135

- -**Specifier:** `highway=track; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #136

- -**Specifier:** `present(highway); bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #137

- -**Specifier:** `highway=service; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.84, back: 0.84 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #138

- -**Specifier:** `highway=residential; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #139

- -**Specifier:** `highway=unclassified; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #140

- -**Specifier:** `highway=residential_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #141

- -**Specifier:** `highway=tertiary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #142

- -**Specifier:** `highway=tertiary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #143

- -**Specifier:** `highway=secondary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #144

- -**Specifier:** `highway=secondary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #145

- -**Specifier:** `highway=primary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #146

- -**Specifier:** `highway=primary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #147

- -**Specifier:** `highway=trunk; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.25, back: 7.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #148

- -**Specifier:** `highway=trunk_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #149

- -**Specifier:** `highway=motorway; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.76, back: 7.76 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #150

- -**Specifier:** `highway=motorway_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - - - - -### Bicycle and walking safety mixins - -Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the -permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. - - - - -| matcher | modifications | -|------------------------------------------------------------|---------------| -| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | -| `surface=unpaved` | 🚴 | -| `surface=compacted` | 🚴 | -| `surface=wood` | 🚴 | -| `surface=cobblestone` | 🚴 | -| `surface=sett` | 🚴 | -| `surface=unhewn_cobblestone` | 🚴 | -| `surface=grass_paver` | 🚴 | -| `surface=pebblestone` | 🚴 | -| `surface=metal` | 🚴 | -| `surface=ground` | 🚴 | -| `surface=dirt` | 🚴 | -| `surface=earth` | 🚴 | -| `surface=grass` | 🚴 | -| `surface=mud` | 🚴 | -| `surface=woodchip` | 🚴 | -| `surface=gravel` | 🚴 | -| `surface=artifical_turf` | 🚴 | -| `surface=sand` | 🚴 | -| `rlis:bicycle=caution_area` | 🚴 | -| `rlis:bicycle:right=caution_area` | 🚴 | -| `rlis:bicycle:left=caution_area` | 🚴 | -| `ccgis:bicycle=caution_area` | 🚴 | -| `ccgis:bicycle:right=caution_area` | 🚴 | -| `ccgis:bicycle:left=caution_area` | 🚴 | -| `foot=discouraged` | 🚶 | -| `bicycle=discouraged` | 🚴 | -| `foot=use_sidepath` | 🚶 | -| `bicycle=use_sidepath` | 🚴 | - - diff --git a/docs/osm/Hamburg.md b/docs/osm/Hamburg.md deleted file mode 100644 index 2cdd3068ca6..00000000000 --- a/docs/osm/Hamburg.md +++ /dev/null @@ -1,217 +0,0 @@ -## OSM tag mapping - - - - -| matcher | permission | safety | -|---------------------------------------------------------|------------------------|--------| -| `highway=track` | PEDESTRIAN_AND_BICYCLE | | -| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | | -| `highway=residential; junction=roundabout` | ALL | 🚴 | -| `present(highway); junction=roundabout` | BICYCLE_AND_CAR | | -| `highway=pedestrian` | PEDESTRIAN | | -| `highway=residential; maxspeed=30` | ALL | 🚴 | -| `highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=unclassified; cycleway=lane` | ALL | 🚴 | -| `mtb:scale=3` | NONE | | -| `mtb:scale=4` | NONE | | -| `mtb:scale=5` | NONE | | -| `mtb:scale=6` | NONE | | -| `highway=corridor` | PEDESTRIAN | | -| `highway=steps` | PEDESTRIAN | | -| `highway=crossing` | PEDESTRIAN | | -| `highway=platform` | PEDESTRIAN | | -| `public_transport=platform` | PEDESTRIAN | | -| `railway=platform` | PEDESTRIAN | | -| `footway=sidewalk; highway=footway` | PEDESTRIAN | | -| `mtb:scale=1` | PEDESTRIAN | | -| `mtb:scale=2` | PEDESTRIAN | | -| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=living_street` | ALL | 🚴 | -| `highway=unclassified` | ALL | | -| `highway=road` | ALL | | -| `highway=byway` | ALL | 🚴 | -| `highway=track` | ALL | 🚴 | -| `highway=service` | ALL | 🚴 | -| `highway=residential` | ALL | 🚴 | -| `highway=residential_link` | ALL | 🚴 | -| `highway=tertiary` | ALL | | -| `highway=tertiary_link` | ALL | | -| `highway=secondary` | ALL | 🚴 | -| `highway=secondary_link` | ALL | 🚴 | -| `highway=primary` | ALL | 🚴 | -| `highway=primary_link` | ALL | 🚴 | -| `highway=trunk_link` | CAR | 🚴 | -| `highway=motorway_link` | CAR | 🚴 | -| `highway=trunk` | CAR | 🚴 | -| `highway=motorway` | CAR | 🚴 | -| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=lane` | ALL | 🚴 | -| `highway=residential; cycleway=lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | -| `highway=secondary; cycleway=lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | -| `highway=primary; cycleway=lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=lane` | ALL | 🚴 | -| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=track` | ALL | 🚴 | -| `highway=residential; cycleway=track` | ALL | 🚴 | -| `highway=residential_link; cycleway=track` | ALL | 🚴 | -| `highway=tertiary; cycleway=track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | -| `highway=secondary; cycleway=track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=track` | ALL | 🚴 | -| `highway=primary; cycleway=track` | ALL | 🚴 | -| `highway=primary_link; cycleway=track` | ALL | 🚴 | -| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | -| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite` | ALL | 🚴 | -| `highway=residential; cycleway=opposite` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite` | ALL | | -| `highway=tertiary_link; cycleway=opposite` | ALL | | -| `highway=secondary; cycleway=opposite` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=primary; cycleway=opposite` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `present(highway); bicycle=designated` | ALL | 🚴 | -| `highway=service; bicycle=designated` | ALL | 🚴 | -| `highway=residential; bicycle=designated` | ALL | 🚴 | -| `highway=unclassified; bicycle=designated` | ALL | 🚴 | -| `highway=residential_link; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | -| `highway=secondary; bicycle=designated` | ALL | 🚴 | -| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | -| `highway=primary; bicycle=designated` | ALL | 🚴 | -| `highway=primary_link; bicycle=designated` | ALL | 🚴 | -| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | - - - -### Bicycle and walking safety mixins - - - - -| matcher | modifications | -|------------------------------------------------------------|---------------| -| `highway=tertiary` | 🚴 | -| `maxspeed=70` | 🚴 | -| `maxspeed=80` | 🚴 | -| `maxspeed=90` | 🚴 | -| `maxspeed=100` | 🚴 | -| `tracktype=grade1` | | -| `tracktype=grade2` | 🚴 | -| `tracktype=grade3` | 🚴 | -| `tracktype=grade4` | 🚴 | -| `tracktype=grade5` | 🚴 | -| `lit=no` | 🚴 | -| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | -| `surface=unpaved` | 🚴 | -| `surface=compacted` | 🚴 | -| `surface=wood` | 🚴 | -| `surface=cobblestone` | 🚴 | -| `surface=sett` | 🚴 | -| `surface=unhewn_cobblestone` | 🚴 | -| `surface=grass_paver` | 🚴 | -| `surface=pebblestone` | 🚴 | -| `surface=metal` | 🚴 | -| `surface=ground` | 🚴 | -| `surface=dirt` | 🚴 | -| `surface=earth` | 🚴 | -| `surface=grass` | 🚴 | -| `surface=mud` | 🚴 | -| `surface=woodchip` | 🚴 | -| `surface=gravel` | 🚴 | -| `surface=artifical_turf` | 🚴 | -| `surface=sand` | 🚴 | -| `rlis:bicycle=caution_area` | 🚴 | -| `rlis:bicycle:right=caution_area` | 🚴 | -| `rlis:bicycle:left=caution_area` | 🚴 | -| `ccgis:bicycle=caution_area` | 🚴 | -| `ccgis:bicycle:right=caution_area` | 🚴 | -| `ccgis:bicycle:left=caution_area` | 🚴 | -| `foot=discouraged` | 🚶 | -| `bicycle=discouraged` | 🚴 | -| `foot=use_sidepath` | 🚶 | -| `bicycle=use_sidepath` | 🚴 | - - diff --git a/docs/osm/Houston.md b/docs/osm/Houston.md deleted file mode 100644 index 8071d9a0a8a..00000000000 --- a/docs/osm/Houston.md +++ /dev/null @@ -1,1262 +0,0 @@ -## OSM tag mapping - -### Way properties - -Way properties set a way's permission and optionally influences its walk and bicycle safety factors. -These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. - - - - -| specifier | permission | safety | -|---------------------------------------------------------|------------------------|--------| -| `highway=footway; layer=-1; tunnel=yes; indoor=yes` | NONE | | -| `mtb:scale=3` | NONE | | -| `mtb:scale=4` | NONE | | -| `mtb:scale=5` | NONE | | -| `mtb:scale=6` | NONE | | -| `highway=corridor` | PEDESTRIAN | | -| `highway=steps` | PEDESTRIAN | | -| `highway=crossing` | PEDESTRIAN | | -| `highway=platform` | PEDESTRIAN | | -| `public_transport=platform` | PEDESTRIAN | | -| `railway=platform` | PEDESTRIAN | | -| `footway=sidewalk; highway=footway` | PEDESTRIAN | | -| `mtb:scale=1` | PEDESTRIAN | | -| `mtb:scale=2` | PEDESTRIAN | | -| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=living_street` | ALL | 🚴 | -| `highway=unclassified` | ALL | | -| `highway=road` | ALL | | -| `highway=byway` | ALL | 🚴 | -| `highway=track` | ALL | 🚴 | -| `highway=service` | ALL | 🚴 | -| `highway=residential` | ALL | 🚴 | -| `highway=residential_link` | ALL | 🚴 | -| `highway=tertiary` | ALL | | -| `highway=tertiary_link` | ALL | | -| `highway=secondary` | ALL | 🚴 | -| `highway=secondary_link` | ALL | 🚴 | -| `highway=primary` | ALL | 🚴 | -| `highway=primary_link` | ALL | 🚴 | -| `highway=trunk_link` | CAR | 🚴 | -| `highway=motorway_link` | CAR | 🚴 | -| `highway=trunk` | CAR | 🚴 | -| `highway=motorway` | CAR | 🚴 | -| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=lane` | ALL | 🚴 | -| `highway=residential; cycleway=lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | -| `highway=secondary; cycleway=lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | -| `highway=primary; cycleway=lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=lane` | ALL | 🚴 | -| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=track` | ALL | 🚴 | -| `highway=residential; cycleway=track` | ALL | 🚴 | -| `highway=residential_link; cycleway=track` | ALL | 🚴 | -| `highway=tertiary; cycleway=track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | -| `highway=secondary; cycleway=track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=track` | ALL | 🚴 | -| `highway=primary; cycleway=track` | ALL | 🚴 | -| `highway=primary_link; cycleway=track` | ALL | 🚴 | -| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | -| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite` | ALL | 🚴 | -| `highway=residential; cycleway=opposite` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite` | ALL | | -| `highway=tertiary_link; cycleway=opposite` | ALL | | -| `highway=secondary; cycleway=opposite` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=primary; cycleway=opposite` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `present(highway); bicycle=designated` | ALL | 🚴 | -| `highway=service; bicycle=designated` | ALL | 🚴 | -| `highway=residential; bicycle=designated` | ALL | 🚴 | -| `highway=unclassified; bicycle=designated` | ALL | 🚴 | -| `highway=residential_link; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | -| `highway=secondary; bicycle=designated` | ALL | 🚴 | -| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | -| `highway=primary; bicycle=designated` | ALL | 🚴 | -| `highway=primary_link; bicycle=designated` | ALL | 🚴 | -| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | - - - - - - -

Rule #0

- -**Specifier:** `highway=footway; layer=-1; tunnel=yes; indoor=yes` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #1

- -**Specifier:** `mtb:scale=3` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #2

- -**Specifier:** `mtb:scale=4` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #3

- -**Specifier:** `mtb:scale=5` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #4

- -**Specifier:** `mtb:scale=6` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #5

- -**Specifier:** `highway=corridor` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #6

- -**Specifier:** `highway=steps` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #7

- -**Specifier:** `highway=crossing` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #8

- -**Specifier:** `highway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #9

- -**Specifier:** `public_transport=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #10

- -**Specifier:** `railway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #11

- -**Specifier:** `footway=sidewalk; highway=footway` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #12

- -**Specifier:** `mtb:scale=1` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #13

- -**Specifier:** `mtb:scale=2` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #14

- -**Specifier:** `mtb:scale=0` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #15

- -**Specifier:** `highway=cycleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #16

- -**Specifier:** `highway=path` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #17

- -**Specifier:** `highway=pedestrian` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #18

- -**Specifier:** `highway=footway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #19

- -**Specifier:** `highway=bridleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #20

- -**Specifier:** `highway=living_street` -**Permission:** ALL -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #21

- -**Specifier:** `highway=unclassified` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #22

- -**Specifier:** `highway=road` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #23

- -**Specifier:** `highway=byway` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #24

- -**Specifier:** `highway=track` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #25

- -**Specifier:** `highway=service` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #26

- -**Specifier:** `highway=residential` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #27

- -**Specifier:** `highway=residential_link` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #28

- -**Specifier:** `highway=tertiary` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #29

- -**Specifier:** `highway=tertiary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #30

- -**Specifier:** `highway=secondary` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #31

- -**Specifier:** `highway=secondary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #32

- -**Specifier:** `highway=primary` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #33

- -**Specifier:** `highway=primary_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #34

- -**Specifier:** `highway=trunk_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #35

- -**Specifier:** `highway=motorway_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #36

- -**Specifier:** `highway=trunk` -**Permission:** CAR -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #37

- -**Specifier:** `highway=motorway` -**Permission:** CAR -**Bike safety factor:** forward: 8.0, back: 8.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #38

- -**Specifier:** `present(highway); cycleway=lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #39

- -**Specifier:** `highway=service; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #40

- -**Specifier:** `highway=residential; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #41

- -**Specifier:** `highway=residential_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #42

- -**Specifier:** `highway=tertiary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #43

- -**Specifier:** `highway=tertiary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #44

- -**Specifier:** `highway=secondary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #45

- -**Specifier:** `highway=secondary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #46

- -**Specifier:** `highway=primary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #47

- -**Specifier:** `highway=primary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #48

- -**Specifier:** `highway=trunk; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #49

- -**Specifier:** `highway=trunk_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #50

- -**Specifier:** `highway=motorway; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #51

- -**Specifier:** `highway=motorway_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #52

- -**Specifier:** `present(highway); cycleway=share_busway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #53

- -**Specifier:** `highway=service; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #54

- -**Specifier:** `highway=residential; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #55

- -**Specifier:** `highway=residential_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #56

- -**Specifier:** `highway=tertiary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #57

- -**Specifier:** `highway=tertiary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #58

- -**Specifier:** `highway=secondary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #59

- -**Specifier:** `highway=secondary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #60

- -**Specifier:** `highway=primary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #61

- -**Specifier:** `highway=primary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #62

- -**Specifier:** `highway=trunk; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #63

- -**Specifier:** `highway=trunk_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #64

- -**Specifier:** `highway=motorway; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #65

- -**Specifier:** `highway=motorway_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #66

- -**Specifier:** `present(highway); cycleway=opposite_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #67

- -**Specifier:** `highway=service; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #68

- -**Specifier:** `highway=residential; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #69

- -**Specifier:** `highway=residential_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #70

- -**Specifier:** `highway=tertiary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #71

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #72

- -**Specifier:** `highway=secondary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #73

- -**Specifier:** `highway=secondary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #74

- -**Specifier:** `highway=primary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #75

- -**Specifier:** `highway=primary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #76

- -**Specifier:** `highway=trunk; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #77

- -**Specifier:** `highway=trunk_link; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #78

- -**Specifier:** `present(highway); cycleway=track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #79

- -**Specifier:** `highway=service; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #80

- -**Specifier:** `highway=residential; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #81

- -**Specifier:** `highway=residential_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #82

- -**Specifier:** `highway=tertiary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #83

- -**Specifier:** `highway=tertiary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #84

- -**Specifier:** `highway=secondary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #85

- -**Specifier:** `highway=secondary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #86

- -**Specifier:** `highway=primary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #87

- -**Specifier:** `highway=primary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #88

- -**Specifier:** `highway=trunk; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #89

- -**Specifier:** `highway=trunk_link; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #90

- -**Specifier:** `present(highway); cycleway=opposite_track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #91

- -**Specifier:** `highway=service; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #92

- -**Specifier:** `highway=residential; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #93

- -**Specifier:** `highway=residential_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #94

- -**Specifier:** `highway=tertiary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #95

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #96

- -**Specifier:** `highway=secondary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #97

- -**Specifier:** `highway=secondary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #98

- -**Specifier:** `highway=primary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #99

- -**Specifier:** `highway=primary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #100

- -**Specifier:** `highway=trunk; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #101

- -**Specifier:** `highway=trunk_link; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #102

- -**Specifier:** `present(highway); cycleway=shared_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #103

- -**Specifier:** `highway=service; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.73, back: 0.73 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #104

- -**Specifier:** `highway=residential; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #105

- -**Specifier:** `highway=residential_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #106

- -**Specifier:** `highway=tertiary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #107

- -**Specifier:** `highway=tertiary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #108

- -**Specifier:** `highway=secondary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #109

- -**Specifier:** `highway=secondary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #110

- -**Specifier:** `highway=primary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #111

- -**Specifier:** `highway=primary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #112

- -**Specifier:** `present(highway); cycleway=opposite` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.4 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #113

- -**Specifier:** `highway=service; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #114

- -**Specifier:** `highway=residential; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #115

- -**Specifier:** `highway=residential_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #116

- -**Specifier:** `highway=tertiary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #117

- -**Specifier:** `highway=tertiary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #118

- -**Specifier:** `highway=secondary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #119

- -**Specifier:** `highway=secondary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #120

- -**Specifier:** `highway=primary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #121

- -**Specifier:** `highway=primary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #122

- -**Specifier:** `highway=path; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #123

- -**Specifier:** `highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #124

- -**Specifier:** `highway=footway; bicycle=yes; area=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #125

- -**Specifier:** `highway=pedestrian; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #126

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #127

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #128

- -**Specifier:** `highway=footway; footway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #129

- -**Specifier:** `highway=footway; footway=crossing; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #130

- -**Specifier:** `highway=track; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #131

- -**Specifier:** `highway=track; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #132

- -**Specifier:** `highway=track; bicycle=yes; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #133

- -**Specifier:** `highway=track; bicycle=designated; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #134

- -**Specifier:** `highway=track; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #135

- -**Specifier:** `present(highway); bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #136

- -**Specifier:** `highway=service; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.84, back: 0.84 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #137

- -**Specifier:** `highway=residential; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #138

- -**Specifier:** `highway=unclassified; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #139

- -**Specifier:** `highway=residential_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #140

- -**Specifier:** `highway=tertiary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #141

- -**Specifier:** `highway=tertiary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #142

- -**Specifier:** `highway=secondary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #143

- -**Specifier:** `highway=secondary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #144

- -**Specifier:** `highway=primary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #145

- -**Specifier:** `highway=primary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #146

- -**Specifier:** `highway=trunk; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.25, back: 7.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #147

- -**Specifier:** `highway=trunk_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #148

- -**Specifier:** `highway=motorway; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.76, back: 7.76 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #149

- -**Specifier:** `highway=motorway_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - - - - -### Bicycle and walking safety mixins - -Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the -permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. - - - - -| matcher | modifications | -|------------------------------------------------------------|---------------| -| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | -| `surface=unpaved` | 🚴 | -| `surface=compacted` | 🚴 | -| `surface=wood` | 🚴 | -| `surface=cobblestone` | 🚴 | -| `surface=sett` | 🚴 | -| `surface=unhewn_cobblestone` | 🚴 | -| `surface=grass_paver` | 🚴 | -| `surface=pebblestone` | 🚴 | -| `surface=metal` | 🚴 | -| `surface=ground` | 🚴 | -| `surface=dirt` | 🚴 | -| `surface=earth` | 🚴 | -| `surface=grass` | 🚴 | -| `surface=mud` | 🚴 | -| `surface=woodchip` | 🚴 | -| `surface=gravel` | 🚴 | -| `surface=artifical_turf` | 🚴 | -| `surface=sand` | 🚴 | -| `rlis:bicycle=caution_area` | 🚴 | -| `rlis:bicycle:right=caution_area` | 🚴 | -| `rlis:bicycle:left=caution_area` | 🚴 | -| `ccgis:bicycle=caution_area` | 🚴 | -| `ccgis:bicycle:right=caution_area` | 🚴 | -| `ccgis:bicycle:left=caution_area` | 🚴 | -| `foot=discouraged` | 🚶 | -| `bicycle=discouraged` | 🚴 | -| `foot=use_sidepath` | 🚶 | -| `bicycle=use_sidepath` | 🚴 | - - diff --git a/docs/osm/Portland.md b/docs/osm/Portland.md deleted file mode 100644 index 7f7baed3d8b..00000000000 --- a/docs/osm/Portland.md +++ /dev/null @@ -1,1275 +0,0 @@ -## OSM tag mapping - -### Way properties - -Way properties set a way's permission and optionally influences its walk and bicycle safety factors. -These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. - - - - -| specifier | permission | safety | -|---------------------------------------------------------|------------------------|--------| -| `mtb:scale=3` | NONE | | -| `mtb:scale=4` | NONE | | -| `mtb:scale=5` | NONE | | -| `mtb:scale=6` | NONE | | -| `highway=corridor` | PEDESTRIAN | | -| `highway=steps` | PEDESTRIAN | | -| `highway=crossing` | PEDESTRIAN | | -| `highway=platform` | PEDESTRIAN | | -| `public_transport=platform` | PEDESTRIAN | | -| `railway=platform` | PEDESTRIAN | | -| `footway=sidewalk; highway=footway` | PEDESTRIAN | | -| `mtb:scale=1` | PEDESTRIAN | | -| `mtb:scale=2` | PEDESTRIAN | | -| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=living_street` | ALL | 🚴 | -| `highway=unclassified` | ALL | | -| `highway=road` | ALL | | -| `highway=byway` | ALL | 🚴 | -| `highway=track` | ALL | 🚴 | -| `highway=service` | ALL | 🚴 | -| `highway=residential` | ALL | 🚴 | -| `highway=residential_link` | ALL | 🚴 | -| `highway=tertiary` | ALL | | -| `highway=tertiary_link` | ALL | | -| `highway=secondary` | ALL | 🚴 | -| `highway=secondary_link` | ALL | 🚴 | -| `highway=primary` | ALL | 🚴 | -| `highway=primary_link` | ALL | 🚴 | -| `highway=trunk_link` | CAR | 🚴 | -| `highway=motorway_link` | CAR | 🚴 | -| `highway=trunk` | CAR | 🚴 | -| `highway=motorway` | CAR | 🚴 | -| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=lane` | ALL | 🚴 | -| `highway=residential; cycleway=lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | -| `highway=secondary; cycleway=lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | -| `highway=primary; cycleway=lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=lane` | ALL | 🚴 | -| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=track` | ALL | 🚴 | -| `highway=residential; cycleway=track` | ALL | 🚴 | -| `highway=residential_link; cycleway=track` | ALL | 🚴 | -| `highway=tertiary; cycleway=track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | -| `highway=secondary; cycleway=track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=track` | ALL | 🚴 | -| `highway=primary; cycleway=track` | ALL | 🚴 | -| `highway=primary_link; cycleway=track` | ALL | 🚴 | -| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | -| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite` | ALL | 🚴 | -| `highway=residential; cycleway=opposite` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite` | ALL | | -| `highway=tertiary_link; cycleway=opposite` | ALL | | -| `highway=secondary; cycleway=opposite` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=primary; cycleway=opposite` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `present(highway); bicycle=designated` | ALL | 🚴 | -| `highway=service; bicycle=designated` | ALL | 🚴 | -| `highway=residential; bicycle=designated` | ALL | 🚴 | -| `highway=unclassified; bicycle=designated` | ALL | 🚴 | -| `highway=residential_link; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | -| `highway=secondary; bicycle=designated` | ALL | 🚴 | -| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | -| `highway=primary; bicycle=designated` | ALL | 🚴 | -| `highway=primary_link; bicycle=designated` | ALL | 🚴 | -| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | - - - - - - -

Rule #0

- -**Specifier:** `mtb:scale=3` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #1

- -**Specifier:** `mtb:scale=4` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #2

- -**Specifier:** `mtb:scale=5` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #3

- -**Specifier:** `mtb:scale=6` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #4

- -**Specifier:** `highway=corridor` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #5

- -**Specifier:** `highway=steps` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #6

- -**Specifier:** `highway=crossing` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #7

- -**Specifier:** `highway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #8

- -**Specifier:** `public_transport=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #9

- -**Specifier:** `railway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #10

- -**Specifier:** `footway=sidewalk; highway=footway` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #11

- -**Specifier:** `mtb:scale=1` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #12

- -**Specifier:** `mtb:scale=2` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #13

- -**Specifier:** `mtb:scale=0` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #14

- -**Specifier:** `highway=cycleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #15

- -**Specifier:** `highway=path` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #16

- -**Specifier:** `highway=pedestrian` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #17

- -**Specifier:** `highway=footway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #18

- -**Specifier:** `highway=bridleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #19

- -**Specifier:** `highway=living_street` -**Permission:** ALL -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #20

- -**Specifier:** `highway=unclassified` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #21

- -**Specifier:** `highway=road` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #22

- -**Specifier:** `highway=byway` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #23

- -**Specifier:** `highway=track` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #24

- -**Specifier:** `highway=service` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #25

- -**Specifier:** `highway=residential` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #26

- -**Specifier:** `highway=residential_link` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #27

- -**Specifier:** `highway=tertiary` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #28

- -**Specifier:** `highway=tertiary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #29

- -**Specifier:** `highway=secondary` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #30

- -**Specifier:** `highway=secondary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #31

- -**Specifier:** `highway=primary` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #32

- -**Specifier:** `highway=primary_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #33

- -**Specifier:** `highway=trunk_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #34

- -**Specifier:** `highway=motorway_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #35

- -**Specifier:** `highway=trunk` -**Permission:** CAR -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #36

- -**Specifier:** `highway=motorway` -**Permission:** CAR -**Bike safety factor:** forward: 8.0, back: 8.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #37

- -**Specifier:** `present(highway); cycleway=lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #38

- -**Specifier:** `highway=service; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #39

- -**Specifier:** `highway=residential; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #40

- -**Specifier:** `highway=residential_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #41

- -**Specifier:** `highway=tertiary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #42

- -**Specifier:** `highway=tertiary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #43

- -**Specifier:** `highway=secondary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #44

- -**Specifier:** `highway=secondary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #45

- -**Specifier:** `highway=primary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #46

- -**Specifier:** `highway=primary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #47

- -**Specifier:** `highway=trunk; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #48

- -**Specifier:** `highway=trunk_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #49

- -**Specifier:** `highway=motorway; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #50

- -**Specifier:** `highway=motorway_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #51

- -**Specifier:** `present(highway); cycleway=share_busway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #52

- -**Specifier:** `highway=service; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #53

- -**Specifier:** `highway=residential; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #54

- -**Specifier:** `highway=residential_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #55

- -**Specifier:** `highway=tertiary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #56

- -**Specifier:** `highway=tertiary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #57

- -**Specifier:** `highway=secondary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #58

- -**Specifier:** `highway=secondary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #59

- -**Specifier:** `highway=primary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #60

- -**Specifier:** `highway=primary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #61

- -**Specifier:** `highway=trunk; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #62

- -**Specifier:** `highway=trunk_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #63

- -**Specifier:** `highway=motorway; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #64

- -**Specifier:** `highway=motorway_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #65

- -**Specifier:** `present(highway); cycleway=opposite_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #66

- -**Specifier:** `highway=service; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #67

- -**Specifier:** `highway=residential; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #68

- -**Specifier:** `highway=residential_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #69

- -**Specifier:** `highway=tertiary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #70

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #71

- -**Specifier:** `highway=secondary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #72

- -**Specifier:** `highway=secondary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #73

- -**Specifier:** `highway=primary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #74

- -**Specifier:** `highway=primary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #75

- -**Specifier:** `highway=trunk; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #76

- -**Specifier:** `highway=trunk_link; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #77

- -**Specifier:** `present(highway); cycleway=track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #78

- -**Specifier:** `highway=service; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #79

- -**Specifier:** `highway=residential; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #80

- -**Specifier:** `highway=residential_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #81

- -**Specifier:** `highway=tertiary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #82

- -**Specifier:** `highway=tertiary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #83

- -**Specifier:** `highway=secondary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #84

- -**Specifier:** `highway=secondary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #85

- -**Specifier:** `highway=primary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #86

- -**Specifier:** `highway=primary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #87

- -**Specifier:** `highway=trunk; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #88

- -**Specifier:** `highway=trunk_link; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #89

- -**Specifier:** `present(highway); cycleway=opposite_track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #90

- -**Specifier:** `highway=service; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #91

- -**Specifier:** `highway=residential; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #92

- -**Specifier:** `highway=residential_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #93

- -**Specifier:** `highway=tertiary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #94

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #95

- -**Specifier:** `highway=secondary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #96

- -**Specifier:** `highway=secondary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #97

- -**Specifier:** `highway=primary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #98

- -**Specifier:** `highway=primary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #99

- -**Specifier:** `highway=trunk; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #100

- -**Specifier:** `highway=trunk_link; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #101

- -**Specifier:** `present(highway); cycleway=shared_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #102

- -**Specifier:** `highway=service; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.73, back: 0.73 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #103

- -**Specifier:** `highway=residential; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #104

- -**Specifier:** `highway=residential_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #105

- -**Specifier:** `highway=tertiary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #106

- -**Specifier:** `highway=tertiary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #107

- -**Specifier:** `highway=secondary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #108

- -**Specifier:** `highway=secondary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #109

- -**Specifier:** `highway=primary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #110

- -**Specifier:** `highway=primary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #111

- -**Specifier:** `present(highway); cycleway=opposite` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.4 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #112

- -**Specifier:** `highway=service; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #113

- -**Specifier:** `highway=residential; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #114

- -**Specifier:** `highway=residential_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #115

- -**Specifier:** `highway=tertiary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #116

- -**Specifier:** `highway=tertiary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #117

- -**Specifier:** `highway=secondary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #118

- -**Specifier:** `highway=secondary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #119

- -**Specifier:** `highway=primary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #120

- -**Specifier:** `highway=primary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #121

- -**Specifier:** `highway=path; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #122

- -**Specifier:** `highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #123

- -**Specifier:** `highway=footway; bicycle=yes; area=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #124

- -**Specifier:** `highway=pedestrian; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #125

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #126

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #127

- -**Specifier:** `highway=footway; footway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #128

- -**Specifier:** `highway=footway; footway=crossing; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #129

- -**Specifier:** `highway=track; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #130

- -**Specifier:** `highway=track; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #131

- -**Specifier:** `highway=track; bicycle=yes; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #132

- -**Specifier:** `highway=track; bicycle=designated; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #133

- -**Specifier:** `highway=track; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #134

- -**Specifier:** `present(highway); bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #135

- -**Specifier:** `highway=service; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.84, back: 0.84 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #136

- -**Specifier:** `highway=residential; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #137

- -**Specifier:** `highway=unclassified; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #138

- -**Specifier:** `highway=residential_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #139

- -**Specifier:** `highway=tertiary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #140

- -**Specifier:** `highway=tertiary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #141

- -**Specifier:** `highway=secondary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #142

- -**Specifier:** `highway=secondary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #143

- -**Specifier:** `highway=primary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #144

- -**Specifier:** `highway=primary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #145

- -**Specifier:** `highway=trunk; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.25, back: 7.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #146

- -**Specifier:** `highway=trunk_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #147

- -**Specifier:** `highway=motorway; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.76, back: 7.76 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #148

- -**Specifier:** `highway=motorway_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - - - - -### Bicycle and walking safety mixins - -Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the -permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. - - - - -| matcher | modifications | -|------------------------------------------------------------|---------------| -| `footway=sidewalk` | 🚶 | -| `!name` | 🚶 | -| `highway=trunk` | 🚶 | -| `highway=trunk_link` | 🚶 | -| `highway=primary` | 🚶 | -| `highway=primary_link` | 🚶 | -| `highway=secondary` | 🚶 | -| `highway=secondary_link` | 🚶 | -| `highway=tertiary` | 🚶 | -| `highway=tertiary_link` | 🚶 | -| `lanes > 4` | 🚶 | -| `sidewalk=both` | 🚶 | -| `sidewalk=left` | 🚶 | -| `sidewalk=right` | 🚶 | -| `surface=unpaved` | 🚶 | -| `sidewalk=no; maxspeed=55 mph` | 🚶 | -| `sidewalk=no; maxspeed=50 mph` | 🚶 | -| `sidewalk=no; maxspeed=45 mph` | 🚶 | -| `sidewalk=no; maxspeed=40 mph` | 🚶 | -| `sidewalk=no; maxspeed=35 mph` | 🚶 | -| `sidewalk=no; maxspeed=30 mph` | 🚶 | -| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | -| `surface=unpaved` | 🚴 | -| `surface=compacted` | 🚴 | -| `surface=wood` | 🚴 | -| `surface=cobblestone` | 🚴 | -| `surface=sett` | 🚴 | -| `surface=unhewn_cobblestone` | 🚴 | -| `surface=grass_paver` | 🚴 | -| `surface=pebblestone` | 🚴 | -| `surface=metal` | 🚴 | -| `surface=ground` | 🚴 | -| `surface=dirt` | 🚴 | -| `surface=earth` | 🚴 | -| `surface=grass` | 🚴 | -| `surface=mud` | 🚴 | -| `surface=woodchip` | 🚴 | -| `surface=gravel` | 🚴 | -| `surface=artifical_turf` | 🚴 | -| `surface=sand` | 🚴 | -| `rlis:bicycle=caution_area` | 🚴 | -| `rlis:bicycle:right=caution_area` | 🚴 | -| `rlis:bicycle:left=caution_area` | 🚴 | -| `ccgis:bicycle=caution_area` | 🚴 | -| `ccgis:bicycle:right=caution_area` | 🚴 | -| `ccgis:bicycle:left=caution_area` | 🚴 | -| `foot=discouraged` | 🚶 | -| `bicycle=discouraged` | 🚴 | -| `foot=use_sidepath` | 🚶 | -| `bicycle=use_sidepath` | 🚴 | - - diff --git a/mkdocs.yml b/mkdocs.yml index 1a380e0fe9b..0db31c4df53 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -79,9 +79,6 @@ nav: - Germany: 'osm/Germany.md' - Finland: 'osm/Finland.md' - UK: 'osm/Finland.md' - - Atlanta: 'osm/Atlanta.md' - - Portland: 'osm/Portland.md' - - Houston: 'osm/Houston.md' - Router: 'RouterConfiguration.md' - "Route Request": 'RouteRequest.md' - "Realtime Updaters": 'UpdaterConfig.md' diff --git a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java index 16930febdf1..52400a05b01 100644 --- a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java +++ b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java @@ -7,8 +7,11 @@ import static org.opentripplanner.generate.doc.framework.DocsTestConstants.DOCS_ROOT; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_ROOT; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceSection; +import static org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource.ATLANTA; import static org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource.CONSTANT_SPEED_FINLAND; import static org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource.HAMBURG; +import static org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource.HOUSTON; +import static org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource.PORTLAND; import java.io.File; import java.util.Arrays; @@ -23,7 +26,6 @@ import org.opentripplanner.openstreetmap.tagmapping.OsmTagMapper; import org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource; import org.opentripplanner.openstreetmap.wayproperty.SafetyFeatures; -import org.opentripplanner.openstreetmap.wayproperty.WayPropertyPicker; import org.opentripplanner.openstreetmap.wayproperty.WayPropertySet; @GeneratesDocumentation @@ -31,11 +33,18 @@ public class OsmMapperDocTest { private static final String FILE_NAME = "OsmMapper.md"; private static final File TEMPLATE = new File(TEMPLATE_ROOT, FILE_NAME); + private static final Set SKIP_MAPPERS = Set.of( + ATLANTA, + HOUSTON, + PORTLAND, + HAMBURG, + CONSTANT_SPEED_FINLAND + ); public static List mappers() { return Arrays .stream(OsmTagMapperSource.values()) - .filter(m -> !Set.of(HAMBURG, CONSTANT_SPEED_FINLAND).contains(m)) + .filter(m -> !SKIP_MAPPERS.contains(m)) .toList(); } @@ -110,10 +119,6 @@ private static String propDetails(WayPropertySet wps) { return docBuilder.toString(); } - private static String hash(WayPropertyPicker prop) { - return prop.specifier().toMarkdown().replaceAll(" ", "").toLowerCase(); - } - private static Table mixinTable(WayPropertySet wps) { var propTable = new TableBuilder(); propTable.withHeaders("matcher", "modifications"); From c28736b70199b0ac069298bcbe00ac306b8d39f3 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 26 Jun 2024 10:29:49 +0200 Subject: [PATCH 16/54] Move Portland specific tags to PortlandMapper --- docs/osm/Default.md | 56 ++++++------- docs/osm/Finland.md | 58 +++++++------- docs/osm/Germany.md | 78 +++++++++---------- docs/osm/Norway.md | 74 +++++++++--------- docs/osm/UK.md | 56 ++++++------- .../tagmapping/DefaultMapper.java | 18 ----- .../tagmapping/PortlandMapper.java | 21 +++++ .../wayproperty/SafetyFeatures.java | 4 + .../generate/doc/OsmMapperDocTest.java | 17 +++- 9 files changed, 189 insertions(+), 193 deletions(-) diff --git a/docs/osm/Default.md b/docs/osm/Default.md index fe2b8895b23..cadf5fe488d 100644 --- a/docs/osm/Default.md +++ b/docs/osm/Default.md @@ -1219,36 +1219,30 @@ permission of an OSM way. Multiple mixins can apply to the same way and their ef -| matcher | modifications | -|------------------------------------------------------------|---------------| -| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | -| `surface=unpaved` | 🚴 | -| `surface=compacted` | 🚴 | -| `surface=wood` | 🚴 | -| `surface=cobblestone` | 🚴 | -| `surface=sett` | 🚴 | -| `surface=unhewn_cobblestone` | 🚴 | -| `surface=grass_paver` | 🚴 | -| `surface=pebblestone` | 🚴 | -| `surface=metal` | 🚴 | -| `surface=ground` | 🚴 | -| `surface=dirt` | 🚴 | -| `surface=earth` | 🚴 | -| `surface=grass` | 🚴 | -| `surface=mud` | 🚴 | -| `surface=woodchip` | 🚴 | -| `surface=gravel` | 🚴 | -| `surface=artifical_turf` | 🚴 | -| `surface=sand` | 🚴 | -| `rlis:bicycle=caution_area` | 🚴 | -| `rlis:bicycle:right=caution_area` | 🚴 | -| `rlis:bicycle:left=caution_area` | 🚴 | -| `ccgis:bicycle=caution_area` | 🚴 | -| `ccgis:bicycle:right=caution_area` | 🚴 | -| `ccgis:bicycle:left=caution_area` | 🚴 | -| `foot=discouraged` | 🚶 | -| `bicycle=discouraged` | 🚴 | -| `foot=use_sidepath` | 🚶 | -| `bicycle=use_sidepath` | 🚴 | +| matcher | bicycle safety | walk safety | +|------------------------------------------------------------|----------------|-------------| +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 0.7 | | +| `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/docs/osm/Finland.md b/docs/osm/Finland.md index 2cd77be22ea..acb7bd5e302 100644 --- a/docs/osm/Finland.md +++ b/docs/osm/Finland.md @@ -1571,37 +1571,31 @@ permission of an OSM way. Multiple mixins can apply to the same way and their ef -| matcher | modifications | -|------------------------------------------------------------|---------------| -| `bicycle=use_sidepath` | 🚶 | -| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | -| `surface=unpaved` | 🚴 | -| `surface=compacted` | 🚴 | -| `surface=wood` | 🚴 | -| `surface=cobblestone` | 🚴 | -| `surface=sett` | 🚴 | -| `surface=unhewn_cobblestone` | 🚴 | -| `surface=grass_paver` | 🚴 | -| `surface=pebblestone` | 🚴 | -| `surface=metal` | 🚴 | -| `surface=ground` | 🚴 | -| `surface=dirt` | 🚴 | -| `surface=earth` | 🚴 | -| `surface=grass` | 🚴 | -| `surface=mud` | 🚴 | -| `surface=woodchip` | 🚴 | -| `surface=gravel` | 🚴 | -| `surface=artifical_turf` | 🚴 | -| `surface=sand` | 🚴 | -| `rlis:bicycle=caution_area` | 🚴 | -| `rlis:bicycle:right=caution_area` | 🚴 | -| `rlis:bicycle:left=caution_area` | 🚴 | -| `ccgis:bicycle=caution_area` | 🚴 | -| `ccgis:bicycle:right=caution_area` | 🚴 | -| `ccgis:bicycle:left=caution_area` | 🚴 | -| `foot=discouraged` | 🚶 | -| `bicycle=discouraged` | 🚴 | -| `foot=use_sidepath` | 🚶 | -| `bicycle=use_sidepath` | 🚴 | +| matcher | bicycle safety | walk safety | +|------------------------------------------------------------|----------------|-------------| +| `bicycle=use_sidepath` | | 5.0 | +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 0.7 | | +| `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/docs/osm/Germany.md b/docs/osm/Germany.md index b6d218f95e7..7cd6cbf91cf 100644 --- a/docs/osm/Germany.md +++ b/docs/osm/Germany.md @@ -1291,47 +1291,41 @@ permission of an OSM way. Multiple mixins can apply to the same way and their ef -| matcher | modifications | -|------------------------------------------------------------|---------------| -| `highway=tertiary` | 🚴 | -| `maxspeed=70` | 🚴 | -| `maxspeed=80` | 🚴 | -| `maxspeed=90` | 🚴 | -| `maxspeed=100` | 🚴 | -| `tracktype=grade1` | | -| `tracktype=grade2` | 🚴 | -| `tracktype=grade3` | 🚴 | -| `tracktype=grade4` | 🚴 | -| `tracktype=grade5` | 🚴 | -| `lit=no` | 🚴 | -| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | -| `surface=unpaved` | 🚴 | -| `surface=compacted` | 🚴 | -| `surface=wood` | 🚴 | -| `surface=cobblestone` | 🚴 | -| `surface=sett` | 🚴 | -| `surface=unhewn_cobblestone` | 🚴 | -| `surface=grass_paver` | 🚴 | -| `surface=pebblestone` | 🚴 | -| `surface=metal` | 🚴 | -| `surface=ground` | 🚴 | -| `surface=dirt` | 🚴 | -| `surface=earth` | 🚴 | -| `surface=grass` | 🚴 | -| `surface=mud` | 🚴 | -| `surface=woodchip` | 🚴 | -| `surface=gravel` | 🚴 | -| `surface=artifical_turf` | 🚴 | -| `surface=sand` | 🚴 | -| `rlis:bicycle=caution_area` | 🚴 | -| `rlis:bicycle:right=caution_area` | 🚴 | -| `rlis:bicycle:left=caution_area` | 🚴 | -| `ccgis:bicycle=caution_area` | 🚴 | -| `ccgis:bicycle:right=caution_area` | 🚴 | -| `ccgis:bicycle:left=caution_area` | 🚴 | -| `foot=discouraged` | 🚶 | -| `bicycle=discouraged` | 🚴 | -| `foot=use_sidepath` | 🚶 | -| `bicycle=use_sidepath` | 🚴 | +| 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 | | +| `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/docs/osm/Norway.md b/docs/osm/Norway.md index 00ba1b4bf51..7237319d738 100644 --- a/docs/osm/Norway.md +++ b/docs/osm/Norway.md @@ -387,42 +387,42 @@ permission of an OSM way. Multiple mixins can apply to the same way and their ef -| matcher | modifications | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------| -| `cycleway=shared_lane; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | 🚴 | -| `lcn=yes¦rcn=yes¦ncn=yes` | 🚴 | -| `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]` | 🚴 | -| `embedded_rails one of [tram, light_rail, disused]` | 🚴 | -| `tunnel=yes; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified]` | 🚶 | -| `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]` | 🚶 | -| `junction=roundabout; sidewalk not one of [no, separate] or absent` | 🚶 | -| `surface=grass_paver` | 🚴 | -| `surface=sett` | 🚴 | -| `surface=cobblestone` | 🚴 | -| `surface=unhewn_cobblestone` | 🚴 | -| `surface=metal_grid` | 🚴 | -| `surface=metal` | 🚴 | -| `smoothness=intermediate; surface one of [asfalt, concrete, paving_stones, paved, wood]` | 🚴 | -| `smoothness=bad; surface one of [asfalt, concrete, paving_stones, paved, wood]` | 🚴 🚶 | -| `surface=unpaved; !tracktype` | 🚴 🚶 | -| `surface=compacted` | 🚴 🚶 | -| `surface=fine_gravel` | 🚴 🚶 | -| `surface=pebblestone` | 🚴 🚶 | -| `surface=gravel` | 🚴 🚶 | -| `surface=woodchip` | 🚴 🚶 | -| `surface=ground` | 🚴 🚶 | -| `surface=dirt` | 🚴 🚶 | -| `surface=earth` | 🚴 🚶 | -| `surface=grass` | 🚴 🚶 | -| `surface=mud` | 🚴 🚶 | -| `surface=sand` | 🚴 🚶 | -| `!tracktype; surface not one of [unpaved] or absent; highway one of [track, bridleway]` | 🚴 🚶 | -| `tracktype=grade2; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 🚴 🚶 | -| `tracktype=grade3; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 🚴 🚶 | -| `tracktype=grade4; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 🚴 🚶 | -| `tracktype=grade5; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 🚴 🚶 | -| `surface not one of [no, none] or absent; highway=path` | 🚴 🚶 | -| `sac_scale=mountain_hiking` | 🚶 | -| `trail_visibility=intermediate` | 🚶 | +| 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]` | 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 | +| `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/docs/osm/UK.md b/docs/osm/UK.md index 9a1f7388228..26376a29f17 100644 --- a/docs/osm/UK.md +++ b/docs/osm/UK.md @@ -1331,36 +1331,30 @@ permission of an OSM way. Multiple mixins can apply to the same way and their ef -| matcher | modifications | -|------------------------------------------------------------|---------------| -| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | -| `surface=unpaved` | 🚴 | -| `surface=compacted` | 🚴 | -| `surface=wood` | 🚴 | -| `surface=cobblestone` | 🚴 | -| `surface=sett` | 🚴 | -| `surface=unhewn_cobblestone` | 🚴 | -| `surface=grass_paver` | 🚴 | -| `surface=pebblestone` | 🚴 | -| `surface=metal` | 🚴 | -| `surface=ground` | 🚴 | -| `surface=dirt` | 🚴 | -| `surface=earth` | 🚴 | -| `surface=grass` | 🚴 | -| `surface=mud` | 🚴 | -| `surface=woodchip` | 🚴 | -| `surface=gravel` | 🚴 | -| `surface=artifical_turf` | 🚴 | -| `surface=sand` | 🚴 | -| `rlis:bicycle=caution_area` | 🚴 | -| `rlis:bicycle:right=caution_area` | 🚴 | -| `rlis:bicycle:left=caution_area` | 🚴 | -| `ccgis:bicycle=caution_area` | 🚴 | -| `ccgis:bicycle:right=caution_area` | 🚴 | -| `ccgis:bicycle:left=caution_area` | 🚴 | -| `foot=discouraged` | 🚶 | -| `bicycle=discouraged` | 🚴 | -| `foot=use_sidepath` | 🚶 | -| `bicycle=use_sidepath` | 🚴 | +| matcher | bicycle safety | walk safety | +|------------------------------------------------------------|----------------|-------------| +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 0.7 | | +| `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/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java index 9989c102030..f6343cfd384 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java @@ -602,24 +602,6 @@ public void populateProperties(WayPropertySet props) { /* Portland-local mixins */ - /* - * the RLIS/CCGIS:bicycle=designated mixins are coded out as they are no longer neccessary because of of the bicycle=designated block of code - * above. This switch makes our weighting system less reliant on tags that aren't generally used by the OSM community, and prevents the double - * counting that was occuring on streets with both bicycle infrastructure and an RLIS:bicycle=designated tag - */ - - /* - * props.setProperties("RLIS:bicycle=designated", StreetTraversalPermission.ALL, 0.97, 0.97, true); - */ - props.setMixinProperties("RLIS:bicycle=caution_area", ofBicycleSafety(1.45)); - props.setMixinProperties("RLIS:bicycle:right=caution_area", ofBicycleSafety(1.45, 1)); - props.setMixinProperties("RLIS:bicycle:left=caution_area", ofBicycleSafety(1, 1.45)); - /* - * props.setProperties("CCGIS:bicycle=designated", StreetTraversalPermission.ALL, 0.97, 0.97, true); - */ - props.setMixinProperties("CCGIS:bicycle=caution_area", ofBicycleSafety(1.45)); - props.setMixinProperties("CCGIS:bicycle:right=caution_area", ofBicycleSafety(1.45, 1)); - props.setMixinProperties("CCGIS:bicycle:left=caution_area", ofBicycleSafety(1, 1.45)); props.setMixinProperties("foot=discouraged", ofWalkSafety(3)); props.setMixinProperties("bicycle=discouraged", ofBicycleSafety(3)); diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java index a532d279ba4..f58daa1ddb3 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java @@ -1,5 +1,6 @@ package org.opentripplanner.openstreetmap.tagmapping; +import static org.opentripplanner.openstreetmap.wayproperty.MixinPropertiesBuilder.ofBicycleSafety; import static org.opentripplanner.openstreetmap.wayproperty.MixinPropertiesBuilder.ofWalkSafety; import static org.opentripplanner.openstreetmap.wayproperty.specifier.ExactMatchSpecifier.exact; @@ -41,6 +42,26 @@ public void populateProperties(WayPropertySet props) { props.setMixinProperties(exact("sidewalk=no;maxspeed=35 mph"), ofWalkSafety(2)); props.setMixinProperties(exact("sidewalk=no;maxspeed=30 mph"), ofWalkSafety(1.5)); + /* + * the RLIS/CCGIS:bicycle=designated mixins are coded out as they are no longer neccessary because of of the bicycle=designated block of code + * above. This switch makes our weighting system less reliant on tags that aren't generally used by the OSM community, and prevents the double + * counting that was occuring on streets with both bicycle infrastructure and an RLIS:bicycle=designated tag + */ + + /* + * props.setProperties("RLIS:bicycle=designated", StreetTraversalPermission.ALL, 0.97, 0.97, true); + */ + props.setMixinProperties("RLIS:bicycle=caution_area", ofBicycleSafety(1.45)); + props.setMixinProperties("RLIS:bicycle:right=caution_area", ofBicycleSafety(1.45, 1)); + props.setMixinProperties("RLIS:bicycle:left=caution_area", ofBicycleSafety(1, 1.45)); + /* + * props.setProperties("CCGIS:bicycle=designated", StreetTraversalPermission.ALL, 0.97, 0.97, true); + */ + props.setMixinProperties("CCGIS:bicycle=caution_area", ofBicycleSafety(1.45)); + props.setMixinProperties("CCGIS:bicycle:right=caution_area", ofBicycleSafety(1.45, 1)); + props.setMixinProperties("CCGIS:bicycle:left=caution_area", ofBicycleSafety(1, 1.45)); + + // Max speed limit in Oregon is 70 mph ~= 113kmh ~= 31.3m/s props.maxPossibleCarSpeed = 31.4f; diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java index fa9d174f583..dcf5969322f 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java @@ -9,4 +9,8 @@ public record SafetyFeatures(double forward, double back) { public boolean modifies() { return !(forward == 1 && back == 1); } + + public boolean isSymetric() { + return forward == back; + } } diff --git a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java index 52400a05b01..1884551d3cc 100644 --- a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java +++ b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java @@ -121,17 +121,30 @@ private static String propDetails(WayPropertySet wps) { private static Table mixinTable(WayPropertySet wps) { var propTable = new TableBuilder(); - propTable.withHeaders("matcher", "modifications"); + propTable.withHeaders("matcher", "bicycle safety", "walk safety"); for (var prop : wps.getMixins()) { propTable.addRow( "`%s`".formatted(prop.specifier().toMarkdown()), - emojiModifications(prop.bicycleSafety(), prop.walkSafety()) + tableValues(prop.bicycleSafety()), + tableValues(prop.walkSafety()) ); } return propTable.build(); } + private static String tableValues(SafetyFeatures safety) { + if (!safety.modifies()) { + return ""; + } + else if(safety.isSymetric()){ + return Double.toString(safety.forward()); + } + else { + return "forward: %s
back: %s".formatted(safety.forward(), safety.back()); + } + } + private static String emojiModifications(SafetyFeatures bicycle, SafetyFeatures walk) { return emojiIfModifies(bicycle, "\uD83D\uDEB4") + " " + emojiIfModifies(walk, "\uD83D\uDEB6"); } From 669da728640d42923220743277f7c4b78a3a8ed5 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 26 Jun 2024 11:56:08 +0200 Subject: [PATCH 17/54] Finetune look of tables --- doc-templates/OsmMapper.md | 11 +- docs/osm/Default.md | 1360 ++----------- docs/osm/Finland.md | 1756 ++--------------- docs/osm/Germany.md | 1441 ++------------ docs/osm/Norway.md | 424 +--- docs/osm/UK.md | 1486 ++------------ mkdocs.yml | 2 +- .../tagmapping/PortlandMapper.java | 15 +- .../generate/doc/OsmMapperDocTest.java | 56 +- 9 files changed, 768 insertions(+), 5783 deletions(-) diff --git a/doc-templates/OsmMapper.md b/doc-templates/OsmMapper.md index 555805f0c8d..1fe32ea06e9 100644 --- a/doc-templates/OsmMapper.md +++ b/doc-templates/OsmMapper.md @@ -1,17 +1,18 @@ -## OSM tag mapping +# OSM tag mapping ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. + These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. +Lower safety values make an OSM way more desirable and higher values less desirable. - - -### Bicycle and walking safety mixins +### Safety mixins Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the -permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. +permission of an OSM way. Their safety values are multiplied with the base values from the selected +way properties. Multiple mixins can apply to the same way and their effects compound. diff --git a/docs/osm/Default.md b/docs/osm/Default.md index cadf5fe488d..c390c8e4a1b 100644 --- a/docs/osm/Default.md +++ b/docs/osm/Default.md @@ -1,1220 +1,174 @@ -## OSM tag mapping +# OSM tag mapping ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. + These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. +Lower safety values make an OSM way more desirable and higher values less desirable. -| specifier | permission | safety | -|---------------------------------------------------------|------------------------|--------| -| `mtb:scale=3` | NONE | | -| `mtb:scale=4` | NONE | | -| `mtb:scale=5` | NONE | | -| `mtb:scale=6` | NONE | | -| `highway=corridor` | PEDESTRIAN | | -| `highway=steps` | PEDESTRIAN | | -| `highway=crossing` | PEDESTRIAN | | -| `highway=platform` | PEDESTRIAN | | -| `public_transport=platform` | PEDESTRIAN | | -| `railway=platform` | PEDESTRIAN | | -| `footway=sidewalk; highway=footway` | PEDESTRIAN | | -| `mtb:scale=1` | PEDESTRIAN | | -| `mtb:scale=2` | PEDESTRIAN | | -| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=living_street` | ALL | 🚴 | -| `highway=unclassified` | ALL | | -| `highway=road` | ALL | | -| `highway=byway` | ALL | 🚴 | -| `highway=track` | ALL | 🚴 | -| `highway=service` | ALL | 🚴 | -| `highway=residential` | ALL | 🚴 | -| `highway=residential_link` | ALL | 🚴 | -| `highway=tertiary` | ALL | | -| `highway=tertiary_link` | ALL | | -| `highway=secondary` | ALL | 🚴 | -| `highway=secondary_link` | ALL | 🚴 | -| `highway=primary` | ALL | 🚴 | -| `highway=primary_link` | ALL | 🚴 | -| `highway=trunk_link` | CAR | 🚴 | -| `highway=motorway_link` | CAR | 🚴 | -| `highway=trunk` | CAR | 🚴 | -| `highway=motorway` | CAR | 🚴 | -| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=lane` | ALL | 🚴 | -| `highway=residential; cycleway=lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | -| `highway=secondary; cycleway=lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | -| `highway=primary; cycleway=lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=lane` | ALL | 🚴 | -| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=track` | ALL | 🚴 | -| `highway=residential; cycleway=track` | ALL | 🚴 | -| `highway=residential_link; cycleway=track` | ALL | 🚴 | -| `highway=tertiary; cycleway=track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | -| `highway=secondary; cycleway=track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=track` | ALL | 🚴 | -| `highway=primary; cycleway=track` | ALL | 🚴 | -| `highway=primary_link; cycleway=track` | ALL | 🚴 | -| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | -| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite` | ALL | 🚴 | -| `highway=residential; cycleway=opposite` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite` | ALL | | -| `highway=tertiary_link; cycleway=opposite` | ALL | | -| `highway=secondary; cycleway=opposite` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=primary; cycleway=opposite` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `present(highway); bicycle=designated` | ALL | 🚴 | -| `highway=service; bicycle=designated` | ALL | 🚴 | -| `highway=residential; bicycle=designated` | ALL | 🚴 | -| `highway=unclassified; bicycle=designated` | ALL | 🚴 | -| `highway=residential_link; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | -| `highway=secondary; bicycle=designated` | ALL | 🚴 | -| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | -| `highway=primary; bicycle=designated` | ALL | 🚴 | -| `highway=primary_link; bicycle=designated` | ALL | 🚴 | -| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| specifier | permission | bike safety | walk safety | +|---------------------------------------------------------|--------------------------|-------------------------------|-------------| +| `mtb:scale=3` | `NONE` | | | +| `mtb:scale=4` | `NONE` | | | +| `mtb:scale=5` | `NONE` | | | +| `mtb:scale=6` | `NONE` | | | +| `highway=corridor` | `PEDESTRIAN` | | | +| `highway=steps` | `PEDESTRIAN` | | | +| `highway=crossing` | `PEDESTRIAN` | | | +| `highway=platform` | `PEDESTRIAN` | | | +| `public_transport=platform` | `PEDESTRIAN` | | | +| `railway=platform` | `PEDESTRIAN` | | | +| `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | +| `mtb:scale=1` | `PEDESTRIAN` | | | +| `mtb:scale=2` | `PEDESTRIAN` | | | +| `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=cycleway` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | +| `highway=path` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `highway=pedestrian` | `PEDESTRIAN_AND_BICYCLE` | 0.9 | | +| `highway=footway` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | +| `highway=bridleway` | `PEDESTRIAN_AND_BICYCLE` | 1.3 | | +| `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` | `CAR` | 2.06 | | +| `highway=motorway_link` | `CAR` | 2.06 | | +| `highway=trunk` | `CAR` | 7.47 | | +| `highway=motorway` | `CAR` | 8.0 | | +| `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` | `BICYCLE_AND_CAR` | 1.5 | | +| `highway=trunk_link; cycleway=lane` | `BICYCLE_AND_CAR` | 1.15 | | +| `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` | `BICYCLE_AND_CAR` | 1.75 | | +| `highway=trunk_link; cycleway=share_busway` | `BICYCLE_AND_CAR` | 1.25 | | +| `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` | forward: 1.0
back: 0.87 | | +| `highway=service; cycleway=opposite_lane` | `ALL` | forward: 1.1
back: 0.77 | | +| `highway=residential; cycleway=opposite_lane` | `ALL` | forward: 0.98
back: 0.77 | | +| `highway=residential_link; cycleway=opposite_lane` | `ALL` | forward: 0.98
back: 0.77 | | +| `highway=tertiary; cycleway=opposite_lane` | `ALL` | forward: 1.0
back: 0.87 | | +| `highway=tertiary_link; cycleway=opposite_lane` | `ALL` | forward: 1.0
back: 0.87 | | +| `highway=secondary; cycleway=opposite_lane` | `ALL` | forward: 1.5
back: 0.96 | | +| `highway=secondary_link; cycleway=opposite_lane` | `ALL` | forward: 1.5
back: 0.96 | | +| `highway=primary; cycleway=opposite_lane` | `ALL` | forward: 2.06
back: 1.15 | | +| `highway=primary_link; cycleway=opposite_lane` | `ALL` | forward: 2.06
back: 1.15 | | +| `highway=trunk; cycleway=opposite_lane` | `BICYCLE_AND_CAR` | forward: 7.47
back: 1.5 | | +| `highway=trunk_link; cycleway=opposite_lane` | `BICYCLE_AND_CAR` | forward: 2.06
back: 1.15 | | +| `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` | `BICYCLE_AND_CAR` | 0.95 | | +| `highway=trunk_link; cycleway=track` | `BICYCLE_AND_CAR` | 0.85 | | +| `present(highway); cycleway=opposite_track` | `PEDESTRIAN_AND_BICYCLE` | forward: 1.0
back: 0.75 | | +| `highway=service; cycleway=opposite_track` | `ALL` | forward: 1.1
back: 0.65 | | +| `highway=residential; cycleway=opposite_track` | `ALL` | forward: 0.98
back: 0.65 | | +| `highway=residential_link; cycleway=opposite_track` | `ALL` | forward: 0.98
back: 0.65 | | +| `highway=tertiary; cycleway=opposite_track` | `ALL` | forward: 1.0
back: 0.75 | | +| `highway=tertiary_link; cycleway=opposite_track` | `ALL` | forward: 1.0
back: 0.75 | | +| `highway=secondary; cycleway=opposite_track` | `ALL` | forward: 1.5
back: 0.8 | | +| `highway=secondary_link; cycleway=opposite_track` | `ALL` | forward: 1.5
back: 0.8 | | +| `highway=primary; cycleway=opposite_track` | `ALL` | forward: 2.06
back: 0.85 | | +| `highway=primary_link; cycleway=opposite_track` | `ALL` | forward: 2.06
back: 0.85 | | +| `highway=trunk; cycleway=opposite_track` | `BICYCLE_AND_CAR` | forward: 7.47
back: 0.95 | | +| `highway=trunk_link; cycleway=opposite_track` | `BICYCLE_AND_CAR` | forward: 2.06
back: 0.85 | | +| `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` | 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` | forward: 1.5
back: 1.71 | | +| `highway=secondary_link; cycleway=opposite` | `ALL` | forward: 1.5
back: 1.71 | | +| `highway=primary; cycleway=opposite` | `ALL` | forward: 2.06
back: 2.99 | | +| `highway=primary_link; cycleway=opposite` | `ALL` | 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_AND_BICYCLE` | 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` | `ALL` | 0.97 | | +| `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` | `BICYCLE_AND_CAR` | 7.25 | | +| `highway=trunk_link; bicycle=designated` | `BICYCLE_AND_CAR` | 2.0 | | +| `highway=motorway; bicycle=designated` | `BICYCLE_AND_CAR` | 7.76 | | +| `highway=motorway_link; bicycle=designated` | `BICYCLE_AND_CAR` | 2.0 | | - - - -

Rule #0

- -**Specifier:** `mtb:scale=3` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #1

- -**Specifier:** `mtb:scale=4` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #2

- -**Specifier:** `mtb:scale=5` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #3

- -**Specifier:** `mtb:scale=6` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #4

- -**Specifier:** `highway=corridor` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #5

- -**Specifier:** `highway=steps` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #6

- -**Specifier:** `highway=crossing` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #7

- -**Specifier:** `highway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #8

- -**Specifier:** `public_transport=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #9

- -**Specifier:** `railway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #10

- -**Specifier:** `footway=sidewalk; highway=footway` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #11

- -**Specifier:** `mtb:scale=1` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #12

- -**Specifier:** `mtb:scale=2` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #13

- -**Specifier:** `mtb:scale=0` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #14

- -**Specifier:** `highway=cycleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #15

- -**Specifier:** `highway=path` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #16

- -**Specifier:** `highway=pedestrian` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #17

- -**Specifier:** `highway=footway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #18

- -**Specifier:** `highway=bridleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #19

- -**Specifier:** `highway=living_street` -**Permission:** ALL -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #20

- -**Specifier:** `highway=unclassified` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #21

- -**Specifier:** `highway=road` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #22

- -**Specifier:** `highway=byway` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #23

- -**Specifier:** `highway=track` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #24

- -**Specifier:** `highway=service` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #25

- -**Specifier:** `highway=residential` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #26

- -**Specifier:** `highway=residential_link` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #27

- -**Specifier:** `highway=tertiary` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #28

- -**Specifier:** `highway=tertiary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #29

- -**Specifier:** `highway=secondary` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #30

- -**Specifier:** `highway=secondary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #31

- -**Specifier:** `highway=primary` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #32

- -**Specifier:** `highway=primary_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #33

- -**Specifier:** `highway=trunk_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #34

- -**Specifier:** `highway=motorway_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #35

- -**Specifier:** `highway=trunk` -**Permission:** CAR -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #36

- -**Specifier:** `highway=motorway` -**Permission:** CAR -**Bike safety factor:** forward: 8.0, back: 8.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #37

- -**Specifier:** `present(highway); cycleway=lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #38

- -**Specifier:** `highway=service; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #39

- -**Specifier:** `highway=residential; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #40

- -**Specifier:** `highway=residential_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #41

- -**Specifier:** `highway=tertiary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #42

- -**Specifier:** `highway=tertiary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #43

- -**Specifier:** `highway=secondary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #44

- -**Specifier:** `highway=secondary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #45

- -**Specifier:** `highway=primary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #46

- -**Specifier:** `highway=primary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #47

- -**Specifier:** `highway=trunk; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #48

- -**Specifier:** `highway=trunk_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #49

- -**Specifier:** `highway=motorway; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #50

- -**Specifier:** `highway=motorway_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #51

- -**Specifier:** `present(highway); cycleway=share_busway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #52

- -**Specifier:** `highway=service; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #53

- -**Specifier:** `highway=residential; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #54

- -**Specifier:** `highway=residential_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #55

- -**Specifier:** `highway=tertiary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #56

- -**Specifier:** `highway=tertiary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #57

- -**Specifier:** `highway=secondary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #58

- -**Specifier:** `highway=secondary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #59

- -**Specifier:** `highway=primary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #60

- -**Specifier:** `highway=primary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #61

- -**Specifier:** `highway=trunk; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #62

- -**Specifier:** `highway=trunk_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #63

- -**Specifier:** `highway=motorway; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #64

- -**Specifier:** `highway=motorway_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #65

- -**Specifier:** `present(highway); cycleway=opposite_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #66

- -**Specifier:** `highway=service; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #67

- -**Specifier:** `highway=residential; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #68

- -**Specifier:** `highway=residential_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #69

- -**Specifier:** `highway=tertiary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #70

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #71

- -**Specifier:** `highway=secondary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #72

- -**Specifier:** `highway=secondary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #73

- -**Specifier:** `highway=primary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #74

- -**Specifier:** `highway=primary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #75

- -**Specifier:** `highway=trunk; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #76

- -**Specifier:** `highway=trunk_link; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #77

- -**Specifier:** `present(highway); cycleway=track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #78

- -**Specifier:** `highway=service; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #79

- -**Specifier:** `highway=residential; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #80

- -**Specifier:** `highway=residential_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #81

- -**Specifier:** `highway=tertiary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #82

- -**Specifier:** `highway=tertiary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #83

- -**Specifier:** `highway=secondary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #84

- -**Specifier:** `highway=secondary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #85

- -**Specifier:** `highway=primary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #86

- -**Specifier:** `highway=primary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #87

- -**Specifier:** `highway=trunk; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #88

- -**Specifier:** `highway=trunk_link; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #89

- -**Specifier:** `present(highway); cycleway=opposite_track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #90

- -**Specifier:** `highway=service; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #91

- -**Specifier:** `highway=residential; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #92

- -**Specifier:** `highway=residential_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #93

- -**Specifier:** `highway=tertiary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #94

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #95

- -**Specifier:** `highway=secondary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #96

- -**Specifier:** `highway=secondary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #97

- -**Specifier:** `highway=primary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #98

- -**Specifier:** `highway=primary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #99

- -**Specifier:** `highway=trunk; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #100

- -**Specifier:** `highway=trunk_link; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #101

- -**Specifier:** `present(highway); cycleway=shared_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #102

- -**Specifier:** `highway=service; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.73, back: 0.73 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #103

- -**Specifier:** `highway=residential; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #104

- -**Specifier:** `highway=residential_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #105

- -**Specifier:** `highway=tertiary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #106

- -**Specifier:** `highway=tertiary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #107

- -**Specifier:** `highway=secondary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #108

- -**Specifier:** `highway=secondary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #109

- -**Specifier:** `highway=primary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #110

- -**Specifier:** `highway=primary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #111

- -**Specifier:** `present(highway); cycleway=opposite` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.4 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #112

- -**Specifier:** `highway=service; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #113

- -**Specifier:** `highway=residential; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #114

- -**Specifier:** `highway=residential_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #115

- -**Specifier:** `highway=tertiary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #116

- -**Specifier:** `highway=tertiary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #117

- -**Specifier:** `highway=secondary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #118

- -**Specifier:** `highway=secondary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #119

- -**Specifier:** `highway=primary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #120

- -**Specifier:** `highway=primary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #121

- -**Specifier:** `highway=path; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #122

- -**Specifier:** `highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #123

- -**Specifier:** `highway=footway; bicycle=yes; area=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #124

- -**Specifier:** `highway=pedestrian; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #125

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #126

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #127

- -**Specifier:** `highway=footway; footway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #128

- -**Specifier:** `highway=footway; footway=crossing; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #129

- -**Specifier:** `highway=track; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #130

- -**Specifier:** `highway=track; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #131

- -**Specifier:** `highway=track; bicycle=yes; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #132

- -**Specifier:** `highway=track; bicycle=designated; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #133

- -**Specifier:** `highway=track; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #134

- -**Specifier:** `present(highway); bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #135

- -**Specifier:** `highway=service; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.84, back: 0.84 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #136

- -**Specifier:** `highway=residential; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #137

- -**Specifier:** `highway=unclassified; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #138

- -**Specifier:** `highway=residential_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #139

- -**Specifier:** `highway=tertiary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #140

- -**Specifier:** `highway=tertiary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #141

- -**Specifier:** `highway=secondary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #142

- -**Specifier:** `highway=secondary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #143

- -**Specifier:** `highway=primary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #144

- -**Specifier:** `highway=primary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #145

- -**Specifier:** `highway=trunk; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.25, back: 7.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #146

- -**Specifier:** `highway=trunk_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #147

- -**Specifier:** `highway=motorway; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.76, back: 7.76 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #148

- -**Specifier:** `highway=motorway_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - - - - -### Bicycle and walking safety mixins +### Safety mixins Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the -permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. +permission of an OSM way. Their safety values are multiplied with the base values from the selected +way properties. Multiple mixins can apply to the same way and their effects compound. diff --git a/docs/osm/Finland.md b/docs/osm/Finland.md index acb7bd5e302..33b1ee9ae2a 100644 --- a/docs/osm/Finland.md +++ b/docs/osm/Finland.md @@ -1,1572 +1,218 @@ -## OSM tag mapping +# OSM tag mapping ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. + These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. +Lower safety values make an OSM way more desirable and higher values less desirable. -| specifier | permission | safety | -|---------------------------------------------------------------------------------|------------------------|--------| -| `highway=living_street` | ALL | 🚴 | -| `highway=unclassified` | ALL | | -| `highway=road` | ALL | | -| `highway=byway` | ALL | 🚴 | -| `highway=track` | ALL | 🚴 | -| `highway=service` | ALL | 🚴 | -| `highway=residential` | ALL | 🚴 | -| `highway=residential_link` | ALL | 🚴 | -| `highway=tertiary` | ALL | | -| `highway=tertiary_link` | ALL | | -| `highway=secondary` | ALL | 🚴 | -| `highway=secondary_link` | ALL | 🚴 | -| `highway=primary` | ALL | 🚴 | -| `highway=primary_link` | ALL | 🚴 | -| `highway=trunk_link` | ALL | 🚴 | -| `highway=trunk` | ALL | 🚴 | -| `highway=trunk; tunnel=yes` | CAR | 🚴 | -| `motorroad=yes` | CAR | 🚴 | -| `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=cycleway; segregated=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=footway; bridge=yes` | PEDESTRIAN | | -| `highway=footway; tunnel=yes` | PEDESTRIAN | | -| `highway=cycleway; bridge=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=cycleway; tunnel=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing; crossing=traffic_signals` | PEDESTRIAN | 🚶 | -| `highway=footway; footway=crossing` | PEDESTRIAN | 🚶 | -| `highway=cycleway; cycleway=crossing; segregated=yes; crossing=traffic_signals` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=cycleway; footway=crossing; segregated=yes; crossing=traffic_signals` | PEDESTRIAN | 🚴 🚶 | -| `highway=cycleway; cycleway=crossing; segregated=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=cycleway; footway=crossing; segregated=yes` | PEDESTRIAN | 🚴 🚶 | -| `highway=cycleway; cycleway=crossing; crossing=traffic_signals` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=cycleway; footway=crossing; crossing=traffic_signals` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=cycleway; cycleway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=cycleway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=cycleway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; tunnel=yes; access=destination` | NONE | | -| `highway=service; access=destination` | ALL | 🚴 | -| `mtb:scale=3` | NONE | | -| `mtb:scale=4` | NONE | | -| `mtb:scale=5` | NONE | | -| `mtb:scale=6` | NONE | | -| `highway=corridor` | PEDESTRIAN | | -| `highway=steps` | PEDESTRIAN | | -| `highway=crossing` | PEDESTRIAN | | -| `highway=platform` | PEDESTRIAN | | -| `public_transport=platform` | PEDESTRIAN | | -| `railway=platform` | PEDESTRIAN | | -| `footway=sidewalk; highway=footway` | PEDESTRIAN | | -| `mtb:scale=1` | PEDESTRIAN | | -| `mtb:scale=2` | PEDESTRIAN | | -| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=living_street` | ALL | 🚴 | -| `highway=unclassified` | ALL | | -| `highway=road` | ALL | | -| `highway=byway` | ALL | 🚴 | -| `highway=track` | ALL | 🚴 | -| `highway=service` | ALL | 🚴 | -| `highway=residential` | ALL | 🚴 | -| `highway=residential_link` | ALL | 🚴 | -| `highway=tertiary` | ALL | | -| `highway=tertiary_link` | ALL | | -| `highway=secondary` | ALL | 🚴 | -| `highway=secondary_link` | ALL | 🚴 | -| `highway=primary` | ALL | 🚴 | -| `highway=primary_link` | ALL | 🚴 | -| `highway=trunk_link` | CAR | 🚴 | -| `highway=motorway_link` | CAR | 🚴 | -| `highway=trunk` | CAR | 🚴 | -| `highway=motorway` | CAR | 🚴 | -| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=lane` | ALL | 🚴 | -| `highway=residential; cycleway=lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | -| `highway=secondary; cycleway=lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | -| `highway=primary; cycleway=lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=lane` | ALL | 🚴 | -| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=track` | ALL | 🚴 | -| `highway=residential; cycleway=track` | ALL | 🚴 | -| `highway=residential_link; cycleway=track` | ALL | 🚴 | -| `highway=tertiary; cycleway=track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | -| `highway=secondary; cycleway=track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=track` | ALL | 🚴 | -| `highway=primary; cycleway=track` | ALL | 🚴 | -| `highway=primary_link; cycleway=track` | ALL | 🚴 | -| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | -| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite` | ALL | 🚴 | -| `highway=residential; cycleway=opposite` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite` | ALL | | -| `highway=tertiary_link; cycleway=opposite` | ALL | | -| `highway=secondary; cycleway=opposite` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=primary; cycleway=opposite` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `present(highway); bicycle=designated` | ALL | 🚴 | -| `highway=service; bicycle=designated` | ALL | 🚴 | -| `highway=residential; bicycle=designated` | ALL | 🚴 | -| `highway=unclassified; bicycle=designated` | ALL | 🚴 | -| `highway=residential_link; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | -| `highway=secondary; bicycle=designated` | ALL | 🚴 | -| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | -| `highway=primary; bicycle=designated` | ALL | 🚴 | -| `highway=primary_link; bicycle=designated` | ALL | 🚴 | -| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| 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 | | +| `motorroad=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=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=corridor` | `PEDESTRIAN` | | | +| `highway=steps` | `PEDESTRIAN` | | | +| `highway=crossing` | `PEDESTRIAN` | | | +| `highway=platform` | `PEDESTRIAN` | | | +| `public_transport=platform` | `PEDESTRIAN` | | | +| `railway=platform` | `PEDESTRIAN` | | | +| `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | +| `mtb:scale=1` | `PEDESTRIAN` | | | +| `mtb:scale=2` | `PEDESTRIAN` | | | +| `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=cycleway` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | +| `highway=path` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `highway=pedestrian` | `PEDESTRIAN_AND_BICYCLE` | 0.9 | | +| `highway=footway` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | +| `highway=bridleway` | `PEDESTRIAN_AND_BICYCLE` | 1.3 | | +| `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` | `CAR` | 2.06 | | +| `highway=motorway_link` | `CAR` | 2.06 | | +| `highway=trunk` | `CAR` | 7.47 | | +| `highway=motorway` | `CAR` | 8.0 | | +| `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` | `BICYCLE_AND_CAR` | 1.5 | | +| `highway=trunk_link; cycleway=lane` | `BICYCLE_AND_CAR` | 1.15 | | +| `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` | `BICYCLE_AND_CAR` | 1.75 | | +| `highway=trunk_link; cycleway=share_busway` | `BICYCLE_AND_CAR` | 1.25 | | +| `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` | forward: 1.0
back: 0.87 | | +| `highway=service; cycleway=opposite_lane` | `ALL` | forward: 1.1
back: 0.77 | | +| `highway=residential; cycleway=opposite_lane` | `ALL` | forward: 0.98
back: 0.77 | | +| `highway=residential_link; cycleway=opposite_lane` | `ALL` | forward: 0.98
back: 0.77 | | +| `highway=tertiary; cycleway=opposite_lane` | `ALL` | forward: 1.0
back: 0.87 | | +| `highway=tertiary_link; cycleway=opposite_lane` | `ALL` | forward: 1.0
back: 0.87 | | +| `highway=secondary; cycleway=opposite_lane` | `ALL` | forward: 1.5
back: 0.96 | | +| `highway=secondary_link; cycleway=opposite_lane` | `ALL` | forward: 1.5
back: 0.96 | | +| `highway=primary; cycleway=opposite_lane` | `ALL` | forward: 2.06
back: 1.15 | | +| `highway=primary_link; cycleway=opposite_lane` | `ALL` | forward: 2.06
back: 1.15 | | +| `highway=trunk; cycleway=opposite_lane` | `BICYCLE_AND_CAR` | forward: 7.47
back: 1.5 | | +| `highway=trunk_link; cycleway=opposite_lane` | `BICYCLE_AND_CAR` | forward: 2.06
back: 1.15 | | +| `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` | `BICYCLE_AND_CAR` | 0.95 | | +| `highway=trunk_link; cycleway=track` | `BICYCLE_AND_CAR` | 0.85 | | +| `present(highway); cycleway=opposite_track` | `PEDESTRIAN_AND_BICYCLE` | forward: 1.0
back: 0.75 | | +| `highway=service; cycleway=opposite_track` | `ALL` | forward: 1.1
back: 0.65 | | +| `highway=residential; cycleway=opposite_track` | `ALL` | forward: 0.98
back: 0.65 | | +| `highway=residential_link; cycleway=opposite_track` | `ALL` | forward: 0.98
back: 0.65 | | +| `highway=tertiary; cycleway=opposite_track` | `ALL` | forward: 1.0
back: 0.75 | | +| `highway=tertiary_link; cycleway=opposite_track` | `ALL` | forward: 1.0
back: 0.75 | | +| `highway=secondary; cycleway=opposite_track` | `ALL` | forward: 1.5
back: 0.8 | | +| `highway=secondary_link; cycleway=opposite_track` | `ALL` | forward: 1.5
back: 0.8 | | +| `highway=primary; cycleway=opposite_track` | `ALL` | forward: 2.06
back: 0.85 | | +| `highway=primary_link; cycleway=opposite_track` | `ALL` | forward: 2.06
back: 0.85 | | +| `highway=trunk; cycleway=opposite_track` | `BICYCLE_AND_CAR` | forward: 7.47
back: 0.95 | | +| `highway=trunk_link; cycleway=opposite_track` | `BICYCLE_AND_CAR` | forward: 2.06
back: 0.85 | | +| `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` | 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` | forward: 1.5
back: 1.71 | | +| `highway=secondary_link; cycleway=opposite` | `ALL` | forward: 1.5
back: 1.71 | | +| `highway=primary; cycleway=opposite` | `ALL` | forward: 2.06
back: 2.99 | | +| `highway=primary_link; cycleway=opposite` | `ALL` | 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_AND_BICYCLE` | 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` | `ALL` | 0.97 | | +| `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` | `BICYCLE_AND_CAR` | 7.25 | | +| `highway=trunk_link; bicycle=designated` | `BICYCLE_AND_CAR` | 2.0 | | +| `highway=motorway; bicycle=designated` | `BICYCLE_AND_CAR` | 7.76 | | +| `highway=motorway_link; bicycle=designated` | `BICYCLE_AND_CAR` | 2.0 | | - - - -

Rule #0

- -**Specifier:** `highway=living_street` -**Permission:** ALL -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #1

- -**Specifier:** `highway=unclassified` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #2

- -**Specifier:** `highway=road` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #3

- -**Specifier:** `highway=byway` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #4

- -**Specifier:** `highway=track` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #5

- -**Specifier:** `highway=service` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #6

- -**Specifier:** `highway=residential` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #7

- -**Specifier:** `highway=residential_link` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #8

- -**Specifier:** `highway=tertiary` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #9

- -**Specifier:** `highway=tertiary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #10

- -**Specifier:** `highway=secondary` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #11

- -**Specifier:** `highway=secondary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #12

- -**Specifier:** `highway=primary` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #13

- -**Specifier:** `highway=primary_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #14

- -**Specifier:** `highway=trunk_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #15

- -**Specifier:** `highway=trunk` -**Permission:** ALL -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #16

- -**Specifier:** `highway=trunk; tunnel=yes` -**Permission:** CAR -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #17

- -**Specifier:** `motorroad=yes` -**Permission:** CAR -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #18

- -**Specifier:** `present(highway); informal=yes` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #19

- -**Specifier:** `highway=service; access=private` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #20

- -**Specifier:** `highway=trail` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #21

- -**Specifier:** `present(highway); seasonal=winter` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #22

- -**Specifier:** `present(highway); ice_road=yes` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #23

- -**Specifier:** `present(highway); winter_road=yes` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #24

- -**Specifier:** `highway=footway` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #25

- -**Specifier:** `footway=sidewalk; highway=footway` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #26

- -**Specifier:** `highway=cycleway; segregated=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.1, back: 1.1 - -

Rule #27

- -**Specifier:** `highway=footway; bridge=yes` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #28

- -**Specifier:** `highway=footway; tunnel=yes` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #29

- -**Specifier:** `highway=cycleway; bridge=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #30

- -**Specifier:** `highway=cycleway; tunnel=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #31

- -**Specifier:** `highway=footway; footway=crossing; crossing=traffic_signals` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.1, back: 1.1 - -

Rule #32

- -**Specifier:** `highway=footway; footway=crossing` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.2, back: 1.2 - -

Rule #33

- -**Specifier:** `highway=cycleway; cycleway=crossing; segregated=yes; crossing=traffic_signals` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.1, back: 1.1 - -

Rule #34

- -**Specifier:** `highway=cycleway; footway=crossing; segregated=yes; crossing=traffic_signals` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.1, back: 1.1 - -

Rule #35

- -**Specifier:** `highway=cycleway; cycleway=crossing; segregated=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.2, back: 1.2 -**Walk safety factor:** forward: 1.2, back: 1.2 - -

Rule #36

- -**Specifier:** `highway=cycleway; footway=crossing; segregated=yes` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.2, back: 1.2 -**Walk safety factor:** forward: 1.2, back: 1.2 - -

Rule #37

- -**Specifier:** `highway=cycleway; cycleway=crossing; crossing=traffic_signals` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.15, back: 1.15 - -

Rule #38

- -**Specifier:** `highway=cycleway; footway=crossing; crossing=traffic_signals` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.15, back: 1.15 - -

Rule #39

- -**Specifier:** `highway=cycleway; cycleway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.2, back: 1.2 -**Walk safety factor:** forward: 1.25, back: 1.25 - -

Rule #40

- -**Specifier:** `highway=cycleway; footway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.2, back: 1.2 -**Walk safety factor:** forward: 1.25, back: 1.25 - -

Rule #41

- -**Specifier:** `highway=cycleway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #42

- -**Specifier:** `highway=service; tunnel=yes; access=destination` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #43

- -**Specifier:** `highway=service; access=destination` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #44

- -**Specifier:** `mtb:scale=3` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #45

- -**Specifier:** `mtb:scale=4` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #46

- -**Specifier:** `mtb:scale=5` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #47

- -**Specifier:** `mtb:scale=6` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #48

- -**Specifier:** `highway=corridor` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #49

- -**Specifier:** `highway=steps` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #50

- -**Specifier:** `highway=crossing` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #51

- -**Specifier:** `highway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #52

- -**Specifier:** `public_transport=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #53

- -**Specifier:** `railway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #54

- -**Specifier:** `footway=sidewalk; highway=footway` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #55

- -**Specifier:** `mtb:scale=1` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #56

- -**Specifier:** `mtb:scale=2` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #57

- -**Specifier:** `mtb:scale=0` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #58

- -**Specifier:** `highway=cycleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #59

- -**Specifier:** `highway=path` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #60

- -**Specifier:** `highway=pedestrian` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #61

- -**Specifier:** `highway=footway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #62

- -**Specifier:** `highway=bridleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #63

- -**Specifier:** `highway=living_street` -**Permission:** ALL -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #64

- -**Specifier:** `highway=unclassified` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #65

- -**Specifier:** `highway=road` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #66

- -**Specifier:** `highway=byway` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #67

- -**Specifier:** `highway=track` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #68

- -**Specifier:** `highway=service` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #69

- -**Specifier:** `highway=residential` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #70

- -**Specifier:** `highway=residential_link` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #71

- -**Specifier:** `highway=tertiary` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #72

- -**Specifier:** `highway=tertiary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #73

- -**Specifier:** `highway=secondary` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #74

- -**Specifier:** `highway=secondary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #75

- -**Specifier:** `highway=primary` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #76

- -**Specifier:** `highway=primary_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #77

- -**Specifier:** `highway=trunk_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #78

- -**Specifier:** `highway=motorway_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #79

- -**Specifier:** `highway=trunk` -**Permission:** CAR -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #80

- -**Specifier:** `highway=motorway` -**Permission:** CAR -**Bike safety factor:** forward: 8.0, back: 8.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #81

- -**Specifier:** `present(highway); cycleway=lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #82

- -**Specifier:** `highway=service; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #83

- -**Specifier:** `highway=residential; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #84

- -**Specifier:** `highway=residential_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #85

- -**Specifier:** `highway=tertiary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #86

- -**Specifier:** `highway=tertiary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #87

- -**Specifier:** `highway=secondary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #88

- -**Specifier:** `highway=secondary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #89

- -**Specifier:** `highway=primary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #90

- -**Specifier:** `highway=primary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #91

- -**Specifier:** `highway=trunk; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #92

- -**Specifier:** `highway=trunk_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #93

- -**Specifier:** `highway=motorway; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #94

- -**Specifier:** `highway=motorway_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #95

- -**Specifier:** `present(highway); cycleway=share_busway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #96

- -**Specifier:** `highway=service; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #97

- -**Specifier:** `highway=residential; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #98

- -**Specifier:** `highway=residential_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #99

- -**Specifier:** `highway=tertiary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #100

- -**Specifier:** `highway=tertiary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #101

- -**Specifier:** `highway=secondary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #102

- -**Specifier:** `highway=secondary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #103

- -**Specifier:** `highway=primary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #104

- -**Specifier:** `highway=primary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #105

- -**Specifier:** `highway=trunk; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #106

- -**Specifier:** `highway=trunk_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #107

- -**Specifier:** `highway=motorway; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #108

- -**Specifier:** `highway=motorway_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #109

- -**Specifier:** `present(highway); cycleway=opposite_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #110

- -**Specifier:** `highway=service; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #111

- -**Specifier:** `highway=residential; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #112

- -**Specifier:** `highway=residential_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #113

- -**Specifier:** `highway=tertiary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #114

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #115

- -**Specifier:** `highway=secondary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #116

- -**Specifier:** `highway=secondary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #117

- -**Specifier:** `highway=primary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #118

- -**Specifier:** `highway=primary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #119

- -**Specifier:** `highway=trunk; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #120

- -**Specifier:** `highway=trunk_link; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #121

- -**Specifier:** `present(highway); cycleway=track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #122

- -**Specifier:** `highway=service; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #123

- -**Specifier:** `highway=residential; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #124

- -**Specifier:** `highway=residential_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #125

- -**Specifier:** `highway=tertiary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #126

- -**Specifier:** `highway=tertiary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #127

- -**Specifier:** `highway=secondary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #128

- -**Specifier:** `highway=secondary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #129

- -**Specifier:** `highway=primary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #130

- -**Specifier:** `highway=primary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #131

- -**Specifier:** `highway=trunk; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #132

- -**Specifier:** `highway=trunk_link; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #133

- -**Specifier:** `present(highway); cycleway=opposite_track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #134

- -**Specifier:** `highway=service; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #135

- -**Specifier:** `highway=residential; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #136

- -**Specifier:** `highway=residential_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #137

- -**Specifier:** `highway=tertiary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #138

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #139

- -**Specifier:** `highway=secondary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #140

- -**Specifier:** `highway=secondary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #141

- -**Specifier:** `highway=primary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #142

- -**Specifier:** `highway=primary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #143

- -**Specifier:** `highway=trunk; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #144

- -**Specifier:** `highway=trunk_link; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #145

- -**Specifier:** `present(highway); cycleway=shared_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #146

- -**Specifier:** `highway=service; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.73, back: 0.73 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #147

- -**Specifier:** `highway=residential; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #148

- -**Specifier:** `highway=residential_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #149

- -**Specifier:** `highway=tertiary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #150

- -**Specifier:** `highway=tertiary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #151

- -**Specifier:** `highway=secondary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #152

- -**Specifier:** `highway=secondary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #153

- -**Specifier:** `highway=primary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #154

- -**Specifier:** `highway=primary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #155

- -**Specifier:** `present(highway); cycleway=opposite` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.4 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #156

- -**Specifier:** `highway=service; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #157

- -**Specifier:** `highway=residential; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #158

- -**Specifier:** `highway=residential_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #159

- -**Specifier:** `highway=tertiary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #160

- -**Specifier:** `highway=tertiary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #161

- -**Specifier:** `highway=secondary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #162

- -**Specifier:** `highway=secondary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #163

- -**Specifier:** `highway=primary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #164

- -**Specifier:** `highway=primary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #165

- -**Specifier:** `highway=path; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #166

- -**Specifier:** `highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #167

- -**Specifier:** `highway=footway; bicycle=yes; area=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #168

- -**Specifier:** `highway=pedestrian; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #169

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #170

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #171

- -**Specifier:** `highway=footway; footway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #172

- -**Specifier:** `highway=footway; footway=crossing; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #173

- -**Specifier:** `highway=track; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #174

- -**Specifier:** `highway=track; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #175

- -**Specifier:** `highway=track; bicycle=yes; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #176

- -**Specifier:** `highway=track; bicycle=designated; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #177

- -**Specifier:** `highway=track; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #178

- -**Specifier:** `present(highway); bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #179

- -**Specifier:** `highway=service; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.84, back: 0.84 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #180

- -**Specifier:** `highway=residential; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #181

- -**Specifier:** `highway=unclassified; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #182

- -**Specifier:** `highway=residential_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #183

- -**Specifier:** `highway=tertiary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #184

- -**Specifier:** `highway=tertiary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #185

- -**Specifier:** `highway=secondary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #186

- -**Specifier:** `highway=secondary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #187

- -**Specifier:** `highway=primary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #188

- -**Specifier:** `highway=primary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #189

- -**Specifier:** `highway=trunk; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.25, back: 7.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #190

- -**Specifier:** `highway=trunk_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #191

- -**Specifier:** `highway=motorway; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.76, back: 7.76 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #192

- -**Specifier:** `highway=motorway_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - - - - -### Bicycle and walking safety mixins +### Safety mixins Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the -permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. +permission of an OSM way. Their safety values are multiplied with the base values from the selected +way properties. Multiple mixins can apply to the same way and their effects compound. diff --git a/docs/osm/Germany.md b/docs/osm/Germany.md index 7cd6cbf91cf..9420e22025e 100644 --- a/docs/osm/Germany.md +++ b/docs/osm/Germany.md @@ -1,1292 +1,183 @@ -## OSM tag mapping +# OSM tag mapping ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. + These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. +Lower safety values make an OSM way more desirable and higher values less desirable. -| specifier | permission | safety | -|---------------------------------------------------------|------------------------|--------| -| `highway=track` | PEDESTRIAN_AND_BICYCLE | | -| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | | -| `highway=residential; junction=roundabout` | ALL | 🚴 | -| `present(highway); junction=roundabout` | BICYCLE_AND_CAR | | -| `highway=pedestrian` | PEDESTRIAN | | -| `highway=residential; maxspeed=30` | ALL | 🚴 | -| `highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=unclassified; cycleway=lane` | ALL | 🚴 | -| `mtb:scale=3` | NONE | | -| `mtb:scale=4` | NONE | | -| `mtb:scale=5` | NONE | | -| `mtb:scale=6` | NONE | | -| `highway=corridor` | PEDESTRIAN | | -| `highway=steps` | PEDESTRIAN | | -| `highway=crossing` | PEDESTRIAN | | -| `highway=platform` | PEDESTRIAN | | -| `public_transport=platform` | PEDESTRIAN | | -| `railway=platform` | PEDESTRIAN | | -| `footway=sidewalk; highway=footway` | PEDESTRIAN | | -| `mtb:scale=1` | PEDESTRIAN | | -| `mtb:scale=2` | PEDESTRIAN | | -| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=living_street` | ALL | 🚴 | -| `highway=unclassified` | ALL | | -| `highway=road` | ALL | | -| `highway=byway` | ALL | 🚴 | -| `highway=track` | ALL | 🚴 | -| `highway=service` | ALL | 🚴 | -| `highway=residential` | ALL | 🚴 | -| `highway=residential_link` | ALL | 🚴 | -| `highway=tertiary` | ALL | | -| `highway=tertiary_link` | ALL | | -| `highway=secondary` | ALL | 🚴 | -| `highway=secondary_link` | ALL | 🚴 | -| `highway=primary` | ALL | 🚴 | -| `highway=primary_link` | ALL | 🚴 | -| `highway=trunk_link` | CAR | 🚴 | -| `highway=motorway_link` | CAR | 🚴 | -| `highway=trunk` | CAR | 🚴 | -| `highway=motorway` | CAR | 🚴 | -| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=lane` | ALL | 🚴 | -| `highway=residential; cycleway=lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | -| `highway=secondary; cycleway=lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | -| `highway=primary; cycleway=lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=lane` | ALL | 🚴 | -| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=track` | ALL | 🚴 | -| `highway=residential; cycleway=track` | ALL | 🚴 | -| `highway=residential_link; cycleway=track` | ALL | 🚴 | -| `highway=tertiary; cycleway=track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | -| `highway=secondary; cycleway=track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=track` | ALL | 🚴 | -| `highway=primary; cycleway=track` | ALL | 🚴 | -| `highway=primary_link; cycleway=track` | ALL | 🚴 | -| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | -| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite` | ALL | 🚴 | -| `highway=residential; cycleway=opposite` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite` | ALL | | -| `highway=tertiary_link; cycleway=opposite` | ALL | | -| `highway=secondary; cycleway=opposite` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=primary; cycleway=opposite` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `present(highway); bicycle=designated` | ALL | 🚴 | -| `highway=service; bicycle=designated` | ALL | 🚴 | -| `highway=residential; bicycle=designated` | ALL | 🚴 | -| `highway=unclassified; bicycle=designated` | ALL | 🚴 | -| `highway=residential_link; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | -| `highway=secondary; bicycle=designated` | ALL | 🚴 | -| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | -| `highway=primary; bicycle=designated` | ALL | 🚴 | -| `highway=primary_link; bicycle=designated` | ALL | 🚴 | -| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| 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=corridor` | `PEDESTRIAN` | | | +| `highway=steps` | `PEDESTRIAN` | | | +| `highway=crossing` | `PEDESTRIAN` | | | +| `highway=platform` | `PEDESTRIAN` | | | +| `public_transport=platform` | `PEDESTRIAN` | | | +| `railway=platform` | `PEDESTRIAN` | | | +| `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | +| `mtb:scale=1` | `PEDESTRIAN` | | | +| `mtb:scale=2` | `PEDESTRIAN` | | | +| `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=cycleway` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | +| `highway=path` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `highway=pedestrian` | `PEDESTRIAN_AND_BICYCLE` | 0.9 | | +| `highway=footway` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | +| `highway=bridleway` | `PEDESTRIAN_AND_BICYCLE` | 1.3 | | +| `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` | `CAR` | 2.06 | | +| `highway=motorway_link` | `CAR` | 2.06 | | +| `highway=trunk` | `CAR` | 7.47 | | +| `highway=motorway` | `CAR` | 8.0 | | +| `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` | `BICYCLE_AND_CAR` | 1.5 | | +| `highway=trunk_link; cycleway=lane` | `BICYCLE_AND_CAR` | 1.15 | | +| `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` | `BICYCLE_AND_CAR` | 1.75 | | +| `highway=trunk_link; cycleway=share_busway` | `BICYCLE_AND_CAR` | 1.25 | | +| `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` | forward: 1.0
back: 0.87 | | +| `highway=service; cycleway=opposite_lane` | `ALL` | forward: 1.1
back: 0.77 | | +| `highway=residential; cycleway=opposite_lane` | `ALL` | forward: 0.98
back: 0.77 | | +| `highway=residential_link; cycleway=opposite_lane` | `ALL` | forward: 0.98
back: 0.77 | | +| `highway=tertiary; cycleway=opposite_lane` | `ALL` | forward: 1.0
back: 0.87 | | +| `highway=tertiary_link; cycleway=opposite_lane` | `ALL` | forward: 1.0
back: 0.87 | | +| `highway=secondary; cycleway=opposite_lane` | `ALL` | forward: 1.5
back: 0.96 | | +| `highway=secondary_link; cycleway=opposite_lane` | `ALL` | forward: 1.5
back: 0.96 | | +| `highway=primary; cycleway=opposite_lane` | `ALL` | forward: 2.06
back: 1.15 | | +| `highway=primary_link; cycleway=opposite_lane` | `ALL` | forward: 2.06
back: 1.15 | | +| `highway=trunk; cycleway=opposite_lane` | `BICYCLE_AND_CAR` | forward: 7.47
back: 1.5 | | +| `highway=trunk_link; cycleway=opposite_lane` | `BICYCLE_AND_CAR` | forward: 2.06
back: 1.15 | | +| `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` | `BICYCLE_AND_CAR` | 0.95 | | +| `highway=trunk_link; cycleway=track` | `BICYCLE_AND_CAR` | 0.85 | | +| `present(highway); cycleway=opposite_track` | `PEDESTRIAN_AND_BICYCLE` | forward: 1.0
back: 0.75 | | +| `highway=service; cycleway=opposite_track` | `ALL` | forward: 1.1
back: 0.65 | | +| `highway=residential; cycleway=opposite_track` | `ALL` | forward: 0.98
back: 0.65 | | +| `highway=residential_link; cycleway=opposite_track` | `ALL` | forward: 0.98
back: 0.65 | | +| `highway=tertiary; cycleway=opposite_track` | `ALL` | forward: 1.0
back: 0.75 | | +| `highway=tertiary_link; cycleway=opposite_track` | `ALL` | forward: 1.0
back: 0.75 | | +| `highway=secondary; cycleway=opposite_track` | `ALL` | forward: 1.5
back: 0.8 | | +| `highway=secondary_link; cycleway=opposite_track` | `ALL` | forward: 1.5
back: 0.8 | | +| `highway=primary; cycleway=opposite_track` | `ALL` | forward: 2.06
back: 0.85 | | +| `highway=primary_link; cycleway=opposite_track` | `ALL` | forward: 2.06
back: 0.85 | | +| `highway=trunk; cycleway=opposite_track` | `BICYCLE_AND_CAR` | forward: 7.47
back: 0.95 | | +| `highway=trunk_link; cycleway=opposite_track` | `BICYCLE_AND_CAR` | forward: 2.06
back: 0.85 | | +| `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` | 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` | forward: 1.5
back: 1.71 | | +| `highway=secondary_link; cycleway=opposite` | `ALL` | forward: 1.5
back: 1.71 | | +| `highway=primary; cycleway=opposite` | `ALL` | forward: 2.06
back: 2.99 | | +| `highway=primary_link; cycleway=opposite` | `ALL` | 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_AND_BICYCLE` | 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` | `ALL` | 0.97 | | +| `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` | `BICYCLE_AND_CAR` | 7.25 | | +| `highway=trunk_link; bicycle=designated` | `BICYCLE_AND_CAR` | 2.0 | | +| `highway=motorway; bicycle=designated` | `BICYCLE_AND_CAR` | 7.76 | | +| `highway=motorway_link; bicycle=designated` | `BICYCLE_AND_CAR` | 2.0 | | - - - -

Rule #0

- -**Specifier:** `highway=track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #1

- -**Specifier:** `highway=track; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #2

- -**Specifier:** `highway=residential; junction=roundabout` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #3

- -**Specifier:** `present(highway); junction=roundabout` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #4

- -**Specifier:** `highway=pedestrian` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #5

- -**Specifier:** `highway=residential; maxspeed=30` -**Permission:** ALL -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #6

- -**Specifier:** `highway=footway; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #7

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.2, back: 1.2 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #8

- -**Specifier:** `highway=unclassified; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #9

- -**Specifier:** `mtb:scale=3` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #10

- -**Specifier:** `mtb:scale=4` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #11

- -**Specifier:** `mtb:scale=5` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #12

- -**Specifier:** `mtb:scale=6` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #13

- -**Specifier:** `highway=corridor` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #14

- -**Specifier:** `highway=steps` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #15

- -**Specifier:** `highway=crossing` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #16

- -**Specifier:** `highway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #17

- -**Specifier:** `public_transport=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #18

- -**Specifier:** `railway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #19

- -**Specifier:** `footway=sidewalk; highway=footway` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #20

- -**Specifier:** `mtb:scale=1` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #21

- -**Specifier:** `mtb:scale=2` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #22

- -**Specifier:** `mtb:scale=0` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #23

- -**Specifier:** `highway=cycleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #24

- -**Specifier:** `highway=path` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #25

- -**Specifier:** `highway=pedestrian` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #26

- -**Specifier:** `highway=footway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #27

- -**Specifier:** `highway=bridleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #28

- -**Specifier:** `highway=living_street` -**Permission:** ALL -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #29

- -**Specifier:** `highway=unclassified` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #30

- -**Specifier:** `highway=road` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #31

- -**Specifier:** `highway=byway` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #32

- -**Specifier:** `highway=track` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #33

- -**Specifier:** `highway=service` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #34

- -**Specifier:** `highway=residential` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #35

- -**Specifier:** `highway=residential_link` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #36

- -**Specifier:** `highway=tertiary` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #37

- -**Specifier:** `highway=tertiary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #38

- -**Specifier:** `highway=secondary` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #39

- -**Specifier:** `highway=secondary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #40

- -**Specifier:** `highway=primary` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #41

- -**Specifier:** `highway=primary_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #42

- -**Specifier:** `highway=trunk_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #43

- -**Specifier:** `highway=motorway_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #44

- -**Specifier:** `highway=trunk` -**Permission:** CAR -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #45

- -**Specifier:** `highway=motorway` -**Permission:** CAR -**Bike safety factor:** forward: 8.0, back: 8.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #46

- -**Specifier:** `present(highway); cycleway=lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #47

- -**Specifier:** `highway=service; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #48

- -**Specifier:** `highway=residential; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #49

- -**Specifier:** `highway=residential_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #50

- -**Specifier:** `highway=tertiary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #51

- -**Specifier:** `highway=tertiary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #52

- -**Specifier:** `highway=secondary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #53

- -**Specifier:** `highway=secondary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #54

- -**Specifier:** `highway=primary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #55

- -**Specifier:** `highway=primary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #56

- -**Specifier:** `highway=trunk; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #57

- -**Specifier:** `highway=trunk_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #58

- -**Specifier:** `highway=motorway; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #59

- -**Specifier:** `highway=motorway_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #60

- -**Specifier:** `present(highway); cycleway=share_busway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #61

- -**Specifier:** `highway=service; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #62

- -**Specifier:** `highway=residential; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #63

- -**Specifier:** `highway=residential_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #64

- -**Specifier:** `highway=tertiary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #65

- -**Specifier:** `highway=tertiary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #66

- -**Specifier:** `highway=secondary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #67

- -**Specifier:** `highway=secondary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #68

- -**Specifier:** `highway=primary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #69

- -**Specifier:** `highway=primary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #70

- -**Specifier:** `highway=trunk; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #71

- -**Specifier:** `highway=trunk_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #72

- -**Specifier:** `highway=motorway; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #73

- -**Specifier:** `highway=motorway_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #74

- -**Specifier:** `present(highway); cycleway=opposite_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #75

- -**Specifier:** `highway=service; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #76

- -**Specifier:** `highway=residential; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #77

- -**Specifier:** `highway=residential_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #78

- -**Specifier:** `highway=tertiary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #79

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #80

- -**Specifier:** `highway=secondary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #81

- -**Specifier:** `highway=secondary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #82

- -**Specifier:** `highway=primary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #83

- -**Specifier:** `highway=primary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #84

- -**Specifier:** `highway=trunk; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #85

- -**Specifier:** `highway=trunk_link; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #86

- -**Specifier:** `present(highway); cycleway=track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #87

- -**Specifier:** `highway=service; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #88

- -**Specifier:** `highway=residential; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #89

- -**Specifier:** `highway=residential_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #90

- -**Specifier:** `highway=tertiary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #91

- -**Specifier:** `highway=tertiary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #92

- -**Specifier:** `highway=secondary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #93

- -**Specifier:** `highway=secondary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #94

- -**Specifier:** `highway=primary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #95

- -**Specifier:** `highway=primary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #96

- -**Specifier:** `highway=trunk; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #97

- -**Specifier:** `highway=trunk_link; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #98

- -**Specifier:** `present(highway); cycleway=opposite_track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #99

- -**Specifier:** `highway=service; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #100

- -**Specifier:** `highway=residential; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #101

- -**Specifier:** `highway=residential_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #102

- -**Specifier:** `highway=tertiary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #103

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #104

- -**Specifier:** `highway=secondary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #105

- -**Specifier:** `highway=secondary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #106

- -**Specifier:** `highway=primary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #107

- -**Specifier:** `highway=primary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #108

- -**Specifier:** `highway=trunk; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #109

- -**Specifier:** `highway=trunk_link; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #110

- -**Specifier:** `present(highway); cycleway=shared_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #111

- -**Specifier:** `highway=service; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.73, back: 0.73 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #112

- -**Specifier:** `highway=residential; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #113

- -**Specifier:** `highway=residential_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #114

- -**Specifier:** `highway=tertiary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #115

- -**Specifier:** `highway=tertiary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #116

- -**Specifier:** `highway=secondary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #117

- -**Specifier:** `highway=secondary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #118

- -**Specifier:** `highway=primary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #119

- -**Specifier:** `highway=primary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #120

- -**Specifier:** `present(highway); cycleway=opposite` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.4 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #121

- -**Specifier:** `highway=service; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #122

- -**Specifier:** `highway=residential; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #123

- -**Specifier:** `highway=residential_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #124

- -**Specifier:** `highway=tertiary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #125

- -**Specifier:** `highway=tertiary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #126

- -**Specifier:** `highway=secondary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #127

- -**Specifier:** `highway=secondary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #128

- -**Specifier:** `highway=primary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #129

- -**Specifier:** `highway=primary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #130

- -**Specifier:** `highway=path; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #131

- -**Specifier:** `highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #132

- -**Specifier:** `highway=footway; bicycle=yes; area=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #133

- -**Specifier:** `highway=pedestrian; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #134

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #135

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #136

- -**Specifier:** `highway=footway; footway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #137

- -**Specifier:** `highway=footway; footway=crossing; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #138

- -**Specifier:** `highway=track; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #139

- -**Specifier:** `highway=track; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #140

- -**Specifier:** `highway=track; bicycle=yes; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #141

- -**Specifier:** `highway=track; bicycle=designated; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #142

- -**Specifier:** `highway=track; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #143

- -**Specifier:** `present(highway); bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #144

- -**Specifier:** `highway=service; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.84, back: 0.84 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #145

- -**Specifier:** `highway=residential; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #146

- -**Specifier:** `highway=unclassified; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #147

- -**Specifier:** `highway=residential_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #148

- -**Specifier:** `highway=tertiary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #149

- -**Specifier:** `highway=tertiary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #150

- -**Specifier:** `highway=secondary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #151

- -**Specifier:** `highway=secondary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #152

- -**Specifier:** `highway=primary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #153

- -**Specifier:** `highway=primary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #154

- -**Specifier:** `highway=trunk; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.25, back: 7.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #155

- -**Specifier:** `highway=trunk_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #156

- -**Specifier:** `highway=motorway; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.76, back: 7.76 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #157

- -**Specifier:** `highway=motorway_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - - - - -### Bicycle and walking safety mixins +### Safety mixins Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the -permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. +permission of an OSM way. Their safety values are multiplied with the base values from the selected +way properties. Multiple mixins can apply to the same way and their effects compound. diff --git a/docs/osm/Norway.md b/docs/osm/Norway.md index 7237319d738..f0c17c24a6c 100644 --- a/docs/osm/Norway.md +++ b/docs/osm/Norway.md @@ -1,388 +1,70 @@ -## OSM tag mapping +# OSM tag mapping ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. + These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. +Lower safety values make an OSM way more desirable and higher values less desirable. -| specifier | permission | safety | -|------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------|--------| -| `highway one of [motorway, motorway_link]` | CAR | | -| `highway one of [trunk, trunk_link, primary, primary_link]; motorroad=yes` | CAR | | -| `highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | ALL | | -| `cycleway=track; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | ALL | | -| `cycleway=lane; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link]` | ALL | 🚴 | -| `cycleway=lane; maxspeed < 50; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link]` | ALL | 🚴 | -| `cycleway=lane; highway one of [unclassified, residential]` | ALL | 🚴 | -| `highway=service` | ALL | | -| `highway=service; service=parking_aisle` | ALL | 🚴 | -| `highway=service; service=drive-through` | ALL | 🚴 | -| `highway=living_street` | ALL | 🚴 | -| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=busway` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=service; bus one of [yes, designated]` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=cycleway; lanes > 1` | PEDESTRIAN_AND_BICYCLE | 🚶 | -| `highway=cycleway; oneway=yes` | PEDESTRIAN_AND_BICYCLE | 🚶 | -| `highway=cycleway; sidewalk one of [yes, left, right, both]` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=cycleway; lanes > 1; sidewalk one of [yes, left, right, both]` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway; oneway=yes; sidewalk one of [yes, left, right, both]` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway; foot=designated; segregated=no` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=path; foot=designated; bicycle=designated; segregated=no` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=cycleway; foot=designated; segregated=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=path; foot=designated; bicycle=designated; segregated=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=cycleway; foot=designated; segregated=yes; lanes > 1` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway; foot=designated; present(segregated); motor_vehicle=destination` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=path; foot=designated; bicycle=designated; present(segregated); motor_vehicle=destination` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=sidewalk` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=cycleway; cycleway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=track` | PEDESTRIAN_AND_BICYCLE | | -| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | | -| `highway=path` | PEDESTRIAN_AND_BICYCLE | | -| `highway=steps` | PEDESTRIAN | | -| `highway=corridor` | PEDESTRIAN | | -| `highway=footway; indoor=yes` | PEDESTRIAN | | -| `highway=platform` | PEDESTRIAN | | -| `public_transport=platform` | PEDESTRIAN | | -| `trail_visibility one of [bad, low, poor, horrible, no]; highway=path` | NONE | | -| `sac_scale one of [demanding_mountain_hiking, alpine_hiking, demanding_alpine_hiking, difficult_alpine_hiking]; highway one of [path, steps]` | NONE | | -| `smoothness one of [horrible, very_horrible]; highway one of [path, bridleway, track]` | PEDESTRIAN | 🚶 | -| `smoothness=impassable; highway one of [path, bridleway, track]` | NONE | | -| `1 > mtb:scale < 2; highway one of [path, bridleway, track]` | PEDESTRIAN | 🚶 | -| `mtb:scale > 2; highway one of [path, bridleway, track]` | NONE | | +| specifier | permission | bike safety | walk safety | +|------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------|-------------|-------------| +| `highway one of [motorway, motorway_link]` | `CAR` | | | +| `highway one of [trunk, trunk_link, primary, primary_link]; motorroad=yes` | `CAR` | | | +| `highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | `ALL` | | | +| `cycleway=track; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | `ALL` | | | +| `cycleway=lane; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link]` | `ALL` | 1.27 | | +| `cycleway=lane; maxspeed < 50; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link]` | `ALL` | 1.1 | | +| `cycleway=lane; highway one of [unclassified, residential]` | `ALL` | 1.1 | | +| `highway=service` | `ALL` | | | +| `highway=service; service=parking_aisle` | `ALL` | 2.5 | | +| `highway=service; service=drive-through` | `ALL` | 2.5 | | +| `highway=living_street` | `ALL` | 1.83 | | +| `highway=pedestrian` | `PEDESTRIAN_AND_BICYCLE` | 1.2 | | +| `highway=busway` | `PEDESTRIAN_AND_BICYCLE` | 2.37 | 1.9 | +| `highway=service; bus one of [yes, designated]` | `PEDESTRIAN_AND_BICYCLE` | 2.37 | 1.9 | +| `highway=footway` | `PEDESTRIAN_AND_BICYCLE` | 1.42 | | +| `highway=cycleway` | `PEDESTRIAN_AND_BICYCLE` | 1.05 | 1.4 | +| `highway=cycleway; lanes > 1` | `PEDESTRIAN_AND_BICYCLE` | | 1.4 | +| `highway=cycleway; oneway=yes` | `PEDESTRIAN_AND_BICYCLE` | | 1.4 | +| `highway=cycleway; sidewalk one of [yes, left, right, both]` | `PEDESTRIAN_AND_BICYCLE` | 1.05 | | +| `highway=cycleway; lanes > 1; sidewalk one of [yes, left, right, both]` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=cycleway; oneway=yes; sidewalk one of [yes, left, right, both]` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=cycleway; foot=designated; segregated=no` | `PEDESTRIAN_AND_BICYCLE` | 1.05 | 1.15 | +| `highway=path; foot=designated; bicycle=designated; segregated=no` | `PEDESTRIAN_AND_BICYCLE` | 1.05 | 1.15 | +| `highway=cycleway; foot=designated; segregated=yes` | `PEDESTRIAN_AND_BICYCLE` | 1.05 | | +| `highway=path; foot=designated; bicycle=designated; segregated=yes` | `PEDESTRIAN_AND_BICYCLE` | 1.05 | | +| `highway=cycleway; foot=designated; segregated=yes; lanes > 1` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=cycleway; foot=designated; present(segregated); motor_vehicle=destination` | `PEDESTRIAN_AND_BICYCLE` | 1.57 | | +| `highway=path; foot=designated; bicycle=designated; present(segregated); motor_vehicle=destination` | `PEDESTRIAN_AND_BICYCLE` | 1.57 | | +| `highway=footway; footway=sidewalk` | `PEDESTRIAN_AND_BICYCLE` | 1.93 | 1.1 | +| `highway=footway; footway=crossing` | `PEDESTRIAN_AND_BICYCLE` | 2.33 | 1.35 | +| `highway=cycleway; cycleway=crossing` | `PEDESTRIAN_AND_BICYCLE` | 2.33 | 1.35 | +| `highway=track` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=bridleway` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=path` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=steps` | `PEDESTRIAN` | | | +| `highway=corridor` | `PEDESTRIAN` | | | +| `highway=footway; indoor=yes` | `PEDESTRIAN` | | | +| `highway=platform` | `PEDESTRIAN` | | | +| `public_transport=platform` | `PEDESTRIAN` | | | +| `trail_visibility one of [bad, low, poor, horrible, no]; highway=path` | `NONE` | | | +| `sac_scale one of [demanding_mountain_hiking, alpine_hiking, demanding_alpine_hiking, difficult_alpine_hiking]; highway one of [path, steps]` | `NONE` | | | +| `smoothness one of [horrible, very_horrible]; highway one of [path, bridleway, track]` | `PEDESTRIAN` | | 1.15 | +| `smoothness=impassable; highway one of [path, bridleway, track]` | `NONE` | | | +| `1 > mtb:scale < 2; highway one of [path, bridleway, track]` | `PEDESTRIAN` | | 1.15 | +| `mtb:scale > 2; highway one of [path, bridleway, track]` | `NONE` | | | - - - -

Rule #0

- -**Specifier:** `highway one of [motorway, motorway_link]` -**Permission:** CAR -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #1

- -**Specifier:** `highway one of [trunk, trunk_link, primary, primary_link]; motorroad=yes` -**Permission:** CAR -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #2

- -**Specifier:** `highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #3

- -**Specifier:** `cycleway=track; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #4

- -**Specifier:** `cycleway=lane; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link]` -**Permission:** ALL -**Bike safety factor:** forward: 1.27, back: 1.27 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #5

- -**Specifier:** `cycleway=lane; maxspeed < 50; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link]` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #6

- -**Specifier:** `cycleway=lane; highway one of [unclassified, residential]` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #7

- -**Specifier:** `highway=service` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #8

- -**Specifier:** `highway=service; service=parking_aisle` -**Permission:** ALL -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #9

- -**Specifier:** `highway=service; service=drive-through` -**Permission:** ALL -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #10

- -**Specifier:** `highway=living_street` -**Permission:** ALL -**Bike safety factor:** forward: 1.83, back: 1.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #11

- -**Specifier:** `highway=pedestrian` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.2, back: 1.2 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #12

- -**Specifier:** `highway=busway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.37, back: 2.37 -**Walk safety factor:** forward: 1.9, back: 1.9 - -

Rule #13

- -**Specifier:** `highway=service; bus one of [yes, designated]` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.37, back: 2.37 -**Walk safety factor:** forward: 1.9, back: 1.9 - -

Rule #14

- -**Specifier:** `highway=footway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.42, back: 1.42 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #15

- -**Specifier:** `highway=cycleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.05, back: 1.05 -**Walk safety factor:** forward: 1.4, back: 1.4 - -

Rule #16

- -**Specifier:** `highway=cycleway; lanes > 1` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.4, back: 1.4 - -

Rule #17

- -**Specifier:** `highway=cycleway; oneway=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.4, back: 1.4 - -

Rule #18

- -**Specifier:** `highway=cycleway; sidewalk one of [yes, left, right, both]` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.05, back: 1.05 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #19

- -**Specifier:** `highway=cycleway; lanes > 1; sidewalk one of [yes, left, right, both]` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #20

- -**Specifier:** `highway=cycleway; oneway=yes; sidewalk one of [yes, left, right, both]` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #21

- -**Specifier:** `highway=cycleway; foot=designated; segregated=no` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.05, back: 1.05 -**Walk safety factor:** forward: 1.15, back: 1.15 - -

Rule #22

- -**Specifier:** `highway=path; foot=designated; bicycle=designated; segregated=no` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.05, back: 1.05 -**Walk safety factor:** forward: 1.15, back: 1.15 - -

Rule #23

- -**Specifier:** `highway=cycleway; foot=designated; segregated=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.05, back: 1.05 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #24

- -**Specifier:** `highway=path; foot=designated; bicycle=designated; segregated=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.05, back: 1.05 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #25

- -**Specifier:** `highway=cycleway; foot=designated; segregated=yes; lanes > 1` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #26

- -**Specifier:** `highway=cycleway; foot=designated; present(segregated); motor_vehicle=destination` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.57, back: 1.57 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #27

- -**Specifier:** `highway=path; foot=designated; bicycle=designated; present(segregated); motor_vehicle=destination` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.57, back: 1.57 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #28

- -**Specifier:** `highway=footway; footway=sidewalk` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.93, back: 1.93 -**Walk safety factor:** forward: 1.1, back: 1.1 - -

Rule #29

- -**Specifier:** `highway=footway; footway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.33, back: 2.33 -**Walk safety factor:** forward: 1.35, back: 1.35 - -

Rule #30

- -**Specifier:** `highway=cycleway; cycleway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.33, back: 2.33 -**Walk safety factor:** forward: 1.35, back: 1.35 - -

Rule #31

- -**Specifier:** `highway=track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #32

- -**Specifier:** `highway=bridleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #33

- -**Specifier:** `highway=path` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #34

- -**Specifier:** `highway=steps` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #35

- -**Specifier:** `highway=corridor` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #36

- -**Specifier:** `highway=footway; indoor=yes` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #37

- -**Specifier:** `highway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #38

- -**Specifier:** `public_transport=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #39

- -**Specifier:** `trail_visibility one of [bad, low, poor, horrible, no]; highway=path` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #40

- -**Specifier:** `sac_scale one of [demanding_mountain_hiking, alpine_hiking, demanding_alpine_hiking, difficult_alpine_hiking]; highway one of [path, steps]` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #41

- -**Specifier:** `smoothness one of [horrible, very_horrible]; highway one of [path, bridleway, track]` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.15, back: 1.15 - -

Rule #42

- -**Specifier:** `smoothness=impassable; highway one of [path, bridleway, track]` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #43

- -**Specifier:** `1 > mtb:scale < 2; highway one of [path, bridleway, track]` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.15, back: 1.15 - -

Rule #44

- -**Specifier:** `mtb:scale > 2; highway one of [path, bridleway, track]` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - - - - -### Bicycle and walking safety mixins +### Safety mixins Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the -permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. +permission of an OSM way. Their safety values are multiplied with the base values from the selected +way properties. Multiple mixins can apply to the same way and their effects compound. diff --git a/docs/osm/UK.md b/docs/osm/UK.md index 26376a29f17..3dd77b1b393 100644 --- a/docs/osm/UK.md +++ b/docs/osm/UK.md @@ -1,1332 +1,188 @@ -## OSM tag mapping +# OSM tag mapping ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. + These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. +Lower safety values make an OSM way more desirable and higher values less desirable. -| specifier | permission | safety | -|---------------------------------------------------------|------------------------|--------| -| `highway=trunk_link` | ALL | 🚴 | -| `highway=trunk` | ALL | 🚴 | -| `highway=trunk; cycleway=lane` | ALL | 🚴 | -| `highway=trunk_link; cycleway=lane` | ALL | 🚴 | -| `highway=trunk; cycleway=share_busway` | ALL | 🚴 | -| `highway=trunk_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=trunk_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=trunk; cycleway=track` | ALL | 🚴 | -| `highway=trunk_link; cycleway=track` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_track` | ALL | 🚴 | -| `highway=trunk_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=trunk; bicycle=designated` | ALL | 🚴 | -| `highway=trunk_link; bicycle=designated` | ALL | 🚴 | -| `mtb:scale=3` | NONE | | -| `mtb:scale=4` | NONE | | -| `mtb:scale=5` | NONE | | -| `mtb:scale=6` | NONE | | -| `highway=corridor` | PEDESTRIAN | | -| `highway=steps` | PEDESTRIAN | | -| `highway=crossing` | PEDESTRIAN | | -| `highway=platform` | PEDESTRIAN | | -| `public_transport=platform` | PEDESTRIAN | | -| `railway=platform` | PEDESTRIAN | | -| `footway=sidewalk; highway=footway` | PEDESTRIAN | | -| `mtb:scale=1` | PEDESTRIAN | | -| `mtb:scale=2` | PEDESTRIAN | | -| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=living_street` | ALL | 🚴 | -| `highway=unclassified` | ALL | | -| `highway=road` | ALL | | -| `highway=byway` | ALL | 🚴 | -| `highway=track` | ALL | 🚴 | -| `highway=service` | ALL | 🚴 | -| `highway=residential` | ALL | 🚴 | -| `highway=residential_link` | ALL | 🚴 | -| `highway=tertiary` | ALL | | -| `highway=tertiary_link` | ALL | | -| `highway=secondary` | ALL | 🚴 | -| `highway=secondary_link` | ALL | 🚴 | -| `highway=primary` | ALL | 🚴 | -| `highway=primary_link` | ALL | 🚴 | -| `highway=trunk_link` | CAR | 🚴 | -| `highway=motorway_link` | CAR | 🚴 | -| `highway=trunk` | CAR | 🚴 | -| `highway=motorway` | CAR | 🚴 | -| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=lane` | ALL | 🚴 | -| `highway=residential; cycleway=lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | -| `highway=secondary; cycleway=lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | -| `highway=primary; cycleway=lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=lane` | ALL | 🚴 | -| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=track` | ALL | 🚴 | -| `highway=residential; cycleway=track` | ALL | 🚴 | -| `highway=residential_link; cycleway=track` | ALL | 🚴 | -| `highway=tertiary; cycleway=track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | -| `highway=secondary; cycleway=track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=track` | ALL | 🚴 | -| `highway=primary; cycleway=track` | ALL | 🚴 | -| `highway=primary_link; cycleway=track` | ALL | 🚴 | -| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | -| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite` | ALL | 🚴 | -| `highway=residential; cycleway=opposite` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite` | ALL | | -| `highway=tertiary_link; cycleway=opposite` | ALL | | -| `highway=secondary; cycleway=opposite` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=primary; cycleway=opposite` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `present(highway); bicycle=designated` | ALL | 🚴 | -| `highway=service; bicycle=designated` | ALL | 🚴 | -| `highway=residential; bicycle=designated` | ALL | 🚴 | -| `highway=unclassified; bicycle=designated` | ALL | 🚴 | -| `highway=residential_link; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | -| `highway=secondary; bicycle=designated` | ALL | 🚴 | -| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | -| `highway=primary; bicycle=designated` | ALL | 🚴 | -| `highway=primary_link; bicycle=designated` | ALL | 🚴 | -| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| specifier | permission | bike safety | walk safety | +|---------------------------------------------------------|--------------------------|-------------------------------|-------------| +| `highway=trunk_link` | `ALL` | 2.06 | | +| `highway=trunk` | `ALL` | 7.47 | | +| `highway=trunk; cycleway=lane` | `ALL` | 1.5 | | +| `highway=trunk_link; cycleway=lane` | `ALL` | 1.15 | | +| `highway=trunk; cycleway=share_busway` | `ALL` | 1.75 | | +| `highway=trunk_link; cycleway=share_busway` | `ALL` | 1.25 | | +| `highway=trunk; cycleway=opposite_lane` | `ALL` | forward: 7.47
back: 1.5 | | +| `highway=trunk_link; cycleway=opposite_lane` | `ALL` | forward: 2.06
back: 1.15 | | +| `highway=trunk; cycleway=track` | `ALL` | 0.95 | | +| `highway=trunk_link; cycleway=track` | `ALL` | 0.85 | | +| `highway=trunk; cycleway=opposite_track` | `ALL` | forward: 7.47
back: 0.95 | | +| `highway=trunk_link; cycleway=opposite_track` | `ALL` | forward: 2.06
back: 0.85 | | +| `highway=trunk; bicycle=designated` | `ALL` | 7.25 | | +| `highway=trunk_link; bicycle=designated` | `ALL` | 2.0 | | +| `mtb:scale=3` | `NONE` | | | +| `mtb:scale=4` | `NONE` | | | +| `mtb:scale=5` | `NONE` | | | +| `mtb:scale=6` | `NONE` | | | +| `highway=corridor` | `PEDESTRIAN` | | | +| `highway=steps` | `PEDESTRIAN` | | | +| `highway=crossing` | `PEDESTRIAN` | | | +| `highway=platform` | `PEDESTRIAN` | | | +| `public_transport=platform` | `PEDESTRIAN` | | | +| `railway=platform` | `PEDESTRIAN` | | | +| `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | +| `mtb:scale=1` | `PEDESTRIAN` | | | +| `mtb:scale=2` | `PEDESTRIAN` | | | +| `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=cycleway` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | +| `highway=path` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `highway=pedestrian` | `PEDESTRIAN_AND_BICYCLE` | 0.9 | | +| `highway=footway` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | +| `highway=bridleway` | `PEDESTRIAN_AND_BICYCLE` | 1.3 | | +| `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` | `CAR` | 2.06 | | +| `highway=motorway_link` | `CAR` | 2.06 | | +| `highway=trunk` | `CAR` | 7.47 | | +| `highway=motorway` | `CAR` | 8.0 | | +| `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` | `BICYCLE_AND_CAR` | 1.5 | | +| `highway=trunk_link; cycleway=lane` | `BICYCLE_AND_CAR` | 1.15 | | +| `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` | `BICYCLE_AND_CAR` | 1.75 | | +| `highway=trunk_link; cycleway=share_busway` | `BICYCLE_AND_CAR` | 1.25 | | +| `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` | forward: 1.0
back: 0.87 | | +| `highway=service; cycleway=opposite_lane` | `ALL` | forward: 1.1
back: 0.77 | | +| `highway=residential; cycleway=opposite_lane` | `ALL` | forward: 0.98
back: 0.77 | | +| `highway=residential_link; cycleway=opposite_lane` | `ALL` | forward: 0.98
back: 0.77 | | +| `highway=tertiary; cycleway=opposite_lane` | `ALL` | forward: 1.0
back: 0.87 | | +| `highway=tertiary_link; cycleway=opposite_lane` | `ALL` | forward: 1.0
back: 0.87 | | +| `highway=secondary; cycleway=opposite_lane` | `ALL` | forward: 1.5
back: 0.96 | | +| `highway=secondary_link; cycleway=opposite_lane` | `ALL` | forward: 1.5
back: 0.96 | | +| `highway=primary; cycleway=opposite_lane` | `ALL` | forward: 2.06
back: 1.15 | | +| `highway=primary_link; cycleway=opposite_lane` | `ALL` | forward: 2.06
back: 1.15 | | +| `highway=trunk; cycleway=opposite_lane` | `BICYCLE_AND_CAR` | forward: 7.47
back: 1.5 | | +| `highway=trunk_link; cycleway=opposite_lane` | `BICYCLE_AND_CAR` | forward: 2.06
back: 1.15 | | +| `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` | `BICYCLE_AND_CAR` | 0.95 | | +| `highway=trunk_link; cycleway=track` | `BICYCLE_AND_CAR` | 0.85 | | +| `present(highway); cycleway=opposite_track` | `PEDESTRIAN_AND_BICYCLE` | forward: 1.0
back: 0.75 | | +| `highway=service; cycleway=opposite_track` | `ALL` | forward: 1.1
back: 0.65 | | +| `highway=residential; cycleway=opposite_track` | `ALL` | forward: 0.98
back: 0.65 | | +| `highway=residential_link; cycleway=opposite_track` | `ALL` | forward: 0.98
back: 0.65 | | +| `highway=tertiary; cycleway=opposite_track` | `ALL` | forward: 1.0
back: 0.75 | | +| `highway=tertiary_link; cycleway=opposite_track` | `ALL` | forward: 1.0
back: 0.75 | | +| `highway=secondary; cycleway=opposite_track` | `ALL` | forward: 1.5
back: 0.8 | | +| `highway=secondary_link; cycleway=opposite_track` | `ALL` | forward: 1.5
back: 0.8 | | +| `highway=primary; cycleway=opposite_track` | `ALL` | forward: 2.06
back: 0.85 | | +| `highway=primary_link; cycleway=opposite_track` | `ALL` | forward: 2.06
back: 0.85 | | +| `highway=trunk; cycleway=opposite_track` | `BICYCLE_AND_CAR` | forward: 7.47
back: 0.95 | | +| `highway=trunk_link; cycleway=opposite_track` | `BICYCLE_AND_CAR` | forward: 2.06
back: 0.85 | | +| `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` | 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` | forward: 1.5
back: 1.71 | | +| `highway=secondary_link; cycleway=opposite` | `ALL` | forward: 1.5
back: 1.71 | | +| `highway=primary; cycleway=opposite` | `ALL` | forward: 2.06
back: 2.99 | | +| `highway=primary_link; cycleway=opposite` | `ALL` | 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_AND_BICYCLE` | 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` | `ALL` | 0.97 | | +| `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` | `BICYCLE_AND_CAR` | 7.25 | | +| `highway=trunk_link; bicycle=designated` | `BICYCLE_AND_CAR` | 2.0 | | +| `highway=motorway; bicycle=designated` | `BICYCLE_AND_CAR` | 7.76 | | +| `highway=motorway_link; bicycle=designated` | `BICYCLE_AND_CAR` | 2.0 | | - - - -

Rule #0

- -**Specifier:** `highway=trunk_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #1

- -**Specifier:** `highway=trunk` -**Permission:** ALL -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #2

- -**Specifier:** `highway=trunk; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #3

- -**Specifier:** `highway=trunk_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #4

- -**Specifier:** `highway=trunk; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #5

- -**Specifier:** `highway=trunk_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #6

- -**Specifier:** `highway=trunk; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 7.47, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #7

- -**Specifier:** `highway=trunk_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #8

- -**Specifier:** `highway=trunk; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #9

- -**Specifier:** `highway=trunk_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #10

- -**Specifier:** `highway=trunk; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 7.47, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #11

- -**Specifier:** `highway=trunk_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #12

- -**Specifier:** `highway=trunk; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 7.25, back: 7.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #13

- -**Specifier:** `highway=trunk_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #14

- -**Specifier:** `mtb:scale=3` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #15

- -**Specifier:** `mtb:scale=4` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #16

- -**Specifier:** `mtb:scale=5` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #17

- -**Specifier:** `mtb:scale=6` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #18

- -**Specifier:** `highway=corridor` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #19

- -**Specifier:** `highway=steps` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #20

- -**Specifier:** `highway=crossing` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #21

- -**Specifier:** `highway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #22

- -**Specifier:** `public_transport=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #23

- -**Specifier:** `railway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #24

- -**Specifier:** `footway=sidewalk; highway=footway` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #25

- -**Specifier:** `mtb:scale=1` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #26

- -**Specifier:** `mtb:scale=2` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #27

- -**Specifier:** `mtb:scale=0` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #28

- -**Specifier:** `highway=cycleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #29

- -**Specifier:** `highway=path` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #30

- -**Specifier:** `highway=pedestrian` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #31

- -**Specifier:** `highway=footway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #32

- -**Specifier:** `highway=bridleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #33

- -**Specifier:** `highway=living_street` -**Permission:** ALL -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #34

- -**Specifier:** `highway=unclassified` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #35

- -**Specifier:** `highway=road` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #36

- -**Specifier:** `highway=byway` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #37

- -**Specifier:** `highway=track` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #38

- -**Specifier:** `highway=service` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #39

- -**Specifier:** `highway=residential` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #40

- -**Specifier:** `highway=residential_link` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #41

- -**Specifier:** `highway=tertiary` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #42

- -**Specifier:** `highway=tertiary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #43

- -**Specifier:** `highway=secondary` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #44

- -**Specifier:** `highway=secondary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #45

- -**Specifier:** `highway=primary` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #46

- -**Specifier:** `highway=primary_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #47

- -**Specifier:** `highway=trunk_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #48

- -**Specifier:** `highway=motorway_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #49

- -**Specifier:** `highway=trunk` -**Permission:** CAR -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #50

- -**Specifier:** `highway=motorway` -**Permission:** CAR -**Bike safety factor:** forward: 8.0, back: 8.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #51

- -**Specifier:** `present(highway); cycleway=lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #52

- -**Specifier:** `highway=service; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #53

- -**Specifier:** `highway=residential; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #54

- -**Specifier:** `highway=residential_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #55

- -**Specifier:** `highway=tertiary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #56

- -**Specifier:** `highway=tertiary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #57

- -**Specifier:** `highway=secondary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #58

- -**Specifier:** `highway=secondary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #59

- -**Specifier:** `highway=primary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #60

- -**Specifier:** `highway=primary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #61

- -**Specifier:** `highway=trunk; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #62

- -**Specifier:** `highway=trunk_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #63

- -**Specifier:** `highway=motorway; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #64

- -**Specifier:** `highway=motorway_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #65

- -**Specifier:** `present(highway); cycleway=share_busway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #66

- -**Specifier:** `highway=service; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #67

- -**Specifier:** `highway=residential; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #68

- -**Specifier:** `highway=residential_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #69

- -**Specifier:** `highway=tertiary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #70

- -**Specifier:** `highway=tertiary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #71

- -**Specifier:** `highway=secondary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #72

- -**Specifier:** `highway=secondary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #73

- -**Specifier:** `highway=primary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #74

- -**Specifier:** `highway=primary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #75

- -**Specifier:** `highway=trunk; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #76

- -**Specifier:** `highway=trunk_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #77

- -**Specifier:** `highway=motorway; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #78

- -**Specifier:** `highway=motorway_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #79

- -**Specifier:** `present(highway); cycleway=opposite_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #80

- -**Specifier:** `highway=service; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #81

- -**Specifier:** `highway=residential; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #82

- -**Specifier:** `highway=residential_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #83

- -**Specifier:** `highway=tertiary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #84

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #85

- -**Specifier:** `highway=secondary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #86

- -**Specifier:** `highway=secondary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #87

- -**Specifier:** `highway=primary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #88

- -**Specifier:** `highway=primary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #89

- -**Specifier:** `highway=trunk; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #90

- -**Specifier:** `highway=trunk_link; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #91

- -**Specifier:** `present(highway); cycleway=track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #92

- -**Specifier:** `highway=service; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #93

- -**Specifier:** `highway=residential; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #94

- -**Specifier:** `highway=residential_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #95

- -**Specifier:** `highway=tertiary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #96

- -**Specifier:** `highway=tertiary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #97

- -**Specifier:** `highway=secondary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #98

- -**Specifier:** `highway=secondary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #99

- -**Specifier:** `highway=primary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #100

- -**Specifier:** `highway=primary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #101

- -**Specifier:** `highway=trunk; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #102

- -**Specifier:** `highway=trunk_link; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #103

- -**Specifier:** `present(highway); cycleway=opposite_track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #104

- -**Specifier:** `highway=service; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #105

- -**Specifier:** `highway=residential; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #106

- -**Specifier:** `highway=residential_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #107

- -**Specifier:** `highway=tertiary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #108

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #109

- -**Specifier:** `highway=secondary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #110

- -**Specifier:** `highway=secondary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #111

- -**Specifier:** `highway=primary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #112

- -**Specifier:** `highway=primary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #113

- -**Specifier:** `highway=trunk; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #114

- -**Specifier:** `highway=trunk_link; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #115

- -**Specifier:** `present(highway); cycleway=shared_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #116

- -**Specifier:** `highway=service; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.73, back: 0.73 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #117

- -**Specifier:** `highway=residential; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #118

- -**Specifier:** `highway=residential_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #119

- -**Specifier:** `highway=tertiary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #120

- -**Specifier:** `highway=tertiary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #121

- -**Specifier:** `highway=secondary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #122

- -**Specifier:** `highway=secondary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #123

- -**Specifier:** `highway=primary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #124

- -**Specifier:** `highway=primary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #125

- -**Specifier:** `present(highway); cycleway=opposite` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.4 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #126

- -**Specifier:** `highway=service; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #127

- -**Specifier:** `highway=residential; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #128

- -**Specifier:** `highway=residential_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #129

- -**Specifier:** `highway=tertiary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #130

- -**Specifier:** `highway=tertiary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #131

- -**Specifier:** `highway=secondary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #132

- -**Specifier:** `highway=secondary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #133

- -**Specifier:** `highway=primary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #134

- -**Specifier:** `highway=primary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #135

- -**Specifier:** `highway=path; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #136

- -**Specifier:** `highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #137

- -**Specifier:** `highway=footway; bicycle=yes; area=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #138

- -**Specifier:** `highway=pedestrian; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #139

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #140

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #141

- -**Specifier:** `highway=footway; footway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #142

- -**Specifier:** `highway=footway; footway=crossing; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #143

- -**Specifier:** `highway=track; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #144

- -**Specifier:** `highway=track; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #145

- -**Specifier:** `highway=track; bicycle=yes; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #146

- -**Specifier:** `highway=track; bicycle=designated; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #147

- -**Specifier:** `highway=track; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #148

- -**Specifier:** `present(highway); bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #149

- -**Specifier:** `highway=service; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.84, back: 0.84 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #150

- -**Specifier:** `highway=residential; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #151

- -**Specifier:** `highway=unclassified; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #152

- -**Specifier:** `highway=residential_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #153

- -**Specifier:** `highway=tertiary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #154

- -**Specifier:** `highway=tertiary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #155

- -**Specifier:** `highway=secondary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #156

- -**Specifier:** `highway=secondary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #157

- -**Specifier:** `highway=primary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #158

- -**Specifier:** `highway=primary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #159

- -**Specifier:** `highway=trunk; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.25, back: 7.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #160

- -**Specifier:** `highway=trunk_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #161

- -**Specifier:** `highway=motorway; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.76, back: 7.76 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #162

- -**Specifier:** `highway=motorway_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - - - - -### Bicycle and walking safety mixins +### Safety mixins Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the -permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. +permission of an OSM way. Their safety values are multiplied with the base values from the selected +way properties. Multiple mixins can apply to the same way and their effects compound. diff --git a/mkdocs.yml b/mkdocs.yml index 0db31c4df53..0689ea0211c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -78,7 +78,7 @@ nav: - Norway: 'osm/Norway.md' - Germany: 'osm/Germany.md' - Finland: 'osm/Finland.md' - - UK: 'osm/Finland.md' + - UK: 'osm/UK.md' - Router: 'RouterConfiguration.md' - "Route Request": 'RouteRequest.md' - "Realtime Updaters": 'UpdaterConfig.md' diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java index f58daa1ddb3..99df904e314 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java @@ -42,21 +42,14 @@ public void populateProperties(WayPropertySet props) { props.setMixinProperties(exact("sidewalk=no;maxspeed=35 mph"), ofWalkSafety(2)); props.setMixinProperties(exact("sidewalk=no;maxspeed=30 mph"), ofWalkSafety(1.5)); - /* - * the RLIS/CCGIS:bicycle=designated mixins are coded out as they are no longer neccessary because of of the bicycle=designated block of code - * above. This switch makes our weighting system less reliant on tags that aren't generally used by the OSM community, and prevents the double - * counting that was occuring on streets with both bicycle infrastructure and an RLIS:bicycle=designated tag - */ + // rarely used tags that are specific to counties near Portland + // https://taginfo.openstreetmap.org/keys/RLIS:bicycle#overview - /* - * props.setProperties("RLIS:bicycle=designated", StreetTraversalPermission.ALL, 0.97, 0.97, true); - */ props.setMixinProperties("RLIS:bicycle=caution_area", ofBicycleSafety(1.45)); props.setMixinProperties("RLIS:bicycle:right=caution_area", ofBicycleSafety(1.45, 1)); props.setMixinProperties("RLIS:bicycle:left=caution_area", ofBicycleSafety(1, 1.45)); - /* - * props.setProperties("CCGIS:bicycle=designated", StreetTraversalPermission.ALL, 0.97, 0.97, true); - */ + + // https://taginfo.openstreetmap.org/keys/CCGIS:bicycle#overview props.setMixinProperties("CCGIS:bicycle=caution_area", ofBicycleSafety(1.45)); props.setMixinProperties("CCGIS:bicycle:right=caution_area", ofBicycleSafety(1.45, 1)); props.setMixinProperties("CCGIS:bicycle:left=caution_area", ofBicycleSafety(1, 1.45)); diff --git a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java index 1884551d3cc..48c64f068c9 100644 --- a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java +++ b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java @@ -3,7 +3,6 @@ import static org.opentripplanner.framework.io.FileUtils.assertFileEquals; import static org.opentripplanner.framework.io.FileUtils.readFile; import static org.opentripplanner.framework.io.FileUtils.writeFile; -import static org.opentripplanner.framework.text.MarkdownFormatter.bold; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.DOCS_ROOT; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_ROOT; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceSection; @@ -21,7 +20,6 @@ import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.framework.text.Table; import org.opentripplanner.framework.text.TableBuilder; -import org.opentripplanner.generate.doc.framework.DocBuilder; import org.opentripplanner.generate.doc.framework.GeneratesDocumentation; import org.opentripplanner.openstreetmap.tagmapping.OsmTagMapper; import org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource; @@ -65,7 +63,6 @@ public void updateDocs(OsmTagMapperSource source) { var mixinTable = mixinTable(wps); template = replaceSection(template, "props", propTable.toMarkdownTable()); - template = replaceSection(template, "prop-details", propDetails(wps)); template = replaceSection(template, "mixins", mixinTable.toMarkdownTable()); writeFile(outFile, template); assertFileEquals(original, outFile); @@ -78,50 +75,26 @@ private static File outputFile(OsmTagMapper mapper) { private static Table propTable(WayPropertySet wps) { var propTable = new TableBuilder(); - propTable.withHeaders("specifier", "permission", "safety"); + propTable.withHeaders("specifier", "permission", "bike safety", "walk safety"); for (var prop : wps.getWayProperties()) { propTable.addRow( "`%s`".formatted(prop.specifier().toMarkdown()), - prop.properties().getPermission(), - emojiModifications(prop.properties().bicycleSafety(), prop.properties().walkSafety()) + "`%s`".formatted(prop.properties().getPermission()), + tableValues(prop.properties().bicycleSafety()), + tableValues(prop.properties().walkSafety()) ); } return propTable.build(); } - private static String propDetails(WayPropertySet wps) { - var docBuilder = new DocBuilder(); - - var wayProperties = wps.getWayProperties(); - for (var prop : wayProperties) { - var index = wayProperties.indexOf(prop); - - docBuilder.header(3, "Rule #%s".formatted(index), Integer.toString(index)); - docBuilder - .text(bold("Specifier:")) - .text("`%s`".formatted(prop.specifier().toMarkdown())) - .lineBreak(); - - docBuilder.text(bold("Permission:")).text(prop.properties().getPermission()); - docBuilder.lineBreak(); - var bike = prop.properties().bicycleSafety(); - docBuilder - .text(bold("Bike safety factor:")) - .text("forward: %s, back: %s".formatted(bike.forward(), bike.back())); - docBuilder.lineBreak(); - var walk = prop.properties().walkSafety(); - docBuilder - .text(bold("Walk safety factor:")) - .text("forward: %s, back: %s".formatted(walk.forward(), walk.back())); - docBuilder.endParagraph(); - } - return docBuilder.toString(); - } - private static Table mixinTable(WayPropertySet wps) { var propTable = new TableBuilder(); - propTable.withHeaders("matcher", "bicycle safety", "walk safety"); + propTable.withHeaders( + "matcher", + "bicycle safety", + "walk safety" + ); for (var prop : wps.getMixins()) { propTable.addRow( @@ -145,15 +118,4 @@ else if(safety.isSymetric()){ } } - private static String emojiModifications(SafetyFeatures bicycle, SafetyFeatures walk) { - return emojiIfModifies(bicycle, "\uD83D\uDEB4") + " " + emojiIfModifies(walk, "\uD83D\uDEB6"); - } - - private static String emojiIfModifies(SafetyFeatures prop, String value) { - if (prop.modifies()) { - return value; - } else { - return ""; - } - } } From 69f9076f14fe3ddd10074e8c68fb289b25507a12 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 26 Jun 2024 13:22:42 +0200 Subject: [PATCH 18/54] Remove bike safety endpoint from Report API --- docs/sandbox/ReportApi.md | 8 -- .../reportapi/model/BicycleSafetyReport.java | 57 ------------ .../reportapi/resource/ReportResource.java | 40 -------- src/ext/resources/reportapi/report.html | 93 ------------------- .../tagmapping/DefaultMapper.java | 1 - .../tagmapping/PortlandMapper.java | 1 - .../generate/doc/OsmMapperDocTest.java | 13 +-- 7 files changed, 3 insertions(+), 210 deletions(-) delete mode 100644 src/ext/java/org/opentripplanner/ext/reportapi/model/BicycleSafetyReport.java delete mode 100644 src/ext/resources/reportapi/report.html diff --git a/docs/sandbox/ReportApi.md b/docs/sandbox/ReportApi.md index 1a0668d1740..bc219ec2f98 100644 --- a/docs/sandbox/ReportApi.md +++ b/docs/sandbox/ReportApi.md @@ -24,14 +24,6 @@ This module mounts an endpoint for generating reports under `otp/report`. Availa - [/otp/report/transfers.csv](http://localhost:8080/otp/report/transfers.csv) - [/otp/report/graph.json](http://localhost:8080/otp/report/graph.json) Detailed numbers of transit and street entities in the graph -- [/otp/report/bicycle-safety.html](http://localhost:8080/otp/report/bicycle-safety.html): - Interactive viewer of the rules that determine how bicycle safety factors are calculated. -- [/otp/report/bicycle-safety.csv](http://localhost:8080/otp/report/bicycle-safety.csv): Raw CSV - data for the bicycle safety report. - - [Norwegian version](http://localhost:8080/otp/report/bicycle-safety.csv?osmWayPropertySet=norway) - - [German version](http://localhost:8080/otp/report/bicycle-safety.csv?osmWayPropertySet=germany) - - [UK version](http://localhost:8080/otp/report/bicycle-safety.csv?osmWayPropertySet=uk) - - [Finnish version](http://localhost:8080/otp/report/bicycle-safety.csv?osmWayPropertySet=finland) - [/otp/report/transit/group/priorities](http://localhost:8080/otp/report/transit/group/priorities): List all transit groups used for transit-group-priority (Competition neutral planning). diff --git a/src/ext/java/org/opentripplanner/ext/reportapi/model/BicycleSafetyReport.java b/src/ext/java/org/opentripplanner/ext/reportapi/model/BicycleSafetyReport.java deleted file mode 100644 index 8830189107d..00000000000 --- a/src/ext/java/org/opentripplanner/ext/reportapi/model/BicycleSafetyReport.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.opentripplanner.ext.reportapi.model; - -import org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource; -import org.opentripplanner.openstreetmap.wayproperty.WayPropertySet; - -public class BicycleSafetyReport { - - public static void main(String[] args) { - System.out.println(makeCsv(OsmTagMapperSource.NORWAY)); - } - - public static String makeCsv(OsmTagMapperSource source) { - var wayPropertySet = new WayPropertySet(); - - source.getInstance().populateProperties(wayPropertySet); - - var buf = new CsvReportBuilder(","); - - buf.addHeader( - "OSM tags for osmWayPropertySet " + source, - "mixin", - "permissions", - "safety penalty there", - "safety penalty back" - ); - - wayPropertySet - .getWayProperties() - .forEach(p -> { - buf.addText(p.specifier().toString()); - buf.addBoolean(false); - buf.addText(p.properties().getPermission().toString()); - - var safetyProps = p.properties().bicycleSafety(); - if (safetyProps != null) { - buf.addNumber(safetyProps.forward()); - buf.addNumber(safetyProps.back()); - } - buf.newLine(); - }); - - wayPropertySet - .getMixins() - .forEach(p -> { - buf.addText(p.specifier().toString()); - buf.addBoolean(true); - buf.addText(""); - - var safetyProps = p.bicycleSafety(); - buf.addNumber(safetyProps.forward()); - buf.addNumber(safetyProps.back()); - buf.newLine(); - }); - - return buf.toString(); - } -} diff --git a/src/ext/java/org/opentripplanner/ext/reportapi/resource/ReportResource.java b/src/ext/java/org/opentripplanner/ext/reportapi/resource/ReportResource.java index a859b4ff78a..e06aec71b53 100644 --- a/src/ext/java/org/opentripplanner/ext/reportapi/resource/ReportResource.java +++ b/src/ext/java/org/opentripplanner/ext/reportapi/resource/ReportResource.java @@ -1,25 +1,18 @@ package org.opentripplanner.ext.reportapi.resource; -import jakarta.ws.rs.BadRequestException; -import jakarta.ws.rs.DefaultValue; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; -import jakarta.ws.rs.QueryParam; import jakarta.ws.rs.core.Context; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; -import java.io.IOException; -import java.nio.charset.StandardCharsets; import java.time.Duration; -import org.opentripplanner.ext.reportapi.model.BicycleSafetyReport; import org.opentripplanner.ext.reportapi.model.CachedValue; import org.opentripplanner.ext.reportapi.model.GraphReportBuilder; import org.opentripplanner.ext.reportapi.model.GraphReportBuilder.GraphStats; import org.opentripplanner.ext.reportapi.model.TransfersReport; import org.opentripplanner.ext.reportapi.model.TransitGroupPriorityReport; import org.opentripplanner.model.transfer.TransferService; -import org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.standalone.api.OtpServerRequestContext; import org.opentripplanner.transit.service.TransitService; @@ -51,39 +44,6 @@ public String getTransfersAsCsv() { return TransfersReport.export(transferService.listAll(), transitService); } - @GET - @Path("/bicycle-safety.html") - @Produces(MediaType.TEXT_HTML) - public Response getBicycleSafetyPage() { - try (var is = getClass().getResourceAsStream("/reportapi/report.html")) { - return Response.ok(new String(is.readAllBytes(), StandardCharsets.UTF_8)).build(); - } catch (IOException e) { - return Response.serverError().build(); - } - } - - @GET - @Path("/bicycle-safety.csv") - @Produces("text/csv") - public Response getBicycleSafetyAsCsv( - @DefaultValue("DEFAULT") @QueryParam("osmWayPropertySet") String osmWayPropertySet - ) { - OsmTagMapperSource source; - try { - source = OsmTagMapperSource.valueOf(osmWayPropertySet.toUpperCase()); - } catch (IllegalArgumentException ignore) { - throw new BadRequestException("Unknown osmWayPropertySet: " + osmWayPropertySet); - } - - return Response - .ok(BicycleSafetyReport.makeCsv(source)) - .header( - "Content-Disposition", - "attachment; filename=\"" + osmWayPropertySet + "-bicycle-safety.csv\"" - ) - .build(); - } - @GET @Path("/transit/group/priorities") @Produces(MediaType.TEXT_PLAIN) diff --git a/src/ext/resources/reportapi/report.html b/src/ext/resources/reportapi/report.html deleted file mode 100644 index bfa5af66603..00000000000 --- a/src/ext/resources/reportapi/report.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - OTP Bicycle safety factor report browser - - - - - - - - - - - - - - - - -
- - -
-

OTP Bicycle safety factor report browser

-
- Documentation -
- -
- -
- -
- - - - - - - - - - - - -
OSM tag match expressionMixin?Traversal permissionsSafety factor there1Safety factor back1
-
- -
- 1: Smaller means more cycling friendly. Larger means less cycle friendly. Think of at as a multiplier for the cost of traversing the way. -
-
-
-
- - - - - - - diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java index f6343cfd384..c5d1c0d1582 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java @@ -602,7 +602,6 @@ public void populateProperties(WayPropertySet props) { /* Portland-local mixins */ - props.setMixinProperties("foot=discouraged", ofWalkSafety(3)); props.setMixinProperties("bicycle=discouraged", ofBicycleSafety(3)); diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java index 99df904e314..1a09b3b6714 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java @@ -54,7 +54,6 @@ public void populateProperties(WayPropertySet props) { props.setMixinProperties("CCGIS:bicycle:right=caution_area", ofBicycleSafety(1.45, 1)); props.setMixinProperties("CCGIS:bicycle:left=caution_area", ofBicycleSafety(1, 1.45)); - // Max speed limit in Oregon is 70 mph ~= 113kmh ~= 31.3m/s props.maxPossibleCarSpeed = 31.4f; diff --git a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java index 48c64f068c9..cd69830f023 100644 --- a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java +++ b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java @@ -90,11 +90,7 @@ 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", "bicycle safety", "walk safety"); for (var prop : wps.getMixins()) { propTable.addRow( @@ -109,13 +105,10 @@ private static Table mixinTable(WayPropertySet wps) { private static String tableValues(SafetyFeatures safety) { if (!safety.modifies()) { return ""; - } - else if(safety.isSymetric()){ + } else if (safety.isSymetric()) { return Double.toString(safety.forward()); - } - else { + } else { return "forward: %s
back: %s".formatted(safety.forward(), safety.back()); } } - } From 75af424f7f2b238cc7ae778eb5e78f0d93dbf82d Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 26 Jun 2024 14:08:41 +0200 Subject: [PATCH 19/54] Update Javadoc --- .../openstreetmap/wayproperty/SafetyFeatures.java | 6 ++++++ .../wayproperty/specifier/BestMatchSpecifier.java | 2 +- .../wayproperty/specifier/ExactMatchSpecifier.java | 2 +- .../wayproperty/specifier/LogicalOrSpecifier.java | 4 ++-- .../openstreetmap/wayproperty/specifier/OsmSpecifier.java | 6 +++++- .../org/opentripplanner/generate/doc/OsmMapperDocTest.java | 4 ++-- 6 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java index dcf5969322f..37669984405 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java @@ -6,10 +6,16 @@ public record SafetyFeatures(double forward, double back) { public static final SafetyFeatures DEFAULT = new SafetyFeatures(1, 1); + /** + * Does this instance actually modify the safety values? + */ public boolean modifies() { return !(forward == 1 && back == 1); } + /** + * Does forward and back have the same value? + */ public boolean isSymetric() { return forward == back; } diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/BestMatchSpecifier.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/BestMatchSpecifier.java index 2c33470f2f7..293bcf84644 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/BestMatchSpecifier.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/BestMatchSpecifier.java @@ -75,7 +75,7 @@ public int matchScore(OSMWithTags way) { } @Override - public String toMarkdown() { + public String toDocString() { return Arrays.stream(conditions).map(Object::toString).collect(Collectors.joining("; ")); } diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ExactMatchSpecifier.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ExactMatchSpecifier.java index 4c26784682f..48c3b5edb64 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ExactMatchSpecifier.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ExactMatchSpecifier.java @@ -56,7 +56,7 @@ public int matchScore(OSMWithTags way) { } @Override - public String toMarkdown() { + public String toDocString() { return conditions.stream().map(Object::toString).collect(Collectors.joining("; ")); } diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/LogicalOrSpecifier.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/LogicalOrSpecifier.java index 1a0691deb08..74db280115b 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/LogicalOrSpecifier.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/LogicalOrSpecifier.java @@ -46,7 +46,7 @@ public int matchScore(OSMWithTags way) { } @Override - public String toMarkdown() { - return subSpecs.stream().map(ExactMatchSpecifier::toMarkdown).collect(Collectors.joining("|")); + public String toDocString() { + return subSpecs.stream().map(ExactMatchSpecifier::toDocString).collect(Collectors.joining("|")); } } diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/OsmSpecifier.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/OsmSpecifier.java index f87845e729f..71d629552ff 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/OsmSpecifier.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/OsmSpecifier.java @@ -42,7 +42,11 @@ static Condition[] parseConditions(String spec, String separator) { */ int matchScore(OSMWithTags way); - String toMarkdown(); + /** + * Convert this specifier to a human-readable identifier that represents this in (generated) + * documentation. + */ + String toDocString(); record Scores(int forward, int backward) { public static Scores of(int s) { diff --git a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java index cd69830f023..443b01fbeb0 100644 --- a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java +++ b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java @@ -79,7 +79,7 @@ private static Table propTable(WayPropertySet wps) { for (var prop : wps.getWayProperties()) { propTable.addRow( - "`%s`".formatted(prop.specifier().toMarkdown()), + "`%s`".formatted(prop.specifier().toDocString()), "`%s`".formatted(prop.properties().getPermission()), tableValues(prop.properties().bicycleSafety()), tableValues(prop.properties().walkSafety()) @@ -94,7 +94,7 @@ private static Table mixinTable(WayPropertySet wps) { for (var prop : wps.getMixins()) { propTable.addRow( - "`%s`".formatted(prop.specifier().toMarkdown()), + "`%s`".formatted(prop.specifier().toDocString()), tableValues(prop.bicycleSafety()), tableValues(prop.walkSafety()) ); From d0ec77e9f0cfe9f75ca2ed68e227a15ff1db2d02 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Thu, 27 Jun 2024 09:25:59 +0200 Subject: [PATCH 20/54] Improve handling of SIRI added trip with unresolvable agency --- .../siri/SiriTimetableSnapshotSourceTest.java | 35 ++++++++++++------ .../ext/siri/AddedTripBuilder.java | 36 +++++++++++++------ .../updater/spi/UpdateError.java | 1 + 3 files changed, 50 insertions(+), 22 deletions(-) diff --git a/src/ext-test/java/org/opentripplanner/ext/siri/SiriTimetableSnapshotSourceTest.java b/src/ext-test/java/org/opentripplanner/ext/siri/SiriTimetableSnapshotSourceTest.java index a069f5c6656..7eb44302fb9 100644 --- a/src/ext-test/java/org/opentripplanner/ext/siri/SiriTimetableSnapshotSourceTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/siri/SiriTimetableSnapshotSourceTest.java @@ -2,21 +2,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals; -import java.util.List; import java.util.Set; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import org.opentripplanner.model.PickDrop; import org.opentripplanner.transit.model.timetable.RealTimeState; -import org.opentripplanner.transit.model.timetable.Trip; -import org.opentripplanner.transit.model.timetable.TripOnServiceDate; -import org.opentripplanner.transit.model.timetable.TripTimes; -import org.opentripplanner.transit.model.timetable.TripTimesFactory; -import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.TransitModel; -import org.opentripplanner.transit.service.TransitService; -import org.opentripplanner.updater.TimetableSnapshotSourceParameters; import org.opentripplanner.updater.spi.UpdateError; import org.opentripplanner.updater.spi.UpdateResult; import org.opentripplanner.updater.trip.RealtimeTestEnvironment; @@ -88,6 +77,30 @@ void testAddedJourneyWithInvalidScheduledData() { assertFailure(UpdateError.UpdateErrorType.NEGATIVE_HOP_TIME, result); } + @Test + void testAddedJourneyWithUnresolvableAgency() { + var env = RealtimeTestEnvironment.siri(); + + // Create an extra journey with unknown line and operator + var createExtraJourney = new SiriEtBuilder(env.getDateTimeHelper()) + .withEstimatedVehicleJourneyCode("newJourney") + .withIsExtraJourney(true) + .withOperatorRef("unknown operator") + .withLineRef("unknown line") + .withEstimatedCalls(builder -> + builder + .call(env.stopA1) + .departAimedExpected("10:58", "10:48") + .call(env.stopB1) + .arriveAimedExpected("10:08", "10:58") + ) + .buildEstimatedTimetableDeliveries(); + + var result = env.applyEstimatedTimetable(createExtraJourney); + assertEquals(0, result.successful()); + assertFailure(UpdateError.UpdateErrorType.CANNOT_RESOLVE_AGENCY, result); + } + @Test void testReplaceJourney() { var env = RealtimeTestEnvironment.siri(); diff --git a/src/ext/java/org/opentripplanner/ext/siri/AddedTripBuilder.java b/src/ext/java/org/opentripplanner/ext/siri/AddedTripBuilder.java index 8eae3be7077..aac485da4eb 100644 --- a/src/ext/java/org/opentripplanner/ext/siri/AddedTripBuilder.java +++ b/src/ext/java/org/opentripplanner/ext/siri/AddedTripBuilder.java @@ -2,6 +2,7 @@ import static java.lang.Boolean.TRUE; import static org.opentripplanner.ext.siri.mapper.SiriTransportModeMapper.mapTransitMainMode; +import static org.opentripplanner.updater.spi.UpdateError.UpdateErrorType.CANNOT_RESOLVE_AGENCY; import static org.opentripplanner.updater.spi.UpdateError.UpdateErrorType.NO_START_DATE; import static org.opentripplanner.updater.spi.UpdateError.UpdateErrorType.NO_VALID_STOPS; import static org.opentripplanner.updater.spi.UpdateError.UpdateErrorType.TOO_FEW_STOPS; @@ -13,6 +14,8 @@ import java.util.List; import java.util.Objects; import java.util.function.Function; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.opentripplanner.ext.siri.mapper.PickDropMapper; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.framework.time.ServiceDateUtils; @@ -172,7 +175,11 @@ Result build() { Route route = entityResolver.resolveRoute(lineRef); if (route == null) { - route = createRoute(); + Agency agency = resolveAgency(); + if (agency == null) { + return UpdateError.result(tripId, CANNOT_RESOLVE_AGENCY); + } + route = createRoute(agency); LOG.info("Adding route {} to transitModel.", route); transitModel.getTransitModelIndex().addRoutes(route); } @@ -278,24 +285,34 @@ Result build() { /** * Method to create a Route. Commonly used to create a route if a real-time message * refers to a route that is not in the transit model. - * - * We will find the first Route with same Operator, and use the same Authority - * If no operator found, copy the agency from replaced route - * * If no name is given for the route, an empty string will be set as the name. * * @return a new Route */ - private Route createRoute() { + @Nonnull + private Route createRoute(Agency agency) { var routeBuilder = Route.of(entityResolver.resolveId(lineRef)); routeBuilder.withShortName(shortName); routeBuilder.withMode(transitMode); routeBuilder.withNetexSubmode(transitSubMode); routeBuilder.withOperator(operator); + routeBuilder.withAgency(agency); + + return routeBuilder.build(); + } - // TODO - SIRI: Is there a better way to find authority/Agency? - Agency agency = transitModel + /** + * Attempt to find the agency to which this new trip belongs. + * The algorithm retrieves any route operated by the same operator as the one operating this new + * trip and resolves its agency. + * If no route with the same operator can be found, the algorithm falls back to retrieving the + * agency operating the replaced route. + * If none can be found the method returns null. + */ + @Nullable + private Agency resolveAgency() { + return transitModel .getTransitModelIndex() .getAllRoutes() .stream() @@ -303,9 +320,6 @@ private Route createRoute() { .findFirst() .map(Route::getAgency) .orElseGet(() -> replacedRoute != null ? replacedRoute.getAgency() : null); - routeBuilder.withAgency(agency); - - return routeBuilder.build(); } private Trip createTrip(Route route, FeedScopedId calServiceId) { diff --git a/src/main/java/org/opentripplanner/updater/spi/UpdateError.java b/src/main/java/org/opentripplanner/updater/spi/UpdateError.java index 548ef0210eb..1f568ba99a4 100644 --- a/src/main/java/org/opentripplanner/updater/spi/UpdateError.java +++ b/src/main/java/org/opentripplanner/updater/spi/UpdateError.java @@ -49,6 +49,7 @@ public enum UpdateErrorType { NOT_IMPLEMENTED_UNSCHEDULED, NOT_IMPLEMENTED_DUPLICATED, NOT_MONITORED, + CANNOT_RESOLVE_AGENCY, } public static Result result(FeedScopedId tripId, UpdateErrorType errorType) { From 1850dd1ab7f9ed0c7db255c2d163b116bfe45b3b Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Thu, 27 Jun 2024 15:28:12 +0200 Subject: [PATCH 21/54] Use immutable collections in timetable snapshot. --- .../model/TimetableSnapshot.java | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java index 5c018412572..ac4de0ce38c 100644 --- a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java +++ b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java @@ -1,6 +1,7 @@ package org.opentripplanner.model; import com.google.common.collect.HashMultimap; +import com.google.common.collect.ImmutableSetMultimap; import com.google.common.collect.SetMultimap; import java.time.LocalDate; import java.util.Collection; @@ -9,6 +10,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.Map; import java.util.Map.Entry; import java.util.Objects; import java.util.Set; @@ -80,8 +82,7 @@ public class TimetableSnapshot { * include ones from the scheduled GTFS, as well as ones added by realtime messages and * tracked by the TripPatternCache.

* Note that the keys do not include all scheduled TripPatterns, only those for which we have at - * least one update. The type of the field is specifically HashMap (rather than the more general - * Map interface) because we need to efficiently clone it.

+ * least one update.

* The members of the SortedSet (the Timetable for a particular day) are treated as copy-on-write * when we're updating them. If an update will modify the timetable for a particular day, that * timetable is replicated before any modifications are applied to avoid affecting any previous @@ -91,16 +92,15 @@ public class TimetableSnapshot { * The compound key approach better reflects the fact that there should be only one Timetable per * TripPattern and date. */ - private HashMap> timetables = new HashMap(); + private Map> timetables = new HashMap(); /** * For cases where the trip pattern (sequence of stops visited) has been changed by a realtime * update, a Map associating the updated trip pattern with a compound key of the feed-scoped - * trip ID and the service date. The type of this field is HashMap rather than the more general - * Map interface because we need to efficiently clone it whenever we start building up a new - * snapshot. TODO RT_AB: clarify if this is an index or the original source of truth. + * trip ID and the service date. + * TODO RT_AB: clarify if this is an index or the original source of truth. */ - private HashMap realtimeAddedTripPattern = new HashMap<>(); + private Map realtimeAddedTripPattern = new HashMap<>(); /** * This is an index of TripPatterns, not the primary collection. It tracks which TripPatterns @@ -256,9 +256,8 @@ public TimetableSnapshot commit(TransitLayerUpdater transitLayerUpdater, boolean if (!force && !this.isDirty()) { return null; } - ret.timetables = (HashMap>) this.timetables.clone(); - ret.realtimeAddedTripPattern = - (HashMap) this.realtimeAddedTripPattern.clone(); + ret.timetables = Map.copyOf(timetables); + ret.realtimeAddedTripPattern = Map.copyOf(realtimeAddedTripPattern); if (transitLayerUpdater != null) { transitLayerUpdater.update(dirtyTimetables, timetables); @@ -267,7 +266,7 @@ public TimetableSnapshot commit(TransitLayerUpdater transitLayerUpdater, boolean this.dirtyTimetables.clear(); this.dirty = false; - ret.setPatternsForStop(HashMultimap.create(this.patternsForStop)); + ret.setPatternsForStop(ImmutableSetMultimap.copyOf(patternsForStop)); ret.readOnly = true; // mark the snapshot as henceforth immutable return ret; From 22d2123ed120801b114279892a8acc260af3dbf0 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 2 Jul 2024 09:58:21 +0200 Subject: [PATCH 22/54] Apply review feedback --- mkdocs.yml | 4 ++-- .../tagmapping/OsmTagMapperSource.java | 4 ---- .../wayproperty/specifier/Condition.java | 24 +++++++++++++++++++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index 0689ea0211c..81dbf9a36fe 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -75,9 +75,9 @@ nav: - Build: 'BuildConfiguration.md' - OSM Tag Mapping: - Default: 'osm/Default.md' - - Norway: 'osm/Norway.md' - - Germany: 'osm/Germany.md' - Finland: 'osm/Finland.md' + - Germany: 'osm/Germany.md' + - Norway: 'osm/Norway.md' - UK: 'osm/UK.md' - Router: 'RouterConfiguration.md' - "Route Request": 'RouteRequest.md' diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java index e43b50c46ef..d430ad05f7d 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java @@ -30,8 +30,4 @@ public OsmTagMapper getInstance() { case CONSTANT_SPEED_FINLAND -> new ConstantSpeedFinlandMapper(); }; } - - public boolean needsDocumentation() { - return this != CONSTANT_SPEED_FINLAND; - } } diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java index 89448cad158..35a104c5980 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java @@ -107,6 +107,9 @@ enum MatchResult { NONE, } + /** + * Selects tags where a given key/value matches. + */ record Equals(String key, String value) implements Condition { @Override public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { @@ -119,6 +122,9 @@ public String toString() { } } + /** + * Selects tags with a give key. + */ record Present(String key) implements Condition { @Override public MatchResult matchType() { @@ -135,6 +141,9 @@ public String toString() { } } + /** + * Selects tags where a given tag is absent. + */ record Absent(String key) implements Condition { @Override public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { @@ -147,6 +156,9 @@ public String toString() { } } + /** + * Selects tags where the integer value is greater than a given number. + */ record GreaterThan(String key, int value) implements Condition { @Override public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { @@ -160,6 +172,9 @@ public String toString() { } } + /** + * Selects tags where the integer value is less than a given number. + */ record LessThan(String key, int value) implements Condition { @Override public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { @@ -173,6 +188,9 @@ public String toString() { } } + /** + * Selects integer tag values and checks if they are in between a lower and an upper bound. + */ record InclusiveRange(String key, int upper, int lower) implements Condition { public InclusiveRange { if (upper < lower) { @@ -192,6 +210,9 @@ public String toString() { } } + /** + * Selects a tag which has one of a set of given values. + */ record OneOf(String key, String... values) implements Condition { @Override public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { @@ -204,6 +225,9 @@ public String toString() { } } + /** + * Selects a tag which has one of a set of given values or the tag is absent. + */ record OneOfOrAbsent(String key, String... values) implements Condition { /* A use case for this is to detect the absence of a sidewalk, cycle lane or verge*/ public OneOfOrAbsent(String key) { From 22ed45effc1cc4e70c03dab62f814d8b834d0561 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Thu, 27 Jun 2024 16:45:00 +0200 Subject: [PATCH 23/54] Prevent modifications on read-only timetables --- .../model/TimetableSnapshot.java | 16 +++---- .../model/TimetableSnapshotTest.java | 47 +++++++++++++++++++ 2 files changed, 55 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java index ac4de0ce38c..2499264d8c8 100644 --- a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java +++ b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java @@ -92,7 +92,7 @@ public class TimetableSnapshot { * The compound key approach better reflects the fact that there should be only one Timetable per * TripPattern and date. */ - private Map> timetables = new HashMap(); + private Map> timetables = new HashMap<>(); /** * For cases where the trip pattern (sequence of stops visited) has been changed by a realtime @@ -266,7 +266,7 @@ public TimetableSnapshot commit(TransitLayerUpdater transitLayerUpdater, boolean this.dirtyTimetables.clear(); this.dirty = false; - ret.setPatternsForStop(ImmutableSetMultimap.copyOf(patternsForStop)); + ret.patternsForStop = ImmutableSetMultimap.copyOf(patternsForStop); ret.readOnly = true; // mark the snapshot as henceforth immutable return ret; @@ -303,6 +303,10 @@ public void clear(String feedId) { * message and an attempt was made to re-associate it with its originally scheduled trip pattern. */ public boolean revertTripToScheduledTripPattern(FeedScopedId tripId, LocalDate serviceDate) { + if (readOnly) { + throw new ConcurrentModificationException("This TimetableSnapshot is read-only."); + } + boolean success = false; final TripPattern pattern = getRealtimeAddedTripPattern(tripId, serviceDate); @@ -406,10 +410,6 @@ public Collection getPatternsForStop(StopLocation stop) { return patternsForStop.get(stop); } - public void setPatternsForStop(SetMultimap patternsForStop) { - this.patternsForStop = patternsForStop; - } - /** * Does this snapshot contain any realtime data or is it completely empty? */ @@ -423,7 +423,7 @@ public boolean isEmpty() { * @param feedId feed id to clear out * @return true if the timetable changed as a result of the call */ - protected boolean clearTimetable(String feedId) { + private boolean clearTimetable(String feedId) { return timetables.keySet().removeIf(tripPattern -> feedId.equals(tripPattern.getFeedId())); } @@ -433,7 +433,7 @@ protected boolean clearTimetable(String feedId) { * @param feedId feed id to clear out * @return true if the realtimeAddedTripPattern changed as a result of the call */ - protected boolean clearRealtimeAddedTripPattern(String feedId) { + private boolean clearRealtimeAddedTripPattern(String feedId) { return realtimeAddedTripPattern .keySet() .removeIf(realtimeAddedTripPattern -> diff --git a/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java b/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java index 26d93f6a848..89c30da79e4 100644 --- a/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java +++ b/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java @@ -5,6 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import com.google.transit.realtime.GtfsRealtime.TripDescriptor; @@ -261,6 +262,52 @@ public void testPurge() { assertFalse(resolver.isDirty()); } + @Test + void testCannotUpdateReadOnlyTimetableSnapshot() { + TimetableSnapshot committedSnapshot = createCommittedSnapshot(); + LocalDate today = LocalDate.now(timeZone); + TripPattern pattern = patternIndex.get(new FeedScopedId(feedId, "1.1")); + assertThrows( + ConcurrentModificationException.class, + () -> committedSnapshot.update(pattern, null, today) + ); + } + + @Test + void testCannotCommitReadOnlyTimetableSnapshot() { + TimetableSnapshot committedSnapshot = createCommittedSnapshot(); + assertThrows(ConcurrentModificationException.class, () -> committedSnapshot.commit(null, true)); + } + + @Test + void testCannotClearReadOnlyTimetableSnapshot() { + TimetableSnapshot committedSnapshot = createCommittedSnapshot(); + assertThrows(ConcurrentModificationException.class, () -> committedSnapshot.clear(null)); + } + + @Test + void testCannotPurgeReadOnlyTimetableSnapshot() { + TimetableSnapshot committedSnapshot = createCommittedSnapshot(); + assertThrows( + ConcurrentModificationException.class, + () -> committedSnapshot.purgeExpiredData(null) + ); + } + + @Test + void testCannotRevertReadOnlyTimetableSnapshot() { + TimetableSnapshot committedSnapshot = createCommittedSnapshot(); + assertThrows( + ConcurrentModificationException.class, + () -> committedSnapshot.revertTripToScheduledTripPattern(null, null) + ); + } + + private static TimetableSnapshot createCommittedSnapshot() { + TimetableSnapshot timetableSnapshot = new TimetableSnapshot(); + return timetableSnapshot.commit(null, true); + } + private Result updateResolver( TimetableSnapshot resolver, TripPattern pattern, From 93a132ad9d1ca2a8bddc642b4f917437a4ed73ed Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 2 Jul 2024 14:42:28 +0200 Subject: [PATCH 24/54] Apply review feedback --- doc-templates/OsmMapper.md | 12 ++++++++++++ docs/osm/Default.md | 12 ++++++++++++ docs/osm/Finland.md | 12 ++++++++++++ docs/osm/Germany.md | 12 ++++++++++++ docs/osm/Norway.md | 12 ++++++++++++ docs/osm/UK.md | 12 ++++++++++++ 6 files changed, 72 insertions(+) diff --git a/doc-templates/OsmMapper.md b/doc-templates/OsmMapper.md index 1fe32ea06e9..1690deac627 100644 --- a/doc-templates/OsmMapper.md +++ b/doc-templates/OsmMapper.md @@ -1,5 +1,17 @@ # OSM tag mapping +This page is intended to give an overview of which OpenStreetMap(OSM) tags OTP uses to evaluate its +walking and bicycling instructions. If a tag is not part of the documentation on this page +then this tag mapper (profile) does not use it. + +The exception are access permissions and wheelchair accessibility tags like + +- `access=no` +- `wheelchair=no` +- `oneway=yes` + +These are identical for all mappers and not separately listed on this page. + ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. diff --git a/docs/osm/Default.md b/docs/osm/Default.md index c390c8e4a1b..814420b791f 100644 --- a/docs/osm/Default.md +++ b/docs/osm/Default.md @@ -1,5 +1,17 @@ # OSM tag mapping +This page is intended to give an overview of which OpenStreetMap(OSM) tags OTP uses to evaluate its +walking and bicycling instructions. If a tag is not part of the documentation on this page +then this tag mapper (profile) does not use it. + +The exception are access permissions and wheelchair accessibility tags like + +- `access=no` +- `wheelchair=no` +- `oneway=yes` + +These are identical for all mappers and not separately listed on this page. + ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. diff --git a/docs/osm/Finland.md b/docs/osm/Finland.md index 33b1ee9ae2a..8a60b5f0b13 100644 --- a/docs/osm/Finland.md +++ b/docs/osm/Finland.md @@ -1,5 +1,17 @@ # OSM tag mapping +This page is intended to give an overview of which OpenStreetMap(OSM) tags OTP uses to evaluate its +walking and bicycling instructions. If a tag is not part of the documentation on this page +then this tag mapper (profile) does not use it. + +The exception are access permissions and wheelchair accessibility tags like + +- `access=no` +- `wheelchair=no` +- `oneway=yes` + +These are identical for all mappers and not separately listed on this page. + ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. diff --git a/docs/osm/Germany.md b/docs/osm/Germany.md index 9420e22025e..922aa3af836 100644 --- a/docs/osm/Germany.md +++ b/docs/osm/Germany.md @@ -1,5 +1,17 @@ # OSM tag mapping +This page is intended to give an overview of which OpenStreetMap(OSM) tags OTP uses to evaluate its +walking and bicycling instructions. If a tag is not part of the documentation on this page +then this tag mapper (profile) does not use it. + +The exception are access permissions and wheelchair accessibility tags like + +- `access=no` +- `wheelchair=no` +- `oneway=yes` + +These are identical for all mappers and not separately listed on this page. + ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. diff --git a/docs/osm/Norway.md b/docs/osm/Norway.md index f0c17c24a6c..d38fc4c04df 100644 --- a/docs/osm/Norway.md +++ b/docs/osm/Norway.md @@ -1,5 +1,17 @@ # OSM tag mapping +This page is intended to give an overview of which OpenStreetMap(OSM) tags OTP uses to evaluate its +walking and bicycling instructions. If a tag is not part of the documentation on this page +then this tag mapper (profile) does not use it. + +The exception are access permissions and wheelchair accessibility tags like + +- `access=no` +- `wheelchair=no` +- `oneway=yes` + +These are identical for all mappers and not separately listed on this page. + ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. diff --git a/docs/osm/UK.md b/docs/osm/UK.md index 3dd77b1b393..4a640caf95c 100644 --- a/docs/osm/UK.md +++ b/docs/osm/UK.md @@ -1,5 +1,17 @@ # OSM tag mapping +This page is intended to give an overview of which OpenStreetMap(OSM) tags OTP uses to evaluate its +walking and bicycling instructions. If a tag is not part of the documentation on this page +then this tag mapper (profile) does not use it. + +The exception are access permissions and wheelchair accessibility tags like + +- `access=no` +- `wheelchair=no` +- `oneway=yes` + +These are identical for all mappers and not separately listed on this page. + ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. From b057fbce5a6317cb433bb36f144fc1a8ffad60dc Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 3 Jul 2024 10:13:19 +0200 Subject: [PATCH 25/54] Update src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java Co-authored-by: Joel Lappalainen --- .../openstreetmap/wayproperty/specifier/Condition.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java index 35a104c5980..3344074f536 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java @@ -123,7 +123,7 @@ public String toString() { } /** - * Selects tags with a give key. + * Selects tags with a given key. */ record Present(String key) implements Condition { @Override From a9441a7060ba7e9c56ad667280f83933288323ea Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 3 Jul 2024 10:14:37 +0200 Subject: [PATCH 26/54] Improve Javadoc --- .../openstreetmap/wayproperty/specifier/Condition.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java index 3344074f536..4ad180c16c3 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java @@ -226,7 +226,9 @@ public String toString() { } /** - * Selects a tag which has one of a set of given values or the tag is absent. + * Selects a tag where one of the following conditions is true: + * - one of a set of given values matches + * - the tag is absent */ record OneOfOrAbsent(String key, String... values) implements Condition { /* A use case for this is to detect the absence of a sidewalk, cycle lane or verge*/ From 2a07977cdf4f4f7602c940b20611412b3b402143 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 3 Jul 2024 12:32:02 +0200 Subject: [PATCH 27/54] Allow configuration of allowKeepingAtDestination --- docs/sandbox/VehicleRentalServiceDirectory.md | 1 + .../VehicleRentalServiceDirectoryFetcher.java | 3 +-- .../api/NetworkParameters.java | 14 +++++++++----- ...VehicleRentalServiceDirectoryFetcherConfig.java | 6 ++++++ 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/docs/sandbox/VehicleRentalServiceDirectory.md b/docs/sandbox/VehicleRentalServiceDirectory.md index 8009a62f912..a822fe93d65 100644 --- a/docs/sandbox/VehicleRentalServiceDirectory.md +++ b/docs/sandbox/VehicleRentalServiceDirectory.md @@ -38,6 +38,7 @@ the `router-config.json` | url | `uri` | Endpoint for the VehicleRentalServiceDirectory | *Required* | | 2.1 | | [headers](#vehicleRentalServiceDirectory_headers) | `map of string` | HTTP headers to add to the request. Any header key, value can be inserted. | *Optional* | | 2.1 | | [networks](#vehicleRentalServiceDirectory_networks) | `object[]` | List all networks to include. Use "network": "default-network" to set defaults. | *Optional* | | 2.4 | +|       allowKeepingVehicleAtDestination | `boolean` | Enables `allowKeepingVehicleAtDestination` for the given network | *Optional* | `false` | 2.5 | |       geofencingZones | `boolean` | Enables geofencingZones for the given network | *Optional* | `false` | 2.4 | |       network | `string` | The network name | *Required* | | 2.4 | diff --git a/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/VehicleRentalServiceDirectoryFetcher.java b/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/VehicleRentalServiceDirectoryFetcher.java index 9b350dec345..03b0acd59cd 100644 --- a/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/VehicleRentalServiceDirectoryFetcher.java +++ b/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/VehicleRentalServiceDirectoryFetcher.java @@ -105,8 +105,7 @@ private static List buildListOfNetworksFr new GbfsVehicleRentalDataSourceParameters( updaterUrl.get(), parameters.getLanguage(), - // allowKeepingRentedVehicleAtDestination - not part of GBFS, not supported here - false, + networkParams.allowKeepingAtDestination(), parameters.getHeaders(), networkName, networkParams.geofencingZones(), diff --git a/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java b/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java index 25d394f72ec..c99c6893618 100644 --- a/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java +++ b/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java @@ -5,15 +5,19 @@ /** * Parameters for a specific network. *

- * The {@link GbfsVehicleRentalDataSourceParameters} support {@code overloadingAllowed} and - * {@code allowKeepingRentedVehicleAtDestination} is not included here since they are not part of - * the GBFS specification. If there is a demand for these, they can be added. + * The {@link GbfsVehicleRentalDataSourceParameters} supports {@code overloadingAllowed} + * which is not included here since they are not part of + * the GBFS specification. If there is a demand for it, it can be added. *

* @param network The network name * @param geofencingZones enable geofencingZones for the given network */ -public record NetworkParameters(String network, boolean geofencingZones) { +public record NetworkParameters( + String network, + boolean geofencingZones, + boolean allowKeepingAtDestination +) { public NetworkParameters withName(String network) { - return new NetworkParameters(network, geofencingZones); + return new NetworkParameters(network, geofencingZones, allowKeepingAtDestination); } } diff --git a/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java b/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java index b30fc3d5b3f..3a7da95bfec 100644 --- a/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java @@ -3,6 +3,7 @@ import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_0; import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_1; import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_4; +import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_5; import java.util.List; import org.opentripplanner.ext.vehiclerentalservicedirectory.api.NetworkParameters; @@ -79,6 +80,11 @@ private static List mapNetworkParameters( .of("geofencingZones") .since(V2_4) .summary("Enables geofencingZones for the given network") + .asBoolean(false), + c + .of("allowKeepingVehicleAtDestination") + .since(V2_5) + .summary("Enables `allowKeepingVehicleAtDestination` for the given network") .asBoolean(false) ) ); From 39cfada63b1f9e1673631958e2a88086f1b6ad6f Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 3 Jul 2024 12:42:38 +0200 Subject: [PATCH 28/54] Add changelog entry --- doc-templates/sandbox/VehicleRentalServiceDirectory.md | 3 ++- docs/sandbox/VehicleRentalServiceDirectory.md | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/doc-templates/sandbox/VehicleRentalServiceDirectory.md b/doc-templates/sandbox/VehicleRentalServiceDirectory.md index d9908de1a90..d550fe27dc2 100644 --- a/doc-templates/sandbox/VehicleRentalServiceDirectory.md +++ b/doc-templates/sandbox/VehicleRentalServiceDirectory.md @@ -1,4 +1,4 @@ -# Vehicle Rental Service Directory API support. +# Vehicle Rental Service Directory API support This adds support for the GBFS service directory endpoint component located at https://github.com/entur/lamassu. OTP uses the service directory to lookup and connect to all GBFS @@ -17,6 +17,7 @@ configuration from it. - Initial implementation of bike share updater API support - Make json tag names configurable [#3447](https://github.com/opentripplanner/OpenTripPlanner/pull/3447) - Enable GBFS geofencing with VehicleRentalServiceDirectory [#5324](https://github.com/opentripplanner/OpenTripPlanner/pull/5324) +- Enable `allowKeepingVehicleAtDestination` [#5944](https://github.com/opentripplanner/OpenTripPlanner/pull/5944) ## Configuration diff --git a/docs/sandbox/VehicleRentalServiceDirectory.md b/docs/sandbox/VehicleRentalServiceDirectory.md index a822fe93d65..feb5cb91ecb 100644 --- a/docs/sandbox/VehicleRentalServiceDirectory.md +++ b/docs/sandbox/VehicleRentalServiceDirectory.md @@ -1,4 +1,4 @@ -# Vehicle Rental Service Directory API support. +# Vehicle Rental Service Directory API support This adds support for the GBFS service directory endpoint component located at https://github.com/entur/lamassu. OTP uses the service directory to lookup and connect to all GBFS @@ -17,6 +17,7 @@ configuration from it. - Initial implementation of bike share updater API support - Make json tag names configurable [#3447](https://github.com/opentripplanner/OpenTripPlanner/pull/3447) - Enable GBFS geofencing with VehicleRentalServiceDirectory [#5324](https://github.com/opentripplanner/OpenTripPlanner/pull/5324) +- Enable `allowKeepingVehicleAtDestination` [#5944](https://github.com/opentripplanner/OpenTripPlanner/pull/5944) ## Configuration From 3c81fcaf9c754a760ece74cd61a3859eb7541161 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Wed, 3 Jul 2024 23:12:11 +0300 Subject: [PATCH 29/54] Remove unused code --- .../org/opentripplanner/inspector/vector/LayerParameters.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java b/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java index 0d6a4b23d6b..cb849e0f0ac 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java +++ b/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java @@ -1,7 +1,5 @@ package org.opentripplanner.inspector.vector; -import java.util.ArrayList; -import java.util.List; import org.opentripplanner.apis.support.mapping.PropertyMapper; /** @@ -12,7 +10,6 @@ public interface LayerParameters> { int MAX_ZOOM = 20; int CACHE_MAX_SECONDS = -1; double EXPANSION_FACTOR = 0.25d; - List HIDE_NETWORKS = new ArrayList<>(); /** * User-visible name of the layer */ From b64b08af2b6c0ee79189c6e571daf2be7dc79c3e Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 4 Jul 2024 12:50:04 +0300 Subject: [PATCH 30/54] Add and update GraphQL integration tests --- .../apis/gtfs/GraphQLIntegrationTest.java | 34 ++++++++++++------- .../TestFreeFloatingRentalVehicleBuilder.java | 24 +++++++++++++ .../TestVehicleRentalStationBuilder.java | 24 +++++++++++++ .../apis/gtfs/expectations/nearest.json | 14 ++++++++ .../gtfs/expectations/rental-vehicle.json | 21 ++++++++++++ .../expectations/vehicle-rental-station.json | 5 ++- .../apis/gtfs/queries/nearest.graphql | 14 +++++++- .../apis/gtfs/queries/rental-vehicle.graphql | 23 +++++++++++++ .../queries/vehicle-rental-station.graphql | 3 ++ 9 files changed, 148 insertions(+), 14 deletions(-) create mode 100644 src/test/resources/org/opentripplanner/apis/gtfs/expectations/rental-vehicle.json create mode 100644 src/test/resources/org/opentripplanner/apis/gtfs/queries/rental-vehicle.graphql diff --git a/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java b/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java index c73a607b594..6b74db2c20d 100644 --- a/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java +++ b/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java @@ -73,8 +73,10 @@ import org.opentripplanner.service.realtimevehicles.internal.DefaultRealtimeVehicleService; import org.opentripplanner.service.realtimevehicles.model.RealtimeVehicle; import org.opentripplanner.service.vehiclerental.internal.DefaultVehicleRentalService; +import org.opentripplanner.service.vehiclerental.model.TestFreeFloatingRentalVehicleBuilder; import org.opentripplanner.service.vehiclerental.model.TestVehicleRentalStationBuilder; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; import org.opentripplanner.standalone.config.framework.json.JsonSupport; import org.opentripplanner.test.support.FilePatternSource; import org.opentripplanner.transit.model._data.TransitModelForTest; @@ -112,6 +114,18 @@ class GraphQLIntegrationTest { .map(p -> (RegularStop) p.stop) .toList(); + private static VehicleRentalStation VEHICLE_RENTAL_STATION = new TestVehicleRentalStationBuilder() + .withVehicles(10) + .withSpaces(10) + .withVehicleTypeBicycle(5, 7) + .withVehicleTypeElectricBicycle(5, 3) + .withSystem("system-1", "https://foo.bar") + .build(); + + private static VehicleRentalVehicle RENTAL_VEHICLE = new TestFreeFloatingRentalVehicleBuilder() + .withSystem("system-1", "https://foo.bar") + .build(); + static final Graph GRAPH = new Graph(); static final Instant ALERT_START_TIME = OffsetDateTime @@ -280,13 +294,8 @@ public TransitAlertService getTransitAlertService() { realtimeVehicleService.setRealtimeVehicles(pattern, List.of(occypancyVehicle, positionVehicle)); DefaultVehicleRentalService defaultVehicleRentalService = new DefaultVehicleRentalService(); - VehicleRentalStation vehicleRentalStation = new TestVehicleRentalStationBuilder() - .withVehicles(10) - .withSpaces(10) - .withVehicleTypeBicycle(5, 7) - .withVehicleTypeElectricBicycle(5, 3) - .build(); - defaultVehicleRentalService.addVehicleRentalStation(vehicleRentalStation); + defaultVehicleRentalService.addVehicleRentalStation(VEHICLE_RENTAL_STATION); + defaultVehicleRentalService.addVehicleRentalStation(RENTAL_VEHICLE); context = new GraphQLRequestContext( @@ -451,11 +460,12 @@ public List findClosestPlaces( List filterByNetwork, TransitService transitService ) { - return List - .of(TransitModelForTest.of().stop("A").build()) - .stream() - .map(stop -> new PlaceAtDistance(stop, 0)) - .toList(); + var stop = TransitModelForTest.of().stop("A").build(); + return List.of( + new PlaceAtDistance(stop, 0), + new PlaceAtDistance(VEHICLE_RENTAL_STATION, 30), + new PlaceAtDistance(RENTAL_VEHICLE, 50) + ); } }; } diff --git a/src/test/java/org/opentripplanner/service/vehiclerental/model/TestFreeFloatingRentalVehicleBuilder.java b/src/test/java/org/opentripplanner/service/vehiclerental/model/TestFreeFloatingRentalVehicleBuilder.java index 4864fab5e43..c3837942426 100644 --- a/src/test/java/org/opentripplanner/service/vehiclerental/model/TestFreeFloatingRentalVehicleBuilder.java +++ b/src/test/java/org/opentripplanner/service/vehiclerental/model/TestFreeFloatingRentalVehicleBuilder.java @@ -13,6 +13,7 @@ public class TestFreeFloatingRentalVehicleBuilder { private double latitude = DEFAULT_LATITUDE; private double longitude = DEFAULT_LONGITUDE; + private VehicleRentalSystem system = null; private RentalVehicleType vehicleType = RentalVehicleType.getDefaultType(NETWORK_1); @@ -30,6 +31,28 @@ public TestFreeFloatingRentalVehicleBuilder withLongitude(double longitude) { return this; } + public TestFreeFloatingRentalVehicleBuilder withSystem(String id, String url) { + this.system = + new VehicleRentalSystem( + id, + null, + null, + null, + null, + url, + null, + null, + null, + null, + null, + null, + null, + null, + null + ); + return this; + } + public TestFreeFloatingRentalVehicleBuilder withVehicleScooter() { return buildVehicleType(RentalFormFactor.SCOOTER); } @@ -63,6 +86,7 @@ public VehicleRentalVehicle build() { vehicle.latitude = latitude; vehicle.longitude = longitude; vehicle.vehicleType = vehicleType; + vehicle.system = system; return vehicle; } } diff --git a/src/test/java/org/opentripplanner/service/vehiclerental/model/TestVehicleRentalStationBuilder.java b/src/test/java/org/opentripplanner/service/vehiclerental/model/TestVehicleRentalStationBuilder.java index 33f922ff0b9..0fb9f8b620f 100644 --- a/src/test/java/org/opentripplanner/service/vehiclerental/model/TestVehicleRentalStationBuilder.java +++ b/src/test/java/org/opentripplanner/service/vehiclerental/model/TestVehicleRentalStationBuilder.java @@ -19,6 +19,7 @@ public class TestVehicleRentalStationBuilder { private int spaces = 10; private boolean overloadingAllowed = false; private boolean stationOn = false; + private VehicleRentalSystem system = null; private final Map vehicleTypesAvailable = new HashMap<>(); private final Map vehicleSpacesAvailable = new HashMap<>(); @@ -52,6 +53,28 @@ public TestVehicleRentalStationBuilder withStationOn(boolean stationOn) { return this; } + public TestVehicleRentalStationBuilder withSystem(String id, String url) { + this.system = + new VehicleRentalSystem( + id, + null, + null, + null, + null, + url, + null, + null, + null, + null, + null, + null, + null, + null, + null + ); + return this; + } + public TestVehicleRentalStationBuilder withVehicleTypeBicycle(int numAvailable, int numSpaces) { return buildVehicleType( RentalFormFactor.BICYCLE, @@ -127,6 +150,7 @@ public VehicleRentalStation build() { station.isRenting = stationOn; station.isReturning = stationOn; station.realTimeData = true; + station.system = system; return station; } } diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/expectations/nearest.json b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/nearest.json index 82d929adeb1..b6b5b7ee674 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/expectations/nearest.json +++ b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/nearest.json @@ -10,6 +10,20 @@ "parentStation" : null } } + }, + { + "node" : { + "place" : { + "stationId" : "Network-1:FooStation" + } + } + }, + { + "node" : { + "place" : { + "vehicleId" : "Network-1:free-floating-bicycle" + } + } } ] } diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/expectations/rental-vehicle.json b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/rental-vehicle.json new file mode 100644 index 00000000000..800366f4e2c --- /dev/null +++ b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/rental-vehicle.json @@ -0,0 +1,21 @@ +{ + "data": { + "rentalVehicle": { + "vehicleId":"Network-1:free-floating-bicycle", + "name":"free-floating-bicycle", + "allowPickupNow":true, + "network":"Network-1", + "lon":19.01, + "lat":47.52, + "rentalUris":null, + "operative":true, + "vehicleType": { + "formFactor":"BICYCLE", + "propulsionType":"HUMAN" + }, + "vehicleRentalSystem": { + "url":"https://foo.bar" + } + } + } +} diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rental-station.json b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rental-station.json index ef1284c5c5e..4981b44f7e7 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rental-station.json +++ b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rental-station.json @@ -53,7 +53,10 @@ "capacity" : null, "allowOverloading" : false, "rentalUris" : null, - "operative" : false + "operative" : false, + "vehicleRentalSystem" : { + "url" : "https://foo.bar" + } } } } diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/nearest.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/nearest.graphql index c7f8eed4213..469a117bab4 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/nearest.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/nearest.graphql @@ -1,5 +1,11 @@ { - nearest(lat: 60.19915, lon: 24.94089, maxDistance: 500) { + nearest( + lat: 60.19915 + lon: 24.94089 + maxDistance: 500 + filterByPlaceTypes: [STOP, VEHICLE_RENT] + filterByNetwork: ["Network-1"] + ) { edges { node { place { @@ -10,6 +16,12 @@ id } } + ... on RentalVehicle { + vehicleId + } + ... on VehicleRentalStation { + stationId + } } } } diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/rental-vehicle.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/rental-vehicle.graphql new file mode 100644 index 00000000000..859051e0c24 --- /dev/null +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/rental-vehicle.graphql @@ -0,0 +1,23 @@ +{ + rentalVehicle(id: "Network-1:free-floating-bicycle") { + vehicleId + name + allowPickupNow + network + lon + lat + rentalUris { + android + ios + web + } + operative + vehicleType { + formFactor + propulsionType + } + vehicleRentalSystem { + url + } + } +} diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/vehicle-rental-station.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/vehicle-rental-station.graphql index 8e555ffdbdd..f0c5d221dd2 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/vehicle-rental-station.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/vehicle-rental-station.graphql @@ -39,5 +39,8 @@ web } operative + vehicleRentalSystem { + url + } } } From 9a3edc14362465b75b1f792718808a07f9c27f6c Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 4 Jul 2024 14:53:45 +0300 Subject: [PATCH 31/54] Add place finder tests for rental --- .../PlaceFinderTraverseVisitor.java | 2 +- .../PlaceFinderTraverseVisitorTest.java | 71 +++++++++++++++++++ .../street/search/state/TestStateBuilder.java | 14 ++++ 3 files changed, 86 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java b/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java index 41b8ea6cbc4..16420a0d9eb 100644 --- a/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java +++ b/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java @@ -31,6 +31,7 @@ public class PlaceFinderTraverseVisitor implements TraverseVisitor private final Set filterByStops; private final Set filterByStations; private final Set filterByRoutes; + private final Set filterByNetwork; private final Set filterByVehicleRental; private final Set seenPatternAtStops = new HashSet<>(); private final Set seenStops = new HashSet<>(); @@ -44,7 +45,6 @@ public class PlaceFinderTraverseVisitor implements TraverseVisitor private final boolean includeStations; private final int maxResults; private final double radiusMeters; - private final Set filterByNetwork; /** * @param transitService A TransitService used in finding information about the diff --git a/src/test/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitorTest.java b/src/test/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitorTest.java index 0796176d9bb..b69a6533334 100644 --- a/src/test/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitorTest.java +++ b/src/test/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitorTest.java @@ -13,6 +13,7 @@ import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.model.StopTime; +import org.opentripplanner.service.vehiclerental.model.TestVehicleRentalStationBuilder; import org.opentripplanner.street.search.state.TestStateBuilder; import org.opentripplanner.transit.model._data.TransitModelForTest; import org.opentripplanner.transit.model.basic.TransitMode; @@ -280,4 +281,74 @@ void stopsAndStationsWithStopAndStationFilter() { visitor.visitVertex(state1); } + + @Test + void rentalStation() { + var visitor = new PlaceFinderTraverseVisitor( + transitService, + null, + List.of(PlaceType.VEHICLE_RENT), + null, + null, + null, + null, + null, + 1, + 500 + ); + var station = new TestVehicleRentalStationBuilder().build(); + assertEquals(List.of(), visitor.placesFound); + var state1 = TestStateBuilder.ofWalking().rentalStation(station).build(); + visitor.visitVertex(state1); + + var res = visitor.placesFound.stream().map(PlaceAtDistance::place).toList(); + + assertEquals(List.of(station), res); + } + + @Test + void rentalStationWithNetworksFilter() { + var visitor = new PlaceFinderTraverseVisitor( + transitService, + null, + List.of(PlaceType.VEHICLE_RENT), + null, + null, + null, + null, + List.of("Network-1"), + 1, + 500 + ); + var station = new TestVehicleRentalStationBuilder().build(); + assertEquals(List.of(), visitor.placesFound); + var state1 = TestStateBuilder.ofWalking().rentalStation(station).build(); + visitor.visitVertex(state1); + + var res = visitor.placesFound.stream().map(PlaceAtDistance::place).toList(); + + assertEquals(List.of(station), res); + + visitor = + new PlaceFinderTraverseVisitor( + transitService, + null, + List.of(PlaceType.VEHICLE_RENT), + null, + null, + null, + null, + List.of("Network-2"), + 1, + 500 + ); + + assertEquals(List.of(), visitor.placesFound); + state1 = TestStateBuilder.ofWalking().rentalStation(station).build(); + visitor.visitVertex(state1); + + res = visitor.placesFound.stream().map(PlaceAtDistance::place).toList(); + + assertEquals(List.of(), res); + } } diff --git a/src/test/java/org/opentripplanner/street/search/state/TestStateBuilder.java b/src/test/java/org/opentripplanner/street/search/state/TestStateBuilder.java index e43c5a769d0..3750c4619b9 100644 --- a/src/test/java/org/opentripplanner/street/search/state/TestStateBuilder.java +++ b/src/test/java/org/opentripplanner/street/search/state/TestStateBuilder.java @@ -16,6 +16,7 @@ import org.opentripplanner.service.vehiclerental.model.TestFreeFloatingRentalVehicleBuilder; import org.opentripplanner.service.vehiclerental.model.TestVehicleRentalStationBuilder; import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; import org.opentripplanner.service.vehiclerental.street.StreetVehicleRentalLink; import org.opentripplanner.service.vehiclerental.street.VehicleRentalEdge; import org.opentripplanner.service.vehiclerental.street.VehicleRentalPlaceVertex; @@ -219,6 +220,19 @@ public TestStateBuilder stop() { return arriveAtStop(testModel.stop("stop", count, count).build()); } + /** + * Add a state that arrives at a rental station. + */ + public TestStateBuilder rentalStation(VehicleRentalStation station) { + count++; + var from = (StreetVertex) currentState.vertex; + var to = new VehicleRentalPlaceVertex(station); + + var link = StreetVehicleRentalLink.createStreetVehicleRentalLink(from, to); + currentState = link.traverse(currentState)[0]; + return this; + } + public TestStateBuilder enterStation(String id) { count++; var from = (StreetVertex) currentState.vertex; From babd0fa23d1abcbe549a6ec1e16fbe5196f98e50 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 5 Jul 2024 11:02:40 +0200 Subject: [PATCH 32/54] Disable Legacy REST API by default --- docs/Configuration.md | 2 +- .../org/opentripplanner/framework/application/OTPFeature.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Configuration.md b/docs/Configuration.md index 05611e23628..a4e8b5100a4 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -241,7 +241,7 @@ Here is a list of all features which can be toggled on/off and their default val | `FaresV2` | Enable import of GTFS-Fares v2 data. | | ✓️ | | `FlexRouting` | Enable FLEX routing. | | ✓️ | | `GoogleCloudStorage` | Enable Google Cloud Storage integration. | | ✓️ | -| `LegacyRestApi` | Enable legacy REST API. This API will be removed in the future. | ✓️ | ✓️ | +| `LegacyRestApi` | Enable legacy REST API. This API will be removed in the future. | | ✓️ | | `RealtimeResolver` | When routing with ignoreRealtimeUpdates=true, add an extra step which populates results with real-time data | | ✓️ | | `ReportApi` | Enable the report API. | | ✓️ | | `RestAPIPassInDefaultConfigAsJson` | Enable a default RouteRequest to be passed in as JSON on the REST API - FOR DEBUGGING ONLY! | | | diff --git a/src/main/java/org/opentripplanner/framework/application/OTPFeature.java b/src/main/java/org/opentripplanner/framework/application/OTPFeature.java index 29489de19f2..8ee5d100b94 100644 --- a/src/main/java/org/opentripplanner/framework/application/OTPFeature.java +++ b/src/main/java/org/opentripplanner/framework/application/OTPFeature.java @@ -89,7 +89,7 @@ public enum OTPFeature { FaresV2(false, true, "Enable import of GTFS-Fares v2 data."), FlexRouting(false, true, "Enable FLEX routing."), GoogleCloudStorage(false, true, "Enable Google Cloud Storage integration."), - LegacyRestApi(true, true, "Enable legacy REST API. This API will be removed in the future."), + LegacyRestApi(false, true, "Enable legacy REST API. This API will be removed in the future."), RealtimeResolver( false, true, From 66dedbb9435b2ab65f7c472a7f0633ebbf412d05 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Mon, 1 Jul 2024 09:34:59 +0200 Subject: [PATCH 33/54] Fix copy-on-write in TimetableSnapshot --- .../model/TimetableSnapshot.java | 61 ++++++++++++------- 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java index 5c018412572..0b6655e2ec4 100644 --- a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java +++ b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java @@ -1,6 +1,7 @@ package org.opentripplanner.model; import com.google.common.collect.HashMultimap; +import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.SetMultimap; import java.time.LocalDate; import java.util.Collection; @@ -186,25 +187,7 @@ public Result update( Timetable tt = resolve(pattern, serviceDate); // we need to perform the copy of Timetable here rather than in Timetable.update() // to avoid repeatedly copying in case several updates are applied to the same timetable - if (!dirtyTimetables.contains(tt)) { - Timetable old = tt; - tt = new Timetable(tt, serviceDate); - SortedSet sortedTimetables = timetables.get(pattern); - if (sortedTimetables == null) { - sortedTimetables = new TreeSet<>(new SortedTimetableComparator()); - } else { - SortedSet temp = new TreeSet<>(new SortedTimetableComparator()); - temp.addAll(sortedTimetables); - sortedTimetables = temp; - } - if (old.getServiceDate() != null) { - sortedTimetables.remove(old); - } - sortedTimetables.add(tt); - timetables.put(pattern, sortedTimetables); - dirtyTimetables.add(tt); - dirty = true; - } + tt = copyTimetable(pattern, serviceDate, tt); // Assume all trips in a pattern are from the same feed, which should be the case. // Find trip index @@ -330,10 +313,11 @@ public boolean revertTripToScheduledTripPattern(FeedScopedId tripId, LocalDate s } if (tripTimesToRemove != null) { - for (Timetable sortedTimetable : sortedTimetables) { - boolean isDirty = sortedTimetable.getTripTimes().remove(tripTimesToRemove); + for (Timetable originalTimetable : sortedTimetables) { + boolean isDirty = originalTimetable.getTripTimes().contains(tripTimesToRemove); if (isDirty) { - dirtyTimetables.add(sortedTimetable); + Timetable updatedTimetable = copyTimetable(pattern, serviceDate, originalTimetable); + updatedTimetable.getTripTimes().remove(tripTimesToRemove); } } } @@ -455,6 +439,39 @@ private void addPatternToIndex(TripPattern tripPattern) { } } + /** + * Make a copy of the given timetable for a given pattern and service date. + * If the timetable was already copied-on write in this snapshot, the same instance will be + * returned. The SortedSet that holds the collection of Timetables for that pattern + * (sorted by service date) is shared between multiple snapshots and must be copied as well.
+ * Note on performance: if multiple Timetables are modified in a SortedSet, the SortedSet will be + * copied multiple times. The impact on memory/garbage collection is assumed to be minimal + * since the collection is small. + * The SortedSet is made immutable to prevent change after snapshot publication. + */ + private Timetable copyTimetable(TripPattern pattern, LocalDate serviceDate, Timetable tt) { + if (!dirtyTimetables.contains(tt)) { + Timetable old = tt; + tt = new Timetable(tt, serviceDate); + SortedSet sortedTimetables = timetables.get(pattern); + if (sortedTimetables == null) { + sortedTimetables = new TreeSet<>(new SortedTimetableComparator()); + } else { + SortedSet temp = new TreeSet<>(new SortedTimetableComparator()); + temp.addAll(sortedTimetables); + sortedTimetables = temp; + } + if (old.getServiceDate() != null) { + sortedTimetables.remove(old); + } + sortedTimetables.add(tt); + timetables.put(pattern, ImmutableSortedSet.copyOfSorted(sortedTimetables)); + dirtyTimetables.add(tt); + dirty = true; + } + return tt; + } + protected static class SortedTimetableComparator implements Comparator { @Override From 7ab29bcc8922828a1386fcce3c621320aff2e28f Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Fri, 5 Jul 2024 15:34:41 +0300 Subject: [PATCH 34/54] Call system network in schema and move network id there --- .../apis/gtfs/GtfsGraphQLIndex.java | 4 +-- .../gtfs/datafetchers/RentalVehicleImpl.java | 2 +- ...mpl.java => VehicleRentalNetworkImpl.java} | 7 +++- .../VehicleRentalStationImpl.java | 2 +- .../gtfs/generated/GraphQLDataFetchers.java | 23 ++++++++----- .../apis/gtfs/generated/GraphQLTypes.java | 20 ++++++------ .../apis/gtfs/generated/graphql-codegen.yml | 2 +- .../opentripplanner/apis/gtfs/schema.graphqls | 32 ++++++++++++------- .../apis/gtfs/GraphQLIntegrationTest.java | 4 +-- .../gtfs/expectations/rental-vehicle.json | 4 +-- .../expectations/vehicle-rental-station.json | 4 +-- .../apis/gtfs/queries/rental-vehicle.graphql | 4 +-- .../queries/vehicle-rental-station.graphql | 4 +-- 13 files changed, 67 insertions(+), 45 deletions(-) rename src/main/java/org/opentripplanner/apis/gtfs/datafetchers/{VehicleRentalSystemImpl.java => VehicleRentalNetworkImpl.java} (70%) diff --git a/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java b/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java index 833dd96a907..ca059723acd 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java @@ -75,8 +75,8 @@ import org.opentripplanner.apis.gtfs.datafetchers.UnknownImpl; import org.opentripplanner.apis.gtfs.datafetchers.VehicleParkingImpl; import org.opentripplanner.apis.gtfs.datafetchers.VehiclePositionImpl; +import org.opentripplanner.apis.gtfs.datafetchers.VehicleRentalNetworkImpl; import org.opentripplanner.apis.gtfs.datafetchers.VehicleRentalStationImpl; -import org.opentripplanner.apis.gtfs.datafetchers.VehicleRentalSystemImpl; import org.opentripplanner.apis.gtfs.datafetchers.debugOutputImpl; import org.opentripplanner.apis.gtfs.datafetchers.elevationProfileComponentImpl; import org.opentripplanner.apis.gtfs.datafetchers.placeAtDistanceImpl; @@ -167,7 +167,7 @@ protected static GraphQLSchema buildSchema() { .type(typeWiring.build(BookingTimeImpl.class)) .type(typeWiring.build(BookingInfoImpl.class)) .type(typeWiring.build(VehicleRentalStationImpl.class)) - .type(typeWiring.build(VehicleRentalSystemImpl.class)) + .type(typeWiring.build(VehicleRentalNetworkImpl.class)) .type(typeWiring.build(RentalVehicleImpl.class)) .type(typeWiring.build(RentalVehicleTypeImpl.class)) .type(typeWiring.build(StopOnRouteImpl.class)) diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java index 1449c44e315..c4fb92c0ef4 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java @@ -63,7 +63,7 @@ public DataFetcher vehicleType() { } @Override - public DataFetcher vehicleRentalSystem() { + public DataFetcher rentalNetwork() { return environment -> getSource(environment).getVehicleRentalSystem(); } diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalSystemImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalNetworkImpl.java similarity index 70% rename from src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalSystemImpl.java rename to src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalNetworkImpl.java index 7256ab5aaa3..75f771eed83 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalSystemImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalNetworkImpl.java @@ -5,7 +5,12 @@ import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; import org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem; -public class VehicleRentalSystemImpl implements GraphQLDataFetchers.GraphQLVehicleRentalSystem { +public class VehicleRentalNetworkImpl implements GraphQLDataFetchers.GraphQLVehicleRentalNetwork { + + @Override + public DataFetcher networkId() { + return environment -> getSource(environment).systemId; + } @Override public DataFetcher url() { diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalStationImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalStationImpl.java index 117061b988e..0603d19e412 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalStationImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalStationImpl.java @@ -109,7 +109,7 @@ public DataFetcher availableSpaces() { } @Override - public DataFetcher vehicleRentalSystem() { + public DataFetcher rentalNetwork() { return environment -> getSource(environment).getVehicleRentalSystem(); } diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java index be74354e284..67944543580 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java @@ -853,13 +853,13 @@ public interface GraphQLRentalVehicle { public DataFetcher operative(); + public DataFetcher rentalNetwork(); + public DataFetcher rentalUris(); public DataFetcher vehicleId(); public DataFetcher vehicleType(); - - DataFetcher vehicleRentalSystem(); } public interface GraphQLRentalVehicleEntityCounts { @@ -1269,6 +1269,17 @@ public interface GraphQLVehiclePosition { public DataFetcher vehicleId(); } + /** + * Vehicle rental network, which is referred as system in the GBFS terminology. Note, the same operator can operate in multiple + * regions either with the same network/system or with a different one. This can contain information about either the rental brand + * or about the operator. + */ + public interface GraphQLVehicleRentalNetwork { + public DataFetcher networkId(); + + public DataFetcher url(); + } + /** Vehicle rental station represents a location where users can rent bicycles etc. for a fee. */ public interface GraphQLVehicleRentalStation { public DataFetcher allowDropoff(); @@ -1301,9 +1312,9 @@ public interface GraphQLVehicleRentalStation { public DataFetcher realtime(); - public DataFetcher rentalUris(); + public DataFetcher rentalNetwork(); - public DataFetcher vehicleRentalSystem(); + public DataFetcher rentalUris(); public DataFetcher spacesAvailable(); @@ -1312,10 +1323,6 @@ public interface GraphQLVehicleRentalStation { public DataFetcher vehiclesAvailable(); } - public interface GraphQLVehicleRentalSystem { - public DataFetcher url(); - } - public interface GraphQLVehicleRentalUris { public DataFetcher android(); diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java index b191cc0830b..541219481ef 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java @@ -2409,6 +2409,7 @@ public static class GraphQLQueryTypeNearestArgs { private String before; private GraphQLInputFiltersInput filterByIds; private List filterByModes; + private List filterByNetwork; private List filterByPlaceTypes; private Integer first; private Integer last; @@ -2416,7 +2417,6 @@ public static class GraphQLQueryTypeNearestArgs { private Double lon; private Integer maxDistance; private Integer maxResults; - private List filterByNetwork; public GraphQLQueryTypeNearestArgs(Map args) { if (args != null) { @@ -2431,6 +2431,7 @@ public GraphQLQueryTypeNearestArgs(Map args) { .map(GraphQLMode.class::cast) .collect(Collectors.toList()); } + this.filterByNetwork = (List) args.get("filterByNetwork"); if (args.get("filterByPlaceTypes") != null) { this.filterByPlaceTypes = ((List) args.get("filterByPlaceTypes")).stream() @@ -2448,7 +2449,6 @@ public GraphQLQueryTypeNearestArgs(Map args) { this.lon = (Double) args.get("lon"); this.maxDistance = (Integer) args.get("maxDistance"); this.maxResults = (Integer) args.get("maxResults"); - this.filterByNetwork = (List) args.get("filterByNetwork"); } } @@ -2468,6 +2468,10 @@ public List getGraphQLFilterByModes() { return this.filterByModes; } + public List getGraphQLFilterByNetwork() { + return this.filterByNetwork; + } + public List getGraphQLFilterByPlaceTypes() { return this.filterByPlaceTypes; } @@ -2512,6 +2516,10 @@ public void setGraphQLFilterByModes(List filterByModes) { this.filterByModes = filterByModes; } + public void setGraphQLFilterByNetwork(List filterByNetwork) { + this.filterByNetwork = filterByNetwork; + } + public void setGraphQLFilterByPlaceTypes(List filterByPlaceTypes) { this.filterByPlaceTypes = filterByPlaceTypes; } @@ -2539,14 +2547,6 @@ public void setGraphQLMaxDistance(Integer maxDistance) { public void setGraphQLMaxResults(Integer maxResults) { this.maxResults = maxResults; } - - public List getGraphQLFilterByNetwork() { - return this.filterByNetwork; - } - - public void setGraphQLFilterByNetwork(List networks) { - this.filterByNetwork = networks; - } } public static class GraphQLQueryTypeNodeArgs { diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml b/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml index 6e5cbf7bd71..b9ee0ac3e16 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml @@ -47,7 +47,7 @@ config: BikeRentalStation: org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace#VehicleRentalPlace BikeRentalStationUris: org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris#VehicleRentalStationUris VehicleRentalStation: org.opentripplanner.service.vehiclerental.model.VehicleRentalStation#VehicleRentalStation - VehicleRentalSystem: org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem#VehicleRentalSystem + VehicleRentalNetwork: org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem#VehicleRentalSystem RentalVehicleEntityCounts: org.opentripplanner.service.vehiclerental.model.RentalVehicleEntityCounts#RentalVehicleEntityCounts RentalVehicleTypeCount: org.opentripplanner.service.vehiclerental.model.RentalVehicleTypeCount#RentalVehicleTypeCount RentalVehicle: org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle#VehicleRentalVehicle diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index 02900c6f2ee..6de46739182 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -1741,15 +1741,15 @@ type RentalVehicle implements Node & PlaceInterface { "Name of the vehicle" name: String! "ID of the rental network." - network: String + network: String @deprecated(reason : "Use `networkId` from `rentalNetwork` instead.") "If true, vehicle is not disabled." operative: Boolean + "The vehicle rental network information. This is referred as system in the GBFS terminology." + rentalNetwork: VehicleRentalNetwork! "Platform-specific URLs to begin the vehicle." rentalUris: VehicleRentalUris "ID of the vehicle in the format of network:id" vehicleId: String - "The vehicle rental system information." - vehicleRentalSystem: VehicleRentalSystem "The type of the rental vehicle (scooter, bicycle, car...)" vehicleType: RentalVehicleType } @@ -2417,6 +2417,21 @@ type VehiclePosition { vehicleId: String } +""" +Vehicle rental network, which is referred as system in the GBFS terminology. Note, the same operator can operate in multiple +regions either with the same network/system or with a different one. This can contain information about either the rental brand +or about the operator. +""" +type VehicleRentalNetwork { + """ + ID of the vehicle rental network. In GBFS, this is the `system_id` field from the system information, but it can + be overridden in the configuration to have a different value so this field doesn't necessarily match the source data. + """ + networkId: String! + "The rental vehicle operator's network/system URL. In GBFS, this is the `url` field from the system information." + url: String +} + "Vehicle rental station represents a location where users can rent bicycles etc. for a fee." type VehicleRentalStation implements Node & PlaceInterface { """ @@ -2447,7 +2462,7 @@ type VehicleRentalStation implements Node & PlaceInterface { "Name of the vehicle rental station" name: String! "ID of the rental network." - network: String + network: String @deprecated(reason : "Use `networkId` from `rentalNetwork` instead.") "If true, station is on and in service." operative: Boolean """ @@ -2456,6 +2471,8 @@ type VehicleRentalStation implements Node & PlaceInterface { are always the total capacity divided by two. """ realtime: Boolean + "The vehicle rental network information. This is referred as system in the GBFS terminology." + rentalNetwork: VehicleRentalNetwork! "Platform-specific URLs to begin renting a vehicle from this station." rentalUris: VehicleRentalUris """ @@ -2468,8 +2485,6 @@ type VehicleRentalStation implements Node & PlaceInterface { spacesAvailable: Int @deprecated(reason : "Use `availableSpaces` instead, which also contains the space vehicle types") "ID of the vehicle in the format of network:id" stationId: String - "The vehicle rental system information." - vehicleRentalSystem: VehicleRentalSystem """ Number of vehicles currently available on the rental station. See field `allowPickupNow` to know if is currently possible to pick up a vehicle. @@ -2477,11 +2492,6 @@ type VehicleRentalStation implements Node & PlaceInterface { vehiclesAvailable: Int @deprecated(reason : "Use `availableVehicles` instead, which also contains vehicle types") } -type VehicleRentalSystem { - "The rental vehicle operator's system URL." - url: String -} - type VehicleRentalUris { """ A URI that can be passed to an Android app with an {@code android.intent.action.VIEW} Android diff --git a/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java b/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java index 6b74db2c20d..2fb7a8d9db2 100644 --- a/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java +++ b/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java @@ -119,11 +119,11 @@ class GraphQLIntegrationTest { .withSpaces(10) .withVehicleTypeBicycle(5, 7) .withVehicleTypeElectricBicycle(5, 3) - .withSystem("system-1", "https://foo.bar") + .withSystem("Network-1", "https://foo.bar") .build(); private static VehicleRentalVehicle RENTAL_VEHICLE = new TestFreeFloatingRentalVehicleBuilder() - .withSystem("system-1", "https://foo.bar") + .withSystem("Network-1", "https://foo.bar") .build(); static final Graph GRAPH = new Graph(); diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/expectations/rental-vehicle.json b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/rental-vehicle.json index 800366f4e2c..9017fe77a93 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/expectations/rental-vehicle.json +++ b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/rental-vehicle.json @@ -4,7 +4,6 @@ "vehicleId":"Network-1:free-floating-bicycle", "name":"free-floating-bicycle", "allowPickupNow":true, - "network":"Network-1", "lon":19.01, "lat":47.52, "rentalUris":null, @@ -13,7 +12,8 @@ "formFactor":"BICYCLE", "propulsionType":"HUMAN" }, - "vehicleRentalSystem": { + "rentalNetwork": { + "networkId":"Network-1", "url":"https://foo.bar" } } diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rental-station.json b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rental-station.json index 4981b44f7e7..ad1ce76d9be 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rental-station.json +++ b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rental-station.json @@ -47,14 +47,14 @@ "allowPickup" : false, "allowDropoffNow" : false, "allowPickupNow" : false, - "network" : "Network-1", "lon" : 18.99, "lat" : 47.51, "capacity" : null, "allowOverloading" : false, "rentalUris" : null, "operative" : false, - "vehicleRentalSystem" : { + "rentalNetwork" : { + "networkId" : "Network-1", "url" : "https://foo.bar" } } diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/rental-vehicle.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/rental-vehicle.graphql index 859051e0c24..9a912781c56 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/rental-vehicle.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/rental-vehicle.graphql @@ -3,7 +3,6 @@ vehicleId name allowPickupNow - network lon lat rentalUris { @@ -16,7 +15,8 @@ formFactor propulsionType } - vehicleRentalSystem { + rentalNetwork { + networkId url } } diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/vehicle-rental-station.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/vehicle-rental-station.graphql index f0c5d221dd2..a2200465912 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/vehicle-rental-station.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/vehicle-rental-station.graphql @@ -28,7 +28,6 @@ allowPickup allowDropoffNow allowPickupNow - network lon lat capacity @@ -39,7 +38,8 @@ web } operative - vehicleRentalSystem { + rentalNetwork { + networkId url } } From 3eaa5d071b05fe495ef680b37da7ff5a4964eff7 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Fri, 5 Jul 2024 16:51:08 +0300 Subject: [PATCH 35/54] Add system to smoove stations --- .../SmooveBikeRentalDataSource.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/ext/java/org/opentripplanner/ext/smoovebikerental/SmooveBikeRentalDataSource.java b/src/ext/java/org/opentripplanner/ext/smoovebikerental/SmooveBikeRentalDataSource.java index 3876ff44651..1f287ad950b 100644 --- a/src/ext/java/org/opentripplanner/ext/smoovebikerental/SmooveBikeRentalDataSource.java +++ b/src/ext/java/org/opentripplanner/ext/smoovebikerental/SmooveBikeRentalDataSource.java @@ -8,6 +8,7 @@ import org.opentripplanner.service.vehiclerental.model.RentalVehicleType; import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.updater.spi.DataSource; import org.opentripplanner.updater.spi.GenericJsonDataSource; @@ -32,6 +33,7 @@ public class SmooveBikeRentalDataSource private final String networkName; private final RentalVehicleType vehicleType; + private final VehicleRentalSystem system; public SmooveBikeRentalDataSource(SmooveBikeRentalDataSourceParameters config) { this(config, new OtpHttpClientFactory()); @@ -45,6 +47,24 @@ public SmooveBikeRentalDataSource( networkName = config.getNetwork(DEFAULT_NETWORK_NAME); vehicleType = RentalVehicleType.getDefaultType(networkName); overloadingAllowed = config.overloadingAllowed(); + system = + new VehicleRentalSystem( + networkName, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ); } /** @@ -94,6 +114,7 @@ protected VehicleRentalStation parseElement(JsonNode node) { station.vehicleTypesAvailable = Map.of(vehicleType, station.vehiclesAvailable); station.vehicleSpacesAvailable = Map.of(vehicleType, station.spacesAvailable); station.overloadingAllowed = overloadingAllowed; + station.system = system; return station; } } From b9a0c82cb3e6929c94f172c98cfd4459ed47229e Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Fri, 5 Jul 2024 17:11:39 +0300 Subject: [PATCH 36/54] Add more required fields to smoove system --- .../ext/smoovebikerental/SmooveBikeRentalDataSource.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ext/java/org/opentripplanner/ext/smoovebikerental/SmooveBikeRentalDataSource.java b/src/ext/java/org/opentripplanner/ext/smoovebikerental/SmooveBikeRentalDataSource.java index 1f287ad950b..b65c22b4727 100644 --- a/src/ext/java/org/opentripplanner/ext/smoovebikerental/SmooveBikeRentalDataSource.java +++ b/src/ext/java/org/opentripplanner/ext/smoovebikerental/SmooveBikeRentalDataSource.java @@ -50,6 +50,8 @@ public SmooveBikeRentalDataSource( system = new VehicleRentalSystem( networkName, + "fi", + "Helsinki/Espoo", null, null, null, @@ -58,9 +60,7 @@ public SmooveBikeRentalDataSource( null, null, null, - null, - null, - null, + "Europe/Helsinki", null, null, null From 7f7bbeec4b7dd6fbff0571f2067ca35256041609 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 5 Jul 2024 18:04:11 +0000 Subject: [PATCH 37/54] fix(deps): update jackson.version to v2.17.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b177a1e1d41..c7700971d5a 100644 --- a/pom.xml +++ b/pom.xml @@ -60,7 +60,7 @@ 31.2 2.51.1 - 2.17.1 + 2.17.2 3.1.7 5.10.3 1.13.0 From de9640bcad387d52314665d97ac51d4fb529ca1c Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Sun, 7 Jul 2024 17:21:11 +0200 Subject: [PATCH 38/54] Use immutable set when purging expired data --- src/main/java/org/opentripplanner/model/TimetableSnapshot.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java index 0b6655e2ec4..7ddeb6aaa77 100644 --- a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java +++ b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java @@ -354,7 +354,7 @@ public boolean purgeExpiredData(LocalDate serviceDate) { if (toKeepTimetables.isEmpty()) { it.remove(); } else { - timetables.put(pattern, toKeepTimetables); + timetables.put(pattern, ImmutableSortedSet.copyOfSorted(toKeepTimetables)); } } From c8f9bbadbf7aaa48f770d3d8bd4ddfca839fcabb Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 8 Jul 2024 10:25:33 +0200 Subject: [PATCH 39/54] Update src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java Co-authored-by: Joel Lappalainen --- .../vehiclerentalservicedirectory/api/NetworkParameters.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java b/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java index c99c6893618..849f56c0c0c 100644 --- a/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java +++ b/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java @@ -6,7 +6,7 @@ * Parameters for a specific network. *

* The {@link GbfsVehicleRentalDataSourceParameters} supports {@code overloadingAllowed} - * which is not included here since they are not part of + * which is not included here since it is not part of * the GBFS specification. If there is a demand for it, it can be added. *

* @param network The network name From 87bda743e4f1672417b0b09ff6a4bc65292bcb21 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Mon, 8 Jul 2024 11:38:18 +0300 Subject: [PATCH 40/54] Improve documentation and make list items non null --- .../resources/org/opentripplanner/apis/gtfs/schema.graphqls | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index 6de46739182..2c545648e00 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -1183,8 +1183,8 @@ type QueryType { nearest places related to bicycling. """ filterByModes: [Mode], - "Only include vehicle rental networks that match one of the given network names." - filterByNetwork: [String], + "Only include vehicle rental networks that match one of the given network ids." + filterByNetwork: [String!], "Only return places that are one of these types, e.g. `STOP` or `VEHICLE_RENT`" filterByPlaceTypes: [FilterPlaceType], first: Int, From d1d8235731a76b213c1bb419066b344552243bfa Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 8 Jul 2024 11:02:38 +0200 Subject: [PATCH 41/54] Flesh out documentation a bit more --- docs/sandbox/VehicleRentalServiceDirectory.md | 46 ++++++++++++++----- .../api/NetworkParameters.java | 3 ++ ...leRentalServiceDirectoryFetcherConfig.java | 13 +++++- 3 files changed, 49 insertions(+), 13 deletions(-) diff --git a/docs/sandbox/VehicleRentalServiceDirectory.md b/docs/sandbox/VehicleRentalServiceDirectory.md index feb5cb91ecb..140dab5ecc5 100644 --- a/docs/sandbox/VehicleRentalServiceDirectory.md +++ b/docs/sandbox/VehicleRentalServiceDirectory.md @@ -30,18 +30,18 @@ the `router-config.json` -| Config Parameter | Type | Summary | Req./Opt. | Default Value | Since | -|-----------------------------------------------------|:---------------:|---------------------------------------------------------------------------------|:----------:|---------------|:-----:| -| language | `string` | Language code. | *Optional* | | 2.1 | -| sourcesName | `string` | Json tag name for updater sources. | *Optional* | `"systems"` | 2.1 | -| updaterNetworkName | `string` | Json tag name for the network name for each source. | *Optional* | `"id"` | 2.1 | -| updaterUrlName | `string` | Json tag name for endpoint urls for each source. | *Optional* | `"url"` | 2.1 | -| url | `uri` | Endpoint for the VehicleRentalServiceDirectory | *Required* | | 2.1 | -| [headers](#vehicleRentalServiceDirectory_headers) | `map of string` | HTTP headers to add to the request. Any header key, value can be inserted. | *Optional* | | 2.1 | -| [networks](#vehicleRentalServiceDirectory_networks) | `object[]` | List all networks to include. Use "network": "default-network" to set defaults. | *Optional* | | 2.4 | -|       allowKeepingVehicleAtDestination | `boolean` | Enables `allowKeepingVehicleAtDestination` for the given network | *Optional* | `false` | 2.5 | -|       geofencingZones | `boolean` | Enables geofencingZones for the given network | *Optional* | `false` | 2.4 | -|       network | `string` | The network name | *Required* | | 2.4 | +| Config Parameter | Type | Summary | Req./Opt. | Default Value | Since | +|----------------------------------------------------------------------------------------------------------------------|:---------------:|---------------------------------------------------------------------------------|:----------:|---------------|:-----:| +| language | `string` | Language code. | *Optional* | | 2.1 | +| sourcesName | `string` | Json tag name for updater sources. | *Optional* | `"systems"` | 2.1 | +| updaterNetworkName | `string` | Json tag name for the network name for each source. | *Optional* | `"id"` | 2.1 | +| updaterUrlName | `string` | Json tag name for endpoint urls for each source. | *Optional* | `"url"` | 2.1 | +| url | `uri` | Endpoint for the VehicleRentalServiceDirectory | *Required* | | 2.1 | +| [headers](#vehicleRentalServiceDirectory_headers) | `map of string` | HTTP headers to add to the request. Any header key, value can be inserted. | *Optional* | | 2.1 | +| [networks](#vehicleRentalServiceDirectory_networks) | `object[]` | List all networks to include. Use "network": "default-network" to set defaults. | *Optional* | | 2.4 | +|       [allowKeepingVehicleAtDestination](#vehicleRentalServiceDirectory_networks_0_allowKeepingVehicleAtDestination) | `boolean` | Enables `allowKeepingVehicleAtDestination` for the given network. | *Optional* | `false` | 2.5 | +|       [geofencingZones](#vehicleRentalServiceDirectory_networks_0_geofencingZones) | `boolean` | Enables geofencingZones for the given network | *Optional* | `false` | 2.4 | +|       network | `string` | The network name | *Required* | | 2.4 | @@ -71,6 +71,28 @@ networks are dropped. Note! The values in the "default-network" are not used to missing field values in networks listed. +

allowKeepingVehicleAtDestination

+ +**Since version:** `2.5` ∙ **Type:** `boolean` ∙ **Cardinality:** `Optional` ∙ **Default value:** `false` +**Path:** /vehicleRentalServiceDirectory/networks/[0] + +Enables `allowKeepingVehicleAtDestination` for the given network. + +Configures if a vehicle rented from a station must be returned to another one or can +be kept at the end of the trip. + +See the regular [GBFS documentation](../UpdaterConfig.md#GBFS vehicle rental systems) for more information. + + +

geofencingZones

+ +**Since version:** `2.4` ∙ **Type:** `boolean` ∙ **Cardinality:** `Optional` ∙ **Default value:** `false` +**Path:** /vehicleRentalServiceDirectory/networks/[0] + +Enables geofencingZones for the given network + +See the regular [GBFS documentation](../UpdaterConfig.md#GBFS vehicle rental systems) for more information. + diff --git a/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java b/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java index 849f56c0c0c..0c529cd48ae 100644 --- a/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java +++ b/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java @@ -11,6 +11,9 @@ *

* @param network The network name * @param geofencingZones enable geofencingZones for the given network + * @param allowKeepingAtDestination if a vehicle that was picked up from a station must be returned + * to another one or can be kept at the destination. + * {@link org.opentripplanner.standalone.config.routerconfig.updaters.sources.VehicleRentalSourceFactory#allOwKeepingRentedVehicleAtDestination()} */ public record NetworkParameters( String network, diff --git a/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java b/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java index 3a7da95bfec..811915f3061 100644 --- a/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java @@ -80,11 +80,22 @@ private static List mapNetworkParameters( .of("geofencingZones") .since(V2_4) .summary("Enables geofencingZones for the given network") + .description( + "See the regular [GBFS documentation](../UpdaterConfig.md#GBFS vehicle rental systems) for more information." + ) .asBoolean(false), c .of("allowKeepingVehicleAtDestination") .since(V2_5) - .summary("Enables `allowKeepingVehicleAtDestination` for the given network") + .summary("Enables `allowKeepingVehicleAtDestination` for the given network.") + .description( + """ + Configures if a vehicle rented from a station must be returned to another one or can + be kept at the end of the trip. + + See the regular [GBFS documentation](../UpdaterConfig.md#GBFS vehicle rental systems) for more information. + """ + ) .asBoolean(false) ) ); From 9a2b8de10e1831f5552039549fbfa7ae960d2a92 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 8 Jul 2024 11:07:56 +0200 Subject: [PATCH 42/54] Remove unused method --- .../api/NetworkParameters.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java b/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java index 0c529cd48ae..c8b638edae3 100644 --- a/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java +++ b/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java @@ -19,8 +19,4 @@ public record NetworkParameters( String network, boolean geofencingZones, boolean allowKeepingAtDestination -) { - public NetworkParameters withName(String network) { - return new NetworkParameters(network, geofencingZones, allowKeepingAtDestination); - } -} +) {} From d083bfd57dfbee377a74dca7a91031ebb6feb185 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 8 Jul 2024 11:36:29 +0200 Subject: [PATCH 43/54] Update docs --- doc-templates/sandbox/VehicleRentalServiceDirectory.md | 10 +++++----- docs/sandbox/VehicleRentalServiceDirectory.md | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/doc-templates/sandbox/VehicleRentalServiceDirectory.md b/doc-templates/sandbox/VehicleRentalServiceDirectory.md index d550fe27dc2..787a17e90e4 100644 --- a/doc-templates/sandbox/VehicleRentalServiceDirectory.md +++ b/doc-templates/sandbox/VehicleRentalServiceDirectory.md @@ -1,10 +1,10 @@ # Vehicle Rental Service Directory API support -This adds support for the GBFS service directory endpoint component located at -https://github.com/entur/lamassu. OTP uses the service directory to lookup and connect to all GBFS -endpoints registered in the directory. This simplifies the management of the GBFS endpoints, since -multiple services/components like OTP can connect to the directory and get the necessary -configuration from it. +This adds support for the GBFS service directory endpoint component +[Lamassu](https://github.com/entur/lamassu). +OTP uses the service directory to lookup and connects to all GBFS endpoints registered in the +directory. This simplifies the management of the GBFS endpoints, since multiple services/components +like OTP can connect to the directory and get the necessary configuration from it. ## Contact Info diff --git a/docs/sandbox/VehicleRentalServiceDirectory.md b/docs/sandbox/VehicleRentalServiceDirectory.md index 140dab5ecc5..fc9aed8b379 100644 --- a/docs/sandbox/VehicleRentalServiceDirectory.md +++ b/docs/sandbox/VehicleRentalServiceDirectory.md @@ -1,10 +1,10 @@ # Vehicle Rental Service Directory API support -This adds support for the GBFS service directory endpoint component located at -https://github.com/entur/lamassu. OTP uses the service directory to lookup and connect to all GBFS -endpoints registered in the directory. This simplifies the management of the GBFS endpoints, since -multiple services/components like OTP can connect to the directory and get the necessary -configuration from it. +This adds support for the GBFS service directory endpoint component +[Lamassu](https://github.com/entur/lamassu). +OTP uses the service directory to lookup and connects to all GBFS endpoints registered in the +directory. This simplifies the management of the GBFS endpoints, since multiple services/components +like OTP can connect to the directory and get the necessary configuration from it. ## Contact Info From b6d4aeb5689db55d99817986f158ca840e55cac5 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 8 Jul 2024 12:49:31 +0200 Subject: [PATCH 44/54] Use hyphenated anchors --- docs/sandbox/VehicleRentalServiceDirectory.md | 4 ++-- .../sandbox/VehicleRentalServiceDirectoryFetcherConfig.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/sandbox/VehicleRentalServiceDirectory.md b/docs/sandbox/VehicleRentalServiceDirectory.md index fc9aed8b379..1be5418e155 100644 --- a/docs/sandbox/VehicleRentalServiceDirectory.md +++ b/docs/sandbox/VehicleRentalServiceDirectory.md @@ -81,7 +81,7 @@ Enables `allowKeepingVehicleAtDestination` for the given network. Configures if a vehicle rented from a station must be returned to another one or can be kept at the end of the trip. -See the regular [GBFS documentation](../UpdaterConfig.md#GBFS vehicle rental systems) for more information. +See the regular [GBFS documentation](../UpdaterConfig.md#gbfs-vehicle-rental-systems) for more information.

geofencingZones

@@ -91,7 +91,7 @@ See the regular [GBFS documentation](../UpdaterConfig.md#GBFS vehicle rental sys Enables geofencingZones for the given network -See the regular [GBFS documentation](../UpdaterConfig.md#GBFS vehicle rental systems) for more information. +See the regular [GBFS documentation](../UpdaterConfig.md#gbfs-vehicle-rental-systems) for more information. diff --git a/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java b/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java index 811915f3061..f8ed1184c04 100644 --- a/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java @@ -81,7 +81,7 @@ private static List mapNetworkParameters( .since(V2_4) .summary("Enables geofencingZones for the given network") .description( - "See the regular [GBFS documentation](../UpdaterConfig.md#GBFS vehicle rental systems) for more information." + "See the regular [GBFS documentation](../UpdaterConfig.md#gbfs-vehicle-rental-systems) for more information." ) .asBoolean(false), c @@ -93,7 +93,7 @@ private static List mapNetworkParameters( Configures if a vehicle rented from a station must be returned to another one or can be kept at the end of the trip. - See the regular [GBFS documentation](../UpdaterConfig.md#GBFS vehicle rental systems) for more information. + See the regular [GBFS documentation](../UpdaterConfig.md#gbfs-vehicle-rental-systems) for more information. """ ) .asBoolean(false) From b06433000a7b05265519d7e40b181f540c3445d4 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Mon, 8 Jul 2024 18:57:52 +0000 Subject: [PATCH 45/54] Add changelog entry for #5909 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 5712915216c..38fb046f344 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -41,6 +41,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Fix NullPointerException in stop transfer priority cost vector generation [#5943](https://github.com/opentripplanner/OpenTripPlanner/pull/5943) - Convert transferSlack configuration to duration [#5897](https://github.com/opentripplanner/OpenTripPlanner/pull/5897) - Expose stop transfer priority in Transmodel API [#5942](https://github.com/opentripplanner/OpenTripPlanner/pull/5942) +- Add rental system to GraphQL API [#5909](https://github.com/opentripplanner/OpenTripPlanner/pull/5909) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.5.0 (2024-03-13) From 0579e22f62266975b73fc9f46c183ec5e7a4abe9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 9 Jul 2024 07:42:48 +0000 Subject: [PATCH 46/54] Update micrometer.version to v1.13.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b177a1e1d41..8ecd21a9a75 100644 --- a/pom.xml +++ b/pom.xml @@ -63,7 +63,7 @@ 2.17.1 3.1.7 5.10.3 - 1.13.0 + 1.13.2 5.5.3 1.5.6 9.11.1 From 0a34d24d26001ff34220930b9e37c9b9fbbcc4a2 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 9 Jul 2024 10:42:05 +0200 Subject: [PATCH 47/54] Increase container image pruning to 365 days [ci skip] --- .github/workflows/prune-container-images.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/prune-container-images.yml b/.github/workflows/prune-container-images.yml index f3987a064a9..c1653701c3b 100644 --- a/.github/workflows/prune-container-images.yml +++ b/.github/workflows/prune-container-images.yml @@ -19,4 +19,4 @@ jobs: # remove all snapshot container images that have not been pulled for over a year # --keep-semver makes sure that any image with a x.y.z version scheme is unaffected by this pip install prune-container-repo==0.0.4 - prune-container-repo -u ${CONTAINER_REGISTRY_USER} -r ${CONTAINER_REPO} --days=90 --keep-semver --activate + prune-container-repo -u ${CONTAINER_REGISTRY_USER} -r ${CONTAINER_REPO} --days=365 --keep-semver --activate From 203db5de5b894605fb9447656daf40c1b86c8a6f Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Tue, 9 Jul 2024 09:09:56 +0000 Subject: [PATCH 48/54] Add changelog entry for #5931 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 38fb046f344..6dd08114790 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -42,6 +42,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Convert transferSlack configuration to duration [#5897](https://github.com/opentripplanner/OpenTripPlanner/pull/5897) - Expose stop transfer priority in Transmodel API [#5942](https://github.com/opentripplanner/OpenTripPlanner/pull/5942) - Add rental system to GraphQL API [#5909](https://github.com/opentripplanner/OpenTripPlanner/pull/5909) +- Improve handling of SIRI added trip with unresolvable agency [#5931](https://github.com/opentripplanner/OpenTripPlanner/pull/5931) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.5.0 (2024-03-13) From d283fdf25de92f4a792e62b162269e1717821ff0 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Wed, 10 Jul 2024 08:47:50 +0200 Subject: [PATCH 49/54] Inline isDirty variable --- src/main/java/org/opentripplanner/model/TimetableSnapshot.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java index 7ddeb6aaa77..7c660a11391 100644 --- a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java +++ b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java @@ -314,8 +314,7 @@ public boolean revertTripToScheduledTripPattern(FeedScopedId tripId, LocalDate s if (tripTimesToRemove != null) { for (Timetable originalTimetable : sortedTimetables) { - boolean isDirty = originalTimetable.getTripTimes().contains(tripTimesToRemove); - if (isDirty) { + if (originalTimetable.getTripTimes().contains(tripTimesToRemove)) { Timetable updatedTimetable = copyTimetable(pattern, serviceDate, originalTimetable); updatedTimetable.getTripTimes().remove(tripTimesToRemove); } From 07bdb99d5bf18d352047662abee623a62eb23ba1 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 10 Jul 2024 14:39:24 +0200 Subject: [PATCH 50/54] Fix typo --- .../openstreetmap/wayproperty/SafetyFeatures.java | 2 +- .../java/org/opentripplanner/generate/doc/OsmMapperDocTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java index 37669984405..ab68fd978c2 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java @@ -16,7 +16,7 @@ public boolean modifies() { /** * Does forward and back have the same value? */ - public boolean isSymetric() { + public boolean isSymmetric() { return forward == back; } } diff --git a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java index 443b01fbeb0..3090c696e37 100644 --- a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java +++ b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java @@ -105,7 +105,7 @@ private static Table mixinTable(WayPropertySet wps) { private static String tableValues(SafetyFeatures safety) { if (!safety.modifies()) { return ""; - } else if (safety.isSymetric()) { + } else if (safety.isSymmetric()) { return Double.toString(safety.forward()); } else { return "forward: %s
back: %s".formatted(safety.forward(), safety.back()); From 6dfc0be1356a29200a2fc85ff746dc36a92495b0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 10 Jul 2024 22:15:16 +0000 Subject: [PATCH 51/54] chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.3.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3991bd1936c..cb331acccd5 100644 --- a/pom.xml +++ b/pom.xml @@ -242,7 +242,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.3.0 + 3.3.1 me.fabriciorby From 31af1035e22d89b47490ff4a9559c6df050d5b57 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Thu, 11 Jul 2024 09:05:42 +0000 Subject: [PATCH 52/54] Add changelog entry for #5941 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 6dd08114790..6ddc5fc5ad9 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -43,6 +43,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Expose stop transfer priority in Transmodel API [#5942](https://github.com/opentripplanner/OpenTripPlanner/pull/5942) - Add rental system to GraphQL API [#5909](https://github.com/opentripplanner/OpenTripPlanner/pull/5909) - Improve handling of SIRI added trip with unresolvable agency [#5931](https://github.com/opentripplanner/OpenTripPlanner/pull/5931) +- Fix copy-on-write in TimetableSnapshot [#5941](https://github.com/opentripplanner/OpenTripPlanner/pull/5941) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.5.0 (2024-03-13) From 962d128f8940d9b1326289c13f4c3f724e9232c0 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Thu, 11 Jul 2024 10:59:53 +0000 Subject: [PATCH 53/54] Add changelog entry for #5929 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 6ddc5fc5ad9..cb9b91dcb8c 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -44,6 +44,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Add rental system to GraphQL API [#5909](https://github.com/opentripplanner/OpenTripPlanner/pull/5909) - Improve handling of SIRI added trip with unresolvable agency [#5931](https://github.com/opentripplanner/OpenTripPlanner/pull/5931) - Fix copy-on-write in TimetableSnapshot [#5941](https://github.com/opentripplanner/OpenTripPlanner/pull/5941) +- Generate documentation for OSM tag mappers [#5929](https://github.com/opentripplanner/OpenTripPlanner/pull/5929) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.5.0 (2024-03-13) From 2a397c7b2ae36dd450e7ddd2d8d228d615ca133d Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Thu, 11 Jul 2024 11:08:26 +0000 Subject: [PATCH 54/54] Add changelog entry for #5948 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index cb9b91dcb8c..6d84b377de7 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -45,6 +45,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Improve handling of SIRI added trip with unresolvable agency [#5931](https://github.com/opentripplanner/OpenTripPlanner/pull/5931) - Fix copy-on-write in TimetableSnapshot [#5941](https://github.com/opentripplanner/OpenTripPlanner/pull/5941) - Generate documentation for OSM tag mappers [#5929](https://github.com/opentripplanner/OpenTripPlanner/pull/5929) +- Disable Legacy REST API by default [#5948](https://github.com/opentripplanner/OpenTripPlanner/pull/5948) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.5.0 (2024-03-13)