diff --git a/CHANGELOG.md b/CHANGELOG.md index d190ed4c44..47dd759e99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,7 @@ _Breaking developer changes, which may affect downstream projects or sites that #### :hourglass: Performance #### :mortar_board: Walkthrough / Help #### :rocket: Presets +* Render `highway=ladder` in a style similar to stairs ([#10257], thanks [@k-yle]) #### :hammer: Development * Update dependencies, including `osm-community-index` to v5.7, `osm-auth` to v2.5 @@ -61,6 +62,7 @@ _Breaking developer changes, which may affect downstream projects or sites that [#8994]: https://github.com/openstreetmap/iD/issues/8994 [#9993]: https://github.com/openstreetmap/iD/issues/9993 [#10181]: https://github.com/openstreetmap/iD/pull/10181 +[#10257]: https://github.com/openstreetmap/iD/pull/10257 [@zbycz]: https://github.com/zbycz diff --git a/css/30_highways.css b/css/30_highways.css index 1791571292..d1f41360ed 100644 --- a/css/30_highways.css +++ b/css/30_highways.css @@ -253,6 +253,7 @@ path.line.shadow.tag-highway-footway, path.line.shadow.tag-highway-cycleway, path.line.shadow.tag-highway-bridleway, path.line.shadow.tag-highway-corridor, +path.line.shadow.tag-highway-ladder, path.line.shadow.tag-highway-steps { stroke-width: 16; } @@ -261,6 +262,7 @@ path.line.casing.tag-highway-footway, path.line.casing.tag-highway-cycleway, path.line.casing.tag-highway-bridleway, path.line.casing.tag-highway-corridor, +path.line.casing.tag-highway-ladder, path.line.casing.tag-highway-steps { stroke-width: 5; } @@ -269,6 +271,7 @@ path.line.stroke.tag-highway-footway, path.line.stroke.tag-highway-cycleway, path.line.stroke.tag-highway-bridleway, path.line.stroke.tag-highway-corridor, +path.line.stroke.tag-highway-ladder, path.line.stroke.tag-highway-steps { stroke-width: 3; } @@ -306,6 +309,7 @@ path.line.stroke.tag-highway-steps { .low-zoom path.line.shadow.tag-highway-cycleway, .low-zoom path.line.shadow.tag-highway-bridleway, .low-zoom path.line.shadow.tag-highway-corridor, +.low-zoom path.line.shadow.tag-highway-ladder, .low-zoom path.line.shadow.tag-highway-steps { stroke-width: 12; } @@ -314,6 +318,7 @@ path.line.stroke.tag-highway-steps { .low-zoom path.line.casing.tag-highway-cycleway, .low-zoom path.line.casing.tag-highway-bridleway, .low-zoom path.line.casing.tag-highway-corridor, +.low-zoom path.line.casing.tag-highway-ladder, .low-zoom path.line.casing.tag-highway-steps { stroke-width: 3; } @@ -322,6 +327,7 @@ path.line.stroke.tag-highway-steps { .low-zoom path.line.stroke.tag-highway-cycleway, .low-zoom path.line.stroke.tag-highway-bridleway, .low-zoom path.line.stroke.tag-highway-corridor, +.low-zoom path.line.stroke.tag-highway-ladder, .low-zoom path.line.stroke.tag-highway-steps { stroke-width: 1; } @@ -565,27 +571,34 @@ path.line.stroke.tag-leisure-track, } /* steps */ -.preset-icon .icon.tag-highway-steps { +.preset-icon .icon.tag-highway-steps, +.preset-icon .icon.tag-highway-ladder { color: #81d25c; fill: #fff; } -path.line.stroke.tag-highway-steps { +path.line.stroke.tag-highway-steps, +path.line.stroke.tag-highway-ladder { stroke-linecap: butt; stroke-dasharray: 3, 3; } -.low-zoom path.line.stroke.tag-highway-steps { +.low-zoom path.line.stroke.tag-highway-steps, +.low-zoom path.line.stroke.tag-highway-ladder { stroke-dasharray: 2, 2; } -path.line.casing.tag-highway-steps { +path.line.casing.tag-highway-steps, +path.line.casing.tag-highway-ladder { stroke: #fff; stroke-linecap: round; stroke-dasharray: none; } path.line.stroke.tag-highway-steps, -.preset-icon-container path.line.casing.tag-highway-steps { +path.line.stroke.tag-highway-ladder, +.preset-icon-container path.line.casing.tag-highway-steps, +.preset-icon-container path.line.casing.tag-highway-ladder { stroke: #81d25c; } -.preset-icon-container path.line.stroke.tag-highway-steps { +.preset-icon-container path.line.stroke.tag-highway-steps, +.preset-icon-container path.line.stroke.tag-highway-ladder { stroke: #fff; } @@ -638,6 +651,7 @@ path.line.stroke.tag-highway.tag-footway-access_aisle { /* highway midpoints */ g.midpoint.tag-highway-corridor .fill, g.midpoint.tag-highway-steps .fill, +g.midpoint.tag-highway-ladder .fill, g.midpoint.tag-highway-path .fill, g.midpoint.tag-highway-footway .fill, g.midpoint.tag-highway-cycleway .fill, diff --git a/css/50_misc.css b/css/50_misc.css index 721aca674f..7b4a2295e8 100644 --- a/css/50_misc.css +++ b/css/50_misc.css @@ -287,6 +287,7 @@ path.line.shadow.tag-highway-pedestrian.tag-bridge, path.line.shadow.tag-highway-service.tag-bridge, path.line.shadow.tag-highway-track.tag-bridge, path.line.shadow.tag-highway-steps.tag-bridge, +path.line.shadow.tag-highway-ladder.tag-bridge, path.line.shadow.tag-highway-footway.tag-bridge, path.line.shadow.tag-highway-cycleway.tag-bridge, path.line.shadow.tag-highway-bridleway.tag-bridge { @@ -300,6 +301,7 @@ path.line.casing.tag-highway-pedestrian.tag-bridge, path.line.casing.tag-highway-service.tag-bridge, path.line.casing.tag-highway-track.tag-bridge, path.line.casing.tag-highway-steps.tag-bridge, +path.line.casing.tag-highway-ladder.tag-bridge, path.line.casing.tag-highway-footway.tag-bridge, path.line.casing.tag-highway-cycleway.tag-bridge, path.line.casing.tag-highway-bridleway.tag-bridge { @@ -314,6 +316,7 @@ path.line.casing.tag-highway-bridleway.tag-bridge { .low-zoom path.line.shadow.tag-highway-service.tag-bridge, .low-zoom path.line.shadow.tag-highway-track.tag-bridge, .low-zoom path.line.shadow.tag-highway-steps.tag-bridge, +.low-zoom path.line.shadow.tag-highway-ladder.tag-bridge, .low-zoom path.line.shadow.tag-highway-footway.tag-bridge, .low-zoom path.line.shadow.tag-highway-cycleway.tag-bridge, .low-zoom path.line.shadow.tag-highway-bridleway.tag-bridge { @@ -327,6 +330,7 @@ path.line.casing.tag-highway-bridleway.tag-bridge { .low-zoom path.line.casing.tag-highway-service.tag-bridge, .low-zoom path.line.casing.tag-highway-track.tag-bridge, .low-zoom path.line.casing.tag-highway-steps.tag-bridge, +.low-zoom path.line.casing.tag-highway-ladder.tag-bridge, .low-zoom path.line.casing.tag-highway-footway.tag-bridge, .low-zoom path.line.casing.tag-highway-cycleway.tag-bridge, .low-zoom path.line.casing.tag-highway-bridleway.tag-bridge { @@ -455,14 +459,18 @@ path.line.shadow.tag-highway.tag-status.tag-status-construction.tag-construction path.line.shadow.tag-highway.tag-status.tag-status-construction.tag-construction-footway, path.line.shadow.tag-highway.tag-status.tag-status-construction.tag-construction-cycleway, path.line.shadow.tag-highway.tag-status.tag-status-construction.tag-construction-bridleway, -path.line.shadow.tag-highway.tag-status.tag-status-construction.tag-construction-steps { +path.line.shadow.tag-highway.tag-status.tag-status-construction.tag-construction-corridor, +path.line.shadow.tag-highway.tag-status.tag-status-construction.tag-construction-steps, +path.line.shadow.tag-highway.tag-status.tag-status-construction.tag-construction-ladder { stroke-width: 15; } path.line.casing.tag-highway.tag-status.tag-status-construction.tag-construction-path, path.line.casing.tag-highway.tag-status.tag-status-construction.tag-construction-footway, path.line.casing.tag-highway.tag-status.tag-status-construction.tag-construction-cycleway, path.line.casing.tag-highway.tag-status.tag-status-construction.tag-construction-bridleway, -path.line.casing.tag-highway.tag-status.tag-status-construction.tag-construction-steps { +path.line.casing.tag-highway.tag-status.tag-status-construction.tag-construction-corridor, +path.line.casing.tag-highway.tag-status.tag-status-construction.tag-construction-steps, +path.line.casing.tag-highway.tag-status.tag-status-construction.tag-construction-ladder { stroke-width: 5; stroke-linecap: butt; stroke-dasharray: none @@ -471,7 +479,9 @@ path.line.stroke.tag-highway.tag-status.tag-status-construction.tag-construction path.line.stroke.tag-highway.tag-status.tag-status-construction.tag-construction-footway, path.line.stroke.tag-highway.tag-status.tag-status-construction.tag-construction-cycleway, path.line.stroke.tag-highway.tag-status.tag-status-construction.tag-construction-bridleway, -path.line.stroke.tag-highway.tag-status.tag-status-construction.tag-construction-steps { +path.line.stroke.tag-highway.tag-status.tag-status-construction.tag-construction-corridor, +path.line.stroke.tag-highway.tag-status.tag-status-construction.tag-construction-steps, +path.line.stroke.tag-highway.tag-status.tag-status-construction.tag-construction-ladder { stroke-width: 4; stroke-linecap: butt; stroke-dasharray: 10, 10; @@ -482,28 +492,32 @@ path.line.shadow.tag-highway.tag-status.tag-status-proposed.tag-proposed-path, path.line.shadow.tag-highway.tag-status.tag-status-proposed.tag-proposed-footway, path.line.shadow.tag-highway.tag-status.tag-status-proposed.tag-proposed-cycleway, path.line.shadow.tag-highway.tag-status.tag-status-proposed.tag-proposed-bridleway, -path.line.shadow.tag-highway.tag-status.tag-status-proposed.tag-proposed-steps { +path.line.shadow.tag-highway.tag-status.tag-status-proposed.tag-proposed-steps, +path.line.shadow.tag-highway.tag-status.tag-status-proposed.tag-proposed-ladder { stroke-width: 15; } path.line.casing.tag-highway.tag-status.tag-status-proposed.tag-proposed-path, path.line.casing.tag-highway.tag-status.tag-status-proposed.tag-proposed-footway, path.line.casing.tag-highway.tag-status.tag-status-proposed.tag-proposed-cycleway, path.line.casing.tag-highway.tag-status.tag-status-proposed.tag-proposed-bridleway, -path.line.casing.tag-highway.tag-status.tag-status-proposed.tag-proposed-steps { +path.line.casing.tag-highway.tag-status.tag-status-proposed.tag-proposed-steps, +path.line.casing.tag-highway.tag-status.tag-status-proposed.tag-proposed-ladder { stroke-width: 4.5; } path.line.casing.tag-highway.tag-bridge.tag-status.tag-status-proposed.tag-proposed-path, path.line.casing.tag-highway.tag-bridge.tag-status.tag-status-proposed.tag-proposed-footway, path.line.casing.tag-highway.tag-bridge.tag-status.tag-status-proposed.tag-proposed-cycleway, path.line.casing.tag-highway.tag-bridge.tag-status.tag-status-proposed.tag-proposed-bridleway, -path.line.casing.tag-highway.tag-bridge.tag-status.tag-status-proposed.tag-proposed-steps { +path.line.casing.tag-highway.tag-bridge.tag-status.tag-status-proposed.tag-proposed-steps, +path.line.casing.tag-highway.tag-bridge.tag-status.tag-status-proposed.tag-proposed-ladder { stroke-width: 10; } path.line.stroke.tag-highway.tag-status.tag-status-proposed.tag-proposed-path, path.line.stroke.tag-highway.tag-status.tag-status-proposed.tag-proposed-footway, path.line.stroke.tag-highway.tag-status.tag-status-proposed.tag-proposed-cycleway, path.line.stroke.tag-highway.tag-status.tag-status-proposed.tag-proposed-bridleway, -path.line.stroke.tag-highway.tag-status.tag-status-proposed.tag-proposed-steps { +path.line.stroke.tag-highway.tag-status.tag-status-proposed.tag-proposed-steps, +path.line.stroke.tag-highway.tag-status.tag-status-proposed.tag-proposed-ladder { stroke-width: 3; } diff --git a/modules/osm/tags.js b/modules/osm/tags.js index f9d44a6497..d13129935c 100644 --- a/modules/osm/tags.js +++ b/modules/osm/tags.js @@ -224,11 +224,11 @@ export var osmRoutableHighwayTagValues = { motorway: true, trunk: true, primary: true, secondary: true, tertiary: true, residential: true, motorway_link: true, trunk_link: true, primary_link: true, secondary_link: true, tertiary_link: true, unclassified: true, road: true, service: true, track: true, living_street: true, bus_guideway: true, busway: true, - path: true, footway: true, cycleway: true, bridleway: true, pedestrian: true, corridor: true, steps: true + path: true, footway: true, cycleway: true, bridleway: true, pedestrian: true, corridor: true, steps: true, ladder: true }; // "highway" tag values that generally do not allow motor vehicles export var osmPathHighwayTagValues = { - path: true, footway: true, cycleway: true, bridleway: true, pedestrian: true, corridor: true, steps: true + path: true, footway: true, cycleway: true, bridleway: true, pedestrian: true, corridor: true, steps: true, ladder: true }; // "railway" tag values representing existing railroad tracks (purposely does not include 'abandoned') diff --git a/modules/osm/way.js b/modules/osm/way.js index 7b9f819213..281639d4d0 100644 --- a/modules/osm/way.js +++ b/modules/osm/way.js @@ -111,7 +111,7 @@ Object.assign(osmWay.prototype, { primary_link: 4, secondary_link: 4, tertiary_link: 4, unclassified: 4, road: 4, living_street: 4, bus_guideway: 4, busway: 4, pedestrian: 4, residential: 3.5, service: 3.5, track: 3, cycleway: 2.5, - bridleway: 2, corridor: 2, steps: 2, path: 1.5, footway: 1.5 + bridleway: 2, corridor: 2, steps: 2, path: 1.5, footway: 1.5, ladder: 0.5, }, railway: { // width includes ties and rail bed, not just track gauge rail: 2.5, light_rail: 2.5, tram: 2.5, subway: 2.5, diff --git a/modules/renderer/features.js b/modules/renderer/features.js index 5ef8f08267..58a65ed5b0 100644 --- a/modules/renderer/features.js +++ b/modules/renderer/features.js @@ -40,6 +40,7 @@ export function rendererFeatures(context) { 'cycleway': true, 'bridleway': true, 'steps': true, + 'ladder': true, 'pedestrian': true }; diff --git a/modules/ui/fields/access.js b/modules/ui/fields/access.js index b9867aae49..68589c4702 100644 --- a/modules/ui/fields/access.js +++ b/modules/ui/fields/access.js @@ -120,6 +120,12 @@ export function uiFieldAccess(field, context) { bicycle: 'no', horse: 'no' }, + ladder: { + foot: 'yes', + motor_vehicle: 'no', + bicycle: 'no', + horse: 'no' + }, pedestrian: { foot: 'yes', motor_vehicle: 'no'