From b08200d7599875ec9811090608026eada15d46ce Mon Sep 17 00:00:00 2001 From: Kyle Hensel Date: Mon, 5 May 2025 21:00:16 +1000 Subject: [PATCH] add definitions for the structure of 31 relation presets --- data/presets/area.json | 32 ++++++++- data/presets/public_transport/stop_area.json | 59 ++++++++++++++++- data/presets/type/boundary.json | 62 +++++++++++++++++- .../presets/type/boundary/administrative.json | 3 +- data/presets/type/destination_sign.json | 61 ++++++++++++++++- data/presets/type/enforcement.json | 63 +++++++++++++++++- data/presets/type/enforcement/maxspeed.json | 3 +- data/presets/type/multipolygon.json | 3 +- .../public_transport/stop_area_group.json | 18 ++++- data/presets/type/restriction.json | 51 ++++++++++++++- .../type/restriction/no_left_turn.json | 3 +- .../type/restriction/no_right_turn.json | 3 +- .../type/restriction/no_straight_on.json | 3 +- data/presets/type/restriction/no_u_turn.json | 3 +- .../type/restriction/only_left_turn.json | 3 +- .../type/restriction/only_right_turn.json | 3 +- .../type/restriction/only_straight_on.json | 3 +- .../presets/type/restriction/only_u_turn.json | 3 +- data/presets/type/route.json | 65 ++++++++++++++++++- data/presets/type/route/aerialway.json | 3 +- data/presets/type/route/bus.json | 3 +- data/presets/type/route/ferry.json | 3 +- data/presets/type/route/light_rail.json | 3 +- data/presets/type/route/monorail.json | 3 +- data/presets/type/route/subway.json | 3 +- data/presets/type/route/train.json | 3 +- data/presets/type/route/tram.json | 3 +- data/presets/type/route/trolleybus.json | 3 +- data/presets/type/route_master.json | 26 +++++++- data/presets/type/site/traffic_signals.json | 44 +++++++++++++ data/presets/type/waterway.json | 38 ++++++++++- 31 files changed, 549 insertions(+), 30 deletions(-) create mode 100644 data/presets/type/site/traffic_signals.json diff --git a/data/presets/area.json b/data/presets/area.json index ab20323a..ff0ce23b 100644 --- a/data/presets/area.json +++ b/data/presets/area.json @@ -12,5 +12,35 @@ "polygon" ], "name": "Area", - "matchScore": 0.1 + "matchScore": 0.1, + "relation": { + "allowDuplicateMembers": false, + "members": [ + { + "roles": { + "inner": "Inner" + }, + "geometry": [ + "line", + "area" + ], + "matchTags": [ + {} + ] + }, + { + "roles": { + "outer": "Outer" + }, + "geometry": [ + "line", + "area" + ], + "matchTags": [ + {} + ], + "min": 1 + } + ] + } } diff --git a/data/presets/public_transport/stop_area.json b/data/presets/public_transport/stop_area.json index f7e30216..7c1d96cb 100644 --- a/data/presets/public_transport/stop_area.json +++ b/data/presets/public_transport/stop_area.json @@ -17,5 +17,62 @@ "key": "public_transport", "value": "stop_area" }, - "name": "Transit Stop Area" + "name": "Transit Stop Area", + "relation": { + "allowDuplicateMembers": false, + "members": [ + { + "roles": { + "stop": "Stop" + }, + "geometry": [ + "point", + "vertex" + ], + "matchTags": [ + { + "public_transport": "stop_position" + } + ] + }, + { + "roles": { + "platform": "Platform" + }, + "geometry": [ + "point", + "vertex", + "line", + "area" + ], + "matchTags": [ + { + "public_transport": "platform" + } + ] + }, + { + "roles": { + "entrance": "Entrance", + "subway_entrance": "Subway Entrance" + }, + "matchTags": [ + { + "entrance": "*" + }, + { + "railway": "subway_entrance" + } + ], + "geometry": [ + "vertex" + ] + }, + { + "matchTags": [ + {} + ] + } + ] + } } diff --git a/data/presets/type/boundary.json b/data/presets/type/boundary.json index 6786b604..3694337e 100644 --- a/data/presets/type/boundary.json +++ b/data/presets/type/boundary.json @@ -10,5 +10,65 @@ "tags": { "type": "boundary" }, - "name": "Boundary" + "name": "Boundary", + "relation": { + "allowDuplicateMembers": false, + "members": [ + { + "roles": { + "inner": "Inner" + }, + "geometry": [ + "line", + "area" + ], + "matchTags": [ + {} + ] + }, + { + "roles": { + "outer": "Outer" + }, + "geometry": [ + "line", + "area" + ], + "matchTags": [ + {} + ], + "min": 1 + }, + { + "roles": { + "admin_centre": "Admin Center", + "label": "Label" + }, + "geometry": [ + "point", + "vertex" + ], + "matchTags": [ + { + "place": "*" + } + ], + "max": 1 + }, + { + "roles": { + "subarea": "Sub-Area" + }, + "geometry": [ + "area", + "relation" + ], + "matchTags": [ + { + "type": "boundary" + } + ] + } + ] + } } diff --git a/data/presets/type/boundary/administrative.json b/data/presets/type/boundary/administrative.json index 5023b670..91a6ebd1 100644 --- a/data/presets/type/boundary/administrative.json +++ b/data/presets/type/boundary/administrative.json @@ -18,5 +18,6 @@ "key": "boundary", "value": "administrative" }, - "name": "Administrative Boundary" + "name": "Administrative Boundary", + "relationCrossReference": "{type/boundary}" } diff --git a/data/presets/type/destination_sign.json b/data/presets/type/destination_sign.json index 1e1a1d2f..8f667f93 100644 --- a/data/presets/type/destination_sign.json +++ b/data/presets/type/destination_sign.json @@ -15,5 +15,64 @@ "terms": [ "exit sign" ], - "name": "Destination Sign" + "name": "Destination Sign", + "relation": { + "allowDuplicateMembers": true, + "members": [ + { + "roles": { + "from": "From" + }, + "geometry": [ + "vertex", + "line" + ], + "matchTags": [ + { + "highway": "*" + } + ] + }, + { + "roles": { + "intersection": "Intersection" + }, + "geometry": [ + "vertex" + ], + "matchTags": [ + {} + ], + "max": 1 + }, + { + "roles": { + "to": "To" + }, + "geometry": [ + "vertex", + "line" + ], + "matchTags": [ + { + "highway": "*" + } + ], + "min": 1, + "max": 1 + }, + { + "roles": { + "sign": "Physical Sign" + }, + "geometry": [ + "point", + "vertex" + ], + "matchTags": [ + {} + ] + } + ] + } } diff --git a/data/presets/type/enforcement.json b/data/presets/type/enforcement.json index e9d1e47f..dd6d6728 100644 --- a/data/presets/type/enforcement.json +++ b/data/presets/type/enforcement.json @@ -9,5 +9,66 @@ "tags": { "type": "enforcement" }, - "name": "Enforcement" + "name": "Enforcement", + "relation": { + "allowDuplicateMembers": false, + "members": [ + { + "roles": { + "device": "Device", + "force": "Force" + }, + "matchTags": [ + { + "highway": "speed_camera" + }, + { + "man_made": "surveillance" + }, + { + "amenity ": "weighbridge" + } + ] + }, + { + "roles": { + "from": "From" + }, + "geometry": [ + "vertex", + "line" + ], + "matchTags": [ + { + "highway": "*" + } + ] + }, + { + "roles": { + "to": "To" + }, + "geometry": [ + "vertex", + "line" + ], + "matchTags": [ + { + "highway": "*" + } + ] + }, + { + "roles": { + "section": "Section" + }, + "geometry": [ + "line" + ], + "matchTags": [ + {} + ] + } + ] + } } diff --git a/data/presets/type/enforcement/maxspeed.json b/data/presets/type/enforcement/maxspeed.json index fe41fd48..c797a4fe 100644 --- a/data/presets/type/enforcement/maxspeed.json +++ b/data/presets/type/enforcement/maxspeed.json @@ -19,5 +19,6 @@ "radar", "speed camera" ], - "name": "Speed Limit Enforcement" + "name": "Speed Limit Enforcement", + "relationCrossReference": "{type/enforcement}" } diff --git a/data/presets/type/multipolygon.json b/data/presets/type/multipolygon.json index 99d6fcb4..f26f9e09 100644 --- a/data/presets/type/multipolygon.json +++ b/data/presets/type/multipolygon.json @@ -8,5 +8,6 @@ }, "removeTags": {}, "name": "Multipolygon", - "matchScore": 0.1 + "matchScore": 0.1, + "relationCrossReference": "{area}" } diff --git a/data/presets/type/public_transport/stop_area_group.json b/data/presets/type/public_transport/stop_area_group.json index 64a49387..02768441 100644 --- a/data/presets/type/public_transport/stop_area_group.json +++ b/data/presets/type/public_transport/stop_area_group.json @@ -17,5 +17,21 @@ "key": "public_transport", "value": "stop_area_group" }, - "name": "Transit Stop Area Group" + "name": "Transit Stop Area Group", + "relation": { + "allowDuplicateMembers": false, + "members": [ + { + "matchTags": [ + { + "type": "public_transport", + "public_transport": "stop_area" + } + ], + "geometry": [ + "relation" + ] + } + ] + } } diff --git a/data/presets/type/restriction.json b/data/presets/type/restriction.json index 439ad405..cca1813c 100644 --- a/data/presets/type/restriction.json +++ b/data/presets/type/restriction.json @@ -10,5 +10,54 @@ "tags": { "type": "restriction" }, - "name": "Restriction" + "name": "Restriction", + "relation": { + "allowDuplicateMembers": true, + "members": [ + { + "roles": { + "from": "From" + }, + "geometry": [ + "line" + ], + "matchTags": [ + { + "highway": "*" + } + ], + "min": 1, + "max": 1 + }, + { + "roles": { + "via": "Via" + }, + "geometry": [ + "vertex", + "line" + ], + "matchTags": [ + {} + ], + "min": 1, + "max": 1 + }, + { + "roles": { + "to": "To" + }, + "geometry": [ + "line" + ], + "matchTags": [ + { + "highway": "*" + } + ], + "min": 1, + "max": 1 + } + ] + } } diff --git a/data/presets/type/restriction/no_left_turn.json b/data/presets/type/restriction/no_left_turn.json index 521c3937..0ef885ea 100644 --- a/data/presets/type/restriction/no_left_turn.json +++ b/data/presets/type/restriction/no_left_turn.json @@ -11,5 +11,6 @@ "key": "restriction", "value": "no_left_turn" }, - "name": "No Left Turn" + "name": "No Left Turn", + "relationCrossReference": "{type/restriction}" } diff --git a/data/presets/type/restriction/no_right_turn.json b/data/presets/type/restriction/no_right_turn.json index 175d1480..709e4d9f 100644 --- a/data/presets/type/restriction/no_right_turn.json +++ b/data/presets/type/restriction/no_right_turn.json @@ -11,5 +11,6 @@ "key": "restriction", "value": "no_right_turn" }, - "name": "No Right Turn" + "name": "No Right Turn", + "relationCrossReference": "{type/restriction}" } diff --git a/data/presets/type/restriction/no_straight_on.json b/data/presets/type/restriction/no_straight_on.json index 28839616..61c6598d 100644 --- a/data/presets/type/restriction/no_straight_on.json +++ b/data/presets/type/restriction/no_straight_on.json @@ -11,5 +11,6 @@ "key": "restriction", "value": "no_straight_on" }, - "name": "No Straight Ahead" + "name": "No Straight Ahead", + "relationCrossReference": "{type/restriction}" } diff --git a/data/presets/type/restriction/no_u_turn.json b/data/presets/type/restriction/no_u_turn.json index 09ddadf7..cad2693f 100644 --- a/data/presets/type/restriction/no_u_turn.json +++ b/data/presets/type/restriction/no_u_turn.json @@ -11,5 +11,6 @@ "key": "restriction", "value": "no_u_turn" }, - "name": "No U-Turn" + "name": "No U-Turn", + "relationCrossReference": "{type/restriction}" } diff --git a/data/presets/type/restriction/only_left_turn.json b/data/presets/type/restriction/only_left_turn.json index c0a87de1..e869612d 100644 --- a/data/presets/type/restriction/only_left_turn.json +++ b/data/presets/type/restriction/only_left_turn.json @@ -11,5 +11,6 @@ "key": "restriction", "value": "only_left_turn" }, - "name": "Left Turn Only" + "name": "Left Turn Only", + "relationCrossReference": "{type/restriction}" } diff --git a/data/presets/type/restriction/only_right_turn.json b/data/presets/type/restriction/only_right_turn.json index db78547a..85088768 100644 --- a/data/presets/type/restriction/only_right_turn.json +++ b/data/presets/type/restriction/only_right_turn.json @@ -11,5 +11,6 @@ "key": "restriction", "value": "only_right_turn" }, - "name": "Right Turn Only" + "name": "Right Turn Only", + "relationCrossReference": "{type/restriction}" } diff --git a/data/presets/type/restriction/only_straight_on.json b/data/presets/type/restriction/only_straight_on.json index 0997c789..3840f450 100644 --- a/data/presets/type/restriction/only_straight_on.json +++ b/data/presets/type/restriction/only_straight_on.json @@ -11,5 +11,6 @@ "key": "restriction", "value": "only_straight_on" }, - "name": "Straight Ahead Only" + "name": "Straight Ahead Only", + "relationCrossReference": "{type/restriction}" } diff --git a/data/presets/type/restriction/only_u_turn.json b/data/presets/type/restriction/only_u_turn.json index a88e0153..9fbd2957 100644 --- a/data/presets/type/restriction/only_u_turn.json +++ b/data/presets/type/restriction/only_u_turn.json @@ -11,5 +11,6 @@ "key": "restriction", "value": "only_u_turn" }, - "name": "U-Turn Only" + "name": "U-Turn Only", + "relationCrossReference": "{type/restriction}" } diff --git a/data/presets/type/route.json b/data/presets/type/route.json index 2e0c24c9..d58a2d4b 100644 --- a/data/presets/type/route.json +++ b/data/presets/type/route.json @@ -17,5 +17,68 @@ "tags": { "type": "route" }, - "name": "Route" + "name": "Route", + "relation": { + "optionalTags": { + "route": "$1" + }, + "allowDuplicateMembers": true, + "members": [ + { + "roles": { + "stop": "Stop", + "stop_exit_only": "Stop (Exit Only)", + "stop_entry_only": "Stop (Entry Only)", + "stop_on_demand": "Stop (only stops on request)", + "stop_on_demand_exit_only": "Stop (Exit Only) (only stops on request)", + "stop_on_demand_entry_only": "Stop (Entry Only) (only stops on request)" + }, + "geometry": [ + "point", + "vertex" + ], + "matchTags": [ + { + "public_transport": "stop_position", + "$1": "yes" + } + ] + }, + { + "roles": { + "platform": "Platform", + "platform_exit_only": "Platform (Exit Only)", + "platform_entry_only": "Platform (Entry Only)", + "platform_on_demand": "Platform (only stops on request)", + "platform_on_demand_exit_only": "Platform (Exit Only) (only stops on request)", + "platform_on_demand_entry_only": "Platform (Entry Only) (only stops on request)" + }, + "geometry": [ + "point", + "vertex", + "line", + "area" + ], + "matchTags": [ + { + "public_transport": "platform", + "$1": "yes" + } + ] + }, + { + "roles": { + "": "", + "forward": "Forwards", + "backward": "Backwards" + }, + "geometry": [ + "line" + ], + "matchTags": [ + {} + ] + } + ] + } } diff --git a/data/presets/type/route/aerialway.json b/data/presets/type/route/aerialway.json index ca1eadb9..d3587eb7 100644 --- a/data/presets/type/route/aerialway.json +++ b/data/presets/type/route/aerialway.json @@ -17,5 +17,6 @@ "key": "route", "value": "aerialway" }, - "name": "Aerial Route" + "name": "Aerial Route", + "relationCrossReference": "{type/route}" } diff --git a/data/presets/type/route/bus.json b/data/presets/type/route/bus.json index d5cbcb68..4e327f9a 100644 --- a/data/presets/type/route/bus.json +++ b/data/presets/type/route/bus.json @@ -17,5 +17,6 @@ "key": "route", "value": "bus" }, - "name": "Bus Route" + "name": "Bus Route", + "relationCrossReference": "{type/route}" } diff --git a/data/presets/type/route/ferry.json b/data/presets/type/route/ferry.json index a250d046..e0b4b246 100644 --- a/data/presets/type/route/ferry.json +++ b/data/presets/type/route/ferry.json @@ -17,5 +17,6 @@ "key": "route", "value": "ferry" }, - "name": "Ferry Route" + "name": "Ferry Route", + "relationCrossReference": "{type/route}" } diff --git a/data/presets/type/route/light_rail.json b/data/presets/type/route/light_rail.json index af70d75b..3459b248 100644 --- a/data/presets/type/route/light_rail.json +++ b/data/presets/type/route/light_rail.json @@ -17,5 +17,6 @@ "key": "route", "value": "light_rail" }, - "name": "Light Rail Route" + "name": "Light Rail Route", + "relationCrossReference": "{type/route}" } diff --git a/data/presets/type/route/monorail.json b/data/presets/type/route/monorail.json index 480caa35..c9868432 100644 --- a/data/presets/type/route/monorail.json +++ b/data/presets/type/route/monorail.json @@ -17,5 +17,6 @@ "key": "route", "value": "monorail" }, - "name": "Monorail Route" + "name": "Monorail Route", + "relationCrossReference": "{type/route}" } diff --git a/data/presets/type/route/subway.json b/data/presets/type/route/subway.json index 79946ca4..3b6624a4 100644 --- a/data/presets/type/route/subway.json +++ b/data/presets/type/route/subway.json @@ -17,5 +17,6 @@ "key": "route", "value": "subway" }, - "name": "Subway Route" + "name": "Subway Route", + "relationCrossReference": "{type/route}" } diff --git a/data/presets/type/route/train.json b/data/presets/type/route/train.json index 21b47418..4c7e4ef0 100644 --- a/data/presets/type/route/train.json +++ b/data/presets/type/route/train.json @@ -30,5 +30,6 @@ "key": "route", "value": "train" }, - "name": "Train Route" + "name": "Train Route", + "relationCrossReference": "{type/route}" } diff --git a/data/presets/type/route/tram.json b/data/presets/type/route/tram.json index 3d552feb..295feb25 100644 --- a/data/presets/type/route/tram.json +++ b/data/presets/type/route/tram.json @@ -17,5 +17,6 @@ "key": "route", "value": "tram" }, - "name": "Tram Route" + "name": "Tram Route", + "relationCrossReference": "{type/route}" } diff --git a/data/presets/type/route/trolleybus.json b/data/presets/type/route/trolleybus.json index d8f4fee4..3f32a112 100644 --- a/data/presets/type/route/trolleybus.json +++ b/data/presets/type/route/trolleybus.json @@ -17,5 +17,6 @@ "key": "route", "value": "trolleybus" }, - "name": "Trolleybus Route" + "name": "Trolleybus Route", + "relationCrossReference": "{type/route}" } diff --git a/data/presets/type/route_master.json b/data/presets/type/route_master.json index a187d869..1b566e95 100644 --- a/data/presets/type/route_master.json +++ b/data/presets/type/route_master.json @@ -19,5 +19,29 @@ "tags": { "type": "route_master" }, - "name": "Route Master" + "name": "Route Master", + "relation": { + "optionalTags": { + "route_master": "$1", + "ref": "$2" + }, + "allowDuplicateMembers": false, + "members": [ + { + "roles": { + "": "" + }, + "geometry": [ + "relation" + ], + "matchTags": [ + { + "type": "route", + "route": "$1", + "ref": "$2" + } + ] + } + ] + } } diff --git a/data/presets/type/site/traffic_signals.json b/data/presets/type/site/traffic_signals.json new file mode 100644 index 00000000..113ec371 --- /dev/null +++ b/data/presets/type/site/traffic_signals.json @@ -0,0 +1,44 @@ +{ + "icon": "iD-relation", + "fields": [ + "name", + "ref" + ], + "geometry": [ + "relation" + ], + "tags": { + "type": "site", + "site": "traffic_signals" + }, + "name": "Traffic Signals Site", + "relation": { + "allowDuplicateMembers": false, + "members": [ + { + "roles": { + "": "" + }, + "matchTags": [ + { + "highway": "traffic_signals" + }, + { + "highway": "crossing" + }, + { + "man_made": "street_cabinet" + }, + { + "man_made": "surveillance", + "surveillance:type": "camera" + } + ], + "geometry": [ + "point", + "vertex" + ] + } + ] + } +} diff --git a/data/presets/type/waterway.json b/data/presets/type/waterway.json index 1c5093fd..d4296241 100644 --- a/data/presets/type/waterway.json +++ b/data/presets/type/waterway.json @@ -15,5 +15,41 @@ "tags": { "type": "waterway" }, - "name": "Waterway" + "name": "Waterway", + "relation": { + "allowDuplicateMembers": false, + "members": [ + { + "roles": { + "spring": "Spring" + }, + "matchTags": [ + { + "natural": "spring" + }, + { + "natural": "hot_spring" + } + ], + "geometry": [ + "point" + ] + }, + { + "roles": { + "main_stream": "Main Stream", + "": "" + }, + "matchTags": [ + { + "waterway": "*" + } + ], + "geometry": [ + "line", + "area" + ] + } + ] + } }