diff --git a/css/30_highways.css b/css/30_highways.css index cb000b1d7..b29485a92 100644 --- a/css/30_highways.css +++ b/css/30_highways.css @@ -489,7 +489,7 @@ path.line.stroke.tag-highway_bus_stop, .preset-icon-container path.casing.tag-highway-footway { stroke: #988; } -.preset-icon-container path.stroke.tag-highway-footway:not(.tag-footway-crossing):not(.tag-man_made-pier):not(.tag-public_transport-platform) { +.preset-icon-container path.stroke.tag-highway-footway:not(.tag-crossing-marked):not(.tag-crossing-unmarked):not(.tag-man_made-pier):not(.tag-public_transport-platform) { stroke: #fff; } @@ -576,12 +576,21 @@ path.line.stroke.tag-highway.tag-crossing-marked { path.line.stroke.tag-highway-footway.tag-crossing-marked { stroke: #4c4444; } +.preset-icon .icon.tag-highway-footway.tag-crossing-marked { + color: #4c4444; +} path.line.stroke.tag-highway-footway.tag-crossing-unmarked { stroke: #776a6a; } +.preset-icon .icon.tag-highway-footway.tag-crossing-unmarked { + color: #776a6a; +} path.line.stroke.tag-highway-cycleway.tag-crossing-marked { stroke: #446077; } +.preset-icon .icon.tag-highway-cycleway.tag-crossing-marked { + color: #446077; +} /* highway midpoints */ diff --git a/data/core.yaml b/data/core.yaml index 1893dc9ed..95ad8d4e2 100644 --- a/data/core.yaml +++ b/data/core.yaml @@ -1306,6 +1306,12 @@ en: tip: "Find features that should possibly be connected to other nearby features" highway-highway: reference: Intersecting highways should share a junction vertex. + close_nodes: + title: "Very Close Points" + message: "Two points in {way} are very close together" + tip: "Find redundant points in ways" + ref_merge: "Nodes are less than 2 meters away; you may want to merge them." + ref_move_away: "Nodes are less than 2 meters away but not mergable; you may want to move them further apart." crossing_ways: title: Crossings Ways message: "{feature} crosses {feature2}" @@ -1403,11 +1409,6 @@ en: unknown_road: message: "{feature} has no classification" reference: "Roads without a specific type may not appear in maps or routing." - dupe_node_on_road: - title: Very close nodes on road - message: "Very close nodes on road" - ref_merge: "Nodes are less than 2 meters away; you may want to merge them." - ref_move_away: "Nodes are less than 2 meters away but not mergable; you may want to move them further apart." impossible_oneway: title: Impossible One-Ways tip: "Find route issues with one-way features" @@ -1447,6 +1448,8 @@ en: title: Continue drawing from end delete_feature: title: Delete this feature + merge_points: + title: Merge these points move_tags: title: Move the tags annotation: Moved tags. @@ -1496,8 +1499,6 @@ en: title: Use different levels use_tunnel: title: Use a tunnel - merge_nodes: - title: Merge these nodes intro: done: done ok: OK diff --git a/data/presets.yaml b/data/presets.yaml index 0ad3e05b7..3263c85ec 100644 --- a/data/presets.yaml +++ b/data/presets.yaml @@ -4184,6 +4184,9 @@ en: name: Indoor Corridor # 'terms: gallery,hall,hallway,indoor,passage,passageway' terms: '' + highway/crossing: + # highway=crossing + name: Crossing highway/crossing/marked: # crossing=marked name: Marked Crosswalk @@ -4195,11 +4198,11 @@ en: # 'terms: zebra crossing,marked crossing,crosswalk,flat top,hump,speed,slow' terms: '' highway/crossing/unmarked: - # highway=crossing + # crossing=unmarked name: Unmarked Crossing terms: '' highway/crossing/unmarked-raised: - # 'highway=crossing, traffic_calming=table' + # 'highway=crossing, crossing=unmarked, traffic_calming=table' name: Unmarked Crossing (Raised) # 'terms: flat top,hump,speed,slow' terms: '' @@ -4219,13 +4222,16 @@ en: name: Cycle & Foot Path # 'terms: bicycle and foot path,mixed-use trail,multi-use trail,segregated trail' terms: '' + highway/cycleway/crossing: + # cycleway=crossing + name: Cycle Crossing highway/cycleway/crossing/marked: # 'cycleway=crossing, crossing=marked' name: Marked Cycle Crossing # 'terms: cycle crosswalk,cycle path crossing,cycleway crossing,bicycle crossing,bike crossing' terms: '' highway/cycleway/crossing/unmarked: - # cycleway=crossing + # 'cycleway=crossing, crossing=unmarked' name: Unmarked Cycle Crossing # 'terms: cycle path crossing,cycleway crossing,bicycle crossing,bike crossing' terms: '' @@ -4244,6 +4250,9 @@ en: name: Moving Walkway # 'terms: moving sidewalk,autwalk,skywalk,travolator,travelator,travellator,conveyor' terms: '' + highway/footway/crossing: + # footway=crossing + name: Pedestrian Crossing highway/footway/marked: # 'footway=crossing, crossing=marked' name: Marked Crosswalk @@ -4260,12 +4269,12 @@ en: # 'terms: pavement,sidepath' terms: '' highway/footway/unmarked: - # footway=crossing + # 'footway=crossing, crossing=unmarked' name: Unmarked Crossing # 'terms: unmarked foot path crossing,unmarked crosswalk,unmarked pedestrian crossing' terms: '' highway/footway/unmarked-raised: - # 'footway=crossing, traffic_calming=table' + # 'footway=crossing, crossing=unmarked, traffic_calming=table' name: Unmarked Crossing (Raised) # 'terms: flat top,hump,speed,slow' terms: '' diff --git a/data/presets/presets.json b/data/presets/presets.json index f653acf30..e3beba1af 100644 --- a/data/presets/presets.json +++ b/data/presets/presets.json @@ -432,6 +432,7 @@ "healthcare/rehabilitation": {"icon": "maki-hospital", "geometry": ["point", "area"], "terms": ["rehab", "therapist", "therapy"], "tags": {"healthcare": "rehabilitation"}, "name": "Rehabilitation Facility"}, "healthcare/speech_therapist": {"icon": "fas-comment", "geometry": ["point", "area"], "terms": ["speech", "therapist", "therapy", "voice"], "tags": {"healthcare": "speech_therapist"}, "name": "Speech Therapist"}, "highway/bus_stop": {"icon": "maki-bus", "fields": ["name", "network", "operator", "bench", "shelter"], "geometry": ["point", "vertex"], "tags": {"highway": "bus_stop"}, "matchScore": 0.95, "name": "Bus Stop", "searchable": false, "replacement": "public_transport/platform/bus_point"}, + "highway/crossing": {"fields": ["crossing"], "geometry": ["vertex"], "tags": {"highway": "crossing"}, "searchable": false, "matchScore": 0.95, "name": "Crossing"}, "highway/bridleway": {"fields": ["name", "surface", "width", "structure", "access", "incline", "horse_scale"], "moreFields": ["covered", "dog", "lit", "maxweight_bridge", "smoothness", "wheelchair"], "icon": "maki-horse-riding", "geometry": ["line"], "tags": {"highway": "bridleway"}, "terms": ["bridleway", "equestrian", "horse", "trail"], "name": "Bridle Path"}, "highway/bus_guideway": {"icon": "maki-bus", "fields": ["name", "operator", "oneway", "structure", "covered"], "moreFields": ["trolley_wire"], "geometry": ["line"], "tags": {"highway": "bus_guideway"}, "addTags": {"highway": "bus_guideway", "access": "no", "bus": "designated"}, "removeTags": {"highway": "bus_guideway", "access": "no", "bus": "designated"}, "terms": [], "name": "Bus Guideway"}, "highway/construction": {"icon": "maki-barrier", "fields": ["name", "opening_date", "check_date", "note", "oneway", "structure", "access"], "geometry": ["line"], "tags": {"highway": "construction", "access": "no"}, "terms": ["closed", "closure", "construction"], "name": "Road Closed"}, @@ -440,22 +441,24 @@ "highway/crossing/zebra": {"icon": "temaki-pedestrian", "fields": ["crossing", "tactile_paving"], "geometry": ["vertex"], "tags": {"highway": "crossing", "crossing": "zebra"}, "reference": {"key": "highway", "value": "crossing"}, "terms": ["zebra crossing", "marked crossing", "crosswalk"], "name": "Marked Crosswalk", "searchable": false}, "highway/crossing/marked-raised": {"icon": "temaki-pedestrian", "fields": ["crossing", "tactile_paving"], "geometry": ["vertex"], "tags": {"crossing": "marked", "traffic_calming": "table"}, "addTags": {"highway": "crossing", "crossing": "marked", "traffic_calming": "table"}, "removeTags": {"highway": "crossing", "crossing": "marked", "traffic_calming": "table"}, "reference": {"key": "traffic_calming", "value": "table"}, "terms": ["zebra crossing", "marked crossing", "crosswalk", "flat top", "hump", "speed", "slow"], "name": "Marked Crosswalk (Raised)"}, "highway/crossing/marked": {"icon": "temaki-pedestrian", "fields": ["crossing", "tactile_paving"], "geometry": ["vertex"], "tags": {"crossing": "marked"}, "addTags": {"highway": "crossing", "crossing": "marked"}, "removeTags": {"highway": "crossing", "crossing": "marked"}, "reference": {"key": "highway", "value": "crossing"}, "terms": ["zebra crossing", "marked crossing", "crosswalk"], "name": "Marked Crosswalk"}, - "highway/crossing/unmarked-raised": {"fields": ["crossing", "tactile_paving"], "geometry": ["vertex"], "addTags": {"highway": "crossing", "crossing": "unmarked", "traffic_calming": "table"}, "removeTags": {"highway": "crossing", "crossing": "unmarked", "traffic_calming": "table"}, "tags": {"highway": "crossing", "traffic_calming": "table"}, "reference": {"key": "traffic_calming", "value": "table"}, "terms": ["flat top", "hump", "speed", "slow"], "matchScore": 0.95, "name": "Unmarked Crossing (Raised)"}, - "highway/crossing/unmarked": {"fields": ["crossing", "tactile_paving"], "geometry": ["vertex"], "addTags": {"highway": "crossing", "crossing": "unmarked"}, "removeTags": {"highway": "crossing", "crossing": "unmarked"}, "tags": {"highway": "crossing"}, "reference": {"key": "highway", "value": "crossing"}, "terms": [], "matchScore": 0.95, "name": "Unmarked Crossing"}, + "highway/crossing/unmarked-raised": {"icon": "temaki-pedestrian", "fields": ["crossing", "tactile_paving"], "geometry": ["vertex"], "tags": {"highway": "crossing", "crossing": "unmarked", "traffic_calming": "table"}, "reference": {"key": "traffic_calming", "value": "table"}, "terms": ["flat top", "hump", "speed", "slow"], "name": "Unmarked Crossing (Raised)"}, + "highway/crossing/unmarked": {"icon": "temaki-pedestrian", "fields": ["crossing", "tactile_paving"], "geometry": ["vertex"], "tags": {"crossing": "unmarked"}, "addTags": {"highway": "crossing", "crossing": "unmarked"}, "removeTags": {"highway": "crossing", "crossing": "unmarked"}, "reference": {"key": "crossing", "value": "unmarked"}, "terms": [], "name": "Unmarked Crossing"}, "highway/cycleway": {"icon": "maki-bicycle", "fields": ["name", "oneway", "surface", "width", "structure", "access", "incline"], "moreFields": ["covered", "dog", "lit", "maxspeed", "maxweight_bridge", "smoothness", "wheelchair"], "geometry": ["line"], "tags": {"highway": "cycleway"}, "terms": ["bike path", "bicyle path"], "matchScore": 0.9, "name": "Cycle Path"}, + "highway/cycleway/crossing": {"icon": "maki-bicycle", "fields": ["crossing", "access", "surface", "tactile_paving"], "geometry": ["line"], "tags": {"cycleway": "crossing"}, "addTags": {"highway": "cycleway", "cycleway": "crossing"}, "removeTags": {"highway": "cycleway", "cycleway": "crossing"}, "reference": {"key": "cycleway", "value": "crossing"}, "searchable": false, "matchScore": 0.95, "name": "Cycle Crossing"}, "highway/cycleway/bicycle_foot": {"icon": "maki-bicycle", "geometry": ["line"], "tags": {"highway": "cycleway", "foot": "designated"}, "addTags": {"highway": "cycleway", "foot": "designated", "bicycle": "designated"}, "removeTags": {"highway": "cycleway", "foot": "designated", "bicycle": "designated"}, "terms": ["bicycle and foot path", "mixed-use trail", "multi-use trail", "segregated trail"], "matchScore": 0.95, "name": "Cycle & Foot Path"}, "highway/cycleway/crossing/marked": {"icon": "maki-bicycle", "fields": ["crossing", "access", "surface", "tactile_paving"], "geometry": ["line"], "tags": {"cycleway": "crossing", "crossing": "marked"}, "addTags": {"highway": "cycleway", "cycleway": "crossing", "crossing": "marked"}, "removeTags": {"highway": "cycleway", "cycleway": "crossing", "crossing": "marked"}, "reference": {"key": "cycleway", "value": "crossing"}, "terms": ["cycle crosswalk", "cycle path crossing", "cycleway crossing", "bicycle crossing", "bike crossing"], "name": "Marked Cycle Crossing"}, - "highway/cycleway/crossing/unmarked": {"icon": "maki-bicycle", "fields": ["crossing", "access", "surface", "tactile_paving"], "geometry": ["line"], "tags": {"cycleway": "crossing"}, "addTags": {"highway": "cycleway", "cycleway": "crossing", "crossing": "unmarked"}, "removeTags": {"highway": "cycleway", "cycleway": "crossing", "crossing": "unmarked"}, "reference": {"key": "cycleway", "value": "crossing"}, "terms": ["cycle path crossing", "cycleway crossing", "bicycle crossing", "bike crossing"], "matchScore": 0.95, "name": "Unmarked Cycle Crossing"}, + "highway/cycleway/crossing/unmarked": {"icon": "maki-bicycle", "fields": ["crossing", "access", "surface", "tactile_paving"], "geometry": ["line"], "tags": {"cycleway": "crossing", "crossing": "unmarked"}, "addTags": {"highway": "cycleway", "cycleway": "crossing", "crossing": "unmarked"}, "removeTags": {"highway": "cycleway", "cycleway": "crossing", "crossing": "unmarked"}, "reference": {"key": "cycleway", "value": "crossing"}, "terms": ["cycle path crossing", "cycleway crossing", "bicycle crossing", "bike crossing"], "name": "Unmarked Cycle Crossing"}, "highway/elevator": {"icon": "temaki-elevator", "fields": ["access_simple", "opening_hours", "maxweight", "ref", "wheelchair"], "moreFields": ["maxheight"], "geometry": ["vertex"], "tags": {"highway": "elevator"}, "terms": ["lift"], "name": "Elevator"}, "highway/footway": {"icon": "temaki-pedestrian", "fields": ["name", "surface", "width", "structure", "access", "incline"], "moreFields": ["covered", "dog", "lit", "maxweight_bridge", "smoothness", "wheelchair"], "geometry": ["line"], "terms": ["hike", "hiking", "promenade", "trackway", "trail", "walk"], "tags": {"highway": "footway"}, "matchScore": 0.9, "name": "Foot Path"}, + "highway/footway/crossing": {"fields": ["crossing", "access", "surface", "tactile_paving"], "geometry": ["line"], "tags": {"footway": "crossing"}, "addTags": {"highway": "footway", "footway": "crossing"}, "removeTags": {"highway": "footway", "footway": "crossing"}, "reference": {"key": "footway", "value": "crossing"}, "matchScore": 0.95, "searchable": false, "name": "Pedestrian Crossing"}, "highway/footway/zebra-raised": {"icon": "temaki-pedestrian", "fields": ["crossing", "access", "surface", "tactile_paving"], "geometry": ["line"], "tags": {"highway": "footway", "footway": "crossing", "crossing": "zebra", "traffic_calming": "table"}, "reference": {"key": "traffic_calming", "value": "table"}, "terms": ["zebra crossing", "marked crossing", "crosswalk", "flat top", "hump", "speed", "slow"], "name": "Marked Crosswalk (Raised)", "searchable": false}, "highway/footway/zebra": {"icon": "temaki-pedestrian", "fields": ["crossing", "access", "surface", "tactile_paving"], "geometry": ["line"], "tags": {"highway": "footway", "footway": "crossing", "crossing": "zebra"}, "reference": {"key": "footway", "value": "crossing"}, "terms": ["zebra crossing", "marked crossing", "crosswalk"], "name": "Marked Crosswalk", "searchable": false}, "highway/footway/conveying": {"icon": "temaki-pedestrian", "fields": ["name", "conveying", "access_simple", "lit", "width", "wheelchair"], "geometry": ["line"], "terms": ["moving sidewalk", "autwalk", "skywalk", "travolator", "travelator", "travellator", "conveyor"], "tags": {"highway": "footway", "conveying": "*"}, "name": "Moving Walkway"}, "highway/footway/marked-raised": {"icon": "temaki-pedestrian", "fields": ["crossing", "access", "surface", "tactile_paving"], "geometry": ["line"], "tags": {"footway": "crossing", "crossing": "marked", "traffic_calming": "table"}, "addTags": {"highway": "footway", "footway": "crossing", "crossing": "marked", "traffic_calming": "table"}, "removeTags": {"highway": "footway", "footway": "crossing", "crossing": "marked", "traffic_calming": "table"}, "reference": {"key": "traffic_calming", "value": "table"}, "terms": ["zebra crossing", "marked crossing", "crosswalk", "flat top", "hump", "speed", "slow"], "name": "Marked Crosswalk (Raised)"}, "highway/footway/marked": {"icon": "temaki-pedestrian", "fields": ["crossing", "access", "surface", "tactile_paving"], "geometry": ["line"], "tags": {"footway": "crossing", "crossing": "marked"}, "addTags": {"highway": "footway", "footway": "crossing", "crossing": "marked"}, "removeTags": {"highway": "footway", "footway": "crossing", "crossing": "marked"}, "reference": {"key": "footway", "value": "crossing"}, "terms": ["marked foot path crossing", "marked crossing", "marked pedestrian crosswalk", "zebra crossing"], "name": "Marked Crosswalk"}, "highway/footway/sidewalk": {"icon": "temaki-pedestrian", "geometry": ["line"], "tags": {"footway": "sidewalk"}, "addTags": {"highway": "footway", "footway": "sidewalk"}, "removeTags": {"highway": "footway", "footway": "sidewalk"}, "reference": {"key": "footway", "value": "sidewalk"}, "terms": ["pavement", "sidepath"], "name": "Sidewalk"}, - "highway/footway/unmarked-raised": {"fields": ["crossing", "access", "surface", "tactile_paving"], "geometry": ["line"], "tags": {"footway": "crossing", "traffic_calming": "table"}, "addTags": {"highway": "footway", "footway": "crossing", "crossing": "unmarked", "traffic_calming": "table"}, "removeTags": {"highway": "footway", "footway": "crossing", "crossing": "unmarked", "traffic_calming": "table"}, "reference": {"key": "traffic_calming", "value": "table"}, "terms": ["flat top", "hump", "speed", "slow"], "matchScore": 0.95, "name": "Unmarked Crossing (Raised)"}, - "highway/footway/unmarked": {"fields": ["crossing", "access", "surface", "tactile_paving"], "geometry": ["line"], "tags": {"footway": "crossing"}, "addTags": {"highway": "footway", "footway": "crossing", "crossing": "unmarked"}, "removeTags": {"highway": "footway", "footway": "crossing", "crossing": "unmarked"}, "reference": {"key": "footway", "value": "crossing"}, "terms": ["unmarked foot path crossing", "unmarked crosswalk", "unmarked pedestrian crossing"], "matchScore": 0.95, "name": "Unmarked Crossing"}, + "highway/footway/unmarked-raised": {"icon": "temaki-pedestrian", "fields": ["crossing", "access", "surface", "tactile_paving"], "geometry": ["line"], "tags": {"footway": "crossing", "crossing": "unmarked", "traffic_calming": "table"}, "addTags": {"highway": "footway", "footway": "crossing", "crossing": "unmarked", "traffic_calming": "table"}, "removeTags": {"highway": "footway", "footway": "crossing", "crossing": "unmarked", "traffic_calming": "table"}, "reference": {"key": "traffic_calming", "value": "table"}, "terms": ["flat top", "hump", "speed", "slow"], "name": "Unmarked Crossing (Raised)"}, + "highway/footway/unmarked": {"icon": "temaki-pedestrian", "fields": ["crossing", "access", "surface", "tactile_paving"], "geometry": ["line"], "tags": {"footway": "crossing", "crossing": "unmarked"}, "addTags": {"highway": "footway", "footway": "crossing", "crossing": "unmarked"}, "removeTags": {"highway": "footway", "footway": "crossing", "crossing": "unmarked"}, "reference": {"key": "footway", "value": "crossing"}, "terms": ["unmarked foot path crossing", "unmarked crosswalk", "unmarked pedestrian crossing"], "name": "Unmarked Crossing"}, "highway/give_way": {"icon": "temaki-yield", "fields": ["direction_vertex"], "geometry": ["vertex"], "tags": {"highway": "give_way"}, "terms": ["give way", "yield", "sign"], "name": "Yield Sign"}, "highway/living_street": {"icon": "iD-highway-living-street", "fields": ["name", "oneway", "maxspeed", "lanes", "surface", "structure", "access"], "moreFields": ["covered", "cycleway", "flood_prone", "junction_line", "lit", "maxheight", "maxweight_bridge", "oneway/bicycle", "smoothness", "trolley_wire"], "geometry": ["line"], "tags": {"highway": "living_street"}, "name": "Living Street"}, "highway/milestone": {"icon": "temaki-milestone", "geometry": ["point", "vertex"], "fields": ["distance", "direction_vertex"], "tags": {"highway": "milestone"}, "terms": ["mile marker", "mile post", "mile stone", "mileage marker", "milemarker", "milepost"], "name": "Highway Milestone"}, diff --git a/data/presets/presets/highway/_crossing.json b/data/presets/presets/highway/_crossing.json new file mode 100644 index 000000000..8be3c3c5c --- /dev/null +++ b/data/presets/presets/highway/_crossing.json @@ -0,0 +1,14 @@ +{ + "fields": [ + "crossing" + ], + "geometry": [ + "vertex" + ], + "tags": { + "highway": "crossing" + }, + "searchable": false, + "matchScore": 0.95, + "name": "Crossing" +} diff --git a/data/presets/presets/highway/crossing/unmarked-raised.json b/data/presets/presets/highway/crossing/unmarked-raised.json index 02c9b1b61..a3149ee0a 100644 --- a/data/presets/presets/highway/crossing/unmarked-raised.json +++ b/data/presets/presets/highway/crossing/unmarked-raised.json @@ -1,4 +1,5 @@ { + "icon": "temaki-pedestrian", "fields": [ "crossing", "tactile_paving" @@ -6,13 +7,9 @@ "geometry": [ "vertex" ], - "addTags": { - "highway": "crossing", - "crossing": "unmarked", - "traffic_calming": "table" - }, "tags": { "highway": "crossing", + "crossing": "unmarked", "traffic_calming": "table" }, "reference": { @@ -25,6 +22,5 @@ "speed", "slow" ], - "matchScore": 0.95, "name": "Unmarked Crossing (Raised)" } diff --git a/data/presets/presets/highway/crossing/unmarked.json b/data/presets/presets/highway/crossing/unmarked.json index f93c86f22..d551e6c90 100644 --- a/data/presets/presets/highway/crossing/unmarked.json +++ b/data/presets/presets/highway/crossing/unmarked.json @@ -1,4 +1,5 @@ { + "icon": "temaki-pedestrian", "fields": [ "crossing", "tactile_paving" @@ -6,18 +7,17 @@ "geometry": [ "vertex" ], + "tags": { + "crossing": "unmarked" + }, "addTags": { "highway": "crossing", "crossing": "unmarked" }, - "tags": { - "highway": "crossing" - }, "reference": { - "key": "highway", - "value": "crossing" + "key": "crossing", + "value": "unmarked" }, "terms": [], - "matchScore": 0.95, "name": "Unmarked Crossing" } diff --git a/data/presets/presets/highway/cycleway/_crossing.json b/data/presets/presets/highway/cycleway/_crossing.json new file mode 100644 index 000000000..51a594d4f --- /dev/null +++ b/data/presets/presets/highway/cycleway/_crossing.json @@ -0,0 +1,30 @@ +{ + "icon": "maki-bicycle", + "fields": [ + "crossing", + "access", + "surface", + "tactile_paving" + ], + "geometry": [ + "line" + ], + "tags": { + "cycleway": "crossing" + }, + "addTags": { + "highway": "cycleway", + "cycleway": "crossing" + }, + "removeTags": { + "highway": "cycleway", + "cycleway": "crossing" + }, + "reference": { + "key": "cycleway", + "value": "crossing" + }, + "searchable": false, + "matchScore": 0.95, + "name": "Cycle Crossing" +} diff --git a/data/presets/presets/highway/cycleway/crossing/unmarked.json b/data/presets/presets/highway/cycleway/crossing/unmarked.json index 7fafded8d..34cb5c227 100644 --- a/data/presets/presets/highway/cycleway/crossing/unmarked.json +++ b/data/presets/presets/highway/cycleway/crossing/unmarked.json @@ -10,7 +10,8 @@ "line" ], "tags": { - "cycleway": "crossing" + "cycleway": "crossing", + "crossing": "unmarked" }, "addTags": { "highway": "cycleway", @@ -27,6 +28,5 @@ "bicycle crossing", "bike crossing" ], - "matchScore": 0.95, "name": "Unmarked Cycle Crossing" } diff --git a/data/presets/presets/highway/footway/_crossing.json b/data/presets/presets/highway/footway/_crossing.json new file mode 100644 index 000000000..57e02af21 --- /dev/null +++ b/data/presets/presets/highway/footway/_crossing.json @@ -0,0 +1,29 @@ +{ + "fields": [ + "crossing", + "access", + "surface", + "tactile_paving" + ], + "geometry": [ + "line" + ], + "tags": { + "footway": "crossing" + }, + "addTags": { + "highway": "footway", + "footway": "crossing" + }, + "removeTags": { + "highway": "footway", + "footway": "crossing" + }, + "reference": { + "key": "footway", + "value": "crossing" + }, + "matchScore": 0.95, + "searchable": false, + "name": "Pedestrian Crossing" +} diff --git a/data/presets/presets/highway/footway/unmarked-raised.json b/data/presets/presets/highway/footway/unmarked-raised.json index 16280cb8d..7abcadb31 100644 --- a/data/presets/presets/highway/footway/unmarked-raised.json +++ b/data/presets/presets/highway/footway/unmarked-raised.json @@ -1,4 +1,5 @@ { + "icon": "temaki-pedestrian", "fields": [ "crossing", "access", @@ -10,6 +11,7 @@ ], "tags": { "footway": "crossing", + "crossing": "unmarked", "traffic_calming": "table" }, "addTags": { @@ -28,6 +30,5 @@ "speed", "slow" ], - "matchScore": 0.95, "name": "Unmarked Crossing (Raised)" } diff --git a/data/presets/presets/highway/footway/unmarked.json b/data/presets/presets/highway/footway/unmarked.json index 9e883143c..f3d43120c 100644 --- a/data/presets/presets/highway/footway/unmarked.json +++ b/data/presets/presets/highway/footway/unmarked.json @@ -1,4 +1,5 @@ { + "icon": "temaki-pedestrian", "fields": [ "crossing", "access", @@ -9,7 +10,8 @@ "line" ], "tags": { - "footway": "crossing" + "footway": "crossing", + "crossing": "unmarked" }, "addTags": { "highway": "footway", @@ -25,6 +27,5 @@ "unmarked crosswalk", "unmarked pedestrian crossing" ], - "matchScore": 0.95, "name": "Unmarked Crossing" } diff --git a/data/taginfo.json b/data/taginfo.json index 67796f9ce..513ee8ad6 100644 --- a/data/taginfo.json +++ b/data/taginfo.json @@ -424,6 +424,7 @@ {"key": "healthcare", "value": "rehabilitation", "description": "🄿 Rehabilitation Facility", "object_types": ["node", "area"], "icon_url": "https://raw.githubusercontent.com/mapbox/maki/master/icons/hospital-15.svg?sanitize=true"}, {"key": "healthcare", "value": "speech_therapist", "description": "🄿 Speech Therapist", "object_types": ["node", "area"], "icon_url": "https://raw.githubusercontent.com/openstreetmap/iD/master/svg/fontawesome/fas-comment.svg?sanitize=true"}, {"key": "highway", "value": "bus_stop", "description": "🄿 Bus Stop (unsearchable)", "object_types": ["node"], "icon_url": "https://raw.githubusercontent.com/mapbox/maki/master/icons/bus-15.svg?sanitize=true"}, + {"key": "highway", "value": "crossing", "description": "🄿 Crossing (unsearchable)", "object_types": ["node"]}, {"key": "highway", "value": "bridleway", "description": "🄿 Bridle Path", "object_types": ["way"], "icon_url": "https://raw.githubusercontent.com/mapbox/maki/master/icons/horse-riding-15.svg?sanitize=true"}, {"key": "highway", "value": "bus_guideway", "description": "🄿 Bus Guideway", "object_types": ["way"], "icon_url": "https://raw.githubusercontent.com/mapbox/maki/master/icons/bus-15.svg?sanitize=true"}, {"key": "access", "value": "no", "description": "🄿 Road Closed, 🄵 Allowed Access", "object_types": ["way"], "icon_url": "https://raw.githubusercontent.com/mapbox/maki/master/icons/barrier-15.svg?sanitize=true"}, @@ -431,15 +432,15 @@ {"key": "traffic_calming", "value": "table", "description": "🄿 Marked Crosswalk (Raised) (unsearchable), 🄿 Marked Crosswalk (Raised), 🄿 Unmarked Crossing (Raised), 🄿 Speed Table", "object_types": ["node"], "icon_url": "https://raw.githubusercontent.com/bhousel/temaki/master/icons/pedestrian.svg?sanitize=true"}, {"key": "crossing", "value": "zebra", "description": "🄿 Marked Crosswalk (unsearchable), 🄳 ➜ crossing=marked", "object_types": ["node"], "icon_url": "https://raw.githubusercontent.com/bhousel/temaki/master/icons/pedestrian.svg?sanitize=true"}, {"key": "crossing", "value": "marked", "description": "🄿 Marked Crosswalk, 🄿 Marked Cycle Crossing", "object_types": ["node"], "icon_url": "https://raw.githubusercontent.com/bhousel/temaki/master/icons/pedestrian.svg?sanitize=true"}, - {"key": "highway", "value": "crossing", "description": "🄿 Unmarked Crossing", "object_types": ["node"]}, + {"key": "crossing", "value": "unmarked", "description": "🄿 Unmarked Crossing, 🄿 Unmarked Cycle Crossing", "object_types": ["node"], "icon_url": "https://raw.githubusercontent.com/bhousel/temaki/master/icons/pedestrian.svg?sanitize=true"}, {"key": "highway", "value": "cycleway", "description": "🄿 Cycle Path", "object_types": ["way"], "icon_url": "https://raw.githubusercontent.com/mapbox/maki/master/icons/bicycle-15.svg?sanitize=true"}, + {"key": "cycleway", "value": "crossing", "description": "🄿 Cycle Crossing (unsearchable)", "object_types": ["way"], "icon_url": "https://raw.githubusercontent.com/mapbox/maki/master/icons/bicycle-15.svg?sanitize=true"}, {"key": "foot", "value": "designated", "description": "🄿 Cycle & Foot Path, 🄵 Allowed Access", "object_types": ["way"], "icon_url": "https://raw.githubusercontent.com/mapbox/maki/master/icons/bicycle-15.svg?sanitize=true"}, - {"key": "cycleway", "value": "crossing", "description": "🄿 Unmarked Cycle Crossing", "object_types": ["way"], "icon_url": "https://raw.githubusercontent.com/mapbox/maki/master/icons/bicycle-15.svg?sanitize=true"}, {"key": "highway", "value": "elevator", "description": "🄿 Elevator", "object_types": ["node"], "icon_url": "https://raw.githubusercontent.com/bhousel/temaki/master/icons/elevator.svg?sanitize=true"}, {"key": "highway", "value": "footway", "description": "🄿 Foot Path", "object_types": ["way"], "icon_url": "https://raw.githubusercontent.com/bhousel/temaki/master/icons/pedestrian.svg?sanitize=true"}, + {"key": "footway", "value": "crossing", "description": "🄿 Pedestrian Crossing (unsearchable)", "object_types": ["way"]}, {"key": "conveying", "description": "🄿 Moving Walkway, 🄿 Escalator", "object_types": ["way"], "icon_url": "https://raw.githubusercontent.com/bhousel/temaki/master/icons/pedestrian.svg?sanitize=true"}, {"key": "footway", "value": "sidewalk", "description": "🄿 Sidewalk", "object_types": ["way"], "icon_url": "https://raw.githubusercontent.com/bhousel/temaki/master/icons/pedestrian.svg?sanitize=true"}, - {"key": "footway", "value": "crossing", "description": "🄿 Unmarked Crossing", "object_types": ["way"]}, {"key": "highway", "value": "give_way", "description": "🄿 Yield Sign", "object_types": ["node"], "icon_url": "https://raw.githubusercontent.com/bhousel/temaki/master/icons/yield.svg?sanitize=true"}, {"key": "highway", "value": "living_street", "description": "🄿 Living Street", "object_types": ["way"], "icon_url": "https://raw.githubusercontent.com/openstreetmap/iD/master/svg/iD-sprite/presets/highway-living-street.svg?sanitize=true"}, {"key": "highway", "value": "milestone", "description": "🄿 Highway Milestone", "object_types": ["node"], "icon_url": "https://raw.githubusercontent.com/bhousel/temaki/master/icons/milestone.svg?sanitize=true"}, diff --git a/dist/locales/en.json b/dist/locales/en.json index e4671115f..6f6e45291 100644 --- a/dist/locales/en.json +++ b/dist/locales/en.json @@ -1604,6 +1604,13 @@ "reference": "Intersecting highways should share a junction vertex." } }, + "close_nodes": { + "title": "Very Close Points", + "message": "Two points in {way} are very close together", + "tip": "Find redundant points in ways", + "ref_merge": "Nodes are less than 2 meters away; you may want to merge them.", + "ref_move_away": "Nodes are less than 2 meters away but not mergable; you may want to move them further apart." + }, "crossing_ways": { "title": "Crossings Ways", "message": "{feature} crosses {feature2}", @@ -1737,12 +1744,6 @@ "message": "{feature} has no classification", "reference": "Roads without a specific type may not appear in maps or routing." }, - "dupe_node_on_road": { - "title": "Very close nodes on road", - "message": "Very close nodes on road", - "ref_merge": "Nodes are less than 2 meters away; you may want to merge them.", - "ref_move_away": "Nodes are less than 2 meters away but not mergable; you may want to move them further apart." - }, "impossible_oneway": { "title": "Impossible One-Ways", "tip": "Find route issues with one-way features", @@ -1799,6 +1800,9 @@ "delete_feature": { "title": "Delete this feature" }, + "merge_points": { + "title": "Merge these points" + }, "move_tags": { "title": "Move the tags", "annotation": "Moved tags." @@ -1869,9 +1873,6 @@ }, "use_tunnel": { "title": "Use a tunnel" - }, - "merge_nodes": { - "title": "Merge these nodes" } } }, @@ -5961,6 +5962,10 @@ "name": "Bus Stop", "terms": "" }, + "highway/crossing": { + "name": "Crossing", + "terms": "" + }, "highway/bridleway": { "name": "Bridle Path", "terms": "bridleway,equestrian,horse,trail" @@ -6005,6 +6010,10 @@ "name": "Cycle Path", "terms": "bike path,bicyle path" }, + "highway/cycleway/crossing": { + "name": "Cycle Crossing", + "terms": "" + }, "highway/cycleway/bicycle_foot": { "name": "Cycle & Foot Path", "terms": "bicycle and foot path,mixed-use trail,multi-use trail,segregated trail" @@ -6025,6 +6034,10 @@ "name": "Foot Path", "terms": "hike,hiking,promenade,trackway,trail,walk" }, + "highway/footway/crossing": { + "name": "Pedestrian Crossing", + "terms": "" + }, "highway/footway/zebra-raised": { "name": "Marked Crosswalk (Raised)", "terms": "zebra crossing,marked crossing,crosswalk,flat top,hump,speed,slow" @@ -9101,6 +9114,20 @@ "description": "Japan GSI ortho Imagery. Usually better than bing, but a bit older.", "name": "Japan GSI ortho Imagery" }, + "gsi.go.jp_airphoto": { + "attribution": { + "text": "GSI Japan" + }, + "description": "Japan GSI airphoto Imagery. Not fully orthorectified, but a bit newer and/or differently covered than GSI ortho Imagery.", + "name": "Japan GSI airphoto Imagery" + }, + "gsi.go.jp_seamlessphoto": { + "attribution": { + "text": "GSI Japan seamless photo" + }, + "description": "Japan GSI seamlessphoto Imagery. The collection of latest imageries of GSI ortho, airphoto, post disaster and others.", + "name": "Japan GSI seamlessphoto Imagery" + }, "gsi.go.jp_std_map": { "attribution": { "text": "GSI Japan" diff --git a/modules/ui/inspector.js b/modules/ui/inspector.js index d0fb78e42..bce4f9479 100644 --- a/modules/ui/inspector.js +++ b/modules/ui/inspector.js @@ -54,8 +54,7 @@ export function uiInspector(context) { (!hasNonGeometryTags && !entity.isHighwayIntersection(context.graph())); var issues = context.validator().getEntityIssues(_entityID); // start with the preset list if the feature is new and untagged or is an uninteresting vertex - var showPresetList = issues.length === 0 && - ((newFeature && !hasNonGeometryTags) || isTaglessOrIntersectionVertex); + var showPresetList = (newFeature && !hasNonGeometryTags) || (isTaglessOrIntersectionVertex && !issues.length); if (showPresetList) { wrap.style('right', '-100%'); diff --git a/modules/ui/tools/save.js b/modules/ui/tools/save.js index 16a0caee2..ca6473fbe 100644 --- a/modules/ui/tools/save.js +++ b/modules/ui/tools/save.js @@ -104,11 +104,7 @@ export function uiToolSave(context) { context.history() - .on('change.save', function(diff) { - if (!diff || diff.didChange.addition || diff.didChange.deletion) { - updateCount(); // only on significant changes - } - }); + .on('change.save', updateCount); context .on('enter.save', function() { diff --git a/modules/validations/dupe_node_on_road.js b/modules/validations/close_nodes.js similarity index 77% rename from modules/validations/dupe_node_on_road.js rename to modules/validations/close_nodes.js index 78f6f7022..618b45a09 100644 --- a/modules/validations/dupe_node_on_road.js +++ b/modules/validations/close_nodes.js @@ -1,18 +1,21 @@ import { operationMerge } from '../operations/index'; +import { utilDisplayLabel } from '../util'; import { t } from '../util/locale'; import { validationIssue, validationIssueFix } from '../core/validation'; +import { osmRoutableHighwayTagValues } from '../osm/tags'; import { geoExtent } from '../geo'; -export function validationDupeNodeOnRoad() { - var type = 'dupe_node_on_road'; +export function validationCloseNodes() { + var type = 'close_nodes'; function isNodeOnRoad(node, context) { var parentWays = context.graph().parentWays(node); for (var i = 0; i < parentWays.length; i++) { - if (parentWays[i].tags.highway) { - return true; + var parentWay = parentWays[i]; + if (osmRoutableHighwayTagValues[parentWay.tags.highway]) { + return parentWay; } } return false; @@ -39,7 +42,11 @@ export function validationDupeNodeOnRoad() { var validation = function(entity, context) { - if (entity.type !== 'node' || !isNodeOnRoad(entity, context)) return []; + + if (entity.type !== 'node') return []; + + var road = isNodeOnRoad(entity, context); + if (!road) return []; var dupe = findDupeNode(entity, context); if (dupe === null) return []; @@ -50,7 +57,7 @@ export function validationDupeNodeOnRoad() { fixes.push( new validationIssueFix({ icon: 'iD-icon-plus', - title: t('issues.fix.merge_nodes.title'), + title: t('issues.fix.merge_points.title'), onClick: function() { var entities = this.issue.entities, operation = operationMerge([entities[0].id, entities[1].id], context); @@ -65,7 +72,7 @@ export function validationDupeNodeOnRoad() { return [new validationIssue({ type: type, severity: 'warning', - message: t('issues.dupe_node_on_road.message'), + message: t('issues.close_nodes.message', { way: utilDisplayLabel(road, context) }), reference: showReference, entities: [entity, dupe], fixes: fixes @@ -74,8 +81,8 @@ export function validationDupeNodeOnRoad() { function showReference(selection) { var referenceText = mergable - ? t('issues.dupe_node_on_road.ref_merge') - : t('issues.dupe_node_on_road.ref_move_away'); + ? t('issues.close_nodes.ref_merge') + : t('issues.close_nodes.ref_move_away'); selection.selectAll('.issue-reference') .data([0]) .enter() diff --git a/modules/validations/crossing_ways.js b/modules/validations/crossing_ways.js index 112108081..306d2b1c8 100644 --- a/modules/validations/crossing_ways.js +++ b/modules/validations/crossing_ways.js @@ -164,14 +164,12 @@ export function validationCrossingWays() { return {}; } var pathFeature = entity1IsPath ? entity1 : entity2; - if (pathFeature.tags.highway === 'footway' && - pathFeature.tags.footway === 'crossing' && - ['marked', 'unmarked'].indexOf(pathFeature.tags.crossing) !== -1) { + if (['marked', 'unmarked'].indexOf(pathFeature.tags.crossing) !== -1) { // if the path is a crossing, match the crossing type return { highway: 'crossing', crossing: pathFeature.tags.crossing }; } - // default ambiguous crossings to unmarked - return { highway: 'crossing', crossing: 'unmarked' }; + // don't add a `crossing` subtag to ambiguous crossings + return { highway: 'crossing' }; } return {}; } diff --git a/modules/validations/index.js b/modules/validations/index.js index a2dd6b6c9..cecaafeb5 100644 --- a/modules/validations/index.js +++ b/modules/validations/index.js @@ -1,7 +1,7 @@ export { validationAlmostJunction } from './almost_junction'; +export { validationCloseNodes } from './close_nodes'; export { validationCrossingWays } from './crossing_ways'; export { validationDisconnectedWay } from './disconnected_way'; -export { validationDupeNodeOnRoad } from './dupe_node_on_road'; export { validationFixmeTag } from './fixme_tag'; export { validationGenericName } from './generic_name'; export { validationImpossibleOneway } from './impossible_oneway'; diff --git a/test/spec/services/mapillary.js b/test/spec/services/mapillary.js index 03d741d83..c74705e19 100644 --- a/test/spec/services/mapillary.js +++ b/test/spec/services/mapillary.js @@ -100,6 +100,7 @@ describe('iD.serviceMapillary', function() { }); it('loads multiple pages of image results', function(done) { + this.timeout(10000); var calls = 0; mapillary.on('loadedImages', function() { server.respond(); // respond to new fetches @@ -193,6 +194,7 @@ describe('iD.serviceMapillary', function() { }); it('loads multiple pages of signs results', function(done) { + this.timeout(10000); var calls = 0; mapillary.on('loadedSigns', function() { server.respond(); // respond to new fetches