OSM tag match expression | -Mixin? | -Traversal permissions | -Safety factor there1 | -Safety factor back1 | -
---|
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
diff --git a/doc-templates/OsmMapper.md b/doc-templates/OsmMapper.md
new file mode 100644
index 00000000000..1690deac627
--- /dev/null
+++ b/doc-templates/OsmMapper.md
@@ -0,0 +1,30 @@
+# 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.
+
+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.
+
+
+
+### 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. 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/doc-templates/sandbox/VehicleRentalServiceDirectory.md b/doc-templates/sandbox/VehicleRentalServiceDirectory.md
index d9908de1a90..787a17e90e4 100644
--- a/doc-templates/sandbox/VehicleRentalServiceDirectory.md
+++ b/doc-templates/sandbox/VehicleRentalServiceDirectory.md
@@ -1,10 +1,10 @@
-# 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
-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
@@ -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/Changelog.md b/docs/Changelog.md
index 5712915216c..6d84b377de7 100644
--- a/docs/Changelog.md
+++ b/docs/Changelog.md
@@ -41,6 +41,11 @@ 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)
+- 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)
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/docs/apis/Apis.md b/docs/apis/Apis.md
index ab6b41a25cd..9e8f31f6eeb 100644
--- a/docs/apis/Apis.md
+++ b/docs/apis/Apis.md
@@ -25,5 +25,5 @@ The [Geocoder API](../sandbox/GeocoderAPI.md) allows you to geocode stop names a
The OTP REST API used to power many apps and frontends. For years it was the only way to access
OTP programmatically.
-Over time it has been replaced by the GraphQL APIs and is scheduled to be disabled by default
-and eventually removed completely. It's therefore not recommended to use it.
+Over time it has been replaced by the GraphQL APIs and is now disabled by default
+and will eventually be removed completely. It's therefore not recommended to use it.
diff --git a/docs/osm/Default.md b/docs/osm/Default.md
new file mode 100644
index 00000000000..814420b791f
--- /dev/null
+++ b/docs/osm/Default.md
@@ -0,0 +1,214 @@
+# 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.
+
+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 | 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 | |
+
+
+
+### 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. 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.
+
+
+
+
+| 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
new file mode 100644
index 00000000000..8a60b5f0b13
--- /dev/null
+++ b/docs/osm/Finland.md
@@ -0,0 +1,259 @@
+# 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.
+
+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 | 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 | |
+
+
+
+### 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. 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.
+
+
+
+
+| 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
new file mode 100644
index 00000000000..922aa3af836
--- /dev/null
+++ b/docs/osm/Germany.md
@@ -0,0 +1,234 @@
+# 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.
+
+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 | 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 | |
+
+
+
+### 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. 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.
+
+
+
+
+| 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
new file mode 100644
index 00000000000..d38fc4c04df
--- /dev/null
+++ b/docs/osm/Norway.md
@@ -0,0 +1,122 @@
+# 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.
+
+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 | 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` | | |
+
+
+
+### 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. 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.
+
+
+
+
+| 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
new file mode 100644
index 00000000000..4a640caf95c
--- /dev/null
+++ b/docs/osm/UK.md
@@ -0,0 +1,228 @@
+# 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.
+
+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 | 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 | |
+
+
+
+### 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. 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.
+
+
+
+
+| 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/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/docs/sandbox/VehicleRentalServiceDirectory.md b/docs/sandbox/VehicleRentalServiceDirectory.md
index 8009a62f912..1be5418e155 100644
--- a/docs/sandbox/VehicleRentalServiceDirectory.md
+++ b/docs/sandbox/VehicleRentalServiceDirectory.md
@@ -1,10 +1,10 @@
-# 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
-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
@@ -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
@@ -29,17 +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 |
-| 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 |
@@ -69,6 +71,28 @@ networks are dropped. Note! The values in the "default-network" are not used to
missing field values in networks listed.
+
- * 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 it is 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 + * @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, boolean geofencingZones) { - public NetworkParameters withName(String network) { - return new NetworkParameters(network, geofencingZones); - } -} +public record NetworkParameters( + String network, + boolean geofencingZones, + boolean allowKeepingAtDestination +) {} 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 @@ - - -
- -OSM tag match expression | -Mixin? | -Traversal permissions | -Safety factor there1 | -Safety factor back1 | -
---|