From 7c03a185ac3ebc82b27950a6162835e1067d5ce2 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Tue, 27 Jul 2021 12:11:42 +0200 Subject: [PATCH] Inline AspectedRouting (package didn't want to build), update docs, update sharp dependency to the latest version --- Docs/CalculatedTags.md | 9 + Docs/TagInfo/mapcomplete_artwork.json | 111 ++++ Docs/TagInfo/mapcomplete_bicyclelib.json | 2 +- Docs/TagInfo/mapcomplete_campersite.json | 2 +- Docs/TagInfo/mapcomplete_cycle_infra.json | 707 +++++++++++++++++++++ Docs/TagInfo/mapcomplete_cyclestreets.json | 264 ++++++++ Docs/TagInfo/mapcomplete_surveillance.json | 2 +- Logic/ExtraFunction.ts | 3 +- Logic/Osm/aspectedRouting.ts | 194 ++++++ package-lock.json | 222 +++---- package.json | 3 +- 11 files changed, 1367 insertions(+), 152 deletions(-) create mode 100644 Docs/TagInfo/mapcomplete_artwork.json create mode 100644 Docs/TagInfo/mapcomplete_cycle_infra.json create mode 100644 Docs/TagInfo/mapcomplete_cyclestreets.json create mode 100644 Logic/Osm/aspectedRouting.ts diff --git a/Docs/CalculatedTags.md b/Docs/CalculatedTags.md index c1df5523b..2d16a7987 100644 --- a/Docs/CalculatedTags.md +++ b/Docs/CalculatedTags.md @@ -141,6 +141,7 @@ Some advanced functions are available on **feat** as well: - overlapWith - closest - memberships + - score ### distanceTo @@ -168,4 +169,12 @@ Some advanced functions are available on **feat** as well: For example: `_part_of_walking_routes=feat.memberships().map(r => r.relation.tags.name).join(';')` + +### score + + Given the path of an aspected routing json file, will calculate the score. This score is wrapped in a UIEventSource, so for further calculations, use `.map(score => ...)` + +For example: `_comfort_score=feat.score('https://raw.githubusercontent.com/pietervdvn/AspectedRouting/master/Examples/bicycle/aspects/bicycle.comfort.json')` + + 0. path Generated from SimpleMetaTagger, ExtraFunction \ No newline at end of file diff --git a/Docs/TagInfo/mapcomplete_artwork.json b/Docs/TagInfo/mapcomplete_artwork.json new file mode 100644 index 000000000..f968777e1 --- /dev/null +++ b/Docs/TagInfo/mapcomplete_artwork.json @@ -0,0 +1,111 @@ +{ + "data_format": 1, + "project": { + "name": "MapComplete Open Artwork Map", + "description": "Welcome to Open Artwork Map, a map of statues, busts, grafittis and other artwork all over the world", + "project_url": "https://mapcomplete.osm.be/artwork", + "doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/", + "icon_url": "https://mapcomplete.osm.be/assets/themes/artwork/artwork.svg", + "contact_name": "Pieter Vander Vennet, MapComplete", + "contact_email": "pietervdvn@posteo.net" + }, + "tags": [ + { + "key": "tourism", + "description": "The MapComplete theme Open Artwork Map has a layer Artworks showing features with this tag", + "value": "artwork" + }, + { + "key": "image", + "description": "The layer 'Artworks allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'Artworks allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'Artworks allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'Artworks allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows and asks freeform values for key 'artwork_type' (in the MapComplete.osm.be theme 'Open Artwork Map')" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=architecture with a fixed text, namely 'Architecture' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')", + "value": "architecture" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=mural with a fixed text, namely 'Mural' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')", + "value": "mural" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=painting with a fixed text, namely 'Painting' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')", + "value": "painting" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=sculpture with a fixed text, namely 'Sculpture' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')", + "value": "sculpture" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=statue with a fixed text, namely 'Statue' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')", + "value": "statue" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=bust with a fixed text, namely 'Bust' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')", + "value": "bust" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=stone with a fixed text, namely 'Stone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')", + "value": "stone" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=installation with a fixed text, namely 'Installation' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')", + "value": "installation" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=graffiti with a fixed text, namely 'Graffiti' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')", + "value": "graffiti" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=relief with a fixed text, namely 'Relief' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')", + "value": "relief" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=azulejo with a fixed text, namely 'Azulejo (Spanish decorative tilework)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')", + "value": "azulejo" + }, + { + "key": "artwork_type", + "description": "Layer 'Artworks' shows artwork_type=tilework with a fixed text, namely 'Tilework' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')", + "value": "tilework" + }, + { + "key": "artist_name", + "description": "Layer 'Artworks' shows and asks freeform values for key 'artist_name' (in the MapComplete.osm.be theme 'Open Artwork Map')" + }, + { + "key": "website", + "description": "Layer 'Artworks' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Open Artwork Map')" + }, + { + "key": "wikidata", + "description": "Layer 'Artworks' shows and asks freeform values for key 'wikidata' (in the MapComplete.osm.be theme 'Open Artwork Map')" + } + ] +} \ No newline at end of file diff --git a/Docs/TagInfo/mapcomplete_bicyclelib.json b/Docs/TagInfo/mapcomplete_bicyclelib.json index fea4ac413..21d234066 100644 --- a/Docs/TagInfo/mapcomplete_bicyclelib.json +++ b/Docs/TagInfo/mapcomplete_bicyclelib.json @@ -5,7 +5,7 @@ "description": "A bicycle library is a place where bicycles can be lent, often for a small yearly fee", "project_url": "https://mapcomplete.osm.be/bicyclelib", "doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/", - "icon_url": "https://mapcomplete.osm.be/assets/themes/bicycle_library/logo.svg", + "icon_url": "https://mapcomplete.osm.be/assets/themes/bicyclelib/logo.svg", "contact_name": "Pieter Vander Vennet, MapComplete", "contact_email": "pietervdvn@posteo.net" }, diff --git a/Docs/TagInfo/mapcomplete_campersite.json b/Docs/TagInfo/mapcomplete_campersite.json index d10a49474..8fea7d15a 100644 --- a/Docs/TagInfo/mapcomplete_campersite.json +++ b/Docs/TagInfo/mapcomplete_campersite.json @@ -5,7 +5,7 @@ "description": "Find sites to spend the night with your camper", "project_url": "https://mapcomplete.osm.be/campersite", "doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/", - "icon_url": "https://mapcomplete.osm.be/assets/themes/campersites/caravan.svg", + "icon_url": "https://mapcomplete.osm.be/assets/themes/campersite/caravan.svg", "contact_name": "Pieter Vander Vennet, joost schouppe", "contact_email": "pietervdvn@posteo.net" }, diff --git a/Docs/TagInfo/mapcomplete_cycle_infra.json b/Docs/TagInfo/mapcomplete_cycle_infra.json new file mode 100644 index 000000000..94876210a --- /dev/null +++ b/Docs/TagInfo/mapcomplete_cycle_infra.json @@ -0,0 +1,707 @@ +{ + "data_format": 1, + "project": { + "name": "MapComplete Bicycle infrastructure", + "description": "A map where you can view and edit things related to the bicycle infrastructure.", + "project_url": "https://mapcomplete.osm.be/cycle_infra", + "doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/", + "icon_url": "https://mapcomplete.osm.be/assets/themes/cycle_infra/cycle-infra.svg", + "contact_name": "Pieter Vander Vennet, ", + "contact_email": "pietervdvn@posteo.net" + }, + "tags": [ + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways showing features with this tag", + "value": "cycleway" + }, + { + "key": "cycleway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways showing features with this tag", + "value": "lane" + }, + { + "key": "cycleway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways showing features with this tag", + "value": "shared_lane" + }, + { + "key": "cycleway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways showing features with this tag", + "value": "track" + }, + { + "key": "cyclestreet", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways showing features with this tag", + "value": "yes" + }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways showing features with this tag", + "value": "path" + }, + { + "key": "bicycle", + "description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways showing features with this tag", + "value": "designated" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways' shows cycleway=shared_lane with a fixed text, namely 'There is a shared lane' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "shared_lane" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways' shows cycleway=lane with a fixed text, namely 'There is a lane next to the road (seperated with paint)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "lane" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways' shows cycleway=track with a fixed text, namely 'There is a track, but no cycleway drawn seperately from this road on the map.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "track" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways' shows cycleway=seperate with a fixed text, namely 'There is a seperately drawn cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "seperate" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways' shows cycleway=no with a fixed text, namely 'There is no cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "no" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways' shows cycleway=no with a fixed text, namely 'There is no cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "no" + }, + { + "key": "lit", + "description": "Layer 'Cycleways' shows lit=yes with a fixed text, namely 'This street is lit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "yes" + }, + { + "key": "lit", + "description": "Layer 'Cycleways' shows lit=no with a fixed text, namely 'This road is not lit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "no" + }, + { + "key": "lit", + "description": "Layer 'Cycleways' shows lit=sunset-sunrise with a fixed text, namely 'This road is lit at night' (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "sunset-sunrise" + }, + { + "key": "lit", + "description": "Layer 'Cycleways' shows lit=24/7 with a fixed text, namely 'This road is lit 24/7' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "24/7" + }, + { + "key": "cyclestreet", + "description": "Layer 'Cycleways' shows cyclestreet=yes with a fixed text, namely 'This is a cyclestreet, and a 30km/h zone.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "yes" + }, + { + "key": "cyclestreet", + "description": "Layer 'Cycleways' shows cyclestreet=yes with a fixed text, namely 'This is a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "yes" + }, + { + "key": "cyclestreet", + "description": "Layer 'Cycleways' shows cyclestreet= with a fixed text, namely 'This is not a cyclestreet.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure') Picking this answer will delete the key cyclestreet.", + "value": "" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways' shows and asks freeform values for key 'maxspeed' (in the MapComplete.osm.be theme 'Bicycle infrastructure')" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways' shows maxspeed=20 with a fixed text, namely 'The maximum speed is 20 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "20" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways' shows maxspeed=30 with a fixed text, namely 'The maximum speed is 30 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "30" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways' shows maxspeed=50 with a fixed text, namely 'The maximum speed is 50 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "50" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways' shows maxspeed=70 with a fixed text, namely 'The maximum speed is 70 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "70" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways' shows maxspeed=90 with a fixed text, namely 'The maximum speed is 90 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "90" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways' shows and asks freeform values for key 'cycleway:surface' (in the MapComplete.osm.be theme 'Bicycle infrastructure')" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways' shows cycleway:surface=wood with a fixed text, namely 'This cycleway is made of wood' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "wood" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways' shows cycleway:surface=concrete with a fixed text, namely 'This cycleway is made of concrete' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "concrete" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways' shows cycleway:surface=cobblestone with a fixed text, namely 'This cycleway is made of cobblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "cobblestone" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways' shows cycleway:surface=asphalt with a fixed text, namely 'This cycleway is made of asphalt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "asphalt" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways' shows cycleway:surface=paved with a fixed text, namely 'This cycleway is paved' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "paved" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways' shows cycleway:smoothness=excellent with a fixed text, namely 'Usable for thin rollers: rollerblade, skateboard' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "excellent" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways' shows cycleway:smoothness=good with a fixed text, namely 'Usable for thin wheels: racing bike' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "good" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways' shows cycleway:smoothness=intermediate with a fixed text, namely 'Usable for normal wheels: city bike, wheelchair, scooter' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "intermediate" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways' shows cycleway:smoothness=bad with a fixed text, namely 'Usable for robust wheels: trekking bike, car, rickshaw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "bad" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways' shows cycleway:smoothness=very_bad with a fixed text, namely 'Usable for vehicles with high clearance: light duty off-road vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "very_bad" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways' shows cycleway:smoothness=horrible with a fixed text, namely 'Usable for off-road vehicles: heavy duty off-road vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "horrible" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways' shows cycleway:smoothness=very_horrible with a fixed text, namely 'Usable for specialized off-road vehicles: tractor, ATV' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "very_horrible" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways' shows cycleway:smoothness=impassable with a fixed text, namely 'Impassable / No wheeled vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "impassable" + }, + { + "key": "surface", + "description": "Layer 'Cycleways' shows and asks freeform values for key 'surface' (in the MapComplete.osm.be theme 'Bicycle infrastructure')" + }, + { + "key": "surface", + "description": "Layer 'Cycleways' shows surface=wood with a fixed text, namely 'This street is made of wood' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "wood" + }, + { + "key": "surface", + "description": "Layer 'Cycleways' shows surface=concrete with a fixed text, namely 'This street is made of concrete' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "concrete" + }, + { + "key": "surface", + "description": "Layer 'Cycleways' shows surface=cobblestone with a fixed text, namely 'This street is made of cobblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "cobblestone" + }, + { + "key": "surface", + "description": "Layer 'Cycleways' shows surface=asphalt with a fixed text, namely 'This street is made of asphalt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "asphalt" + }, + { + "key": "surface", + "description": "Layer 'Cycleways' shows surface=paved with a fixed text, namely 'This street is paved' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "paved" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways' shows smoothness=excellent with a fixed text, namely 'Usable for thin rollers: rollerblade, skateboard' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "excellent" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways' shows smoothness=good with a fixed text, namely 'Usable for thin wheels: racing bike' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "good" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways' shows smoothness=intermediate with a fixed text, namely 'Usable for normal wheels: city bike, wheelchair, scooter' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "intermediate" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways' shows smoothness=bad with a fixed text, namely 'Usable for robust wheels: trekking bike, car, rickshaw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "bad" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways' shows smoothness=very_bad with a fixed text, namely 'Usable for vehicles with high clearance: light duty off-road vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "very_bad" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways' shows smoothness=horrible with a fixed text, namely 'Usable for off-road vehicles: heavy duty off-road vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "horrible" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways' shows smoothness=very_horrible with a fixed text, namely 'Usable for specialized off-road vehicles: tractor, ATV' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "very_horrible" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways' shows smoothness=impassable with a fixed text, namely 'Impassable / No wheeled vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "impassable" + }, + { + "key": "width:carriageway", + "description": "Layer 'Cycleways' shows and asks freeform values for key 'width:carriageway' (in the MapComplete.osm.be theme 'Bicycle infrastructure')" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways' shows cycleway:traffic_sign=BE:D7 with a fixed text, namely 'Compulsory cycleway ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "BE:D7" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways' shows cycleway:traffic_sign~^BE:D7;.*$ with a fixed text, namely 'Compulsory cycleway (with supplementary sign) ' (in the MapComplete.osm.be theme 'Bicycle infrastructure')" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways' shows cycleway:traffic_sign=BE:D9 with a fixed text, namely 'Segregated foot/cycleway ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "BE:D9" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways' shows cycleway:traffic_sign=BE:D10 with a fixed text, namely 'Unsegregated foot/cycleway ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "BE:D10" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways' shows cycleway:traffic_sign=none with a fixed text, namely 'No traffic sign present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "none" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways' shows traffic_sign=BE:D7 with a fixed text, namely 'Compulsory cycleway ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "BE:D7" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways' shows traffic_sign~^BE:D7;.*$ with a fixed text, namely 'Compulsory cycleway (with supplementary sign) ' (in the MapComplete.osm.be theme 'Bicycle infrastructure')" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways' shows traffic_sign=BE:D9 with a fixed text, namely 'Segregated foot/cycleway ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "BE:D9" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways' shows traffic_sign=BE:D10 with a fixed text, namely 'Unsegregated foot/cycleway ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "BE:D10" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways' shows traffic_sign=none with a fixed text, namely 'No traffic sign present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "none" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways' shows cycleway:traffic_sign=BE:D7;BE:M6 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "BE:D7;BE:M6" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways' shows cycleway:traffic_sign=BE:D7;BE:M13 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "BE:D7;BE:M13" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways' shows cycleway:traffic_sign=BE:D7;BE:M14 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "BE:D7;BE:M14" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways' shows cycleway:traffic_sign=BE:D7;BE:M7 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "BE:D7;BE:M7" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways' shows cycleway:traffic_sign=BE:D7;BE:M15 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "BE:D7;BE:M15" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways' shows cycleway:traffic_sign=BE:D7;BE:M16 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "BE:D7;BE:M16" + }, + { + "key": "cycleway:traffic_sign:supplementary", + "description": "Layer 'Cycleways' shows cycleway:traffic_sign:supplementary=none with a fixed text, namely 'No supplementary traffic sign present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "none" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways' shows traffic_sign=BE:D7;BE:M6 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "BE:D7;BE:M6" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways' shows traffic_sign=BE:D7;BE:M13 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "BE:D7;BE:M13" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways' shows traffic_sign=BE:D7;BE:M14 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "BE:D7;BE:M14" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways' shows traffic_sign=BE:D7;BE:M7 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "BE:D7;BE:M7" + }, + { + "key": ":traffic_sign", + "description": "Layer 'Cycleways' shows :traffic_sign=BE:D7;BE:M15 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "BE:D7;BE:M15" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways' shows traffic_sign=BE:D7;BE:M16 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "BE:D7;BE:M16" + }, + { + "key": "traffic_sign:supplementary", + "description": "Layer 'Cycleways' shows traffic_sign:supplementary=none with a fixed text, namely 'No supplementary traffic sign present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "none" + }, + { + "key": "cycleway:buffer", + "description": "Layer 'Cycleways' shows and asks freeform values for key 'cycleway:buffer' (in the MapComplete.osm.be theme 'Bicycle infrastructure')" + }, + { + "key": "cycleway:seperation", + "description": "Layer 'Cycleways' shows cycleway:seperation=dashed_line with a fixed text, namely 'This cycleway is seperated by a dashed line' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "dashed_line" + }, + { + "key": "cycleway:seperation", + "description": "Layer 'Cycleways' shows cycleway:seperation=solid_line with a fixed text, namely 'This cycleway is seperated by a solid line' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "solid_line" + }, + { + "key": "cycleway:seperation", + "description": "Layer 'Cycleways' shows cycleway:seperation=parking_lane with a fixed text, namely 'This cycleway is seperated by a parking lane' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "parking_lane" + }, + { + "key": "cycleway:seperation", + "description": "Layer 'Cycleways' shows cycleway:seperation=kerb with a fixed text, namely 'This cycleway is seperated by a kerb' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "kerb" + }, + { + "key": "seperation", + "description": "Layer 'Cycleways' shows seperation=dashed_line with a fixed text, namely 'This cycleway is seperated by a dashed line' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "dashed_line" + }, + { + "key": "seperation", + "description": "Layer 'Cycleways' shows seperation=solid_line with a fixed text, namely 'This cycleway is seperated by a solid line' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "solid_line" + }, + { + "key": "seperation", + "description": "Layer 'Cycleways' shows seperation=parking_lane with a fixed text, namely 'This cycleway is seperated by a parking lane' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "parking_lane" + }, + { + "key": "seperation", + "description": "Layer 'Cycleways' shows seperation=kerb with a fixed text, namely 'This cycleway is seperated by a kerb' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "kerb" + }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer All streets showing features with this tag", + "value": "residential" + }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer All streets showing features with this tag", + "value": "tertiary" + }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer All streets showing features with this tag", + "value": "unclassified" + }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer All streets showing features with this tag", + "value": "primary" + }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer All streets showing features with this tag", + "value": "secondary" + }, + { + "key": "cycleway", + "description": "Layer 'All streets' shows and asks freeform values for key 'cycleway' (in the MapComplete.osm.be theme 'Bicycle infrastructure')" + }, + { + "key": "cycleway", + "description": "Layer 'All streets' shows cycleway=shared_lane with a fixed text, namely 'There is a shared lane' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "shared_lane" + }, + { + "key": "cycleway", + "description": "Layer 'All streets' shows cycleway=lane with a fixed text, namely 'There is a lane next to the road (seperated with paint)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "lane" + }, + { + "key": "cycleway", + "description": "Layer 'All streets' shows cycleway=track with a fixed text, namely 'There is a track, but no cycleway drawn seperately from this road on the map.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "track" + }, + { + "key": "cycleway", + "description": "Layer 'All streets' shows cycleway=seperate with a fixed text, namely 'There is a seperately drawn cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "seperate" + }, + { + "key": "cycleway", + "description": "Layer 'All streets' shows cycleway= with a fixed text, namely 'There is no cycleway known here' (in the MapComplete.osm.be theme 'Bicycle infrastructure') Picking this answer will delete the key cycleway.", + "value": "" + }, + { + "key": "cycleway", + "description": "Layer 'All streets' shows cycleway=no with a fixed text, namely 'There is no cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "no" + }, + { + "key": "cycleway", + "description": "Layer 'All streets' shows cycleway=no with a fixed text, namely 'There is no cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "no" + }, + { + "key": "cyclestreet", + "description": "Layer 'All streets' shows cyclestreet=yes with a fixed text, namely 'This is a cyclestreet, and a 30km/h zone.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "yes" + }, + { + "key": "cyclestreet", + "description": "Layer 'All streets' shows cyclestreet=yes with a fixed text, namely 'This is a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "yes" + }, + { + "key": "cyclestreet", + "description": "Layer 'All streets' shows cyclestreet= with a fixed text, namely 'This is not a cyclestreet.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure') Picking this answer will delete the key cyclestreet.", + "value": "" + }, + { + "key": "barrier", + "description": "The MapComplete theme Bicycle infrastructure has a layer Barriers showing features with this tag", + "value": "bollard" + }, + { + "key": "barrier", + "description": "The MapComplete theme Bicycle infrastructure has a layer Barriers showing features with this tag", + "value": "cycle_barrier" + }, + { + "key": "bicycle", + "description": "Layer 'Barriers' shows bicycle=yes with a fixed text, namely 'A cyclist can go past this.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "yes" + }, + { + "key": "bicycle", + "description": "Layer 'Barriers' shows bicycle=no with a fixed text, namely 'A cyclist can not go past this.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "no" + }, + { + "key": "bollard", + "description": "Layer 'Barriers' shows bollard=removable with a fixed text, namely 'Removable bollard' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "removable" + }, + { + "key": "bollard", + "description": "Layer 'Barriers' shows bollard=fixed with a fixed text, namely 'Fixed bollard' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "fixed" + }, + { + "key": "bollard", + "description": "Layer 'Barriers' shows bollard=foldable with a fixed text, namely 'Bollard that can be folded down' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "foldable" + }, + { + "key": "bollard", + "description": "Layer 'Barriers' shows bollard=flexible with a fixed text, namely 'Flexible bollard, usually plastic' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "flexible" + }, + { + "key": "bollard", + "description": "Layer 'Barriers' shows bollard=rising with a fixed text, namely 'Rising bollard' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "rising" + }, + { + "key": "cycle_barrier:type", + "description": "Layer 'Barriers' shows cycle_barrier:type=single with a fixed text, namely 'Single, just two barriers with a space inbetween ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "single" + }, + { + "key": "cycle_barrier:type", + "description": "Layer 'Barriers' shows cycle_barrier:type=double with a fixed text, namely 'Double, two barriers behind each other ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "double" + }, + { + "key": "cycle_barrier:type", + "description": "Layer 'Barriers' shows cycle_barrier:type=triple with a fixed text, namely 'Triple, three barriers behind each other ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "triple" + }, + { + "key": "cycle_barrier:type", + "description": "Layer 'Barriers' shows cycle_barrier:type=squeeze with a fixed text, namely 'Squeeze gate, gap is smaller at top, than at the bottom ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "squeeze" + }, + { + "key": "maxwidth:physical", + "description": "Layer 'Barriers' shows and asks freeform values for key 'maxwidth:physical' (in the MapComplete.osm.be theme 'Bicycle infrastructure')" + }, + { + "key": "width:seperation", + "description": "Layer 'Barriers' shows and asks freeform values for key 'width:seperation' (in the MapComplete.osm.be theme 'Bicycle infrastructure')" + }, + { + "key": "width:opening", + "description": "Layer 'Barriers' shows and asks freeform values for key 'width:opening' (in the MapComplete.osm.be theme 'Bicycle infrastructure')" + }, + { + "key": "overlap", + "description": "Layer 'Barriers' shows and asks freeform values for key 'overlap' (in the MapComplete.osm.be theme 'Bicycle infrastructure')" + }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Crossings showing features with this tag", + "value": "traffic_signals" + }, + { + "key": "highway", + "description": "The MapComplete theme Bicycle infrastructure has a layer Crossings showing features with this tag", + "value": "crossing" + }, + { + "key": "crossing", + "description": "Layer 'Crossings' shows crossing=uncontrolled with a fixed text, namely 'Crossing, without traffic lights' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "uncontrolled" + }, + { + "key": "crossing", + "description": "Layer 'Crossings' shows crossing=traffic_signals with a fixed text, namely 'Crossing with traffic signals' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "traffic_signals" + }, + { + "key": "crossing", + "description": "Layer 'Crossings' shows crossing=zebra with a fixed text, namely 'Zebra crossing' (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "zebra" + }, + { + "key": "bicycle", + "description": "Layer 'Crossings' shows bicycle=yes with a fixed text, namely 'A cyclist can use this crossing' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "yes" + }, + { + "key": "bicycle", + "description": "Layer 'Crossings' shows bicycle=no with a fixed text, namely 'A cyclist can not use this crossing' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "no" + }, + { + "key": "crossing:island", + "description": "Layer 'Crossings' shows crossing:island=yes with a fixed text, namely 'This crossing has an island in the middle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "yes" + }, + { + "key": "crossing:island", + "description": "Layer 'Crossings' shows crossing:island=no with a fixed text, namely 'This crossing does not have an island in the middle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "no" + }, + { + "key": "tactile_paving", + "description": "Layer 'Crossings' shows tactile_paving=yes with a fixed text, namely 'This crossing has tactile paving' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "yes" + }, + { + "key": "tactile_paving", + "description": "Layer 'Crossings' shows tactile_paving=no with a fixed text, namely 'This crossing does not have tactile paving' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "no" + }, + { + "key": "tactile_paving", + "description": "Layer 'Crossings' shows tactile_paving=incorrect with a fixed text, namely 'This crossing has tactile paving, but is not correct' (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "incorrect" + }, + { + "key": "button_operated", + "description": "Layer 'Crossings' shows button_operated=yes with a fixed text, namely 'This traffic light has a button to request green light' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "yes" + }, + { + "key": "button_operated", + "description": "Layer 'Crossings' shows button_operated=no with a fixed text, namely 'This traffic light does not have a button to request green light' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "no" + }, + { + "key": "red_turn:right:bicycle", + "description": "Layer 'Crossings' shows red_turn:right:bicycle=yes with a fixed text, namely 'A cyclist can turn right if the light is red ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "yes" + }, + { + "key": "red_turn:right:bicycle", + "description": "Layer 'Crossings' shows red_turn:right:bicycle=yes with a fixed text, namely 'A cyclist can turn right if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "yes" + }, + { + "key": "red_turn:right:bicycle", + "description": "Layer 'Crossings' shows red_turn:right:bicycle=no with a fixed text, namely 'A cyclist can not turn right if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "no" + }, + { + "key": "red_turn:straight:bicycle", + "description": "Layer 'Crossings' shows red_turn:straight:bicycle=yes with a fixed text, namely 'A cyclist can go straight on if the light is red ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "yes" + }, + { + "key": "red_turn:straight:bicycle", + "description": "Layer 'Crossings' shows red_turn:straight:bicycle=yes with a fixed text, namely 'A cyclist can go straight on if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "yes" + }, + { + "key": "red_turn:straight:bicycle", + "description": "Layer 'Crossings' shows red_turn:straight:bicycle=no with a fixed text, namely 'A cyclist can not go straight on if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')", + "value": "no" + } + ] +} \ No newline at end of file diff --git a/Docs/TagInfo/mapcomplete_cyclestreets.json b/Docs/TagInfo/mapcomplete_cyclestreets.json new file mode 100644 index 000000000..9d21bf348 --- /dev/null +++ b/Docs/TagInfo/mapcomplete_cyclestreets.json @@ -0,0 +1,264 @@ +{ + "data_format": 1, + "project": { + "name": "MapComplete Cyclestreets", + "description": "A map of cyclestreets", + "project_url": "https://mapcomplete.osm.be/cyclestreets", + "doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/", + "icon_url": "https://mapcomplete.osm.be/assets/themes/cyclestreets/F111.svg", + "contact_name": "Pieter Vander Vennet, MapComplete", + "contact_email": "pietervdvn@posteo.net" + }, + "tags": [ + { + "key": "cyclestreet", + "description": "The MapComplete theme Cyclestreets has a layer Cyclestreets showing features with this tag", + "value": "yes" + }, + { + "key": "image", + "description": "The layer 'Cyclestreets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'Cyclestreets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'Cyclestreets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'Cyclestreets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "cyclestreet", + "description": "Layer 'Cyclestreets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')", + "value": "yes" + }, + { + "key": "maxspeed", + "description": "Layer 'Cyclestreets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')", + "value": "30" + }, + { + "key": "overtaking:motor_vehicle", + "description": "Layer 'Cyclestreets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')", + "value": "no" + }, + { + "key": "proposed:cyclestreet", + "description": "Layer 'Cyclestreets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.", + "value": "" + }, + { + "key": "cyclestreet", + "description": "Layer 'Cyclestreets' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets')", + "value": "yes" + }, + { + "key": "proposed:cyclestreet", + "description": "Layer 'Cyclestreets' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.", + "value": "" + }, + { + "key": "cyclestreet", + "description": "Layer 'Cyclestreets' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.", + "value": "" + }, + { + "key": "proposed:cyclestreet", + "description": "Layer 'Cyclestreets' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')", + "value": "yes" + }, + { + "key": "cyclestreet", + "description": "Layer 'Cyclestreets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.", + "value": "" + }, + { + "key": "proposed:cyclestreet", + "description": "Layer 'Cyclestreets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.", + "value": "" + }, + { + "key": "overtaking:motor_vehicle", + "description": "Layer 'Cyclestreets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key overtaking:motor_vehicle.", + "value": "" + }, + { + "key": "cyclestreet:start_date", + "description": "Layer 'Cyclestreets' shows and asks freeform values for key 'cyclestreet:start_date' (in the MapComplete.osm.be theme 'Cyclestreets')" + }, + { + "key": "proposed:cyclestreet", + "description": "The MapComplete theme Cyclestreets has a layer Future cyclestreet showing features with this tag", + "value": "yes" + }, + { + "key": "image", + "description": "The layer 'Future cyclestreet allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'Future cyclestreet allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'Future cyclestreet allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'Future cyclestreet allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "cyclestreet", + "description": "Layer 'Future cyclestreet' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')", + "value": "yes" + }, + { + "key": "maxspeed", + "description": "Layer 'Future cyclestreet' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')", + "value": "30" + }, + { + "key": "overtaking:motor_vehicle", + "description": "Layer 'Future cyclestreet' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')", + "value": "no" + }, + { + "key": "proposed:cyclestreet", + "description": "Layer 'Future cyclestreet' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.", + "value": "" + }, + { + "key": "cyclestreet", + "description": "Layer 'Future cyclestreet' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets')", + "value": "yes" + }, + { + "key": "proposed:cyclestreet", + "description": "Layer 'Future cyclestreet' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.", + "value": "" + }, + { + "key": "cyclestreet", + "description": "Layer 'Future cyclestreet' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.", + "value": "" + }, + { + "key": "proposed:cyclestreet", + "description": "Layer 'Future cyclestreet' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')", + "value": "yes" + }, + { + "key": "cyclestreet", + "description": "Layer 'Future cyclestreet' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.", + "value": "" + }, + { + "key": "proposed:cyclestreet", + "description": "Layer 'Future cyclestreet' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.", + "value": "" + }, + { + "key": "overtaking:motor_vehicle", + "description": "Layer 'Future cyclestreet' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key overtaking:motor_vehicle.", + "value": "" + }, + { + "key": "cyclestreet:start_date", + "description": "Layer 'Future cyclestreet' shows and asks freeform values for key 'cyclestreet:start_date' (in the MapComplete.osm.be theme 'Cyclestreets')" + }, + { + "key": "highway", + "description": "The MapComplete theme Cyclestreets has a layer All streets showing features with this tag", + "value": "residential" + }, + { + "key": "highway", + "description": "The MapComplete theme Cyclestreets has a layer All streets showing features with this tag", + "value": "tertiary" + }, + { + "key": "highway", + "description": "The MapComplete theme Cyclestreets has a layer All streets showing features with this tag", + "value": "unclassified" + }, + { + "key": "image", + "description": "The layer 'All streets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'All streets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'All streets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'All streets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "cyclestreet", + "description": "Layer 'All streets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')", + "value": "yes" + }, + { + "key": "maxspeed", + "description": "Layer 'All streets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')", + "value": "30" + }, + { + "key": "overtaking:motor_vehicle", + "description": "Layer 'All streets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')", + "value": "no" + }, + { + "key": "proposed:cyclestreet", + "description": "Layer 'All streets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.", + "value": "" + }, + { + "key": "cyclestreet", + "description": "Layer 'All streets' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets')", + "value": "yes" + }, + { + "key": "proposed:cyclestreet", + "description": "Layer 'All streets' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.", + "value": "" + }, + { + "key": "cyclestreet", + "description": "Layer 'All streets' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.", + "value": "" + }, + { + "key": "proposed:cyclestreet", + "description": "Layer 'All streets' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')", + "value": "yes" + }, + { + "key": "cyclestreet", + "description": "Layer 'All streets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.", + "value": "" + }, + { + "key": "proposed:cyclestreet", + "description": "Layer 'All streets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.", + "value": "" + }, + { + "key": "overtaking:motor_vehicle", + "description": "Layer 'All streets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key overtaking:motor_vehicle.", + "value": "" + }, + { + "key": "cyclestreet:start_date", + "description": "Layer 'All streets' shows and asks freeform values for key 'cyclestreet:start_date' (in the MapComplete.osm.be theme 'Cyclestreets')" + } + ] +} \ No newline at end of file diff --git a/Docs/TagInfo/mapcomplete_surveillance.json b/Docs/TagInfo/mapcomplete_surveillance.json index 7c0ecfc1b..0b9b99e17 100644 --- a/Docs/TagInfo/mapcomplete_surveillance.json +++ b/Docs/TagInfo/mapcomplete_surveillance.json @@ -5,7 +5,7 @@ "description": "Surveillance cameras and other means of surveillance", "project_url": "https://mapcomplete.osm.be/surveillance", "doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/", - "icon_url": "https://mapcomplete.osm.be/assets/themes/surveillance_cameras/logo.svg", + "icon_url": "https://mapcomplete.osm.be/assets/themes/surveillance/logo.svg", "contact_name": "Pieter Vander Vennet, ", "contact_email": "pietervdvn@posteo.net" }, diff --git a/Logic/ExtraFunction.ts b/Logic/ExtraFunction.ts index b10c1eee3..b3b10ac2a 100644 --- a/Logic/ExtraFunction.ts +++ b/Logic/ExtraFunction.ts @@ -6,8 +6,8 @@ import {Utils} from "../Utils"; import BaseUIElement from "../UI/BaseUIElement"; import List from "../UI/Base/List"; import Title from "../UI/Base/Title"; -import AspectedRouting from "aspected-routing" import {UIEventSourceTools} from "./UIEventSource"; +import AspectedRouting from "./Osm/aspectedRouting"; export class ExtraFunction { @@ -189,7 +189,6 @@ export class ExtraFunction { private readonly _name: string; private readonly _args: string[]; private readonly _doc: string; - private readonly _async: boolean; private readonly _f: (params: { featuresPerLayer: Map, relations: { role: string, relation: Relation }[] }, feat: any) => any; constructor(options: { name: string, doc: string, args: string[] }, diff --git a/Logic/Osm/aspectedRouting.ts b/Logic/Osm/aspectedRouting.ts new file mode 100644 index 000000000..33a171719 --- /dev/null +++ b/Logic/Osm/aspectedRouting.ts @@ -0,0 +1,194 @@ +export default class AspectedRouting { + + public readonly name: string + public readonly description: string + public readonly units: string + public readonly program: any + + public constructor(program) { + this.name = program.name; + this.description = program.description; + this.units = program.unit + this.program = JSON.parse(JSON.stringify(program)) + delete this.program.name + delete this.program.description + delete this.program.unit + } + + public evaluate(properties){ + return AspectedRouting.interpret(this.program, properties) + } + /** + * Interprets the given Aspected-routing program for the given properties + */ + public static interpret(program: any, properties: any) { + if (typeof program !== "object") { + return program; + } + + let functionName /*: string*/ = undefined; + let functionArguments /*: any */ = undefined + let otherValues = {} + // @ts-ignore + Object.entries(program).forEach(tag => { + const [key, value] = tag; + if (key.startsWith("$")) { + functionName = key + functionArguments = value + } else { + otherValues[key] = value + } + } + ) + + if (functionName === undefined) { + return AspectedRouting.interpretAsDictionary(program, properties) + } + + if (functionName === '$multiply') { + return AspectedRouting.multiplyScore(properties, functionArguments); + } else if (functionName === '$firstMatchOf') { + return AspectedRouting.getFirstMatchScore(properties, functionArguments); + } else if (functionName === '$min') { + return AspectedRouting.getMinValue(properties, functionArguments); + } else if (functionName === '$max') { + return AspectedRouting.getMaxValue(properties, functionArguments); + } else if (functionName === '$default') { + return AspectedRouting.defaultV(functionArguments, otherValues, properties) + } else { + console.error(`Error: Program ${functionName} is not implemented yet. ${JSON.stringify(program)}`); + } + } + + /** + * Given a 'program' without function invocation, interprets it as a dictionary + * + * E.g., given the program + * + * { + * highway: { + * residential: 30, + * living_street: 20 + * }, + * surface: { + * sett : 0.9 + * } + * + * } + * + * in combination with the tags {highway: residential}, + * + * the result should be [30, undefined]; + * + * For the tags {highway: residential, surface: sett} we should get [30, 0.9] + * + * + * @param program + * @param tags + * @return {(undefined|*)[]} + */ + private static interpretAsDictionary(program, tags) { + // @ts-ignore + return Object.entries(tags).map(tag => { + const [key, value] = tag; + const propertyValue = program[key] + if (propertyValue === undefined) { + return undefined + } + if (typeof propertyValue !== "object") { + return propertyValue + } + // @ts-ignore + return propertyValue[value] + }); + } + + private static defaultV(subProgram, otherArgs, tags) { + // @ts-ignore + const normalProgram = Object.entries(otherArgs)[0][1] + const value = AspectedRouting.interpret(normalProgram, tags) + if (value !== undefined) { + return value; + } + return AspectedRouting.interpret(subProgram, tags) + } + + /** + * Multiplies the default score with the proper values + * @param tags {object} the active tags to check against + * @param subprograms which should generate a list of values + * @returns score after multiplication + */ + private static multiplyScore(tags, subprograms) { + let number = 1 + + let subResults: any[] + if (subprograms.length !== undefined) { + subResults = AspectedRouting.concatMap(subprograms, subprogram => AspectedRouting.interpret(subprogram, tags)) + } else { + subResults = AspectedRouting.interpret(subprograms, tags) + } + + subResults.filter(r => r !== undefined).forEach(r => number *= parseFloat(r)) + return number.toFixed(2); + } + + private static getFirstMatchScore(tags, order: any) { + /*Order should be a list of arguments after evaluation*/ + order = AspectedRouting.interpret(order, tags) + for (let key of order) { + // @ts-ignore + for (let entry of Object.entries(JSON.parse(tags))) { + const [tagKey, value] = entry; + if (key === tagKey) { + // We have a match... let's evaluate the subprogram + const evaluated = AspectedRouting.interpret(value, tags) + if (evaluated !== undefined) { + return evaluated; + } + } + } + } + + // Not a single match found... + return undefined + } + + private static getMinValue(tags, subprogram) { + const minArr = subprogram.map(part => { + if (typeof (part) === 'object') { + const calculatedValue = this.interpret(part, tags) + return parseFloat(calculatedValue) + } else { + return parseFloat(part); + } + }).filter(v => !isNaN(v)); + return Math.min(...minArr); + } + + private static getMaxValue(tags, subprogram) { + const maxArr = subprogram.map(part => { + if (typeof (part) === 'object') { + return parseFloat(AspectedRouting.interpret(part, tags)) + } else { + return parseFloat(part); + } + }).filter(v => !isNaN(v)); + return Math.max(...maxArr); + } + + private static concatMap(list, f): any[] { + const result = [] + list = list.map(f) + for (const elem of list) { + if (elem.length !== undefined) { + // This is a list + result.push(...elem) + } else { + result.push(elem) + } + } + return result; + } + +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 6e616cb83..603c91eb3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,6 @@ "@types/leaflet.markercluster": "^1.4.3", "@types/lz-string": "^1.3.34", "@types/prompt-sync": "^4.1.0", - "aspected-routing": "^0.3.1", "autoprefixer": "^9.8.6", "country-language": "^0.1.7", "email-validator": "^2.0.4", @@ -53,7 +52,7 @@ "fs": "0.0.1-security", "marked": "^2.0.0", "read-file": "^0.2.0", - "sharp": "^0.27.0", + "sharp": "^0.28.3", "tailwindcss": "npm:@tailwindcss/postcss7-compat@^2.2.7", "ts-node": "^9.0.0", "ts-node-dev": "^1.0.0-pre.63", @@ -3107,12 +3106,6 @@ "node": ">=0.10.0" } }, - "node_modules/array-flatten": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", - "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==", - "dev": true - }, "node_modules/array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -3140,11 +3133,6 @@ "safer-buffer": "^2.1.0" } }, - "node_modules/aspected-routing": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/aspected-routing/-/aspected-routing-0.3.1.tgz", - "integrity": "sha512-abHvrYeun/XbXq/p7KKa5p2v/LVVMa2uC3iJis1hEFi59yMithWulBMIV5mStms4wFDMui4Xvv+plRYrTmB8zw==" - }, "node_modules/assert": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", @@ -3467,6 +3455,20 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -9192,6 +9194,9 @@ "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/minimalistic-assert": { @@ -9440,9 +9445,9 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "node_modules/node-abi": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.26.0.tgz", - "integrity": "sha512-ag/Vos/mXXpWLLAYWsAoQdgS+gW7IwvgMLOgqopm/DbzAjazLltzgzpVMsFlgmo9TzG5hGXeaBZx2AI731RIsQ==", + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.0.tgz", + "integrity": "sha512-g6bZh3YCKQRdwuO/tSZZYJAw622SjsRfJ2X0Iy4sSOHZ34/sPPdVBn8fev2tj7njzLwuqPw9uMtGsGkO5kIQvg==", "dev": true, "dependencies": { "semver": "^5.4.1" @@ -9540,12 +9545,6 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" }, - "node_modules/noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", - "dev": true - }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -11215,9 +11214,9 @@ } }, "node_modules/prebuild-install": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.2.tgz", - "integrity": "sha512-PzYWIKZeP+967WuKYXlTOhYBgGOvTRSfaKI89XnfJ0ansRAH7hDU45X+K+FZeI1Wb/7p/NnuctPH3g0IqKUuSQ==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.3.tgz", + "integrity": "sha512-iqqSR84tNYQUQHRXalSKdIaM8Ov1QxOVuBNWI7+BzZWv6Ih9k75wOnH1rGQ9WWTaaLkTpxWKIciOF0KyfM74+Q==", "dev": true, "dependencies": { "detect-libc": "^1.0.3", @@ -11227,7 +11226,6 @@ "mkdirp-classic": "^0.5.3", "napi-build-utils": "^1.0.1", "node-abi": "^2.21.0", - "noop-logger": "^0.1.1", "npmlog": "^4.0.1", "pump": "^3.0.0", "rc": "^1.2.7", @@ -11242,17 +11240,6 @@ "node": ">=6" } }, - "node_modules/prebuild-install/node_modules/simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "dev": true, - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -12100,24 +12087,26 @@ "integrity": "sha1-16oye87PUY+RBqxrjwA/o7zqhWY=" }, "node_modules/sharp": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.27.2.tgz", - "integrity": "sha512-w3FVoONPG/x5MXCc3wsjOS+b9h3CI60qkus6EPQU4dkT0BDm0PyGhDCK6KhtfT3/vbeOMOXAKFNSw+I3QGWkMA==", + "version": "0.28.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.28.3.tgz", + "integrity": "sha512-21GEP45Rmr7q2qcmdnjDkNP04Ooh5v0laGS5FDpojOO84D1DJwUijLiSq8XNNM6e8aGXYtoYRh3sVNdm8NodMA==", "dev": true, + "hasInstallScript": true, "dependencies": { - "array-flatten": "^3.0.0", "color": "^3.1.3", "detect-libc": "^1.0.3", - "node-addon-api": "^3.1.0", - "npmlog": "^4.1.2", - "prebuild-install": "^6.0.1", - "semver": "^7.3.4", - "simple-get": "^4.0.0", + "node-addon-api": "^3.2.0", + "prebuild-install": "^6.1.2", + "semver": "^7.3.5", + "simple-get": "^3.1.0", "tar-fs": "^2.1.1", "tunnel-agent": "^0.6.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, "node_modules/sharp/node_modules/lru-cache": { @@ -12133,9 +12122,9 @@ } }, "node_modules/sharp/node_modules/node-addon-api": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz", - "integrity": "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "dev": true }, "node_modules/sharp/node_modules/semver": { @@ -12186,40 +12175,33 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/simple-get": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.0.tgz", - "integrity": "sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", + "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", "dev": true, "dependencies": { - "decompress-response": "^6.0.0", + "decompress-response": "^4.2.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, - "node_modules/simple-get/node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/simple-get/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -17640,12 +17622,6 @@ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, - "array-flatten": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", - "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==", - "dev": true - }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -17670,11 +17646,6 @@ "safer-buffer": "^2.1.0" } }, - "aspected-routing": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/aspected-routing/-/aspected-routing-0.3.1.tgz", - "integrity": "sha512-abHvrYeun/XbXq/p7KKa5p2v/LVVMa2uC3iJis1hEFi59yMithWulBMIV5mStms4wFDMui4Xvv+plRYrTmB8zw==" - }, "assert": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", @@ -23180,9 +23151,9 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "node-abi": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.26.0.tgz", - "integrity": "sha512-ag/Vos/mXXpWLLAYWsAoQdgS+gW7IwvgMLOgqopm/DbzAjazLltzgzpVMsFlgmo9TzG5hGXeaBZx2AI731RIsQ==", + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.0.tgz", + "integrity": "sha512-g6bZh3YCKQRdwuO/tSZZYJAw622SjsRfJ2X0Iy4sSOHZ34/sPPdVBn8fev2tj7njzLwuqPw9uMtGsGkO5kIQvg==", "dev": true, "requires": { "semver": "^5.4.1" @@ -23280,12 +23251,6 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" }, - "noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", - "dev": true - }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -24704,9 +24669,9 @@ "integrity": "sha512-eSToKjNLu0FiF76SSGMHjOFXYzAc/CJqi677Sq6hYvcvFCBtD6de/W5l+0IYPf7ypscqAfjCttxvTdMJt5Gj8Q==" }, "prebuild-install": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.2.tgz", - "integrity": "sha512-PzYWIKZeP+967WuKYXlTOhYBgGOvTRSfaKI89XnfJ0ansRAH7hDU45X+K+FZeI1Wb/7p/NnuctPH3g0IqKUuSQ==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.3.tgz", + "integrity": "sha512-iqqSR84tNYQUQHRXalSKdIaM8Ov1QxOVuBNWI7+BzZWv6Ih9k75wOnH1rGQ9WWTaaLkTpxWKIciOF0KyfM74+Q==", "dev": true, "requires": { "detect-libc": "^1.0.3", @@ -24716,26 +24681,12 @@ "mkdirp-classic": "^0.5.3", "napi-build-utils": "^1.0.1", "node-abi": "^2.21.0", - "noop-logger": "^0.1.1", "npmlog": "^4.0.1", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^3.0.3", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" - }, - "dependencies": { - "simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "dev": true, - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - } } }, "prelude-ls": { @@ -25454,19 +25405,17 @@ } }, "sharp": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.27.2.tgz", - "integrity": "sha512-w3FVoONPG/x5MXCc3wsjOS+b9h3CI60qkus6EPQU4dkT0BDm0PyGhDCK6KhtfT3/vbeOMOXAKFNSw+I3QGWkMA==", + "version": "0.28.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.28.3.tgz", + "integrity": "sha512-21GEP45Rmr7q2qcmdnjDkNP04Ooh5v0laGS5FDpojOO84D1DJwUijLiSq8XNNM6e8aGXYtoYRh3sVNdm8NodMA==", "dev": true, "requires": { - "array-flatten": "^3.0.0", "color": "^3.1.3", "detect-libc": "^1.0.3", - "node-addon-api": "^3.1.0", - "npmlog": "^4.1.2", - "prebuild-install": "^6.0.1", - "semver": "^7.3.4", - "simple-get": "^4.0.0", + "node-addon-api": "^3.2.0", + "prebuild-install": "^6.1.2", + "semver": "^7.3.5", + "simple-get": "^3.1.0", "tar-fs": "^2.1.1", "tunnel-agent": "^0.6.0" }, @@ -25481,9 +25430,9 @@ } }, "node-addon-api": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz", - "integrity": "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "dev": true }, "semver": { @@ -25527,31 +25476,14 @@ "dev": true }, "simple-get": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.0.tgz", - "integrity": "sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", + "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", "dev": true, "requires": { - "decompress-response": "^6.0.0", + "decompress-response": "^4.2.0", "once": "^1.3.1", "simple-concat": "^1.0.0" - }, - "dependencies": { - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "requires": { - "mimic-response": "^3.1.0" - } - }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true - } } }, "simple-swizzle": { diff --git a/package.json b/package.json index cb105f3d1..9a02c0439 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,6 @@ "@types/leaflet.markercluster": "^1.4.3", "@types/lz-string": "^1.3.34", "@types/prompt-sync": "^4.1.0", - "aspected-routing": "^0.3.1", "autoprefixer": "^9.8.6", "country-language": "^0.1.7", "email-validator": "^2.0.4", @@ -89,7 +88,7 @@ "fs": "0.0.1-security", "marked": "^2.0.0", "read-file": "^0.2.0", - "sharp": "^0.27.0", + "sharp": "^0.28.3", "tailwindcss": "npm:@tailwindcss/postcss7-compat@^2.2.7", "ts-node": "^9.0.0", "ts-node-dev": "^1.0.0-pre.63",