Merge branch 'master' into develop

This commit is contained in:
Pieter Vander Vennet 2022-10-27 01:50:46 +02:00
commit 9a4cdaf1ad
192 changed files with 9167 additions and 12079 deletions

View file

@ -40,6 +40,7 @@
+ [all_tags](#all_tags)
+ [multilevels](#multilevels)
+ [induction-loop](#induction-loop)
+ [wikidata.tactile_writing-braille](#wikidatatactile_writing-braille)
+ [questions](#questions)
+ [export_as_gpx](#export_as_gpx)
+ [export_as_geojson](#export_as_geojson)
@ -48,6 +49,12 @@
+ [id_presets.shop_types](#id_presetsshop_types)
+ [school.capacity](#schoolcapacity)
+ [school.gender](#schoolgender)
+ [opening_hours_24_7](#opening_hours_24_7)
+ [toilet.toilets-type](#toilettoilets-type)
+ [toilet.toilets-changing-table](#toilettoilets-changing-table)
+ [toilet.toilet-changing_table:location](#toilettoilet-changing_table:location)
+ [toilet.toilet-handwashing](#toilettoilet-handwashing)
+ [toilet.toilet-has-paper](#toilettoilet-has-paper)
+ [wikidata.language](#wikidatalanguage)
@ -88,6 +95,7 @@
- climbing_area
- climbing_gym
- climbing_route
- crossings
- defibrillator
- doctors
- dogpark
@ -96,6 +104,7 @@
- entrance
- extinguisher
- fire_station
- fitness_centre
- food
- ghost_bike
- governments
@ -124,9 +133,11 @@
- shops
- slow_roads
- sport_pitch
- sports_centre
- street_lamps
- surveillance_camera
- toilet
- toilet_at_amenity
- trail
- transit_stops
- tree_node
@ -166,6 +177,7 @@
- climbing_club
- climbing_gym
- doctors
- fitness_centre
- food
- governments
- hackerspace
@ -179,6 +191,7 @@
- recycling
- school
- shops
- sports_centre
- tertiary_education
- veterinary
@ -199,6 +212,7 @@
- climbing_club
- climbing_gym
- doctors
- fitness_centre
- food
- governments
- hackerspace
@ -209,6 +223,7 @@
- recycling
- school
- shops
- sports_centre
- tertiary_education
- veterinary
@ -229,6 +244,7 @@
- climbing_club
- climbing_gym
- doctors
- fitness_centre
- food
- governments
- hackerspace
@ -239,6 +255,7 @@
- recycling
- school
- shops
- sports_centre
- tertiary_education
@ -258,11 +275,16 @@
- climbing_club
- climbing_gym
- doctors
- fitness_centre
- fitness_station
- food
- kindergarten_childcare
- parcel_lockers
- pharmacy
- postoffices
- shops
- sports_centre
- toilet_at_amenity
- veterinary
@ -279,6 +301,7 @@
- bike_themed_object
- climbing_route
- toilet
- toilet_at_amenity
@ -321,12 +344,14 @@
- cafe_pub
- charging_station
- entrance
- fitness_centre
- food
- parking
- picnic_table
- reception_desk
- shops
- toilet
- toilet_at_amenity
@ -361,10 +386,12 @@
- cafe_pub
- defibrillator
- fitness_centre
- food
- hackerspace
- hotel
- observation_tower
- sports_centre
- transit_stops
@ -455,6 +482,7 @@
- cafe_pub
- dogpark
- fitness_centre
- food
- hackerspace
- hotel
@ -588,6 +616,18 @@
### wikidata.tactile_writing-braille
- elevator
- stairs
### questions
@ -680,6 +720,72 @@
### opening_hours_24_7
- toilet
### toilet.toilets-type
- toilet_at_amenity
### toilet.toilets-changing-table
- toilet_at_amenity
### toilet.toilet-changing_table:location
- toilet_at_amenity
### toilet.toilet-handwashing
- toilet_at_amenity
### toilet.toilet-has-paper
- toilet_at_amenity
### wikidata.language

View file

@ -815,6 +815,8 @@ The following layers are included in MapComplete:
- [extinguisher](./Layers/extinguisher.md)
- [filters](./Layers/filters.md)
- [fire_station](./Layers/fire_station.md)
- [fitness_centre](./Layers/fitness_centre.md)
- [fitness_station](./Layers/fitness_station.md)
- [food](./Layers/food.md)
- [ghost_bike](./Layers/ghost_bike.md)
- [governments](./Layers/governments.md)
@ -862,12 +864,17 @@ The following layers are included in MapComplete:
- [shelter](./Layers/shelter.md)
- [shops](./Layers/shops.md)
- [slow_roads](./Layers/slow_roads.md)
- [speed_camera](./Layers/speed_camera.md)
- [speed_display](./Layers/speed_display.md)
- [split_point](./Layers/split_point.md)
- [sport_pitch](./Layers/sport_pitch.md)
- [sports_centre](./Layers/sports_centre.md)
- [stairs](./Layers/stairs.md)
- [street_lamps](./Layers/street_lamps.md)
- [surveillance_camera](./Layers/surveillance_camera.md)
- [tertiary_education](./Layers/tertiary_education.md)
- [toilet](./Layers/toilet.md)
- [toilet_at_amenity](./Layers/toilet_at_amenity.md)
- [trail](./Layers/trail.md)
- [transit_routes](./Layers/transit_routes.md)
- [transit_stops](./Layers/transit_stops.md)

View file

@ -27,6 +27,7 @@ The following items can be easily reused in your layers
+ [dog-access](#dog-access)
+ [description](#description)
+ [opening_hours](#opening_hours)
+ [opening_hours_24_7](#opening_hours_24_7)
+ [service:electricity](#serviceelectricity)
+ [payment-options](#payment-options)
+ [payment-options-advanced](#payment-options-advanced)
@ -263,6 +264,21 @@ What are the opening hours of {title()}?
### opening_hours_24_7
<h3>Opening hours</h3>{opening_hours_table(opening_hours)}
What are the opening hours of {title()}?
- 24/7 opened (including holidays)
### service:electricity

View file

@ -5,7 +5,7 @@
<img src='https://mapcomplete.osm.be/./assets/svg/pencil.svg' height="100px">
Layer to mark any street as cyclestreet
@ -60,7 +60,7 @@ this quick overview is incomplete
attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/cyclestreet#values) [cyclestreet](https://wiki.openstreetmap.org/wiki/Key:cyclestreet) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:cyclestreet%3Dyes) [yes](https://wiki.openstreetmap.org/wiki/Tag:cyclestreet%3Dyes) [](https://wiki.openstreetmap.org/wiki/Tag:cyclestreet%3D) [](https://wiki.openstreetmap.org/wiki/Tag:cyclestreet%3D)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/traffic_sign#values) [traffic_sign](https://wiki.openstreetmap.org/wiki/Key:traffic_sign) | Multiple choice | [DE:244.1,1020-30](https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1020-30) [DE:244.1,1022-12,1024-10](https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1022-12,1024-10) [DE:244.1,1022-12](https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1022-12) [DE:244.1,1024-10](https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1024-10) [DE:244.1](https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/cyclestreet:start_date#values) [cyclestreet:start_date](https://wiki.openstreetmap.org/wiki/Key:cyclestreet:start_date) | [date](../SpecialInputElements.md#date) |
@ -89,13 +89,38 @@ The question is Is the street <b>{name}</b> a cyclestreet?
- This street is a cyclestreet (and has a speed limit of 30 km/h) corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:cyclestreet' target='_blank'>cyclestreet</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:cyclestreet%3Dyes' target='_blank'>yes</a>&<a href='https://wiki.openstreetmap.org/wiki/Key:maxspeed' target='_blank'>maxspeed</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:maxspeed%3D30' target='_blank'>30</a>&<a href='https://wiki.openstreetmap.org/wiki/Key:overtaking:motor_vehicle' target='_blank'>overtaking:motor_vehicle</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:overtaking:motor_vehicle%3Dno' target='_blank'>no</a>`
- This street is a bicycle road corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:bicycle_road' target='_blank'>bicycle_road</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:bicycle_road%3Dyes' target='_blank'>yes</a>`
- This option cannot be chosen as answer
- This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later) corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:bicycle_road' target='_blank'>bicycle_road</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:bicycle_road%3Dyes' target='_blank'>yes</a>&<a href='https://wiki.openstreetmap.org/wiki/Key:maxspeed' target='_blank'>maxspeed</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:maxspeed%3D30' target='_blank'>30</a>&<a href='https://wiki.openstreetmap.org/wiki/Key:source:maxspeed' target='_blank'>source:maxspeed</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:source:maxspeed%3DDE:bicycle_road' target='_blank'>DE:bicycle_road</a>&<a href='https://wiki.openstreetmap.org/wiki/Key:vehicle' target='_blank'>vehicle</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:vehicle%3Dno' target='_blank'>no</a>&<a href='https://wiki.openstreetmap.org/wiki/Key:bicycle' target='_blank'>bicycle</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:bicycle%3Ddesignated' target='_blank'>designated</a>`
- This street is a cyclestreet corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:cyclestreet' target='_blank'>cyclestreet</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:cyclestreet%3Dyes' target='_blank'>yes</a>`
- This street will become a cyclestreet soon corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:proposed:cyclestreet' target='_blank'>proposed:cyclestreet</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:proposed:cyclestreet%3Dyes' target='_blank'>yes</a>`
- This street will become a bicycle road soon corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:proposed:bicycle_road' target='_blank'>proposed:bicycle_road</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:proposed:bicycle_road%3Dyes' target='_blank'>yes</a>`
- This street is not a cyclestreet corresponds with ``
### supplementary_sign
The question is What sign does this bicycle road have?
- Residents allowed corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_sign' target='_blank'>traffic_sign</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1020-30' target='_blank'>DE:244.1,1020-30</a>`
- Motor vehicles allowed corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_sign' target='_blank'>traffic_sign</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1022-12,1024-10' target='_blank'>DE:244.1,1022-12,1024-10</a>`
- Motorcycles allowed corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_sign' target='_blank'>traffic_sign</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1022-12' target='_blank'>DE:244.1,1022-12</a>`
- Cars allowed corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_sign' target='_blank'>traffic_sign</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1024-10' target='_blank'>DE:244.1,1024-10</a>`
- There are no supplementary signs at this bicycle road. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_sign' target='_blank'>traffic_sign</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1' target='_blank'>DE:244.1</a>`
Only visible if `bicycle_road=yes&_country=de` is shown
### future_cyclestreet

View file

@ -70,19 +70,10 @@ attribute | type | values which are supported by this layer
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/service:bicycle:retail#values) [service:bicycle:retail](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:retail) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:retail%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:retail%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/service:bicycle:repair#values) [service:bicycle:repair](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:repair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:repair%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:repair%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:repair%3Donly_sold) [brand](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:repair%3Dbrand)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/service:bicycle:rental#values) [service:bicycle:rental](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:rental) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:rental%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:rental%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/rental#values) [rental](https://wiki.openstreetmap.org/wiki/Key:rental) | [string](../SpecialInputElements.md#string) | [city_bike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dcity_bike) [ebike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Debike) [bmx](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dbmx) [mtb](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dmtb) [kid_bike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dkid_bike) [tandem](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dtandem) [racebike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dracebike) [bike_helmet](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dbike_helmet)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/capacity:city_bike#values) [capacity:city_bike](https://wiki.openstreetmap.org/wiki/Key:capacity:city_bike) | [pnat](../SpecialInputElements.md#pnat) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/capacity:ebike#values) [capacity:ebike](https://wiki.openstreetmap.org/wiki/Key:capacity:ebike) | [pnat](../SpecialInputElements.md#pnat) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/capacity:kid_bike#values) [capacity:kid_bike](https://wiki.openstreetmap.org/wiki/Key:capacity:kid_bike) | [pnat](../SpecialInputElements.md#pnat) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/capacity:bmx#values) [capacity:bmx](https://wiki.openstreetmap.org/wiki/Key:capacity:bmx) | [pnat](../SpecialInputElements.md#pnat) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/capacity:mtb#values) [capacity:mtb](https://wiki.openstreetmap.org/wiki/Key:capacity:mtb) | [pnat](../SpecialInputElements.md#pnat) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/capacity:bicycle_pannier#values) [capacity:bicycle_pannier](https://wiki.openstreetmap.org/wiki/Key:capacity:bicycle_pannier) | [pnat](../SpecialInputElements.md#pnat) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/capacity:tandem_bicycle#values) [capacity:tandem_bicycle](https://wiki.openstreetmap.org/wiki/Key:capacity:tandem_bicycle) | [pnat](../SpecialInputElements.md#pnat) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/service:bicycle:second_hand#values) [service:bicycle:second_hand](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:second_hand) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:second_hand%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:second_hand%3Dno) [only](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:second_hand%3Donly)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/service:bicycle:pump#values) [service:bicycle:pump](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:pump) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump%3Dno) [separate](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump%3Dseparate)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/service:bicycle:diy#values) [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/service:bicycle:cleaning#values) [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/service:bicycle:cleaning:charge#values) [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/description#values) [description](https://wiki.openstreetmap.org/wiki/Key:description) | [string](../SpecialInputElements.md#string) |
@ -269,157 +260,13 @@ The question is Does this shop rent out bikes?
### bicycle-types
### bicyclerentalbicyclerental
The question is What kind of bicycles and accessories are rented here?
This tagrendering has no question and is thus read-only
This rendering asks information about the property [rental](https://wiki.openstreetmap.org/wiki/Key:rental)
This is rendered with {rental} is rented here
- Normal city bikes can be rented here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:rental' target='_blank'>rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:rental%3Dcity_bike' target='_blank'>city_bike</a>`
- Electrical bikes can be rented here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:rental' target='_blank'>rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:rental%3Debike' target='_blank'>ebike</a>`
- BMX bikes can be rented here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:rental' target='_blank'>rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:rental%3Dbmx' target='_blank'>bmx</a>`
- Mountainbikes can be rented here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:rental' target='_blank'>rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:rental%3Dmtb' target='_blank'>mtb</a>`
- Bikes for children can be rented here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:rental' target='_blank'>rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:rental%3Dkid_bike' target='_blank'>kid_bike</a>`
- Tandem bicycles can be rented here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:rental' target='_blank'>rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:rental%3Dtandem' target='_blank'>tandem</a>`
- Race bicycles can be rented here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:rental' target='_blank'>rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:rental%3Dracebike' target='_blank'>racebike</a>`
- Bike helmets can be rented here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:rental' target='_blank'>rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:rental%3Dbike_helmet' target='_blank'>bike_helmet</a>`
This tagrendering has labels `bicycle_rental`
### rental-capacity-city_bike
The question is How much city bikes can be rented here?
This rendering asks information about the property [capacity:city_bike](https://wiki.openstreetmap.org/wiki/Key:capacity:city_bike)
This is rendered with {capacity:city_bike} city bikes can be rented here
Only visible if `rental~^(.*city_bike.*)$` is shown
This tagrendering has labels `bicycle_rental`
### rental-capacity-ebike
The question is How much electrical bikes can be rented here?
This rendering asks information about the property [capacity:ebike](https://wiki.openstreetmap.org/wiki/Key:capacity:ebike)
This is rendered with {capacity:ebike} electrical bikes can be rented here
Only visible if `rental~^(.*ebike.*)$` is shown
This tagrendering has labels `bicycle_rental`
### rental-capacity-kid_bike
The question is How much bikes for children can be rented here?
This rendering asks information about the property [capacity:kid_bike](https://wiki.openstreetmap.org/wiki/Key:capacity:kid_bike)
This is rendered with {capacity:kid_bike} bikes for children can be rented here
Only visible if `rental~^(.*kid_bike.*)$` is shown
This tagrendering has labels `bicycle_rental`
### rental-capacity-bmx
The question is How much BMX bikes can be rented here?
This rendering asks information about the property [capacity:bmx](https://wiki.openstreetmap.org/wiki/Key:capacity:bmx)
This is rendered with {capacity:bmx} BMX bikes can be rented here
Only visible if `rental~^(.*bmx.*)$` is shown
This tagrendering has labels `bicycle_rental`
### rental-capacity-mtb
The question is How much mountainbike can be rented here?
This rendering asks information about the property [capacity:mtb](https://wiki.openstreetmap.org/wiki/Key:capacity:mtb)
This is rendered with {capacity:mtb} mountainbike can be rented here
Only visible if `rental~^(.*mtb.*)$` is shown
This tagrendering has labels `bicycle_rental`
### rental-capacity-bicycle_pannier
The question is How much bicycle panniers can be rented here?
This rendering asks information about the property [capacity:bicycle_pannier](https://wiki.openstreetmap.org/wiki/Key:capacity:bicycle_pannier)
This is rendered with {capacity:bicycle_pannier} bicycle panniers can be rented here
Only visible if `rental~^(.*bicycle_pannier.*)$` is shown
This tagrendering has labels `bicycle_rental`
### rental-capacity-tandem_bicycle
The question is How much tandem can be rented here?
This rendering asks information about the property [capacity:tandem_bicycle](https://wiki.openstreetmap.org/wiki/Key:capacity:tandem_bicycle)
This is rendered with {capacity:tandem_bicycle} tandem can be rented here
Only visible if `rental~^(.*tandem_bicycle.*)$` is shown
This tagrendering has labels `bicycle_rental`
@ -452,7 +299,7 @@ The question is Does this shop offer a bike pump for use by anyone?
- This shop offers a bike pump for anyone corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:service:bicycle:pump' target='_blank'>service:bicycle:pump</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump%3Dyes' target='_blank'>yes</a>`
- This shop doesn't offer a bike pump for anyone corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:service:bicycle:pump' target='_blank'>service:bicycle:pump</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump%3Dno' target='_blank'>no</a>`
- There is bicycle pump, it is shown as a separate point corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:service:bicycle:pump' target='_blank'>service:bicycle:pump</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump%3Dseparate' target='_blank'>separate</a>`
- There is bicycle pump, it is shown as a separate point corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:service:bicycle:pump' target='_blank'>service:bicycle:pump</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump%3Dseparate' target='_blank'>separate</a>`
@ -491,23 +338,12 @@ The question is Are bicycles washed here?
### bike_cleaning-service:bicycle:cleaning:charge
### bikecleaningbikecleaningservicebicyclecleaningcharge
The question is How much does it cost to use the cleaning service?
This tagrendering has no question and is thus read-only
This rendering asks information about the property [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge)
This is rendered with Using the cleaning service costs {service:bicycle:cleaning:charge}
- The cleaning service is free to use corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:fee' target='_blank'>service:bicycle:cleaning:fee</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning:fee%3Dno' target='_blank'>no</a>`
- Free to use corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:fee' target='_blank'>service:bicycle:cleaning:fee</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning:fee%3Dyes' target='_blank'>yes</a>`
- This option cannot be chosen as answer

View file

@ -68,9 +68,6 @@ attribute | type | values which are supported by this layer
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:name%3D)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/climbing#values) [climbing](https://wiki.openstreetmap.org/wiki/Key:climbing) | Multiple choice | [boulder](https://wiki.openstreetmap.org/wiki/Tag:climbing%3Dboulder) [crag](https://wiki.openstreetmap.org/wiki/Tag:climbing%3Dcrag) [area](https://wiki.openstreetmap.org/wiki/Tag:climbing%3Darea)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/rock#values) [rock](https://wiki.openstreetmap.org/wiki/Key:rock) | [string](../SpecialInputElements.md#string) | [limestone](https://wiki.openstreetmap.org/wiki/Tag:rock%3Dlimestone)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/url#values) [url](https://wiki.openstreetmap.org/wiki/Key:url) | [url](../SpecialInputElements.md#url) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/charge#values) [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:charge%3D)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/climbing:boulder#values) [climbing:boulder](https://wiki.openstreetmap.org/wiki/Key:climbing:boulder) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:climbing:boulder%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:climbing:boulder%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:climbing:boulder%3Dlimited)
@ -182,61 +179,6 @@ This is rendered with The rock type is {rock}
- Limestone corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:rock' target='_blank'>rock</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:rock%3Dlimestone' target='_blank'>limestone</a>`
Only visible if `climbing=crag|natural=cliff|natural=bare_rock` is shown
### website
The question is Is there a (unofficial) website with more informations (e.g. topos)?
This rendering asks information about the property [url](https://wiki.openstreetmap.org/wiki/Key:url)
This is rendered with <a href='{url}' target='_blank'>{url}</a>
Only visible if `leisure!~^(sports_centre)$&sport=climbing` is shown
### fee
The question is Is a fee required to climb here?
This rendering asks information about the property [charge](https://wiki.openstreetmap.org/wiki/Key:charge)
This is rendered with A fee of {charge} should be paid for climbing here
- Climbing here is free of charge corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fee' target='_blank'>fee</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fee%3Dno' target='_blank'>no</a>`
- Paying a fee is required to climb here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fee' target='_blank'>fee</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fee%3Dyes' target='_blank'>yes</a>`
### bouldering
The question is Is bouldering possible here?
- Bouldering is possible here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:climbing:boulder' target='_blank'>climbing:boulder</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:climbing:boulder%3Dyes' target='_blank'>yes</a>`
- Bouldering is not possible here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:climbing:boulder' target='_blank'>climbing:boulder</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:climbing:boulder%3Dno' target='_blank'>no</a>`
- Bouldering is possible, allthough there are only a few routes corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:climbing:boulder' target='_blank'>climbing:boulder</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:climbing:boulder%3Dlimited' target='_blank'>limited</a>`
- There are {climbing:boulder} boulder routes corresponds with `climbing:boulder~.+`
- This option cannot be chosen as answer
Only visible if `climbing=crag|natural=cliff|natural=bare_rock` is shown
This document is autogenerated from [assets/layers/climbing_area/climbing_area.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/climbing_area/climbing_area.json)

View file

@ -65,14 +65,7 @@ attribute | type | values which are supported by this layer
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/charge#values) [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:charge%3D)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/climbing:length#values) [climbing:length](https://wiki.openstreetmap.org/wiki/Key:climbing:length) | [pfloat](../SpecialInputElements.md#pfloat) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/climbing:grade:french:min#values) [climbing:grade:french:min](https://wiki.openstreetmap.org/wiki/Key:climbing:grade:french:min) | [string](../SpecialInputElements.md#string) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/climbing:grade:french:max#values) [climbing:grade:french:max](https://wiki.openstreetmap.org/wiki/Key:climbing:grade:french:max) | [string](../SpecialInputElements.md#string) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/climbing:boulder#values) [climbing:boulder](https://wiki.openstreetmap.org/wiki/Key:climbing:boulder) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:climbing:boulder%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:climbing:boulder%3Dno) [limited](https://wiki.openstreetmap.org/wiki/Tag:climbing:boulder%3Dlimited)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/climbing:sport#values) [climbing:sport](https://wiki.openstreetmap.org/wiki/Key:climbing:sport) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:climbing:sport%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:climbing:sport%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/climbing:bolts:max#values) [climbing:bolts:max](https://wiki.openstreetmap.org/wiki/Key:climbing:bolts:max) | [pnat](../SpecialInputElements.md#pnat) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/climbing:speed#values) [climbing:speed](https://wiki.openstreetmap.org/wiki/Key:climbing:speed) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:climbing:speed%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:climbing:speed%3Dno)
@ -164,26 +157,6 @@ This is rendered with <a href='mailto:{email}' target='_blank'>{email}</a>
### fee
The question is Is a fee required to climb here?
This rendering asks information about the property [charge](https://wiki.openstreetmap.org/wiki/Key:charge)
This is rendered with A fee of {charge} should be paid for climbing here
- Climbing here is free of charge corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fee' target='_blank'>fee</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fee%3Dno' target='_blank'>no</a>`
- Paying a fee is required to climb here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fee' target='_blank'>fee</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fee%3Dyes' target='_blank'>yes</a>`
### opening_hours
@ -198,103 +171,6 @@ This is rendered with <h3>Opening hours</h3>{opening_hours_table(opening_hours)
### average_length
The question is What is the (average) length of the routes in meters?
This rendering asks information about the property [climbing:length](https://wiki.openstreetmap.org/wiki/Key:climbing:length)
This is rendered with The routes are <b>{canonical(climbing:length)}</b> long on average
### min_difficulty
The question is What is the grade of the easiest route here, according to the french classification system?
This rendering asks information about the property [climbing:grade:french:min](https://wiki.openstreetmap.org/wiki/Key:climbing:grade:french:min)
This is rendered with The lowest grade is {climbing:grade:french:min} according to the french/belgian system
### max_difficulty
The question is What is the highest grade route here, according to the french classification system?
This rendering asks information about the property [climbing:grade:french:max](https://wiki.openstreetmap.org/wiki/Key:climbing:grade:french:max)
This is rendered with The highest grade is {climbing:grade:french:max} according to the french/belgian system
Only visible if `climbing!~^(route)$&climbing:sport=yes|sport=climbing` is shown
### bouldering
The question is Is bouldering possible here?
- Bouldering is possible here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:climbing:boulder' target='_blank'>climbing:boulder</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:climbing:boulder%3Dyes' target='_blank'>yes</a>`
- Bouldering is not possible here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:climbing:boulder' target='_blank'>climbing:boulder</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:climbing:boulder%3Dno' target='_blank'>no</a>`
- Bouldering is possible, allthough there are only a few routes corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:climbing:boulder' target='_blank'>climbing:boulder</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:climbing:boulder%3Dlimited' target='_blank'>limited</a>`
- There are {climbing:boulder} boulder routes corresponds with `climbing:boulder~.+`
- This option cannot be chosen as answer
### sportclimbing
The question is Is sport climbing possible here on fixed anchors?
- Sport climbing is possible here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:climbing:sport' target='_blank'>climbing:sport</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:climbing:sport%3Dyes' target='_blank'>yes</a>`
- Sport climbing is not possible here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:climbing:sport' target='_blank'>climbing:sport</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:climbing:sport%3Dno' target='_blank'>no</a>`
- There are {climbing:sport} sport climbing routes corresponds with `climbing:sport~.+`
- This option cannot be chosen as answer
### max_bolts
The question is How many bolts do routes in {title()} have at most?
This rendering asks information about the property [climbing:bolts:max](https://wiki.openstreetmap.org/wiki/Key:climbing:bolts:max)
This is rendered with The sport climbing routes here have at most {climbing:bolts:max} bolts.<div class='subtle'>This is without relays and indicates how much quickdraws a climber needs</div>
Only visible if `climbing:sport=yes` is shown
### Speed climbing?

View file

@ -27,6 +27,7 @@ Crossings for pedestrians and cyclists
- [blind_osm](https://mapcomplete.osm.be/blind_osm)
- [cycle_infra](https://mapcomplete.osm.be/cycle_infra)
- [kerbs_and_crossings](https://mapcomplete.osm.be/kerbs_and_crossings)
- [personal](https://mapcomplete.osm.be/personal)
@ -69,12 +70,28 @@ attribute | type | values which are supported by this layer
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/crossing:island#values) [crossing:island](https://wiki.openstreetmap.org/wiki/Key:crossing:island) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:crossing:island%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:crossing:island%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/tactile_paving#values) [tactile_paving](https://wiki.openstreetmap.org/wiki/Key:tactile_paving) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/button_operated#values) [button_operated](https://wiki.openstreetmap.org/wiki/Key:button_operated) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:button_operated%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:button_operated%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/traffic_signals:sound#values) [traffic_signals:sound](https://wiki.openstreetmap.org/wiki/Key:traffic_signals:sound) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:sound%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:sound%3Dno) [locate](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:sound%3Dlocate) [walk](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:sound%3Dwalk)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/traffic_signals:vibration#values) [traffic_signals:vibration](https://wiki.openstreetmap.org/wiki/Key:traffic_signals:vibration) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:vibration%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:vibration%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/traffic_signals:arrow#values) [traffic_signals:arrow](https://wiki.openstreetmap.org/wiki/Key:traffic_signals:arrow) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:arrow%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:arrow%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/traffic_signals:minimap#values) [traffic_signals:minimap](https://wiki.openstreetmap.org/wiki/Key:traffic_signals:minimap) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:minimap%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:minimap%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/red_turn:right:bicycle#values) [red_turn:right:bicycle](https://wiki.openstreetmap.org/wiki/Key:red_turn:right:bicycle) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:red_turn:right:bicycle%3Dyes) [yes](https://wiki.openstreetmap.org/wiki/Tag:red_turn:right:bicycle%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:red_turn:right:bicycle%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/red_turn:straight:bicycle#values) [red_turn:straight:bicycle](https://wiki.openstreetmap.org/wiki/Key:red_turn:straight:bicycle) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:red_turn:straight:bicycle%3Dyes) [yes](https://wiki.openstreetmap.org/wiki/Tag:red_turn:straight:bicycle%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:red_turn:straight:bicycle%3Dno)
### images
This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata`
This tagrendering has no question and is thus read-only
### crossing-type
@ -188,6 +205,80 @@ Only visible if `highway=traffic_signals|crossing=traffic_signals` is shown
### crossing-sound
The question is Does this traffic light have sound signals to aid crossing?
- This traffic light has sound signals to help crossing, both for finding the crossing and for crossing. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_signals:sound' target='_blank'>traffic_signals:sound</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:sound%3Dyes' target='_blank'>yes</a>`
- This traffic light does not have sound signals to help crossing. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_signals:sound' target='_blank'>traffic_signals:sound</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:sound%3Dno' target='_blank'>no</a>`
- This traffic light has a sound signal to help locate the pole, but no signal to sign that it is safe to cross. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_signals:sound' target='_blank'>traffic_signals:sound</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:sound%3Dlocate' target='_blank'>locate</a>`
- This traffic light has a sound signal to sign that it is safe to cross, but no signal to help locate the pole. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_signals:sound' target='_blank'>traffic_signals:sound</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:sound%3Dwalk' target='_blank'>walk</a>`
Only visible if `crossing=traffic_signals` is shown
### crossing-vibration
The question is Does this traffic light have vibration signals to aid crossing? (usually located at the bottom of the crossing button)
- The button for this traffic light has a vibration signal to indicate that it is safe to cross. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_signals:vibration' target='_blank'>traffic_signals:vibration</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:vibration%3Dyes' target='_blank'>yes</a>`
- The button for this traffic light does not have a vibration signal to indicate that it is safe to cross. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_signals:vibration' target='_blank'>traffic_signals:vibration</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:vibration%3Dno' target='_blank'>no</a>`
Only visible if `crossing=traffic_signals&button_operated=yes` is shown
### crossing-arrow
The question is Does this traffic light have an arrow pointing in the direction of crossing?
- This traffic light has an arrow pointing in the direction of crossing. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_signals:arrow' target='_blank'>traffic_signals:arrow</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:arrow%3Dyes' target='_blank'>yes</a>`
- This traffic light does <b>not</b> have an arrow pointing in the direction of crossing. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_signals:arrow' target='_blank'>traffic_signals:arrow</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:arrow%3Dno' target='_blank'>no</a>`
Only visible if `crossing=traffic_signals` is shown
### crossing-minimap
The question is Does this traffic light have a tactile map showing the layout of the crossing?
- This traffic light has a tactile map showing the layout of the crossing. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_signals:minimap' target='_blank'>traffic_signals:minimap</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:minimap%3Dyes' target='_blank'>yes</a>`
- This traffic light does <b>not</b> have a tactile map showing the layout of the crossing. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_signals:minimap' target='_blank'>traffic_signals:minimap</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_signals:minimap%3Dno' target='_blank'>no</a>`
Only visible if `crossing=traffic_signals` is shown
### crossing-right-turn-through-red

View file

@ -29,6 +29,7 @@ All infrastructure that someone can cycle over, accompanied with questions about
- [blind_osm](https://mapcomplete.osm.be/blind_osm)
- [cycle_infra](https://mapcomplete.osm.be/cycle_infra)
- [kerbs_and_crossings](https://mapcomplete.osm.be/kerbs_and_crossings)
- [onwheels](https://mapcomplete.osm.be/onwheels)

View file

@ -184,7 +184,7 @@ The question is Please give some explanation on where the defibrillator can be
This rendering asks information about the property [defibrillator:location](https://wiki.openstreetmap.org/wiki/Key:defibrillator:location)
This is rendered with <i>Extra information about the location (in the local languagel):</i><br/>{defibrillator:location}
This is rendered with <i>Extra information about the location (in the local language):</i><br/>{defibrillator:location}

File diff suppressed because one or more lines are too long

View file

@ -25,6 +25,7 @@ This layer show elevators and asks for operational status and elevator dimension
- [blind_osm](https://mapcomplete.osm.be/blind_osm)
- [indoors](https://mapcomplete.osm.be/indoors)
- [onwheels](https://mapcomplete.osm.be/onwheels)
- [personal](https://mapcomplete.osm.be/personal)

View file

@ -5,7 +5,7 @@
<img src='https://mapcomplete.osm.be/./assets/themes/cyclestreets/F111.svg' height="100px">
A cyclestreet is a street where motorized traffic is not allowed to overtake a cyclist
@ -39,10 +39,10 @@ Elements must have the all of following tags to be shown on this layer:
- <a href='https://wiki.openstreetmap.org/wiki/Key:cyclestreet' target='_blank'>cyclestreet</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:cyclestreet%3Dyes' target='_blank'>yes</a>
- <a href='https://wiki.openstreetmap.org/wiki/Key:cyclestreet' target='_blank'>cyclestreet</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:cyclestreet%3Dyes' target='_blank'>yes</a>|<a href='https://wiki.openstreetmap.org/wiki/Key:bicycle_road' target='_blank'>bicycle_road</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:bicycle_road%3Dyes' target='_blank'>yes</a>
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22cyclestreet%22%3D%22yes%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22bicycle_road%22%3D%22yes%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22cyclestreet%22%3D%22yes%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
@ -59,7 +59,7 @@ this quick overview is incomplete
attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/cyclestreet#values) [cyclestreet](https://wiki.openstreetmap.org/wiki/Key:cyclestreet) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:cyclestreet%3Dyes) [yes](https://wiki.openstreetmap.org/wiki/Tag:cyclestreet%3Dyes) [](https://wiki.openstreetmap.org/wiki/Tag:cyclestreet%3D) [](https://wiki.openstreetmap.org/wiki/Tag:cyclestreet%3D)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/traffic_sign#values) [traffic_sign](https://wiki.openstreetmap.org/wiki/Key:traffic_sign) | Multiple choice | [DE:244.1,1020-30](https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1020-30) [DE:244.1,1022-12,1024-10](https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1022-12,1024-10) [DE:244.1,1022-12](https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1022-12) [DE:244.1,1024-10](https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1024-10) [DE:244.1](https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/cyclestreet:start_date#values) [cyclestreet:start_date](https://wiki.openstreetmap.org/wiki/Key:cyclestreet:start_date) | [date](../SpecialInputElements.md#date) |
@ -88,13 +88,38 @@ The question is Is the street <b>{name}</b> a cyclestreet?
- This street is a cyclestreet (and has a speed limit of 30 km/h) corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:cyclestreet' target='_blank'>cyclestreet</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:cyclestreet%3Dyes' target='_blank'>yes</a>&<a href='https://wiki.openstreetmap.org/wiki/Key:maxspeed' target='_blank'>maxspeed</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:maxspeed%3D30' target='_blank'>30</a>&<a href='https://wiki.openstreetmap.org/wiki/Key:overtaking:motor_vehicle' target='_blank'>overtaking:motor_vehicle</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:overtaking:motor_vehicle%3Dno' target='_blank'>no</a>`
- This street is a bicycle road corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:bicycle_road' target='_blank'>bicycle_road</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:bicycle_road%3Dyes' target='_blank'>yes</a>`
- This option cannot be chosen as answer
- This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later) corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:bicycle_road' target='_blank'>bicycle_road</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:bicycle_road%3Dyes' target='_blank'>yes</a>&<a href='https://wiki.openstreetmap.org/wiki/Key:maxspeed' target='_blank'>maxspeed</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:maxspeed%3D30' target='_blank'>30</a>&<a href='https://wiki.openstreetmap.org/wiki/Key:source:maxspeed' target='_blank'>source:maxspeed</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:source:maxspeed%3DDE:bicycle_road' target='_blank'>DE:bicycle_road</a>&<a href='https://wiki.openstreetmap.org/wiki/Key:vehicle' target='_blank'>vehicle</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:vehicle%3Dno' target='_blank'>no</a>&<a href='https://wiki.openstreetmap.org/wiki/Key:bicycle' target='_blank'>bicycle</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:bicycle%3Ddesignated' target='_blank'>designated</a>`
- This street is a cyclestreet corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:cyclestreet' target='_blank'>cyclestreet</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:cyclestreet%3Dyes' target='_blank'>yes</a>`
- This street will become a cyclestreet soon corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:proposed:cyclestreet' target='_blank'>proposed:cyclestreet</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:proposed:cyclestreet%3Dyes' target='_blank'>yes</a>`
- This street will become a bicycle road soon corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:proposed:bicycle_road' target='_blank'>proposed:bicycle_road</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:proposed:bicycle_road%3Dyes' target='_blank'>yes</a>`
- This street is not a cyclestreet corresponds with ``
### supplementary_sign
The question is What sign does this bicycle road have?
- Residents allowed corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_sign' target='_blank'>traffic_sign</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1020-30' target='_blank'>DE:244.1,1020-30</a>`
- Motor vehicles allowed corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_sign' target='_blank'>traffic_sign</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1022-12,1024-10' target='_blank'>DE:244.1,1022-12,1024-10</a>`
- Motorcycles allowed corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_sign' target='_blank'>traffic_sign</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1022-12' target='_blank'>DE:244.1,1022-12</a>`
- Cars allowed corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_sign' target='_blank'>traffic_sign</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1024-10' target='_blank'>DE:244.1,1024-10</a>`
- There are no supplementary signs at this bicycle road. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_sign' target='_blank'>traffic_sign</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1' target='_blank'>DE:244.1</a>`
Only visible if `bicycle_road=yes&_country=de` is shown
### future_cyclestreet

View file

@ -0,0 +1,232 @@
fitness_centre
================
<img src='https://mapcomplete.osm.be/circle:white;./assets/layers/fitness_centre/gym.svg' height="100px">
Layer showing fitness centres
- This layer is shown at zoomlevel **12** and higher
#### Themes using this layer
- [personal](https://mapcomplete.osm.be/personal)
- [sports](https://mapcomplete.osm.be/sports)
Basic tags for this layer
---------------------------
Elements must have the all of following tags to be shown on this layer:
- <a href='https://wiki.openstreetmap.org/wiki/Key:leisure' target='_blank'>leisure</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:leisure%3Dfitness_centre' target='_blank'>fitness_centre</a>
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22leisure%22%3D%22fitness_centre%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
Supported attributes
----------------------
Warning:
this quick overview is incomplete
attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/wheelchair#values) [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [designated](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated) [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/level#values) [level](https://wiki.openstreetmap.org/wiki/Key:level) | [float](../SpecialInputElements.md#float) | [0](https://wiki.openstreetmap.org/wiki/Tag:level%3D0) [1](https://wiki.openstreetmap.org/wiki/Tag:level%3D1) [-1](https://wiki.openstreetmap.org/wiki/Tag:level%3D-1)
### name
The question is What is the name of this fitness centre?
This rendering asks information about the property [name](https://wiki.openstreetmap.org/wiki/Key:name)
This is rendered with This fitness centre is called {name}
- This fitness centre has no name corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:noname' target='_blank'>noname</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:noname%3Dyes' target='_blank'>yes</a>`
### images
This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata`
This tagrendering has no question and is thus read-only
### phone
The question is What is the phone number of {title()}?
This rendering asks information about the property [phone](https://wiki.openstreetmap.org/wiki/Key:phone)
This is rendered with <a href='tel:{phone}'>{phone}</a>
- <a href='tel:{contact:phone}'>{contact:phone}</a> corresponds with `contact:phone~.+`
- This option cannot be chosen as answer
### email
The question is What is the email address of {title()}?
This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email)
This is rendered with <a href='mailto:{email}' target='_blank'>{email}</a>
- <a href='mailto:{contact:email}' target='_blank'>{contact:email}</a> corresponds with `contact:email~.+`
- This option cannot be chosen as answer
### website
The question is What is the website of {title()}?
This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website)
This is rendered with <a href='{website}' target='_blank'>{website}</a>
- <a href='{contact:website}' target='_blank'>{contact:website}</a> corresponds with `contact:website~.+`
- This option cannot be chosen as answer
### opening_hours
The question is What are the opening hours of {title()}?
This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours)
This is rendered with <h3>Opening hours</h3>{opening_hours_table(opening_hours)}
### wheelchair-access
The question is Is this place accessible with a wheelchair?
- This place is specially adapted for wheelchair users corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:wheelchair' target='_blank'>wheelchair</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated' target='_blank'>designated</a>`
- This place is easily reachable with a wheelchair corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:wheelchair' target='_blank'>wheelchair</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes' target='_blank'>yes</a>`
- It is possible to reach this place in a wheelchair, but it is not easy corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:wheelchair' target='_blank'>wheelchair</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dlimited' target='_blank'>limited</a>`
- This place is not reachable with a wheelchair corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:wheelchair' target='_blank'>wheelchair</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno' target='_blank'>no</a>`
### level
The question is On what level is this feature located?
This rendering asks information about the property [level](https://wiki.openstreetmap.org/wiki/Key:level)
This is rendered with Located on the {level}th floor
- Located underground corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:location' target='_blank'>location</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:location%3Dunderground' target='_blank'>underground</a>`
- This option cannot be chosen as answer
- Located on the ground floor corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:level' target='_blank'>level</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:level%3D0' target='_blank'>0</a>`
- Located on the ground floor corresponds with ``
- This option cannot be chosen as answer
- Located on the first floor corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:level' target='_blank'>level</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:level%3D1' target='_blank'>1</a>`
- Located on the first basement level corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:level' target='_blank'>level</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:level%3D-1' target='_blank'>-1</a>`
### reviews
Shows the reviews module (including the possibility to leave a review)
This tagrendering has no question and is thus read-only
This document is autogenerated from [assets/layers/fitness_centre/fitness_centre.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/fitness_centre/fitness_centre.json)

View file

@ -0,0 +1,155 @@
fitness_station
=================
<img src='https://mapcomplete.osm.be/circle:white;./assets/layers/fitness_station/fitness.svg' height="100px">
Find a fitness station near you, and add missing ones.
- This layer is shown at zoomlevel **12** and higher
#### Themes using this layer
- [personal](https://mapcomplete.osm.be/personal)
- [sports](https://mapcomplete.osm.be/sports)
Basic tags for this layer
---------------------------
Elements must have the all of following tags to be shown on this layer:
- <a href='https://wiki.openstreetmap.org/wiki/Key:leisure' target='_blank'>leisure</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:leisure%3Dfitness_station' target='_blank'>fitness_station</a>
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22leisure%22%3D%22fitness_station%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
Supported attributes
----------------------
Warning:
this quick overview is incomplete
attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/fitness_station#values) [fitness_station](https://wiki.openstreetmap.org/wiki/Key:fitness_station) | Multiple choice | [horizontal_bar](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dhorizontal_bar) [sign](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dsign) [sit-up](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dsit-up) [push-up](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dpush-up) [stretch_bars](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dstretch_bars) [hyperextension](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dhyperextension) [rings](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Drings) [horizontal_ladder](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dhorizontal_ladder) [wall_bars](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dwall_bars) [slalom](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dslalom) [stepping_stones](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dstepping_stones) [leapfrog](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dleapfrog) [beam_jump](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dbeam_jump) [hurdling](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dhurdling) [wall](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dwall) [balance_beam](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dbalance_beam) [log_lifting](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dlog_lifting) [captains_chair](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dcaptains_chair) [box](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dbox) [battling_ropes](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dbattling_ropes) [excercise_bike](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dexcercise_bike) [elliptical_trainer](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Delliptical_trainer) [air_walker](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dair_walker) [rower](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Drower) [slackline](https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dslackline)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/operator#values) [operator](https://wiki.openstreetmap.org/wiki/Key:operator) | [string](../SpecialInputElements.md#string) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) |
### name
The question is What is the name of this fitness station?
This rendering asks information about the property [name](https://wiki.openstreetmap.org/wiki/Key:name)
This is rendered with This fitness station is called {name}
- This fitness station doesn't have a name corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:noname' target='_blank'>noname</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:noname%3Dyes' target='_blank'>yes</a>`
### type
The question is What kind of equipment does this fitness station have?
- This fitness station has a horizontal bar, high enough for pull-ups. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dhorizontal_bar' target='_blank'>horizontal_bar</a>`
- This fitness station has a sign with instructions for a specific exercise. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dsign' target='_blank'>sign</a>`
- This fitness station has a facility for sit-ups. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dsit-up' target='_blank'>sit-up</a>`
- This fitness station has a facility for push-ups. Usually consists of one or more low horizontal bars. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dpush-up' target='_blank'>push-up</a>`
- This fitness station has bars for stretching. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dstretch_bars' target='_blank'>stretch_bars</a>`
- This fitness station has a station for making hyperextensions. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dhyperextension' target='_blank'>hyperextension</a>`
- This fitness station has rings for gymnastic exercises. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Drings' target='_blank'>rings</a>`
- This fitness station has a horizontal ladder, also known as monkey bars. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dhorizontal_ladder' target='_blank'>horizontal_ladder</a>`
- This fitness station has wall bars to climb on. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dwall_bars' target='_blank'>wall_bars</a>`
- This fitness station has posts for performing slalom exercises. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dslalom' target='_blank'>slalom</a>`
- This fitness station has stepping stones. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dstepping_stones' target='_blank'>stepping_stones</a>`
- This fitness station has cones for performing leapfrog jumps. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dleapfrog' target='_blank'>leapfrog</a>`
- This fitness station has beams to jump over. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dbeam_jump' target='_blank'>beam_jump</a>`
- This fitness station has hurdles to cross. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dhurdling' target='_blank'>hurdling</a>`
- This fitness station has a wall to climb on. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dwall' target='_blank'>wall</a>`
- This fitness station has a balance beam. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dbalance_beam' target='_blank'>balance_beam</a>`
- This fitness station has a log with a handle on the end to lift. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dlog_lifting' target='_blank'>log_lifting</a>`
- This fitness station has a chair with only elbow supports and a rear (without seat), for performing leg raises. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dcaptains_chair' target='_blank'>captains_chair</a>`
- This fitness station has a box that can be used for jumping. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dbox' target='_blank'>box</a>`
- This fitness station has battling ropes. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dbattling_ropes' target='_blank'>battling_ropes</a>`
- This fitness station has a stationary bicycle. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dexcercise_bike' target='_blank'>excercise_bike</a>`
- This fitness station has a cross-trainer. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Delliptical_trainer' target='_blank'>elliptical_trainer</a>`
- This fitness station has an air walker. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dair_walker' target='_blank'>air_walker</a>`
- This fitness station has a rower. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Drower' target='_blank'>rower</a>`
- This fitness station has a slackline. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:fitness_station' target='_blank'>fitness_station</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fitness_station%3Dslackline' target='_blank'>slackline</a>`
### operator
The question is Who maintains this fitness station?
This rendering asks information about the property [operator](https://wiki.openstreetmap.org/wiki/Key:operator)
This is rendered with The fitness station is maintained by {operator}.
### opening_hours
The question is What are the opening hours of {title()}?
This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours)
This is rendered with <h3>Opening hours</h3>{opening_hours_table(opening_hours)}
This document is autogenerated from [assets/layers/fitness_station/fitness_station.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/fitness_station/fitness_station.json)

View file

@ -28,6 +28,7 @@ A layer showing kerbs.
- [blind_osm](https://mapcomplete.osm.be/blind_osm)
- [kerbs_and_crossings](https://mapcomplete.osm.be/kerbs_and_crossings)
- [onwheels](https://mapcomplete.osm.be/onwheels)
- [personal](https://mapcomplete.osm.be/personal)
@ -66,7 +67,7 @@ attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/kerb#values) [kerb](https://wiki.openstreetmap.org/wiki/Key:kerb) | Multiple choice | [raised](https://wiki.openstreetmap.org/wiki/Tag:kerb%3Draised) [lowered](https://wiki.openstreetmap.org/wiki/Tag:kerb%3Dlowered) [flush](https://wiki.openstreetmap.org/wiki/Tag:kerb%3Dflush)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/tactile_paving#values) [tactile_paving](https://wiki.openstreetmap.org/wiki/Key:tactile_paving) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:tactile_paving%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/kerb:height#values) [kerb:height](https://wiki.openstreetmap.org/wiki/Key:kerb:height) | [pnat](../SpecialInputElements.md#pnat) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/kerb:height#values) [kerb:height](https://wiki.openstreetmap.org/wiki/Key:kerb:height) | [pnat](../SpecialInputElements.md#pnat) | [0](https://wiki.openstreetmap.org/wiki/Tag:kerb:height%3D0)
@ -136,6 +137,11 @@ This rendering asks information about the property [kerb:height](https://wiki.o
This is rendered with Kerb height: {kerb:height}
- This kerb is flush and is lower than 1cm. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:kerb:height' target='_blank'>kerb:height</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:kerb:height%3D0' target='_blank'>0</a>`
This document is autogenerated from [assets/layers/kerbs/kerbs.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/kerbs/kerbs.json)

View file

@ -15,6 +15,7 @@ Shows the allowed speed for every road
- This layer is shown at zoomlevel **16** and higher
- This layer is needed as dependency for layer [speed_camera](#speed_camera)

View file

@ -27,6 +27,7 @@ A layer showing the OpenStreetMap Communities
- [osm_community_index](https://mapcomplete.osm.be/osm_community_index)
- [personal](https://mapcomplete.osm.be/personal)

View file

@ -76,7 +76,7 @@ The question is What kind of parking space is this?
- This is a normal parking space corresponds with ``
- This is a normal parking space. corresponds with ``
- This option cannot be chosen as answer
- This is a normal parking space. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:parking_space' target='_blank'>parking_space</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:parking_space%3Dnormal' target='_blank'>normal</a>`
- This is a disabled parking space. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:parking_space' target='_blank'>parking_space</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:parking_space%3Ddisabled' target='_blank'>disabled</a>`

View file

@ -60,7 +60,14 @@ this quick overview is incomplete
attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [24/7](https://wiki.openstreetmap.org/wiki/Tag:opening_hours%3D24/7)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/post_office#values) [post_office](https://wiki.openstreetmap.org/wiki/Key:post_office) | Multiple choice | [post_partner](https://wiki.openstreetmap.org/wiki/Tag:post_office%3Dpost_partner) [](https://wiki.openstreetmap.org/wiki/Tag:post_office%3D)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/post_office:brand#values) [post_office:brand](https://wiki.openstreetmap.org/wiki/Key:post_office:brand) | [string](../SpecialInputElements.md#string) | [DHL](https://wiki.openstreetmap.org/wiki/Tag:post_office:brand%3DDHL) [DPD](https://wiki.openstreetmap.org/wiki/Tag:post_office:brand%3DDPD) [GLS](https://wiki.openstreetmap.org/wiki/Tag:post_office:brand%3DGLS) [UPS](https://wiki.openstreetmap.org/wiki/Tag:post_office:brand%3DUPS) [DHL Paketshop](https://wiki.openstreetmap.org/wiki/Tag:post_office:brand%3DDHL Paketshop) [Hermes PaketShop](https://wiki.openstreetmap.org/wiki/Tag:post_office:brand%3DHermes PaketShop) [PostNL](https://wiki.openstreetmap.org/wiki/Tag:post_office:brand%3DPostNL) [bpost](https://wiki.openstreetmap.org/wiki/Tag:post_office:brand%3Dbpost)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/post_office:letter_from#values) [post_office:letter_from](https://wiki.openstreetmap.org/wiki/Key:post_office:letter_from) | [string](../SpecialInputElements.md#string) | [yes](https://wiki.openstreetmap.org/wiki/Tag:post_office:letter_from%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:post_office:letter_from%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/post_office:parcel_from#values) [post_office:parcel_from](https://wiki.openstreetmap.org/wiki/Key:post_office:parcel_from) | [string](../SpecialInputElements.md#string) | [yes](https://wiki.openstreetmap.org/wiki/Tag:post_office:parcel_from%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:post_office:parcel_from%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/post_office:parcel_pickup#values) [post_office:parcel_pickup](https://wiki.openstreetmap.org/wiki/Key:post_office:parcel_pickup) | [string](../SpecialInputElements.md#string) | [yes](https://wiki.openstreetmap.org/wiki/Tag:post_office:parcel_pickup%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:post_office:parcel_pickup%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/post_office:parcel_to#values) [post_office:parcel_to](https://wiki.openstreetmap.org/wiki/Key:post_office:parcel_to) | [string](../SpecialInputElements.md#string) | [yes](https://wiki.openstreetmap.org/wiki/Tag:post_office:parcel_to%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:post_office:parcel_to%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/post_office:stamps#values) [post_office:stamps](https://wiki.openstreetmap.org/wiki/Key:post_office:stamps) | [string](../SpecialInputElements.md#string) | [yes](https://wiki.openstreetmap.org/wiki/Tag:post_office:stamps%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:post_office:stamps%3Dno)
@ -87,7 +94,7 @@ This tagrendering has no question and is thus read-only
### OH
### opening_hours
@ -95,13 +102,154 @@ The question is What are the opening hours for this post office?
This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours)
This is rendered with Opening Hours: {opening_hours_table()}
This is rendered with <h3>Opening hours</h3>{opening_hours_table(opening_hours)}
- 24/7 opened (including holidays) corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:opening_hours' target='_blank'>opening_hours</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:opening_hours%3D24/7' target='_blank'>24/7</a>`
### post_partner
The question is Is this a post partner?
- This shop is a post partner corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:post_office' target='_blank'>post_office</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:post_office%3Dpost_partner' target='_blank'>post_partner</a>`
- This shop is not a post partner corresponds with ``
Only visible if `post_office=post_partner` is shown
### partner-brand
The question is For which brand does this location offer services?
This rendering asks information about the property [post_office:brand](https://wiki.openstreetmap.org/wiki/Key:post_office:brand)
This is rendered with This location offers services for {post_office:brand}
- This location offers services for DHL corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:post_office:brand' target='_blank'>post_office:brand</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:post_office:brand%3DDHL' target='_blank'>DHL</a>`
- This location offers services for DPD corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:post_office:brand' target='_blank'>post_office:brand</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:post_office:brand%3DDPD' target='_blank'>DPD</a>`
- This location offers services for GLS corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:post_office:brand' target='_blank'>post_office:brand</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:post_office:brand%3DGLS' target='_blank'>GLS</a>`
- This location offers services for UPS corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:post_office:brand' target='_blank'>post_office:brand</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:post_office:brand%3DUPS' target='_blank'>UPS</a>`
- This location is a DHL Paketshop corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:post_office:brand' target='_blank'>post_office:brand</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:post_office:brand%3DDHL Paketshop' target='_blank'>DHL Paketshop</a>`
- This location is a Hermes PaketShop corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:post_office:brand' target='_blank'>post_office:brand</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:post_office:brand%3DHermes PaketShop' target='_blank'>Hermes PaketShop</a>`
- This location is a PostNL-point corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:post_office:brand' target='_blank'>post_office:brand</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:post_office:brand%3DPostNL' target='_blank'>PostNL</a>`
- This location offers services for bpost corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:post_office:brand' target='_blank'>post_office:brand</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:post_office:brand%3Dbpost' target='_blank'>bpost</a>`
Only visible if `post_office=post_partner` is shown
### letter-from
The question is Can you post a letter here?
This rendering asks information about the property [post_office:letter_from](https://wiki.openstreetmap.org/wiki/Key:post_office:letter_from)
This is rendered with You can post letters with these companies: {post_office:letter_from}
- You can post letters here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:post_office:letter_from' target='_blank'>post_office:letter_from</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:post_office:letter_from%3Dyes' target='_blank'>yes</a>`
- You can't post letters here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:post_office:letter_from' target='_blank'>post_office:letter_from</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:post_office:letter_from%3Dno' target='_blank'>no</a>`
### parcel-from
The question is Can you send a parcel here?
This rendering asks information about the property [post_office:parcel_from](https://wiki.openstreetmap.org/wiki/Key:post_office:parcel_from)
This is rendered with You can post parcels with these companies: {post_office:parcel_from}
- You can send parcels here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:post_office:parcel_from' target='_blank'>post_office:parcel_from</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:post_office:parcel_from%3Dyes' target='_blank'>yes</a>`
- You can't send parcels here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:post_office:parcel_from' target='_blank'>post_office:parcel_from</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:post_office:parcel_from%3Dno' target='_blank'>no</a>`
### parcel-pickup
The question is Can you pick up missed parcels here?
This rendering asks information about the property [post_office:parcel_pickup](https://wiki.openstreetmap.org/wiki/Key:post_office:parcel_pickup)
This is rendered with You can pick up parcels from these companies: {post_office:parcel_pickup}
- You can pick up missed parcels here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:post_office:parcel_pickup' target='_blank'>post_office:parcel_pickup</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:post_office:parcel_pickup%3Dyes' target='_blank'>yes</a>`
- You can't pick up missed parcels here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:post_office:parcel_pickup' target='_blank'>post_office:parcel_pickup</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:post_office:parcel_pickup%3Dno' target='_blank'>no</a>`
### parcel-to
The question is Can you send parcels to here for pickup?
This rendering asks information about the property [post_office:parcel_to](https://wiki.openstreetmap.org/wiki/Key:post_office:parcel_to)
This is rendered with You can send parcels to here for pickup with these companies: {post_office:parcel_to}
- You can send parcels to here for pickup corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:post_office:parcel_to' target='_blank'>post_office:parcel_to</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:post_office:parcel_to%3Dyes' target='_blank'>yes</a>`
- You can't send parcels to here for pickup corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:post_office:parcel_to' target='_blank'>post_office:parcel_to</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:post_office:parcel_to%3Dno' target='_blank'>no</a>`
### stamps
The question is Can you buy stamps here?
This rendering asks information about the property [post_office:stamps](https://wiki.openstreetmap.org/wiki/Key:post_office:stamps)
This is rendered with You can buy stamps from companies: {post_office:stamps}
- You can buy stamps here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:post_office:stamps' target='_blank'>post_office:stamps</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:post_office:stamps%3Dyes' target='_blank'>yes</a>`
- You can't buy stamps here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:post_office:stamps' target='_blank'>post_office:stamps</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:post_office:stamps%3Dno' target='_blank'>no</a>`
This document is autogenerated from [assets/layers/postoffices/postoffices.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/postoffices/postoffices.json)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,93 @@
speed_camera
==============
<img src='https://mapcomplete.osm.be/square:white;./assets/layers/speed_camera/speed_camera.svg' height="100px">
Layer showing speed cameras
- This layer is shown at zoomlevel **12** and higher
- This layer will automatically load [maxspeed](./maxspeed.md) into the layout as it depends on it: a preset snaps to this layer (presets[0])
#### Themes using this layer
- [maxspeed](https://mapcomplete.osm.be/maxspeed)
- [personal](https://mapcomplete.osm.be/personal)
Basic tags for this layer
---------------------------
Elements must have the all of following tags to be shown on this layer:
- <a href='https://wiki.openstreetmap.org/wiki/Key:highway' target='_blank'>highway</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:highway%3Dspeed_camera' target='_blank'>speed_camera</a>
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22highway%22%3D%22speed_camera%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
Supported attributes
----------------------
Warning:
this quick overview is incomplete
attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/maxspeed#values) [maxspeed](https://wiki.openstreetmap.org/wiki/Key:maxspeed) | [pnat](../SpecialInputElements.md#pnat) |
### maxspeed
The question is What is the maximum speed allowed at this speed camera?
This rendering asks information about the property [maxspeed](https://wiki.openstreetmap.org/wiki/Key:maxspeed)
This is rendered with The maximum speed allowed is {canonical(maxspeed)}
### ref
This tagrendering has no question and is thus read-only
Only visible if `ref~.+` is shown
This document is autogenerated from [assets/layers/speed_camera/speed_camera.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/speed_camera/speed_camera.json)

View file

@ -0,0 +1,95 @@
speed_display
===============
<img src='https://mapcomplete.osm.be/./assets/layers/speed_display/speed_display.svg' height="100px">
Layer showing speed displays that alert drivers of their speed.
- This layer is shown at zoomlevel **12** and higher
#### Themes using this layer
- [maxspeed](https://mapcomplete.osm.be/maxspeed)
- [personal](https://mapcomplete.osm.be/personal)
Basic tags for this layer
---------------------------
Elements must have the all of following tags to be shown on this layer:
- <a href='https://wiki.openstreetmap.org/wiki/Key:highway' target='_blank'>highway</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:highway%3Dspeed_display' target='_blank'>speed_display</a>
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22highway%22%3D%22speed_display%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
Supported attributes
----------------------
Warning:
this quick overview is incomplete
attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/maxspeed#values) [maxspeed](https://wiki.openstreetmap.org/wiki/Key:maxspeed) | [pnat](../SpecialInputElements.md#pnat) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/inscription#values) [inscription](https://wiki.openstreetmap.org/wiki/Key:inscription) | [string](../SpecialInputElements.md#string) |
### maxspeed
The question is What is the maximum speed allowed at this speed display?
This rendering asks information about the property [maxspeed](https://wiki.openstreetmap.org/wiki/Key:maxspeed)
This is rendered with The maximum speed allowed at this speed display is {canonical(maxspeed)}
### inscription
The question is What is the text on this speed display?
This rendering asks information about the property [inscription](https://wiki.openstreetmap.org/wiki/Key:inscription)
This is rendered with The text on this speed display is {inscription}
This document is autogenerated from [assets/layers/speed_display/speed_display.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/speed_display/speed_display.json)

View file

@ -27,6 +27,7 @@ A sport pitch
- [personal](https://mapcomplete.osm.be/personal)
- [sport_pitches](https://mapcomplete.osm.be/sport_pitches)
- [sports](https://mapcomplete.osm.be/sports)

View file

@ -0,0 +1,174 @@
sports_centre
===============
<img src='https://mapcomplete.osm.be/circle:white;./assets/layers/sports_centre/sports_centre.svg' height="100px">
Indoor and outdoor sports centres can be found on this layer
- This layer is shown at zoomlevel **12** and higher
#### Themes using this layer
- [personal](https://mapcomplete.osm.be/personal)
- [sports](https://mapcomplete.osm.be/sports)
Basic tags for this layer
---------------------------
Elements must have the all of following tags to be shown on this layer:
- <a href='https://wiki.openstreetmap.org/wiki/Key:leisure' target='_blank'>leisure</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:leisure%3Dsports_centre' target='_blank'>sports_centre</a>
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22leisure%22%3D%22sports_centre%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
Supported attributes
----------------------
Warning:
this quick overview is incomplete
attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/wheelchair#values) [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [designated](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated) [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno)
### images
This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata`
This tagrendering has no question and is thus read-only
### opening_hours
The question is What are the opening hours of {title()}?
This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours)
This is rendered with <h3>Opening hours</h3>{opening_hours_table(opening_hours)}
### phone
The question is What is the phone number of {title()}?
This rendering asks information about the property [phone](https://wiki.openstreetmap.org/wiki/Key:phone)
This is rendered with <a href='tel:{phone}'>{phone}</a>
- <a href='tel:{contact:phone}'>{contact:phone}</a> corresponds with `contact:phone~.+`
- This option cannot be chosen as answer
### website
The question is What is the website of {title()}?
This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website)
This is rendered with <a href='{website}' target='_blank'>{website}</a>
- <a href='{contact:website}' target='_blank'>{contact:website}</a> corresponds with `contact:website~.+`
- This option cannot be chosen as answer
### email
The question is What is the email address of {title()}?
This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email)
This is rendered with <a href='mailto:{email}' target='_blank'>{email}</a>
- <a href='mailto:{contact:email}' target='_blank'>{contact:email}</a> corresponds with `contact:email~.+`
- This option cannot be chosen as answer
### wheelchair-access
The question is Is this place accessible with a wheelchair?
- This place is specially adapted for wheelchair users corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:wheelchair' target='_blank'>wheelchair</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated' target='_blank'>designated</a>`
- This place is easily reachable with a wheelchair corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:wheelchair' target='_blank'>wheelchair</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes' target='_blank'>yes</a>`
- It is possible to reach this place in a wheelchair, but it is not easy corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:wheelchair' target='_blank'>wheelchair</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dlimited' target='_blank'>limited</a>`
- This place is not reachable with a wheelchair corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:wheelchair' target='_blank'>wheelchair</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno' target='_blank'>no</a>`
This document is autogenerated from [assets/layers/sports_centre/sports_centre.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/sports_centre/sports_centre.json)

124
Docs/Layers/stairs.md Normal file
View file

@ -0,0 +1,124 @@
stairs
========
Layer showing stairs and escalators
- This layer is shown at zoomlevel **17** and higher
- Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings`
#### Themes using this layer
- [blind_osm](https://mapcomplete.osm.be/blind_osm)
- [personal](https://mapcomplete.osm.be/personal)
Basic tags for this layer
---------------------------
Elements must have the all of following tags to be shown on this layer:
- <a href='https://wiki.openstreetmap.org/wiki/Key:highway' target='_blank'>highway</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:highway%3Dsteps' target='_blank'>steps</a>
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22highway%22%3D%22steps%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
Supported attributes
----------------------
Warning:
this quick overview is incomplete
attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/handrail#values) [handrail](https://wiki.openstreetmap.org/wiki/Key:handrail) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:handrail%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:handrail%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/conveying#values) [conveying](https://wiki.openstreetmap.org/wiki/Key:conveying) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:conveying%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:conveying%3Dno)
### handrail
The question is Does this stair have a handrail?
- These stairs have a handrail corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:handrail' target='_blank'>handrail</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:handrail%3Dyes' target='_blank'>yes</a>`
- These stairs do <b>not</b> have a handrail corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:handrail' target='_blank'>handrail</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:handrail%3Dno' target='_blank'>no</a>`
### ramp
The question is Is there a ramp at these stairs?
- There is a ramp for bicycles here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:ramp:bicycle' target='_blank'>ramp:bicycle</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:ramp:bicycle%3Dyes' target='_blank'>yes</a>`
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:ramp:bicycle' target='_blank'>ramp:bicycle</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:ramp:bicycle%3Dno' target='_blank'>no</a>
- There is a ramp for wheelchairs here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:ramp:wheelchair' target='_blank'>ramp:wheelchair</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:ramp:wheelchair%3Dyes' target='_blank'>yes</a>`
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:ramp:wheelchair' target='_blank'>ramp:wheelchair</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:ramp:wheelchair%3Dno' target='_blank'>no</a>
- There is ramp for wheelchairs here, but it is shown separately on the map corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:ramp' target='_blank'>ramp</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:ramp%3Dseparate' target='_blank'>separate</a>`
- This option cannot be chosen as answer
- There is a ramp for strollers here corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:ramp:stroller' target='_blank'>ramp:stroller</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:ramp:stroller%3Dyes' target='_blank'>yes</a>`
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:ramp:stroller' target='_blank'>ramp:stroller</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:ramp:stroller%3Dno' target='_blank'>no</a>
- There is no ramp at these stairs corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:ramp' target='_blank'>ramp</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:ramp%3Dno' target='_blank'>no</a>`
- Unselecting this answer will add
### conveying
This tagrendering has no question and is thus read-only
- This is an escalator corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:conveying' target='_blank'>conveying</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:conveying%3Dyes' target='_blank'>yes</a>`
- This is not an escalator corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:conveying' target='_blank'>conveying</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:conveying%3Dno' target='_blank'>no</a>`
This document is autogenerated from [assets/layers/stairs/stairs.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/stairs/stairs.json)

View file

@ -62,8 +62,6 @@ attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/amenity#values) [amenity](https://wiki.openstreetmap.org/wiki/Key:amenity) | Multiple choice | [college](https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dcollege) [university](https://wiki.openstreetmap.org/wiki/Tag:amenity%3Duniversity)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/isced:2011:level#values) [isced:2011:level](https://wiki.openstreetmap.org/wiki/Key:isced:2011:level) | Multiple choice | [bachelor](https://wiki.openstreetmap.org/wiki/Tag:isced:2011:level%3Dbachelor) [master](https://wiki.openstreetmap.org/wiki/Tag:isced:2011:level%3Dmaster) [doctorate](https://wiki.openstreetmap.org/wiki/Tag:isced:2011:level%3Ddoctorate)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/capacity#values) [capacity](https://wiki.openstreetmap.org/wiki/Key:capacity) | [pnat](../SpecialInputElements.md#pnat) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/school:gender#values) [school:gender](https://wiki.openstreetmap.org/wiki/Key:school:gender) | Multiple choice | [mixed](https://wiki.openstreetmap.org/wiki/Tag:school:gender%3Dmixed) [separated](https://wiki.openstreetmap.org/wiki/Tag:school:gender%3Dseparated) [male](https://wiki.openstreetmap.org/wiki/Tag:school:gender%3Dmale) [female](https://wiki.openstreetmap.org/wiki/Tag:school:gender%3Dfemale)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) |
@ -106,38 +104,6 @@ Only visible if `amenity=university` is shown
### capacity
The question is How much students can at most enroll in this school?
This rendering asks information about the property [capacity](https://wiki.openstreetmap.org/wiki/Key:capacity)
This is rendered with This school can enroll at most {capacity} students
### gender
The question is Which genders can enroll at this school?
- Both boys and girls can enroll here and have classes together corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:school:gender' target='_blank'>school:gender</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:gender%3Dmixed' target='_blank'>mixed</a>`
- Both boys and girls can enroll here but they are separated (e.g. they have lessons in different classrooms or at different times) corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:school:gender' target='_blank'>school:gender</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:gender%3Dseparated' target='_blank'>separated</a>`
- This is a boys only-school corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:school:gender' target='_blank'>school:gender</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:gender%3Dmale' target='_blank'>male</a>`
- This is a girls-only school corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:school:gender' target='_blank'>school:gender</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:gender%3Dfemale' target='_blank'>female</a>`
### website

View file

@ -5,7 +5,7 @@
<img src='https://mapcomplete.osm.be/./assets/themes/cyclestreets/F113.svg' height="100px">
This street will become a cyclestreet soon
@ -39,10 +39,10 @@ Elements must have the all of following tags to be shown on this layer:
- <a href='https://wiki.openstreetmap.org/wiki/Key:proposed:cyclestreet' target='_blank'>proposed:cyclestreet</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:proposed:cyclestreet%3Dyes' target='_blank'>yes</a>
- <a href='https://wiki.openstreetmap.org/wiki/Key:proposed:cyclestreet' target='_blank'>proposed:cyclestreet</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:proposed:cyclestreet%3Dyes' target='_blank'>yes</a>|<a href='https://wiki.openstreetmap.org/wiki/Key:proposed:bicycle_road' target='_blank'>proposed:bicycle_road</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:proposed:bicycle_road%3Dyes' target='_blank'>yes</a>
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22proposed%3Acyclestreet%22%3D%22yes%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22proposed%3Abicycle_road%22%3D%22yes%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22proposed%3Acyclestreet%22%3D%22yes%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
@ -59,7 +59,7 @@ this quick overview is incomplete
attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/cyclestreet#values) [cyclestreet](https://wiki.openstreetmap.org/wiki/Key:cyclestreet) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:cyclestreet%3Dyes) [yes](https://wiki.openstreetmap.org/wiki/Tag:cyclestreet%3Dyes) [](https://wiki.openstreetmap.org/wiki/Tag:cyclestreet%3D) [](https://wiki.openstreetmap.org/wiki/Tag:cyclestreet%3D)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/traffic_sign#values) [traffic_sign](https://wiki.openstreetmap.org/wiki/Key:traffic_sign) | Multiple choice | [DE:244.1,1020-30](https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1020-30) [DE:244.1,1022-12,1024-10](https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1022-12,1024-10) [DE:244.1,1022-12](https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1022-12) [DE:244.1,1024-10](https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1024-10) [DE:244.1](https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/cyclestreet:start_date#values) [cyclestreet:start_date](https://wiki.openstreetmap.org/wiki/Key:cyclestreet:start_date) | [date](../SpecialInputElements.md#date) |
@ -88,13 +88,38 @@ The question is Is the street <b>{name}</b> a cyclestreet?
- This street is a cyclestreet (and has a speed limit of 30 km/h) corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:cyclestreet' target='_blank'>cyclestreet</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:cyclestreet%3Dyes' target='_blank'>yes</a>&<a href='https://wiki.openstreetmap.org/wiki/Key:maxspeed' target='_blank'>maxspeed</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:maxspeed%3D30' target='_blank'>30</a>&<a href='https://wiki.openstreetmap.org/wiki/Key:overtaking:motor_vehicle' target='_blank'>overtaking:motor_vehicle</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:overtaking:motor_vehicle%3Dno' target='_blank'>no</a>`
- This street is a bicycle road corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:bicycle_road' target='_blank'>bicycle_road</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:bicycle_road%3Dyes' target='_blank'>yes</a>`
- This option cannot be chosen as answer
- This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later) corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:bicycle_road' target='_blank'>bicycle_road</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:bicycle_road%3Dyes' target='_blank'>yes</a>&<a href='https://wiki.openstreetmap.org/wiki/Key:maxspeed' target='_blank'>maxspeed</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:maxspeed%3D30' target='_blank'>30</a>&<a href='https://wiki.openstreetmap.org/wiki/Key:source:maxspeed' target='_blank'>source:maxspeed</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:source:maxspeed%3DDE:bicycle_road' target='_blank'>DE:bicycle_road</a>&<a href='https://wiki.openstreetmap.org/wiki/Key:vehicle' target='_blank'>vehicle</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:vehicle%3Dno' target='_blank'>no</a>&<a href='https://wiki.openstreetmap.org/wiki/Key:bicycle' target='_blank'>bicycle</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:bicycle%3Ddesignated' target='_blank'>designated</a>`
- This street is a cyclestreet corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:cyclestreet' target='_blank'>cyclestreet</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:cyclestreet%3Dyes' target='_blank'>yes</a>`
- This street will become a cyclestreet soon corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:proposed:cyclestreet' target='_blank'>proposed:cyclestreet</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:proposed:cyclestreet%3Dyes' target='_blank'>yes</a>`
- This street will become a bicycle road soon corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:proposed:bicycle_road' target='_blank'>proposed:bicycle_road</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:proposed:bicycle_road%3Dyes' target='_blank'>yes</a>`
- This street is not a cyclestreet corresponds with ``
### supplementary_sign
The question is What sign does this bicycle road have?
- Residents allowed corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_sign' target='_blank'>traffic_sign</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1020-30' target='_blank'>DE:244.1,1020-30</a>`
- Motor vehicles allowed corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_sign' target='_blank'>traffic_sign</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1022-12,1024-10' target='_blank'>DE:244.1,1022-12,1024-10</a>`
- Motorcycles allowed corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_sign' target='_blank'>traffic_sign</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1022-12' target='_blank'>DE:244.1,1022-12</a>`
- Cars allowed corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_sign' target='_blank'>traffic_sign</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1,1024-10' target='_blank'>DE:244.1,1024-10</a>`
- There are no supplementary signs at this bicycle road. corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:traffic_sign' target='_blank'>traffic_sign</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:traffic_sign%3DDE:244.1' target='_blank'>DE:244.1</a>`
Only visible if `bicycle_road=yes&_country=de` is shown
### future_cyclestreet

View file

@ -192,7 +192,7 @@ Only visible if `fee=yes` is shown
### Opening-hours
### opening_hours_24_7
@ -200,13 +200,13 @@ The question is When are these toilets opened?
This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours)
This is rendered with {opening_hours_table()}
This is rendered with <h3>Opening hours</h3>{opening_hours_table(opening_hours)}
- Opened 24/7 corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:opening_hours' target='_blank'>opening_hours</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:opening_hours%3D24/7' target='_blank'>24/7</a>`
- 24/7 opened (including holidays) corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:opening_hours' target='_blank'>opening_hours</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:opening_hours%3D24/7' target='_blank'>24/7</a>`
@ -240,6 +240,8 @@ This is rendered with The door to the wheelchair-accessible toilet is {canonica
Only visible if `wheelchair=yes|wheelchair=designated` is shown
### toilets-type

View file

@ -0,0 +1,277 @@
toilet_at_amenity
===================
<img src='https://mapcomplete.osm.be/./assets/layers/toilet/toilets.svg' height="100px">
A layer showing (public) toilets located at different places.
- This layer is shown at zoomlevel **12** and higher
#### Themes using this layer
- [personal](https://mapcomplete.osm.be/personal)
- [toilets](https://mapcomplete.osm.be/toilets)
Basic tags for this layer
---------------------------
Elements must have the all of following tags to be shown on this layer:
- <a href='https://wiki.openstreetmap.org/wiki/Key:toilets' target='_blank'>toilets</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets%3Dyes' target='_blank'>yes</a>
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22toilets%22%3D%22yes%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
Supported attributes
----------------------
Warning:
this quick overview is incomplete
attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/level#values) [level](https://wiki.openstreetmap.org/wiki/Key:level) | [float](../SpecialInputElements.md#float) | [0](https://wiki.openstreetmap.org/wiki/Tag:level%3D0) [1](https://wiki.openstreetmap.org/wiki/Tag:level%3D1) [-1](https://wiki.openstreetmap.org/wiki/Tag:level%3D-1)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/toilets:access#values) [toilets:access](https://wiki.openstreetmap.org/wiki/Key:toilets:access) | [string](../SpecialInputElements.md#string) | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:access%3Dyes) [customers](https://wiki.openstreetmap.org/wiki/Tag:toilets:access%3Dcustomers) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:access%3Dno) [key](https://wiki.openstreetmap.org/wiki/Tag:toilets:access%3Dkey)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/toilets:fee#values) [toilets:fee](https://wiki.openstreetmap.org/wiki/Key:toilets:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:fee%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/toilets:charge#values) [toilets:charge](https://wiki.openstreetmap.org/wiki/Key:toilets:charge) | [string](../SpecialInputElements.md#string) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/toilets:wheelchair#values) [toilets:wheelchair](https://wiki.openstreetmap.org/wiki/Key:toilets:wheelchair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Dno) [designated](https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Ddesignated)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/toilets:door:width#values) [toilets:door:width](https://wiki.openstreetmap.org/wiki/Key:toilets:door:width) | [pfloat](../SpecialInputElements.md#pfloat) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/toilets:description#values) [toilets:description](https://wiki.openstreetmap.org/wiki/Key:toilets:description) | [string](../SpecialInputElements.md#string) |
### images
This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata`
This tagrendering has no question and is thus read-only
### level
The question is On what level is this feature located?
This rendering asks information about the property [level](https://wiki.openstreetmap.org/wiki/Key:level)
This is rendered with Located on the {level}th floor
- Located underground corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:location' target='_blank'>location</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:location%3Dunderground' target='_blank'>underground</a>`
- This option cannot be chosen as answer
- Located on the ground floor corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:level' target='_blank'>level</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:level%3D0' target='_blank'>0</a>`
- Located on the ground floor corresponds with ``
- This option cannot be chosen as answer
- Located on the first floor corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:level' target='_blank'>level</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:level%3D1' target='_blank'>1</a>`
- Located on the first basement level corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:level' target='_blank'>level</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:level%3D-1' target='_blank'>-1</a>`
### toilet-access
The question is Are these toilets publicly accessible?
This rendering asks information about the property [toilets:access](https://wiki.openstreetmap.org/wiki/Key:toilets:access)
This is rendered with Access is {toilets:access}
- Public access corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:toilets:access' target='_blank'>toilets:access</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:access%3Dyes' target='_blank'>yes</a>`
- Only access to customers of the amenity corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:toilets:access' target='_blank'>toilets:access</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:access%3Dcustomers' target='_blank'>customers</a>`
- Not accessible, even for customers of the amenity corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:toilets:access' target='_blank'>toilets:access</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:access%3Dno' target='_blank'>no</a>`
- Accessible, but one has to ask a key to enter corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:toilets:access' target='_blank'>toilets:access</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:access%3Dkey' target='_blank'>key</a>`
- Public access corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:toilets:access' target='_blank'>toilets:access</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:access%3Dpublic' target='_blank'>public</a>`
- This option cannot be chosen as answer
### toilets-fee
The question is Are these toilets free to use?
- These are paid toilets corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:toilets:fee' target='_blank'>toilets:fee</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:fee%3Dyes' target='_blank'>yes</a>`
- Free to use corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:toilets:fee' target='_blank'>toilets:fee</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:fee%3Dno' target='_blank'>no</a>`
### toilet-charge
The question is How much does one have to pay for these toilets?
This rendering asks information about the property [toilets:charge](https://wiki.openstreetmap.org/wiki/Key:toilets:charge)
This is rendered with The fee is {toilets:charge}
Only visible if `toilets:fee=yes` is shown
### opening_hours
The question is When is the amenity where these toilets are located open?
This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours)
This is rendered with <h3>Opening hours</h3>{opening_hours_table(opening_hours)}
### toilets-wheelchair
The question is Is there a dedicated toilet for wheelchair users?
- There is a dedicated toilet for wheelchair users corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:toilets:wheelchair' target='_blank'>toilets:wheelchair</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Dyes' target='_blank'>yes</a>`
- No wheelchair access corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:toilets:wheelchair' target='_blank'>toilets:wheelchair</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Dno' target='_blank'>no</a>`
- There is only a dedicated toilet for wheelchair users corresponds with `<a href='https://wiki.openstreetmap.org/wiki/Key:toilets:wheelchair' target='_blank'>toilets:wheelchair</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:toilets:wheelchair%3Ddesignated' target='_blank'>designated</a>`
### wheelchair-door-width
The question is What is the width of the door to the wheelchair accessible toilet?
This rendering asks information about the property [toilets:door:width](https://wiki.openstreetmap.org/wiki/Key:toilets:door:width)
This is rendered with The door to the wheelchair-accessible toilet is {canonical(toilets:door:width)} wide
Only visible if `toilets:wheelchair=yes|toilets:wheelchair=designated` is shown
### toilettoiletstype
This tagrendering has no question and is thus read-only
### toilettoiletschangingtable
This tagrendering has no question and is thus read-only
### toilettoiletchangingtablelocation
This tagrendering has no question and is thus read-only
### toilettoilethandwashing
This tagrendering has no question and is thus read-only
### toilettoilethaspaper
This tagrendering has no question and is thus read-only
### description
The question is Is there still something relevant you couldn't give in the previous questions? Add it here.<br/><span style='font-size: small'>Don't repeat already stated facts</span>
This rendering asks information about the property [toilets:description](https://wiki.openstreetmap.org/wiki/Key:toilets:description)
This is rendered with {toilets:description}
This document is autogenerated from [assets/layers/toilet_at_amenity/toilet_at_amenity.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/toilet_at_amenity/toilet_at_amenity.json)

View file

@ -25,6 +25,7 @@ Layer showing different types of transit stops.
- [blind_osm](https://mapcomplete.osm.be/blind_osm)
- [personal](https://mapcomplete.osm.be/personal)
- [transit](https://mapcomplete.osm.be/transit)

File diff suppressed because it is too large Load diff

View file

@ -143,78 +143,10 @@
"key": "contact:email",
"description": "Layer 'Climbing gyms' shows contact:email~.+ with a fixed text, namely '<a href='mailto:{contact:email}' target='_blank'>{contact:email}</a>' (in the MapComplete.osm.be theme 'Open Climbing Map')"
},
{
"key": "charge",
"description": "Layer 'Climbing gyms' shows and asks freeform values for key 'charge' (in the MapComplete.osm.be theme 'Open Climbing Map')"
},
{
"key": "fee",
"description": "Layer 'Climbing gyms' shows fee=no with a fixed text, namely 'Climbing here is free of charge' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')",
"value": "no"
},
{
"key": "fee",
"description": "Layer 'Climbing gyms' shows fee=yes with a fixed text, namely 'Paying a fee is required to climb here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')",
"value": "yes"
},
{
"key": "charge",
"description": "Layer 'Climbing gyms' shows fee=yes with a fixed text, namely 'Paying a fee is required to climb here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map') Picking this answer will delete the key charge.",
"value": ""
},
{
"key": "opening_hours",
"description": "Layer 'Climbing gyms' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Open Climbing Map')"
},
{
"key": "climbing:length",
"description": "Layer 'Climbing gyms' shows and asks freeform values for key 'climbing:length' (in the MapComplete.osm.be theme 'Open Climbing Map')"
},
{
"key": "climbing:grade:french:min",
"description": "Layer 'Climbing gyms' shows and asks freeform values for key 'climbing:grade:french:min' (in the MapComplete.osm.be theme 'Open Climbing Map')"
},
{
"key": "climbing:grade:french:max",
"description": "Layer 'Climbing gyms' shows and asks freeform values for key 'climbing:grade:french:max' (in the MapComplete.osm.be theme 'Open Climbing Map')"
},
{
"key": "climbing:boulder",
"description": "Layer 'Climbing gyms' shows climbing:boulder=yes with a fixed text, namely 'Bouldering is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')",
"value": "yes"
},
{
"key": "climbing:boulder",
"description": "Layer 'Climbing gyms' shows climbing:boulder=no with a fixed text, namely 'Bouldering is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')",
"value": "no"
},
{
"key": "climbing:boulder",
"description": "Layer 'Climbing gyms' shows climbing:boulder=limited with a fixed text, namely 'Bouldering is possible, allthough there are only a few routes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')",
"value": "limited"
},
{
"key": "climbing:boulder",
"description": "Layer 'Climbing gyms' shows climbing:boulder~.+ with a fixed text, namely 'There are {climbing:boulder} boulder routes' (in the MapComplete.osm.be theme 'Open Climbing Map')"
},
{
"key": "climbing:sport",
"description": "Layer 'Climbing gyms' shows climbing:sport=yes with a fixed text, namely 'Sport climbing is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')",
"value": "yes"
},
{
"key": "climbing:sport",
"description": "Layer 'Climbing gyms' shows climbing:sport=no with a fixed text, namely 'Sport climbing is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')",
"value": "no"
},
{
"key": "climbing:sport",
"description": "Layer 'Climbing gyms' shows climbing:sport~.+ with a fixed text, namely 'There are {climbing:sport} sport climbing routes' (in the MapComplete.osm.be theme 'Open Climbing Map')"
},
{
"key": "climbing:bolts:max",
"description": "Layer 'Climbing gyms' shows and asks freeform values for key 'climbing:bolts:max' (in the MapComplete.osm.be theme 'Open Climbing Map')"
},
{
"key": "climbing:speed",
"description": "Layer 'Climbing gyms' shows climbing:speed=yes with a fixed text, namely 'There is a speed climbing wall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')",
@ -402,48 +334,6 @@
"description": "Layer 'Climbing opportunities' shows rock=limestone with a fixed text, namely 'Limestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')",
"value": "limestone"
},
{
"key": "url",
"description": "Layer 'Climbing opportunities' shows and asks freeform values for key 'url' (in the MapComplete.osm.be theme 'Open Climbing Map')"
},
{
"key": "charge",
"description": "Layer 'Climbing opportunities' shows and asks freeform values for key 'charge' (in the MapComplete.osm.be theme 'Open Climbing Map')"
},
{
"key": "fee",
"description": "Layer 'Climbing opportunities' shows fee=no with a fixed text, namely 'Climbing here is free of charge' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')",
"value": "no"
},
{
"key": "fee",
"description": "Layer 'Climbing opportunities' shows fee=yes with a fixed text, namely 'Paying a fee is required to climb here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')",
"value": "yes"
},
{
"key": "charge",
"description": "Layer 'Climbing opportunities' shows fee=yes with a fixed text, namely 'Paying a fee is required to climb here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map') Picking this answer will delete the key charge.",
"value": ""
},
{
"key": "climbing:boulder",
"description": "Layer 'Climbing opportunities' shows climbing:boulder=yes with a fixed text, namely 'Bouldering is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')",
"value": "yes"
},
{
"key": "climbing:boulder",
"description": "Layer 'Climbing opportunities' shows climbing:boulder=no with a fixed text, namely 'Bouldering is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')",
"value": "no"
},
{
"key": "climbing:boulder",
"description": "Layer 'Climbing opportunities' shows climbing:boulder=limited with a fixed text, namely 'Bouldering is possible, allthough there are only a few routes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')",
"value": "limited"
},
{
"key": "climbing:boulder",
"description": "Layer 'Climbing opportunities' shows climbing:boulder~.+ with a fixed text, namely 'There are {climbing:boulder} boulder routes' (in the MapComplete.osm.be theme 'Open Climbing Map')"
},
{
"key": "access",
"description": "Layer 'Climbing opportunities' shows access=yes with a fixed text, namely 'Publicly accessible to anyone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')",

View file

@ -680,6 +680,22 @@
"description": "The MapComplete theme Bicycle infrastructure has a layer Crossings showing features with this tag",
"value": "crossing"
},
{
"key": "image",
"description": "The layer 'Crossings 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 'Crossings 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 'Crossings 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 'Crossings 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": "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')",
@ -755,6 +771,56 @@
"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": "traffic_signals:sound",
"description": "Layer 'Crossings' shows traffic_signals:sound=yes with a fixed text, namely 'This traffic light has sound signals to help crossing, both for finding the crossing and for crossing.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
"value": "yes"
},
{
"key": "traffic_signals:sound",
"description": "Layer 'Crossings' shows traffic_signals:sound=no with a fixed text, namely 'This traffic light does not have sound signals to help crossing.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
"value": "no"
},
{
"key": "traffic_signals:sound",
"description": "Layer 'Crossings' shows traffic_signals:sound=locate with a fixed text, namely 'This traffic light has a sound signal to help locate the pole, but no signal to sign that it is safe to cross.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
"value": "locate"
},
{
"key": "traffic_signals:sound",
"description": "Layer 'Crossings' shows traffic_signals:sound=walk with a fixed text, namely 'This traffic light has a sound signal to sign that it is safe to cross, but no signal to help locate the pole.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
"value": "walk"
},
{
"key": "traffic_signals:vibration",
"description": "Layer 'Crossings' shows traffic_signals:vibration=yes with a fixed text, namely 'The button for this traffic light has a vibration signal to indicate that it is safe to cross.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
"value": "yes"
},
{
"key": "traffic_signals:vibration",
"description": "Layer 'Crossings' shows traffic_signals:vibration=no with a fixed text, namely 'The button for this traffic light does not have a vibration signal to indicate that it is safe to cross.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
"value": "no"
},
{
"key": "traffic_signals:arrow",
"description": "Layer 'Crossings' shows traffic_signals:arrow=yes with a fixed text, namely 'This traffic light has an arrow pointing in the direction of crossing.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
"value": "yes"
},
{
"key": "traffic_signals:arrow",
"description": "Layer 'Crossings' shows traffic_signals:arrow=no with a fixed text, namely 'This traffic light does <b>not</b> have an arrow pointing in the direction of crossing.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
"value": "no"
},
{
"key": "traffic_signals:minimap",
"description": "Layer 'Crossings' shows traffic_signals:minimap=yes with a fixed text, namely 'This traffic light has a tactile map showing the layout of the crossing.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
"value": "yes"
},
{
"key": "traffic_signals:minimap",
"description": "Layer 'Crossings' shows traffic_signals:minimap=no with a fixed text, namely 'This traffic light does <b>not</b> have a tactile map showing the layout of the crossing.' 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')",

View file

@ -15,6 +15,11 @@
"description": "The MapComplete theme Cyclestreets has a layer Cyclestreets showing features with this tag",
"value": "yes"
},
{
"key": "bicycle_road",
"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"
@ -51,6 +56,41 @@
"description": "Layer 'Cyclestreets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no 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": "bicycle_road",
"description": "Layer 'Cyclestreets' shows bicycle_road=yes with a fixed text, namely 'This street is a bicycle road' (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "bicycle_road",
"description": "Layer 'Cyclestreets' shows bicycle_road=yes&maxspeed=30&source:maxspeed=DE:bicycle_road&vehicle=no&bicycle=designated with a fixed text, namely 'This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "proposed:bicycle_road",
"description": "Layer 'Cyclestreets' shows bicycle_road=yes&maxspeed=30&source:maxspeed=DE:bicycle_road&vehicle=no&bicycle=designated with a fixed text, namely 'This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:bicycle_road.",
"value": ""
},
{
"key": "maxspeed",
"description": "Layer 'Cyclestreets' shows bicycle_road=yes&maxspeed=30&source:maxspeed=DE:bicycle_road&vehicle=no&bicycle=designated with a fixed text, namely 'This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "30"
},
{
"key": "source:maxspeed",
"description": "Layer 'Cyclestreets' shows bicycle_road=yes&maxspeed=30&source:maxspeed=DE:bicycle_road&vehicle=no&bicycle=designated with a fixed text, namely 'This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "DE:bicycle_road"
},
{
"key": "vehicle",
"description": "Layer 'Cyclestreets' shows bicycle_road=yes&maxspeed=30&source:maxspeed=DE:bicycle_road&vehicle=no&bicycle=designated with a fixed text, namely 'This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "no"
},
{
"key": "bicycle",
"description": "Layer 'Cyclestreets' shows bicycle_road=yes&maxspeed=30&source:maxspeed=DE:bicycle_road&vehicle=no&bicycle=designated with a fixed text, namely 'This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "designated"
},
{
"key": "cyclestreet",
"description": "Layer 'Cyclestreets' shows cyclestreet=yes with a fixed text, namely 'This street is a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
@ -71,6 +111,16 @@
"description": "Layer 'Cyclestreets' shows proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclestreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "bicycle_road",
"description": "Layer 'Cyclestreets' shows proposed:bicycle_road=yes with a fixed text, namely 'This street will become a bicycle road soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key bicycle_road.",
"value": ""
},
{
"key": "proposed:bicycle_road",
"description": "Layer 'Cyclestreets' shows proposed:bicycle_road=yes with a fixed text, namely 'This street will become a bicycle road 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 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.",
@ -81,11 +131,46 @@
"description": "Layer 'Cyclestreets' shows 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": "bicycle_road",
"description": "Layer 'Cyclestreets' shows 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 bicycle_road.",
"value": ""
},
{
"key": "proposed:bicycle_road",
"description": "Layer 'Cyclestreets' shows 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:bicycle_road.",
"value": ""
},
{
"key": "overtaking:motor_vehicle",
"description": "Layer 'Cyclestreets' shows 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": "traffic_sign",
"description": "Layer 'Cyclestreets' shows traffic_sign=DE:244.1,1020-30 with a fixed text, namely 'Residents allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "DE:244.1,1020-30"
},
{
"key": "traffic_sign",
"description": "Layer 'Cyclestreets' shows traffic_sign=DE:244.1,1022-12,1024-10 with a fixed text, namely 'Motor vehicles allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "DE:244.1,1022-12,1024-10"
},
{
"key": "traffic_sign",
"description": "Layer 'Cyclestreets' shows traffic_sign=DE:244.1,1022-12 with a fixed text, namely 'Motorcycles allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "DE:244.1,1022-12"
},
{
"key": "traffic_sign",
"description": "Layer 'Cyclestreets' shows traffic_sign=DE:244.1,1024-10 with a fixed text, namely 'Cars allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "DE:244.1,1024-10"
},
{
"key": "traffic_sign",
"description": "Layer 'Cyclestreets' shows traffic_sign=DE:244.1 with a fixed text, namely 'There are no supplementary signs at this bicycle road.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "DE:244.1"
},
{
"key": "cyclestreet:start_date",
"description": "Layer 'Cyclestreets' shows and asks freeform values for key 'cyclestreet:start_date' (in the MapComplete.osm.be theme 'Cyclestreets')"
@ -95,6 +180,11 @@
"description": "The MapComplete theme Cyclestreets has a layer Future cyclestreet showing features with this tag",
"value": "yes"
},
{
"key": "proposed:bicycle_road",
"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"
@ -131,6 +221,41 @@
"description": "Layer 'Future cyclestreet' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no 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": "bicycle_road",
"description": "Layer 'Future cyclestreet' shows bicycle_road=yes with a fixed text, namely 'This street is a bicycle road' (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "bicycle_road",
"description": "Layer 'Future cyclestreet' shows bicycle_road=yes&maxspeed=30&source:maxspeed=DE:bicycle_road&vehicle=no&bicycle=designated with a fixed text, namely 'This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "proposed:bicycle_road",
"description": "Layer 'Future cyclestreet' shows bicycle_road=yes&maxspeed=30&source:maxspeed=DE:bicycle_road&vehicle=no&bicycle=designated with a fixed text, namely 'This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:bicycle_road.",
"value": ""
},
{
"key": "maxspeed",
"description": "Layer 'Future cyclestreet' shows bicycle_road=yes&maxspeed=30&source:maxspeed=DE:bicycle_road&vehicle=no&bicycle=designated with a fixed text, namely 'This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "30"
},
{
"key": "source:maxspeed",
"description": "Layer 'Future cyclestreet' shows bicycle_road=yes&maxspeed=30&source:maxspeed=DE:bicycle_road&vehicle=no&bicycle=designated with a fixed text, namely 'This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "DE:bicycle_road"
},
{
"key": "vehicle",
"description": "Layer 'Future cyclestreet' shows bicycle_road=yes&maxspeed=30&source:maxspeed=DE:bicycle_road&vehicle=no&bicycle=designated with a fixed text, namely 'This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "no"
},
{
"key": "bicycle",
"description": "Layer 'Future cyclestreet' shows bicycle_road=yes&maxspeed=30&source:maxspeed=DE:bicycle_road&vehicle=no&bicycle=designated with a fixed text, namely 'This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "designated"
},
{
"key": "cyclestreet",
"description": "Layer 'Future cyclestreet' shows cyclestreet=yes with a fixed text, namely 'This street is a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
@ -151,6 +276,16 @@
"description": "Layer 'Future cyclestreet' shows proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclestreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "bicycle_road",
"description": "Layer 'Future cyclestreet' shows proposed:bicycle_road=yes with a fixed text, namely 'This street will become a bicycle road soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key bicycle_road.",
"value": ""
},
{
"key": "proposed:bicycle_road",
"description": "Layer 'Future cyclestreet' shows proposed:bicycle_road=yes with a fixed text, namely 'This street will become a bicycle road 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 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.",
@ -161,11 +296,46 @@
"description": "Layer 'Future cyclestreet' shows 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": "bicycle_road",
"description": "Layer 'Future cyclestreet' shows 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 bicycle_road.",
"value": ""
},
{
"key": "proposed:bicycle_road",
"description": "Layer 'Future cyclestreet' shows 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:bicycle_road.",
"value": ""
},
{
"key": "overtaking:motor_vehicle",
"description": "Layer 'Future cyclestreet' shows 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": "traffic_sign",
"description": "Layer 'Future cyclestreet' shows traffic_sign=DE:244.1,1020-30 with a fixed text, namely 'Residents allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "DE:244.1,1020-30"
},
{
"key": "traffic_sign",
"description": "Layer 'Future cyclestreet' shows traffic_sign=DE:244.1,1022-12,1024-10 with a fixed text, namely 'Motor vehicles allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "DE:244.1,1022-12,1024-10"
},
{
"key": "traffic_sign",
"description": "Layer 'Future cyclestreet' shows traffic_sign=DE:244.1,1022-12 with a fixed text, namely 'Motorcycles allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "DE:244.1,1022-12"
},
{
"key": "traffic_sign",
"description": "Layer 'Future cyclestreet' shows traffic_sign=DE:244.1,1024-10 with a fixed text, namely 'Cars allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "DE:244.1,1024-10"
},
{
"key": "traffic_sign",
"description": "Layer 'Future cyclestreet' shows traffic_sign=DE:244.1 with a fixed text, namely 'There are no supplementary signs at this bicycle road.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "DE:244.1"
},
{
"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')"
@ -221,6 +391,41 @@
"description": "Layer 'All streets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no 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": "bicycle_road",
"description": "Layer 'All streets' shows bicycle_road=yes with a fixed text, namely 'This street is a bicycle road' (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "bicycle_road",
"description": "Layer 'All streets' shows bicycle_road=yes&maxspeed=30&source:maxspeed=DE:bicycle_road&vehicle=no&bicycle=designated with a fixed text, namely 'This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "proposed:bicycle_road",
"description": "Layer 'All streets' shows bicycle_road=yes&maxspeed=30&source:maxspeed=DE:bicycle_road&vehicle=no&bicycle=designated with a fixed text, namely 'This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:bicycle_road.",
"value": ""
},
{
"key": "maxspeed",
"description": "Layer 'All streets' shows bicycle_road=yes&maxspeed=30&source:maxspeed=DE:bicycle_road&vehicle=no&bicycle=designated with a fixed text, namely 'This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "30"
},
{
"key": "source:maxspeed",
"description": "Layer 'All streets' shows bicycle_road=yes&maxspeed=30&source:maxspeed=DE:bicycle_road&vehicle=no&bicycle=designated with a fixed text, namely 'This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "DE:bicycle_road"
},
{
"key": "vehicle",
"description": "Layer 'All streets' shows bicycle_road=yes&maxspeed=30&source:maxspeed=DE:bicycle_road&vehicle=no&bicycle=designated with a fixed text, namely 'This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "no"
},
{
"key": "bicycle",
"description": "Layer 'All streets' shows bicycle_road=yes&maxspeed=30&source:maxspeed=DE:bicycle_road&vehicle=no&bicycle=designated with a fixed text, namely 'This street is a bicycle road (has a speed limit of 30 km/h and vehicles are not allowed) (sign will be asked later)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "designated"
},
{
"key": "cyclestreet",
"description": "Layer 'All streets' shows cyclestreet=yes with a fixed text, namely 'This street is a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
@ -241,6 +446,16 @@
"description": "Layer 'All streets' shows proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclestreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "bicycle_road",
"description": "Layer 'All streets' shows proposed:bicycle_road=yes with a fixed text, namely 'This street will become a bicycle road soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key bicycle_road.",
"value": ""
},
{
"key": "proposed:bicycle_road",
"description": "Layer 'All streets' shows proposed:bicycle_road=yes with a fixed text, namely 'This street will become a bicycle road 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 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.",
@ -251,11 +466,46 @@
"description": "Layer 'All streets' shows 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": "bicycle_road",
"description": "Layer 'All streets' shows 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 bicycle_road.",
"value": ""
},
{
"key": "proposed:bicycle_road",
"description": "Layer 'All streets' shows 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:bicycle_road.",
"value": ""
},
{
"key": "overtaking:motor_vehicle",
"description": "Layer 'All streets' shows 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": "traffic_sign",
"description": "Layer 'All streets' shows traffic_sign=DE:244.1,1020-30 with a fixed text, namely 'Residents allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "DE:244.1,1020-30"
},
{
"key": "traffic_sign",
"description": "Layer 'All streets' shows traffic_sign=DE:244.1,1022-12,1024-10 with a fixed text, namely 'Motor vehicles allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "DE:244.1,1022-12,1024-10"
},
{
"key": "traffic_sign",
"description": "Layer 'All streets' shows traffic_sign=DE:244.1,1022-12 with a fixed text, namely 'Motorcycles allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "DE:244.1,1022-12"
},
{
"key": "traffic_sign",
"description": "Layer 'All streets' shows traffic_sign=DE:244.1,1024-10 with a fixed text, namely 'Cars allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "DE:244.1,1024-10"
},
{
"key": "traffic_sign",
"description": "Layer 'All streets' shows traffic_sign=DE:244.1 with a fixed text, namely 'There are no supplementary signs at this bicycle road.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "DE:244.1"
},
{
"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')"

View file

@ -452,78 +452,6 @@
"description": "Layer 'Bike repair/shop' shows service:bicycle:rental=no with a fixed text, namely 'This shop doesn't rent out bikes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')",
"value": "no"
},
{
"key": "rental",
"description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'rental' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')"
},
{
"key": "rental",
"description": "Layer 'Bike repair/shop' shows rental=city_bike with a fixed text, namely 'Normal city bikes can be rented here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')",
"value": "city_bike"
},
{
"key": "rental",
"description": "Layer 'Bike repair/shop' shows rental=ebike with a fixed text, namely 'Electrical bikes can be rented here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')",
"value": "ebike"
},
{
"key": "rental",
"description": "Layer 'Bike repair/shop' shows rental=bmx with a fixed text, namely 'BMX bikes can be rented here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')",
"value": "bmx"
},
{
"key": "rental",
"description": "Layer 'Bike repair/shop' shows rental=mtb with a fixed text, namely 'Mountainbikes can be rented here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')",
"value": "mtb"
},
{
"key": "rental",
"description": "Layer 'Bike repair/shop' shows rental=kid_bike with a fixed text, namely 'Bikes for children can be rented here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')",
"value": "kid_bike"
},
{
"key": "rental",
"description": "Layer 'Bike repair/shop' shows rental=tandem with a fixed text, namely 'Tandem bicycles can be rented here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')",
"value": "tandem"
},
{
"key": "rental",
"description": "Layer 'Bike repair/shop' shows rental=racebike with a fixed text, namely 'Race bicycles can be rented here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')",
"value": "racebike"
},
{
"key": "rental",
"description": "Layer 'Bike repair/shop' shows rental=bike_helmet with a fixed text, namely 'Bike helmets can be rented here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')",
"value": "bike_helmet"
},
{
"key": "capacity:city_bike",
"description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:city_bike' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')"
},
{
"key": "capacity:ebike",
"description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:ebike' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')"
},
{
"key": "capacity:kid_bike",
"description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:kid_bike' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')"
},
{
"key": "capacity:bmx",
"description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:bmx' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')"
},
{
"key": "capacity:mtb",
"description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:mtb' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')"
},
{
"key": "capacity:bicycle_pannier",
"description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:bicycle_pannier' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')"
},
{
"key": "capacity:tandem_bicycle",
"description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:tandem_bicycle' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')"
},
{
"key": "service:bicycle:second_hand",
"description": "Layer 'Bike repair/shop' shows service:bicycle:second_hand=yes with a fixed text, namely 'This shop sells second-hand bikes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')",
@ -551,7 +479,7 @@
},
{
"key": "service:bicycle:pump",
"description": "Layer 'Bike repair/shop' shows service:bicycle:pump=separate with a fixed text, namely 'There is bicycle pump, it is shown as a separate point ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')",
"description": "Layer 'Bike repair/shop' shows service:bicycle:pump=separate with a fixed text, namely 'There is bicycle pump, it is shown as a separate point' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')",
"value": "separate"
},
{
@ -584,25 +512,6 @@
"description": "Layer 'Bike repair/shop' shows service:bicycle:cleaning=no with a fixed text, namely 'This shop doesn't offer bicycle cleaning' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')",
"value": "no"
},
{
"key": "service:bicycle:cleaning:charge",
"description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'service:bicycle:cleaning:charge' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')"
},
{
"key": "service:bicycle:cleaning:fee",
"description": "Layer 'Bike repair/shop' shows service:bicycle:cleaning:fee=no with a fixed text, namely 'The cleaning service is free to use' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')",
"value": "no"
},
{
"key": "service:bicycle:cleaning:fee",
"description": "Layer 'Bike repair/shop' shows service:bicycle:cleaning:fee=yes with a fixed text, namely 'Free to use' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')",
"value": "yes"
},
{
"key": "service:bicycle:cleaning:charge",
"description": "Layer 'Bike repair/shop' shows service:bicycle:cleaning:fee=yes with a fixed text, namely 'Free to use' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists') Picking this answer will delete the key service:bicycle:cleaning:charge.",
"value": ""
},
{
"key": "description",
"description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'description' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')"

File diff suppressed because it is too large Load diff

View file

@ -81,94 +81,94 @@
},
{
"key": "highway",
"description": "The MapComplete theme Indoors has a layer elevator showing features with this tag",
"description": "The MapComplete theme Indoors has a layer Elevator showing features with this tag",
"value": "elevator"
},
{
"key": "image",
"description": "The layer 'elevator 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"
"description": "The layer 'Elevator 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 'elevator 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"
"description": "The layer 'Elevator 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 'elevator 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"
"description": "The layer 'Elevator 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 'elevator 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"
"description": "The layer 'Elevator 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": "level",
"description": "Layer 'elevator' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'Indoors')"
"description": "Layer 'Elevator' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'Indoors')"
},
{
"key": "location",
"description": "Layer 'elevator' shows location=underground with a fixed text, namely 'Located underground' (in the MapComplete.osm.be theme 'Indoors')",
"description": "Layer 'Elevator' shows location=underground with a fixed text, namely 'Located underground' (in the MapComplete.osm.be theme 'Indoors')",
"value": "underground"
},
{
"key": "level",
"description": "Layer 'elevator' shows level=0 with a fixed text, namely 'Located on the ground floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Indoors')",
"description": "Layer 'Elevator' shows level=0 with a fixed text, namely 'Located on the ground floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Indoors')",
"value": "0"
},
{
"key": "level",
"description": "Layer 'elevator' shows with a fixed text, namely 'Located on the ground floor' (in the MapComplete.osm.be theme 'Indoors') Picking this answer will delete the key level.",
"description": "Layer 'Elevator' shows with a fixed text, namely 'Located on the ground floor' (in the MapComplete.osm.be theme 'Indoors') Picking this answer will delete the key level.",
"value": ""
},
{
"key": "level",
"description": "Layer 'elevator' shows level=1 with a fixed text, namely 'Located on the first floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Indoors')",
"description": "Layer 'Elevator' shows level=1 with a fixed text, namely 'Located on the first floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Indoors')",
"value": "1"
},
{
"key": "level",
"description": "Layer 'elevator' shows level=-1 with a fixed text, namely 'Located on the first basement level' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Indoors')",
"description": "Layer 'Elevator' shows level=-1 with a fixed text, namely 'Located on the first basement level' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Indoors')",
"value": "-1"
},
{
"key": "operational_status",
"description": "Layer 'elevator' shows operational_status=broken with a fixed text, namely 'This elevator is broken' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Indoors')",
"description": "Layer 'Elevator' shows operational_status=broken with a fixed text, namely 'This elevator is broken' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Indoors')",
"value": "broken"
},
{
"key": "operational_status",
"description": "Layer 'elevator' shows operational_status=closed with a fixed text, namely 'This elevator is closed <span class='subtle'>e.g. because renovation works are going on</span>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Indoors')",
"description": "Layer 'Elevator' shows operational_status=closed with a fixed text, namely 'This elevator is closed <span class='subtle'>e.g. because renovation works are going on</span>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Indoors')",
"value": "closed"
},
{
"key": "operational_status",
"description": "Layer 'elevator' shows operational_status=ok with a fixed text, namely 'This elevator works' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Indoors')",
"description": "Layer 'Elevator' shows operational_status=ok with a fixed text, namely 'This elevator works' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Indoors')",
"value": "ok"
},
{
"key": "operational_status",
"description": "Layer 'elevator' shows with a fixed text, namely 'This elevator works' (in the MapComplete.osm.be theme 'Indoors') Picking this answer will delete the key operational_status.",
"description": "Layer 'Elevator' shows with a fixed text, namely 'This elevator works' (in the MapComplete.osm.be theme 'Indoors') Picking this answer will delete the key operational_status.",
"value": ""
},
{
"key": "door:width",
"description": "Layer 'elevator' shows and asks freeform values for key 'door:width' (in the MapComplete.osm.be theme 'Indoors')"
"description": "Layer 'Elevator' shows and asks freeform values for key 'door:width' (in the MapComplete.osm.be theme 'Indoors')"
},
{
"key": "elevator:width",
"description": "Layer 'elevator' shows and asks freeform values for key 'elevator:width' (in the MapComplete.osm.be theme 'Indoors')"
"description": "Layer 'Elevator' shows and asks freeform values for key 'elevator:width' (in the MapComplete.osm.be theme 'Indoors')"
},
{
"key": "elevator:depth",
"description": "Layer 'elevator' shows and asks freeform values for key 'elevator:depth' (in the MapComplete.osm.be theme 'Indoors')"
"description": "Layer 'Elevator' shows and asks freeform values for key 'elevator:depth' (in the MapComplete.osm.be theme 'Indoors')"
},
{
"key": "hearing_loop",
"description": "Layer 'elevator' shows hearing_loop=yes with a fixed text, namely 'This place has an audio induction loop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Indoors')",
"description": "Layer 'Elevator' shows hearing_loop=yes with a fixed text, namely 'This place has an audio induction loop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Indoors')",
"value": "yes"
},
{
"key": "hearing_loop",
"description": "Layer 'elevator' shows hearing_loop=no with a fixed text, namely 'This place <b>does not</b> have an audio induction loop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Indoors')",
"description": "Layer 'Elevator' shows hearing_loop=no with a fixed text, namely 'This place <b>does not</b> have an audio induction loop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Indoors')",
"value": "no"
},
{

View file

@ -568,6 +568,22 @@
"description": "The MapComplete theme Kerbs and crossings has a layer Crossings showing features with this tag",
"value": "crossing"
},
{
"key": "image",
"description": "The layer 'Crossings 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 'Crossings 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 'Crossings 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 'Crossings 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": "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 'Kerbs and crossings')",
@ -643,6 +659,56 @@
"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 'Kerbs and crossings')",
"value": "no"
},
{
"key": "traffic_signals:sound",
"description": "Layer 'Crossings' shows traffic_signals:sound=yes with a fixed text, namely 'This traffic light has sound signals to help crossing, both for finding the crossing and for crossing.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')",
"value": "yes"
},
{
"key": "traffic_signals:sound",
"description": "Layer 'Crossings' shows traffic_signals:sound=no with a fixed text, namely 'This traffic light does not have sound signals to help crossing.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')",
"value": "no"
},
{
"key": "traffic_signals:sound",
"description": "Layer 'Crossings' shows traffic_signals:sound=locate with a fixed text, namely 'This traffic light has a sound signal to help locate the pole, but no signal to sign that it is safe to cross.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')",
"value": "locate"
},
{
"key": "traffic_signals:sound",
"description": "Layer 'Crossings' shows traffic_signals:sound=walk with a fixed text, namely 'This traffic light has a sound signal to sign that it is safe to cross, but no signal to help locate the pole.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')",
"value": "walk"
},
{
"key": "traffic_signals:vibration",
"description": "Layer 'Crossings' shows traffic_signals:vibration=yes with a fixed text, namely 'The button for this traffic light has a vibration signal to indicate that it is safe to cross.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')",
"value": "yes"
},
{
"key": "traffic_signals:vibration",
"description": "Layer 'Crossings' shows traffic_signals:vibration=no with a fixed text, namely 'The button for this traffic light does not have a vibration signal to indicate that it is safe to cross.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')",
"value": "no"
},
{
"key": "traffic_signals:arrow",
"description": "Layer 'Crossings' shows traffic_signals:arrow=yes with a fixed text, namely 'This traffic light has an arrow pointing in the direction of crossing.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')",
"value": "yes"
},
{
"key": "traffic_signals:arrow",
"description": "Layer 'Crossings' shows traffic_signals:arrow=no with a fixed text, namely 'This traffic light does <b>not</b> have an arrow pointing in the direction of crossing.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')",
"value": "no"
},
{
"key": "traffic_signals:minimap",
"description": "Layer 'Crossings' shows traffic_signals:minimap=yes with a fixed text, namely 'This traffic light has a tactile map showing the layout of the crossing.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')",
"value": "yes"
},
{
"key": "traffic_signals:minimap",
"description": "Layer 'Crossings' shows traffic_signals:minimap=no with a fixed text, namely 'This traffic light does <b>not</b> have a tactile map showing the layout of the crossing.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')",
"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 'Kerbs and crossings')",
@ -737,6 +803,11 @@
{
"key": "kerb:height",
"description": "Layer 'Kerbs' shows and asks freeform values for key 'kerb:height' (in the MapComplete.osm.be theme 'Kerbs and crossings')"
},
{
"key": "kerb:height",
"description": "Layer 'Kerbs' shows kerb:height=0 with a fixed text, namely 'This kerb is flush and is lower than 1cm.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Kerbs and crossings')",
"value": "0"
}
]
}

View file

@ -93,6 +93,28 @@
"key": "highway",
"description": "Layer 'Maxspeed' shows highway=living_street with a fixed text, namely 'This is a living street, which has a maxspeed of 20km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Maxspeed')",
"value": "living_street"
},
{
"key": "highway",
"description": "The MapComplete theme Maxspeed has a layer Speed Camera showing features with this tag",
"value": "speed_camera"
},
{
"key": "maxspeed",
"description": "Layer 'Speed Camera' shows and asks freeform values for key 'maxspeed' (in the MapComplete.osm.be theme 'Maxspeed')"
},
{
"key": "highway",
"description": "The MapComplete theme Maxspeed has a layer Speed Display showing features with this tag",
"value": "speed_display"
},
{
"key": "maxspeed",
"description": "Layer 'Speed Display' shows and asks freeform values for key 'maxspeed' (in the MapComplete.osm.be theme 'Maxspeed')"
},
{
"key": "inscription",
"description": "Layer 'Speed Display' shows and asks freeform values for key 'inscription' (in the MapComplete.osm.be theme 'Maxspeed')"
}
]
}

View file

@ -743,7 +743,7 @@
},
{
"key": "opening_hours",
"description": "Layer 'Toilets' shows opening_hours=24/7 with a fixed text, namely 'Opened 24/7' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')",
"description": "Layer 'Toilets' shows opening_hours=24/7 with a fixed text, namely '24/7 opened (including holidays)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')",
"value": "24/7"
},
{

View file

@ -1007,6 +1007,11 @@
"key": "kerb:height",
"description": "Layer 'Kerbs' shows and asks freeform values for key 'kerb:height' (in the MapComplete.osm.be theme 'OnWheels')"
},
{
"key": "kerb:height",
"description": "Layer 'Kerbs' shows kerb:height=0 with a fixed text, namely 'This kerb is flush and is lower than 1cm.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "0"
},
{
"key": "amenity",
"description": "The MapComplete theme OnWheels has a layer Parking showing features with this tag",
@ -1154,810 +1159,6 @@
"key": "name",
"description": "Layer 'Shop' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'OnWheels')"
},
{
"key": "shop",
"description": "Layer 'Shop' shows and asks freeform values for key 'shop' (in the MapComplete.osm.be theme 'OnWheels')"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=agrarian with a fixed text, namely 'Farm Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "agrarian"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=alcohol with a fixed text, namely 'Liquor Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "alcohol"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=anime with a fixed text, namely 'Anime / Manga Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "anime"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=antiques with a fixed text, namely 'Antiques Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "antiques"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=appliance with a fixed text, namely 'Appliance Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "appliance"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=art with a fixed text, namely 'Art Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "art"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=baby_goods with a fixed text, namely 'Baby Goods Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "baby_goods"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=bag with a fixed text, namely 'Bag/Luggage Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "bag"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=bakery with a fixed text, namely 'Bakery' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "bakery"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=bathroom_furnishing with a fixed text, namely 'Bathroom Furnishing Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "bathroom_furnishing"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=beauty with a fixed text, namely 'Beauty Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "beauty"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=bed with a fixed text, namely 'Bedding/Mattress Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "bed"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=beverages with a fixed text, namely 'Beverage Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "beverages"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=bicycle with a fixed text, namely 'Bicycle Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "bicycle"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=boat with a fixed text, namely 'Boat Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "boat"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=bookmaker with a fixed text, namely 'Bookmaker' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "bookmaker"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=books with a fixed text, namely 'Book Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "books"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=brewing_supplies with a fixed text, namely 'Brewing Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "brewing_supplies"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=butcher with a fixed text, namely 'Butcher' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "butcher"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=camera with a fixed text, namely 'Camera Equipment Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "camera"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=candles with a fixed text, namely 'Candle Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "candles"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=cannabis with a fixed text, namely 'Cannabis Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "cannabis"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=car with a fixed text, namely 'Car Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "car"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=car_parts with a fixed text, namely 'Car Parts Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "car_parts"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=car_repair with a fixed text, namely 'Car Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "car_repair"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=caravan with a fixed text, namely 'RV Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "caravan"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=carpet with a fixed text, namely 'Carpet Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "carpet"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=catalogue with a fixed text, namely 'Catalog Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "catalogue"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=charity with a fixed text, namely 'Charity Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "charity"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=cheese with a fixed text, namely 'Cheese Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "cheese"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=chemist with a fixed text, namely 'Drugstore' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "chemist"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=chocolate with a fixed text, namely 'Chocolate Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "chocolate"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=clothes with a fixed text, namely 'Clothing Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "clothes"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=coffee with a fixed text, namely 'Coffee Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "coffee"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=collector with a fixed text, namely 'Collectibles Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "collector"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=computer with a fixed text, namely 'Computer Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "computer"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=confectionery with a fixed text, namely 'Candy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "confectionery"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=convenience with a fixed text, namely 'Convenience Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "convenience"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=copyshop with a fixed text, namely 'Copy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "copyshop"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=cosmetics with a fixed text, namely 'Cosmetics Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "cosmetics"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=country_store with a fixed text, namely 'Country Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "country_store"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=craft with a fixed text, namely 'Arts & Crafts Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "craft"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=curtain with a fixed text, namely 'Curtain Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "curtain"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=dairy with a fixed text, namely 'Dairy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "dairy"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=deli with a fixed text, namely 'Deli' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "deli"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=department_store with a fixed text, namely 'Department Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "department_store"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=doityourself with a fixed text, namely 'DIY Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "doityourself"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=doors with a fixed text, namely 'Door Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "doors"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=dry_cleaning with a fixed text, namely 'Dry Cleaner' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "dry_cleaning"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=e-cigarette with a fixed text, namely 'E-Cigarette Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "e-cigarette"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=electrical with a fixed text, namely 'Electrical Equipment Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "electrical"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=electronics with a fixed text, namely 'Electronics Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "electronics"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=erotic with a fixed text, namely 'Erotic Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "erotic"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=fabric with a fixed text, namely 'Fabric Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "fabric"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=farm with a fixed text, namely 'Produce Stand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "farm"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=fashion_accessories with a fixed text, namely 'Fashion Accessories Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "fashion_accessories"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=fireplace with a fixed text, namely 'Fireplace Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "fireplace"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=fishing with a fixed text, namely 'Fishing Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "fishing"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=flooring with a fixed text, namely 'Flooring Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "flooring"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=florist with a fixed text, namely 'Florist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "florist"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=frame with a fixed text, namely 'Framing Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "frame"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=frozen_food with a fixed text, namely 'Frozen Food Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "frozen_food"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=fuel with a fixed text, namely 'Fuel Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "fuel"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=funeral_directors with a fixed text, namely 'Funeral Home' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "funeral_directors"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=furniture with a fixed text, namely 'Furniture Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "furniture"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=games with a fixed text, namely 'Tabletop Game Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "games"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=garden_centre with a fixed text, namely 'Garden Center' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "garden_centre"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=gas with a fixed text, namely 'Bottled Gas Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "gas"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=general with a fixed text, namely 'General Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "general"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=gift with a fixed text, namely 'Gift Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "gift"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=greengrocer with a fixed text, namely 'Greengrocer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "greengrocer"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=hairdresser with a fixed text, namely 'Hairdresser' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "hairdresser"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=hairdresser_supply with a fixed text, namely 'Hairdresser Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "hairdresser_supply"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=hardware with a fixed text, namely 'Hardware Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "hardware"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=health_food with a fixed text, namely 'Health Food Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "health_food"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=hearing_aids with a fixed text, namely 'Hearing Aids Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "hearing_aids"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=herbalist with a fixed text, namely 'Herbalist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "herbalist"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=hifi with a fixed text, namely 'Hifi Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "hifi"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=hobby with a fixed text, namely 'Hobby Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "hobby"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=household_linen with a fixed text, namely 'Household Linen Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "household_linen"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=houseware with a fixed text, namely 'Houseware Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "houseware"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=hunting with a fixed text, namely 'Hunting Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "hunting"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=interior_decoration with a fixed text, namely 'Interior Decoration Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "interior_decoration"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=jewelry with a fixed text, namely 'Jewelry Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "jewelry"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=kiosk with a fixed text, namely 'Kiosk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "kiosk"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=kitchen with a fixed text, namely 'Kitchen Design Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "kitchen"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=laundry with a fixed text, namely 'Laundry' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "laundry"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=leather with a fixed text, namely 'Leather Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "leather"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=lighting with a fixed text, namely 'Lighting Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "lighting"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=locksmith with a fixed text, namely 'Locksmith' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "locksmith"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=lottery with a fixed text, namely 'Lottery Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "lottery"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=mall with a fixed text, namely 'Mall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "mall"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=massage with a fixed text, namely 'Massage Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "massage"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=medical_supply with a fixed text, namely 'Medical Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "medical_supply"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=military_surplus with a fixed text, namely 'Military Surplus Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "military_surplus"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=mobile_phone with a fixed text, namely 'Mobile Phone Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "mobile_phone"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=model with a fixed text, namely 'Model Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "model"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=money_lender with a fixed text, namely 'Money Lender' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "money_lender"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=motorcycle with a fixed text, namely 'Motorcycle Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "motorcycle"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=motorcycle_repair with a fixed text, namely 'Motorcycle Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "motorcycle_repair"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=music with a fixed text, namely 'Music Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "music"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=musical_instrument with a fixed text, namely 'Musical Instrument Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "musical_instrument"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=newsagent with a fixed text, namely 'Newspaper/Magazine Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "newsagent"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=nutrition_supplements with a fixed text, namely 'Nutrition Supplements Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "nutrition_supplements"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=optician with a fixed text, namely 'Optician' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "optician"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=outdoor with a fixed text, namely 'Outdoors Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "outdoor"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=outpost with a fixed text, namely 'Online Retailer Outpost' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "outpost"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=paint with a fixed text, namely 'Paint Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "paint"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=party with a fixed text, namely 'Party Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "party"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=pastry with a fixed text, namely 'Pastry Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "pastry"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=pawnbroker with a fixed text, namely 'Pawn Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "pawnbroker"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=perfumery with a fixed text, namely 'Perfume Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "perfumery"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=pet with a fixed text, namely 'Pet Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "pet"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=pet_grooming with a fixed text, namely 'Pet Grooming Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "pet_grooming"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=photo with a fixed text, namely 'Photography Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "photo"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=pottery with a fixed text, namely 'Pottery Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "pottery"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=printer_ink with a fixed text, namely 'Printer Ink Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "printer_ink"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=psychic with a fixed text, namely 'Psychic' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "psychic"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=pyrotechnics with a fixed text, namely 'Fireworks Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "pyrotechnics"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=radiotechnics with a fixed text, namely 'Radio/Electronic Component Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "radiotechnics"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=religion with a fixed text, namely 'Religious Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "religion"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=rental with a fixed text, namely 'Rental Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "rental"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=repair with a fixed text, namely 'Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "repair"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=scuba_diving with a fixed text, namely 'Scuba Diving Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "scuba_diving"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=seafood with a fixed text, namely 'Seafood Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "seafood"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=second_hand with a fixed text, namely 'Consignment/Thrift Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "second_hand"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=sewing with a fixed text, namely 'Sewing Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "sewing"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=shoe_repair with a fixed text, namely 'Shoe Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "shoe_repair"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=shoes with a fixed text, namely 'Shoe Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "shoes"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=spices with a fixed text, namely 'Spice Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "spices"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=sports with a fixed text, namely 'Sporting Goods Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "sports"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=stationery with a fixed text, namely 'Stationery Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "stationery"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=storage_rental with a fixed text, namely 'Storage Rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "storage_rental"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=supermarket with a fixed text, namely 'Supermarket' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "supermarket"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=swimming_pool with a fixed text, namely 'Pool Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "swimming_pool"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=tailor with a fixed text, namely 'Tailor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "tailor"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=tattoo with a fixed text, namely 'Tattoo Parlor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "tattoo"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=tea with a fixed text, namely 'Tea Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "tea"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=telecommunication with a fixed text, namely 'Telecom Retail Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "telecommunication"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=ticket with a fixed text, namely 'Ticket Seller' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "ticket"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=tiles with a fixed text, namely 'Tile Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "tiles"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=tobacco with a fixed text, namely 'Tobacco Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "tobacco"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=tool_hire with a fixed text, namely 'Tool Rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "tool_hire"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=toys with a fixed text, namely 'Toy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "toys"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=trade with a fixed text, namely 'Trade Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "trade"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=travel_agency with a fixed text, namely 'Travel Agency' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "travel_agency"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=trophy with a fixed text, namely 'Trophy Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "trophy"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=tyres with a fixed text, namely 'Tire Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "tyres"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=vacuum_cleaner with a fixed text, namely 'Vacuum Cleaner Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "vacuum_cleaner"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=variety_store with a fixed text, namely 'Variety Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "variety_store"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=video with a fixed text, namely 'Video Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "video"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=video_games with a fixed text, namely 'Video Game Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "video_games"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=watches with a fixed text, namely 'Watches Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "watches"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=water with a fixed text, namely 'Drinking Water Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "water"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=water_sports with a fixed text, namely 'Watersport/Swim Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "water_sports"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=weapons with a fixed text, namely 'Weapon Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "weapons"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=wholesale with a fixed text, namely 'Wholesale Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "wholesale"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=wigs with a fixed text, namely 'Wig Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "wigs"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=window_blind with a fixed text, namely 'Window Blind Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "window_blind"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=wine with a fixed text, namely 'Wine Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "wine"
},
{
"key": "opening_hours",
"description": "Layer 'Shop' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'OnWheels')"
@ -2208,7 +1409,7 @@
},
{
"key": "opening_hours",
"description": "Layer 'Toilets' shows opening_hours=24/7 with a fixed text, namely 'Opened 24/7' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"description": "Layer 'Toilets' shows opening_hours=24/7 with a fixed text, namely '24/7 opened (including holidays)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "24/7"
},
{
@ -2562,94 +1763,94 @@
},
{
"key": "highway",
"description": "The MapComplete theme OnWheels has a layer elevator showing features with this tag",
"description": "The MapComplete theme OnWheels has a layer Elevator showing features with this tag",
"value": "elevator"
},
{
"key": "image",
"description": "The layer 'elevator 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"
"description": "The layer 'Elevator 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 'elevator 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"
"description": "The layer 'Elevator 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 'elevator 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"
"description": "The layer 'Elevator 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 'elevator 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"
"description": "The layer 'Elevator 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": "level",
"description": "Layer 'elevator' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'OnWheels')"
"description": "Layer 'Elevator' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'OnWheels')"
},
{
"key": "location",
"description": "Layer 'elevator' shows location=underground with a fixed text, namely 'Located underground' (in the MapComplete.osm.be theme 'OnWheels')",
"description": "Layer 'Elevator' shows location=underground with a fixed text, namely 'Located underground' (in the MapComplete.osm.be theme 'OnWheels')",
"value": "underground"
},
{
"key": "level",
"description": "Layer 'elevator' shows level=0 with a fixed text, namely 'Located on the ground floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"description": "Layer 'Elevator' shows level=0 with a fixed text, namely 'Located on the ground floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "0"
},
{
"key": "level",
"description": "Layer 'elevator' shows with a fixed text, namely 'Located on the ground floor' (in the MapComplete.osm.be theme 'OnWheels') Picking this answer will delete the key level.",
"description": "Layer 'Elevator' shows with a fixed text, namely 'Located on the ground floor' (in the MapComplete.osm.be theme 'OnWheels') Picking this answer will delete the key level.",
"value": ""
},
{
"key": "level",
"description": "Layer 'elevator' shows level=1 with a fixed text, namely 'Located on the first floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"description": "Layer 'Elevator' shows level=1 with a fixed text, namely 'Located on the first floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "1"
},
{
"key": "level",
"description": "Layer 'elevator' shows level=-1 with a fixed text, namely 'Located on the first basement level' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"description": "Layer 'Elevator' shows level=-1 with a fixed text, namely 'Located on the first basement level' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "-1"
},
{
"key": "operational_status",
"description": "Layer 'elevator' shows operational_status=broken with a fixed text, namely 'This elevator is broken' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"description": "Layer 'Elevator' shows operational_status=broken with a fixed text, namely 'This elevator is broken' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "broken"
},
{
"key": "operational_status",
"description": "Layer 'elevator' shows operational_status=closed with a fixed text, namely 'This elevator is closed <span class='subtle'>e.g. because renovation works are going on</span>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"description": "Layer 'Elevator' shows operational_status=closed with a fixed text, namely 'This elevator is closed <span class='subtle'>e.g. because renovation works are going on</span>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "closed"
},
{
"key": "operational_status",
"description": "Layer 'elevator' shows operational_status=ok with a fixed text, namely 'This elevator works' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"description": "Layer 'Elevator' shows operational_status=ok with a fixed text, namely 'This elevator works' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "ok"
},
{
"key": "operational_status",
"description": "Layer 'elevator' shows with a fixed text, namely 'This elevator works' (in the MapComplete.osm.be theme 'OnWheels') Picking this answer will delete the key operational_status.",
"description": "Layer 'Elevator' shows with a fixed text, namely 'This elevator works' (in the MapComplete.osm.be theme 'OnWheels') Picking this answer will delete the key operational_status.",
"value": ""
},
{
"key": "door:width",
"description": "Layer 'elevator' shows and asks freeform values for key 'door:width' (in the MapComplete.osm.be theme 'OnWheels')"
"description": "Layer 'Elevator' shows and asks freeform values for key 'door:width' (in the MapComplete.osm.be theme 'OnWheels')"
},
{
"key": "elevator:width",
"description": "Layer 'elevator' shows and asks freeform values for key 'elevator:width' (in the MapComplete.osm.be theme 'OnWheels')"
"description": "Layer 'Elevator' shows and asks freeform values for key 'elevator:width' (in the MapComplete.osm.be theme 'OnWheels')"
},
{
"key": "elevator:depth",
"description": "Layer 'elevator' shows and asks freeform values for key 'elevator:depth' (in the MapComplete.osm.be theme 'OnWheels')"
"description": "Layer 'Elevator' shows and asks freeform values for key 'elevator:depth' (in the MapComplete.osm.be theme 'OnWheels')"
},
{
"key": "hearing_loop",
"description": "Layer 'elevator' shows hearing_loop=yes with a fixed text, namely 'This place has an audio induction loop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"description": "Layer 'Elevator' shows hearing_loop=yes with a fixed text, namely 'This place has an audio induction loop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "yes"
},
{
"key": "hearing_loop",
"description": "Layer 'elevator' shows hearing_loop=no with a fixed text, namely 'This place <b>does not</b> have an audio induction loop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"description": "Layer 'Elevator' shows hearing_loop=no with a fixed text, namely 'This place <b>does not</b> have an audio induction loop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'OnWheels')",
"value": "no"
},
{

View file

@ -140,7 +140,7 @@
},
{
"key": "parking_space",
"description": "Layer 'Parking Spaces' shows with a fixed text, namely 'This is a normal parking space' (in the MapComplete.osm.be theme 'Parking') Picking this answer will delete the key parking_space.",
"description": "Layer 'Parking Spaces' shows with a fixed text, namely 'This is a normal parking space.' (in the MapComplete.osm.be theme 'Parking') Picking this answer will delete the key parking_space.",
"value": ""
},
{

File diff suppressed because it is too large Load diff

View file

@ -554,810 +554,6 @@
"key": "name",
"description": "Layer 'Dog-friendly shops' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows and asks freeform values for key 'shop' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=agrarian with a fixed text, namely 'Farm Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "agrarian"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=alcohol with a fixed text, namely 'Liquor Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "alcohol"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=anime with a fixed text, namely 'Anime / Manga Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "anime"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=antiques with a fixed text, namely 'Antiques Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "antiques"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=appliance with a fixed text, namely 'Appliance Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "appliance"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=art with a fixed text, namely 'Art Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "art"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=baby_goods with a fixed text, namely 'Baby Goods Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "baby_goods"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=bag with a fixed text, namely 'Bag/Luggage Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "bag"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=bakery with a fixed text, namely 'Bakery' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "bakery"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=bathroom_furnishing with a fixed text, namely 'Bathroom Furnishing Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "bathroom_furnishing"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=beauty with a fixed text, namely 'Beauty Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "beauty"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=bed with a fixed text, namely 'Bedding/Mattress Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "bed"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=beverages with a fixed text, namely 'Beverage Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "beverages"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=bicycle with a fixed text, namely 'Bicycle Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "bicycle"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=boat with a fixed text, namely 'Boat Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "boat"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=bookmaker with a fixed text, namely 'Bookmaker' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "bookmaker"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=books with a fixed text, namely 'Book Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "books"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=brewing_supplies with a fixed text, namely 'Brewing Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "brewing_supplies"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=butcher with a fixed text, namely 'Butcher' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "butcher"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=camera with a fixed text, namely 'Camera Equipment Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "camera"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=candles with a fixed text, namely 'Candle Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "candles"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=cannabis with a fixed text, namely 'Cannabis Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "cannabis"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=car with a fixed text, namely 'Car Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "car"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=car_parts with a fixed text, namely 'Car Parts Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "car_parts"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=car_repair with a fixed text, namely 'Car Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "car_repair"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=caravan with a fixed text, namely 'RV Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "caravan"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=carpet with a fixed text, namely 'Carpet Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "carpet"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=catalogue with a fixed text, namely 'Catalog Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "catalogue"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=charity with a fixed text, namely 'Charity Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "charity"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=cheese with a fixed text, namely 'Cheese Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "cheese"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=chemist with a fixed text, namely 'Drugstore' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "chemist"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=chocolate with a fixed text, namely 'Chocolate Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "chocolate"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=clothes with a fixed text, namely 'Clothing Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "clothes"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=coffee with a fixed text, namely 'Coffee Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "coffee"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=collector with a fixed text, namely 'Collectibles Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "collector"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=computer with a fixed text, namely 'Computer Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "computer"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=confectionery with a fixed text, namely 'Candy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "confectionery"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=convenience with a fixed text, namely 'Convenience Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "convenience"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=copyshop with a fixed text, namely 'Copy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "copyshop"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=cosmetics with a fixed text, namely 'Cosmetics Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "cosmetics"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=country_store with a fixed text, namely 'Country Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "country_store"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=craft with a fixed text, namely 'Arts & Crafts Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "craft"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=curtain with a fixed text, namely 'Curtain Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "curtain"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=dairy with a fixed text, namely 'Dairy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "dairy"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=deli with a fixed text, namely 'Deli' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "deli"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=department_store with a fixed text, namely 'Department Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "department_store"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=doityourself with a fixed text, namely 'DIY Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "doityourself"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=doors with a fixed text, namely 'Door Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "doors"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=dry_cleaning with a fixed text, namely 'Dry Cleaner' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "dry_cleaning"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=e-cigarette with a fixed text, namely 'E-Cigarette Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "e-cigarette"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=electrical with a fixed text, namely 'Electrical Equipment Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "electrical"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=electronics with a fixed text, namely 'Electronics Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "electronics"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=erotic with a fixed text, namely 'Erotic Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "erotic"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=fabric with a fixed text, namely 'Fabric Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "fabric"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=farm with a fixed text, namely 'Produce Stand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "farm"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=fashion_accessories with a fixed text, namely 'Fashion Accessories Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "fashion_accessories"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=fireplace with a fixed text, namely 'Fireplace Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "fireplace"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=fishing with a fixed text, namely 'Fishing Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "fishing"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=flooring with a fixed text, namely 'Flooring Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "flooring"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=florist with a fixed text, namely 'Florist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "florist"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=frame with a fixed text, namely 'Framing Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "frame"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=frozen_food with a fixed text, namely 'Frozen Food Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "frozen_food"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=fuel with a fixed text, namely 'Fuel Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "fuel"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=funeral_directors with a fixed text, namely 'Funeral Home' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "funeral_directors"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=furniture with a fixed text, namely 'Furniture Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "furniture"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=games with a fixed text, namely 'Tabletop Game Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "games"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=garden_centre with a fixed text, namely 'Garden Center' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "garden_centre"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=gas with a fixed text, namely 'Bottled Gas Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "gas"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=general with a fixed text, namely 'General Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "general"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=gift with a fixed text, namely 'Gift Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "gift"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=greengrocer with a fixed text, namely 'Greengrocer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "greengrocer"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=hairdresser with a fixed text, namely 'Hairdresser' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "hairdresser"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=hairdresser_supply with a fixed text, namely 'Hairdresser Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "hairdresser_supply"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=hardware with a fixed text, namely 'Hardware Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "hardware"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=health_food with a fixed text, namely 'Health Food Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "health_food"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=hearing_aids with a fixed text, namely 'Hearing Aids Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "hearing_aids"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=herbalist with a fixed text, namely 'Herbalist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "herbalist"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=hifi with a fixed text, namely 'Hifi Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "hifi"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=hobby with a fixed text, namely 'Hobby Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "hobby"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=household_linen with a fixed text, namely 'Household Linen Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "household_linen"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=houseware with a fixed text, namely 'Houseware Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "houseware"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=hunting with a fixed text, namely 'Hunting Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "hunting"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=interior_decoration with a fixed text, namely 'Interior Decoration Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "interior_decoration"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=jewelry with a fixed text, namely 'Jewelry Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "jewelry"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=kiosk with a fixed text, namely 'Kiosk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "kiosk"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=kitchen with a fixed text, namely 'Kitchen Design Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "kitchen"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=laundry with a fixed text, namely 'Laundry' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "laundry"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=leather with a fixed text, namely 'Leather Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "leather"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=lighting with a fixed text, namely 'Lighting Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "lighting"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=locksmith with a fixed text, namely 'Locksmith' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "locksmith"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=lottery with a fixed text, namely 'Lottery Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "lottery"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=mall with a fixed text, namely 'Mall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "mall"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=massage with a fixed text, namely 'Massage Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "massage"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=medical_supply with a fixed text, namely 'Medical Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "medical_supply"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=military_surplus with a fixed text, namely 'Military Surplus Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "military_surplus"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=mobile_phone with a fixed text, namely 'Mobile Phone Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "mobile_phone"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=model with a fixed text, namely 'Model Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "model"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=money_lender with a fixed text, namely 'Money Lender' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "money_lender"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=motorcycle with a fixed text, namely 'Motorcycle Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "motorcycle"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=motorcycle_repair with a fixed text, namely 'Motorcycle Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "motorcycle_repair"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=music with a fixed text, namely 'Music Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "music"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=musical_instrument with a fixed text, namely 'Musical Instrument Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "musical_instrument"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=newsagent with a fixed text, namely 'Newspaper/Magazine Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "newsagent"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=nutrition_supplements with a fixed text, namely 'Nutrition Supplements Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "nutrition_supplements"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=optician with a fixed text, namely 'Optician' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "optician"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=outdoor with a fixed text, namely 'Outdoors Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "outdoor"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=outpost with a fixed text, namely 'Online Retailer Outpost' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "outpost"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=paint with a fixed text, namely 'Paint Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "paint"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=party with a fixed text, namely 'Party Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "party"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=pastry with a fixed text, namely 'Pastry Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "pastry"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=pawnbroker with a fixed text, namely 'Pawn Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "pawnbroker"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=perfumery with a fixed text, namely 'Perfume Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "perfumery"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=pet with a fixed text, namely 'Pet Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "pet"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=pet_grooming with a fixed text, namely 'Pet Grooming Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "pet_grooming"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=photo with a fixed text, namely 'Photography Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "photo"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=pottery with a fixed text, namely 'Pottery Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "pottery"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=printer_ink with a fixed text, namely 'Printer Ink Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "printer_ink"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=psychic with a fixed text, namely 'Psychic' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "psychic"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=pyrotechnics with a fixed text, namely 'Fireworks Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "pyrotechnics"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=radiotechnics with a fixed text, namely 'Radio/Electronic Component Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "radiotechnics"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=religion with a fixed text, namely 'Religious Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "religion"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=rental with a fixed text, namely 'Rental Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "rental"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=repair with a fixed text, namely 'Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "repair"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=scuba_diving with a fixed text, namely 'Scuba Diving Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "scuba_diving"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=seafood with a fixed text, namely 'Seafood Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "seafood"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=second_hand with a fixed text, namely 'Consignment/Thrift Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "second_hand"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=sewing with a fixed text, namely 'Sewing Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "sewing"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=shoe_repair with a fixed text, namely 'Shoe Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "shoe_repair"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=shoes with a fixed text, namely 'Shoe Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "shoes"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=spices with a fixed text, namely 'Spice Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "spices"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=sports with a fixed text, namely 'Sporting Goods Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "sports"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=stationery with a fixed text, namely 'Stationery Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "stationery"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=storage_rental with a fixed text, namely 'Storage Rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "storage_rental"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=supermarket with a fixed text, namely 'Supermarket' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "supermarket"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=swimming_pool with a fixed text, namely 'Pool Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "swimming_pool"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=tailor with a fixed text, namely 'Tailor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "tailor"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=tattoo with a fixed text, namely 'Tattoo Parlor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "tattoo"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=tea with a fixed text, namely 'Tea Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "tea"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=telecommunication with a fixed text, namely 'Telecom Retail Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "telecommunication"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=ticket with a fixed text, namely 'Ticket Seller' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "ticket"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=tiles with a fixed text, namely 'Tile Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "tiles"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=tobacco with a fixed text, namely 'Tobacco Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "tobacco"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=tool_hire with a fixed text, namely 'Tool Rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "tool_hire"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=toys with a fixed text, namely 'Toy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "toys"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=trade with a fixed text, namely 'Trade Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "trade"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=travel_agency with a fixed text, namely 'Travel Agency' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "travel_agency"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=trophy with a fixed text, namely 'Trophy Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "trophy"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=tyres with a fixed text, namely 'Tire Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "tyres"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=vacuum_cleaner with a fixed text, namely 'Vacuum Cleaner Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "vacuum_cleaner"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=variety_store with a fixed text, namely 'Variety Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "variety_store"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=video with a fixed text, namely 'Video Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "video"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=video_games with a fixed text, namely 'Video Game Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "video_games"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=watches with a fixed text, namely 'Watches Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "watches"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=water with a fixed text, namely 'Drinking Water Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "water"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=water_sports with a fixed text, namely 'Watersport/Swim Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "water_sports"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=weapons with a fixed text, namely 'Weapon Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "weapons"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=wholesale with a fixed text, namely 'Wholesale Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "wholesale"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=wigs with a fixed text, namely 'Wig Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "wigs"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=window_blind with a fixed text, namely 'Window Blind Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "window_blind"
},
{
"key": "shop",
"description": "Layer 'Dog-friendly shops' shows shop=wine with a fixed text, namely 'Wine Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')",
"value": "wine"
},
{
"key": "opening_hours",
"description": "Layer 'Dog-friendly shops' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Veterinarians, dog parks and other pet-amenities')"

View file

@ -62,9 +62,128 @@
"description": "Layer 'Post offices' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Postbox and Post Office Map')"
},
{
"key": "opening_hours",
"description": "Layer 'Post offices' shows opening_hours=24/7 with a fixed text, namely '24/7 opened (including holidays)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map')",
"value": "24/7"
"key": "post_office",
"description": "Layer 'Post offices' shows post_office=post_partner with a fixed text, namely 'This shop is a post partner' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map')",
"value": "post_partner"
},
{
"key": "post_office",
"description": "Layer 'Post offices' shows with a fixed text, namely 'This shop is not a post partner' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map') Picking this answer will delete the key post_office.",
"value": ""
},
{
"key": "post_office:brand",
"description": "Layer 'Post offices' shows and asks freeform values for key 'post_office:brand' (in the MapComplete.osm.be theme 'Postbox and Post Office Map')"
},
{
"key": "post_office:brand",
"description": "Layer 'Post offices' shows post_office:brand=DHL with a fixed text, namely 'This location offers services for DHL' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map')",
"value": "DHL"
},
{
"key": "post_office:brand",
"description": "Layer 'Post offices' shows post_office:brand=DPD with a fixed text, namely 'This location offers services for DPD' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map')",
"value": "DPD"
},
{
"key": "post_office:brand",
"description": "Layer 'Post offices' shows post_office:brand=GLS with a fixed text, namely 'This location offers services for GLS' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map')",
"value": "GLS"
},
{
"key": "post_office:brand",
"description": "Layer 'Post offices' shows post_office:brand=UPS with a fixed text, namely 'This location offers services for UPS' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map')",
"value": "UPS"
},
{
"key": "post_office:brand",
"description": "Layer 'Post offices' shows post_office:brand=DHL Paketshop with a fixed text, namely 'This location is a DHL Paketshop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map')",
"value": "DHL Paketshop"
},
{
"key": "post_office:brand",
"description": "Layer 'Post offices' shows post_office:brand=Hermes PaketShop with a fixed text, namely 'This location is a Hermes PaketShop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map')",
"value": "Hermes PaketShop"
},
{
"key": "post_office:brand",
"description": "Layer 'Post offices' shows post_office:brand=PostNL with a fixed text, namely 'This location is a PostNL-point' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map')",
"value": "PostNL"
},
{
"key": "post_office:brand",
"description": "Layer 'Post offices' shows post_office:brand=bpost with a fixed text, namely 'This location offers services for bpost' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map')",
"value": "bpost"
},
{
"key": "post_office:letter_from",
"description": "Layer 'Post offices' shows and asks freeform values for key 'post_office:letter_from' (in the MapComplete.osm.be theme 'Postbox and Post Office Map')"
},
{
"key": "post_office:letter_from",
"description": "Layer 'Post offices' shows post_office:letter_from=yes with a fixed text, namely 'You can post letters here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map')",
"value": "yes"
},
{
"key": "post_office:letter_from",
"description": "Layer 'Post offices' shows post_office:letter_from=no with a fixed text, namely 'You can't post letters here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map')",
"value": "no"
},
{
"key": "post_office:parcel_from",
"description": "Layer 'Post offices' shows and asks freeform values for key 'post_office:parcel_from' (in the MapComplete.osm.be theme 'Postbox and Post Office Map')"
},
{
"key": "post_office:parcel_from",
"description": "Layer 'Post offices' shows post_office:parcel_from=yes with a fixed text, namely 'You can send parcels here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map')",
"value": "yes"
},
{
"key": "post_office:parcel_from",
"description": "Layer 'Post offices' shows post_office:parcel_from=no with a fixed text, namely 'You can't send parcels here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map')",
"value": "no"
},
{
"key": "post_office:parcel_pickup",
"description": "Layer 'Post offices' shows and asks freeform values for key 'post_office:parcel_pickup' (in the MapComplete.osm.be theme 'Postbox and Post Office Map')"
},
{
"key": "post_office:parcel_pickup",
"description": "Layer 'Post offices' shows post_office:parcel_pickup=yes with a fixed text, namely 'You can pick up missed parcels here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map')",
"value": "yes"
},
{
"key": "post_office:parcel_pickup",
"description": "Layer 'Post offices' shows post_office:parcel_pickup=no with a fixed text, namely 'You can't pick up missed parcels here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map')",
"value": "no"
},
{
"key": "post_office:parcel_to",
"description": "Layer 'Post offices' shows and asks freeform values for key 'post_office:parcel_to' (in the MapComplete.osm.be theme 'Postbox and Post Office Map')"
},
{
"key": "post_office:parcel_to",
"description": "Layer 'Post offices' shows post_office:parcel_to=yes with a fixed text, namely 'You can send parcels to here for pickup' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map')",
"value": "yes"
},
{
"key": "post_office:parcel_to",
"description": "Layer 'Post offices' shows post_office:parcel_to=no with a fixed text, namely 'You can't send parcels to here for pickup' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map')",
"value": "no"
},
{
"key": "post_office:stamps",
"description": "Layer 'Post offices' shows and asks freeform values for key 'post_office:stamps' (in the MapComplete.osm.be theme 'Postbox and Post Office Map')"
},
{
"key": "post_office:stamps",
"description": "Layer 'Post offices' shows post_office:stamps=yes with a fixed text, namely 'You can buy stamps here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map')",
"value": "yes"
},
{
"key": "post_office:stamps",
"description": "Layer 'Post offices' shows post_office:stamps=no with a fixed text, namely 'You can't buy stamps here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Postbox and Post Office Map')",
"value": "no"
},
{
"key": "amenity",

View file

@ -34,810 +34,6 @@
"key": "name",
"description": "Layer 'Shop' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Open Shop Map')"
},
{
"key": "shop",
"description": "Layer 'Shop' shows and asks freeform values for key 'shop' (in the MapComplete.osm.be theme 'Open Shop Map')"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=agrarian with a fixed text, namely 'Farm Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "agrarian"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=alcohol with a fixed text, namely 'Liquor Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "alcohol"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=anime with a fixed text, namely 'Anime / Manga Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "anime"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=antiques with a fixed text, namely 'Antiques Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "antiques"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=appliance with a fixed text, namely 'Appliance Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "appliance"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=art with a fixed text, namely 'Art Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "art"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=baby_goods with a fixed text, namely 'Baby Goods Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "baby_goods"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=bag with a fixed text, namely 'Bag/Luggage Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "bag"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=bakery with a fixed text, namely 'Bakery' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "bakery"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=bathroom_furnishing with a fixed text, namely 'Bathroom Furnishing Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "bathroom_furnishing"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=beauty with a fixed text, namely 'Beauty Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "beauty"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=bed with a fixed text, namely 'Bedding/Mattress Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "bed"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=beverages with a fixed text, namely 'Beverage Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "beverages"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=bicycle with a fixed text, namely 'Bicycle Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "bicycle"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=boat with a fixed text, namely 'Boat Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "boat"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=bookmaker with a fixed text, namely 'Bookmaker' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "bookmaker"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=books with a fixed text, namely 'Book Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "books"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=brewing_supplies with a fixed text, namely 'Brewing Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "brewing_supplies"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=butcher with a fixed text, namely 'Butcher' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "butcher"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=camera with a fixed text, namely 'Camera Equipment Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "camera"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=candles with a fixed text, namely 'Candle Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "candles"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=cannabis with a fixed text, namely 'Cannabis Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "cannabis"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=car with a fixed text, namely 'Car Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "car"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=car_parts with a fixed text, namely 'Car Parts Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "car_parts"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=car_repair with a fixed text, namely 'Car Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "car_repair"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=caravan with a fixed text, namely 'RV Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "caravan"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=carpet with a fixed text, namely 'Carpet Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "carpet"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=catalogue with a fixed text, namely 'Catalog Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "catalogue"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=charity with a fixed text, namely 'Charity Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "charity"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=cheese with a fixed text, namely 'Cheese Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "cheese"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=chemist with a fixed text, namely 'Drugstore' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "chemist"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=chocolate with a fixed text, namely 'Chocolate Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "chocolate"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=clothes with a fixed text, namely 'Clothing Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "clothes"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=coffee with a fixed text, namely 'Coffee Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "coffee"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=collector with a fixed text, namely 'Collectibles Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "collector"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=computer with a fixed text, namely 'Computer Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "computer"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=confectionery with a fixed text, namely 'Candy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "confectionery"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=convenience with a fixed text, namely 'Convenience Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "convenience"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=copyshop with a fixed text, namely 'Copy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "copyshop"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=cosmetics with a fixed text, namely 'Cosmetics Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "cosmetics"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=country_store with a fixed text, namely 'Country Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "country_store"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=craft with a fixed text, namely 'Arts & Crafts Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "craft"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=curtain with a fixed text, namely 'Curtain Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "curtain"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=dairy with a fixed text, namely 'Dairy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "dairy"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=deli with a fixed text, namely 'Deli' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "deli"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=department_store with a fixed text, namely 'Department Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "department_store"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=doityourself with a fixed text, namely 'DIY Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "doityourself"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=doors with a fixed text, namely 'Door Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "doors"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=dry_cleaning with a fixed text, namely 'Dry Cleaner' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "dry_cleaning"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=e-cigarette with a fixed text, namely 'E-Cigarette Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "e-cigarette"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=electrical with a fixed text, namely 'Electrical Equipment Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "electrical"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=electronics with a fixed text, namely 'Electronics Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "electronics"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=erotic with a fixed text, namely 'Erotic Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "erotic"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=fabric with a fixed text, namely 'Fabric Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "fabric"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=farm with a fixed text, namely 'Produce Stand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "farm"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=fashion_accessories with a fixed text, namely 'Fashion Accessories Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "fashion_accessories"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=fireplace with a fixed text, namely 'Fireplace Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "fireplace"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=fishing with a fixed text, namely 'Fishing Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "fishing"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=flooring with a fixed text, namely 'Flooring Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "flooring"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=florist with a fixed text, namely 'Florist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "florist"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=frame with a fixed text, namely 'Framing Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "frame"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=frozen_food with a fixed text, namely 'Frozen Food Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "frozen_food"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=fuel with a fixed text, namely 'Fuel Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "fuel"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=funeral_directors with a fixed text, namely 'Funeral Home' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "funeral_directors"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=furniture with a fixed text, namely 'Furniture Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "furniture"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=games with a fixed text, namely 'Tabletop Game Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "games"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=garden_centre with a fixed text, namely 'Garden Center' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "garden_centre"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=gas with a fixed text, namely 'Bottled Gas Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "gas"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=general with a fixed text, namely 'General Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "general"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=gift with a fixed text, namely 'Gift Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "gift"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=greengrocer with a fixed text, namely 'Greengrocer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "greengrocer"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=hairdresser with a fixed text, namely 'Hairdresser' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "hairdresser"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=hairdresser_supply with a fixed text, namely 'Hairdresser Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "hairdresser_supply"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=hardware with a fixed text, namely 'Hardware Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "hardware"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=health_food with a fixed text, namely 'Health Food Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "health_food"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=hearing_aids with a fixed text, namely 'Hearing Aids Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "hearing_aids"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=herbalist with a fixed text, namely 'Herbalist' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "herbalist"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=hifi with a fixed text, namely 'Hifi Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "hifi"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=hobby with a fixed text, namely 'Hobby Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "hobby"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=household_linen with a fixed text, namely 'Household Linen Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "household_linen"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=houseware with a fixed text, namely 'Houseware Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "houseware"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=hunting with a fixed text, namely 'Hunting Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "hunting"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=interior_decoration with a fixed text, namely 'Interior Decoration Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "interior_decoration"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=jewelry with a fixed text, namely 'Jewelry Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "jewelry"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=kiosk with a fixed text, namely 'Kiosk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "kiosk"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=kitchen with a fixed text, namely 'Kitchen Design Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "kitchen"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=laundry with a fixed text, namely 'Laundry' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "laundry"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=leather with a fixed text, namely 'Leather Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "leather"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=lighting with a fixed text, namely 'Lighting Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "lighting"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=locksmith with a fixed text, namely 'Locksmith' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "locksmith"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=lottery with a fixed text, namely 'Lottery Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "lottery"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=mall with a fixed text, namely 'Mall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "mall"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=massage with a fixed text, namely 'Massage Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "massage"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=medical_supply with a fixed text, namely 'Medical Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "medical_supply"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=military_surplus with a fixed text, namely 'Military Surplus Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "military_surplus"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=mobile_phone with a fixed text, namely 'Mobile Phone Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "mobile_phone"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=model with a fixed text, namely 'Model Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "model"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=money_lender with a fixed text, namely 'Money Lender' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "money_lender"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=motorcycle with a fixed text, namely 'Motorcycle Dealership' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "motorcycle"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=motorcycle_repair with a fixed text, namely 'Motorcycle Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "motorcycle_repair"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=music with a fixed text, namely 'Music Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "music"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=musical_instrument with a fixed text, namely 'Musical Instrument Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "musical_instrument"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=newsagent with a fixed text, namely 'Newspaper/Magazine Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "newsagent"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=nutrition_supplements with a fixed text, namely 'Nutrition Supplements Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "nutrition_supplements"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=optician with a fixed text, namely 'Optician' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "optician"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=outdoor with a fixed text, namely 'Outdoors Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "outdoor"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=outpost with a fixed text, namely 'Online Retailer Outpost' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "outpost"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=paint with a fixed text, namely 'Paint Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "paint"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=party with a fixed text, namely 'Party Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "party"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=pastry with a fixed text, namely 'Pastry Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "pastry"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=pawnbroker with a fixed text, namely 'Pawn Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "pawnbroker"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=perfumery with a fixed text, namely 'Perfume Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "perfumery"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=pet with a fixed text, namely 'Pet Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "pet"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=pet_grooming with a fixed text, namely 'Pet Grooming Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "pet_grooming"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=photo with a fixed text, namely 'Photography Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "photo"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=pottery with a fixed text, namely 'Pottery Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "pottery"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=printer_ink with a fixed text, namely 'Printer Ink Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "printer_ink"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=psychic with a fixed text, namely 'Psychic' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "psychic"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=pyrotechnics with a fixed text, namely 'Fireworks Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "pyrotechnics"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=radiotechnics with a fixed text, namely 'Radio/Electronic Component Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "radiotechnics"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=religion with a fixed text, namely 'Religious Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "religion"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=rental with a fixed text, namely 'Rental Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "rental"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=repair with a fixed text, namely 'Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "repair"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=scuba_diving with a fixed text, namely 'Scuba Diving Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "scuba_diving"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=seafood with a fixed text, namely 'Seafood Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "seafood"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=second_hand with a fixed text, namely 'Consignment/Thrift Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "second_hand"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=sewing with a fixed text, namely 'Sewing Supply Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "sewing"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=shoe_repair with a fixed text, namely 'Shoe Repair Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "shoe_repair"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=shoes with a fixed text, namely 'Shoe Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "shoes"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=spices with a fixed text, namely 'Spice Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "spices"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=sports with a fixed text, namely 'Sporting Goods Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "sports"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=stationery with a fixed text, namely 'Stationery Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "stationery"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=storage_rental with a fixed text, namely 'Storage Rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "storage_rental"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=supermarket with a fixed text, namely 'Supermarket' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "supermarket"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=swimming_pool with a fixed text, namely 'Pool Supply Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "swimming_pool"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=tailor with a fixed text, namely 'Tailor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "tailor"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=tattoo with a fixed text, namely 'Tattoo Parlor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "tattoo"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=tea with a fixed text, namely 'Tea Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "tea"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=telecommunication with a fixed text, namely 'Telecom Retail Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "telecommunication"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=ticket with a fixed text, namely 'Ticket Seller' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "ticket"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=tiles with a fixed text, namely 'Tile Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "tiles"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=tobacco with a fixed text, namely 'Tobacco Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "tobacco"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=tool_hire with a fixed text, namely 'Tool Rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "tool_hire"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=toys with a fixed text, namely 'Toy Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "toys"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=trade with a fixed text, namely 'Trade Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "trade"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=travel_agency with a fixed text, namely 'Travel Agency' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "travel_agency"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=trophy with a fixed text, namely 'Trophy Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "trophy"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=tyres with a fixed text, namely 'Tire Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "tyres"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=vacuum_cleaner with a fixed text, namely 'Vacuum Cleaner Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "vacuum_cleaner"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=variety_store with a fixed text, namely 'Variety Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "variety_store"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=video with a fixed text, namely 'Video Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "video"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=video_games with a fixed text, namely 'Video Game Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "video_games"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=watches with a fixed text, namely 'Watches Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "watches"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=water with a fixed text, namely 'Drinking Water Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "water"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=water_sports with a fixed text, namely 'Watersport/Swim Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "water_sports"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=weapons with a fixed text, namely 'Weapon Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "weapons"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=wholesale with a fixed text, namely 'Wholesale Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "wholesale"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=wigs with a fixed text, namely 'Wig Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "wigs"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=window_blind with a fixed text, namely 'Window Blind Store' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "window_blind"
},
{
"key": "shop",
"description": "Layer 'Shop' shows shop=wine with a fixed text, namely 'Wine Shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "wine"
},
{
"key": "opening_hours",
"description": "Layer 'Shop' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Open Shop Map')"

View file

@ -0,0 +1,654 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Sports",
"description": "Map showing sport facilities.",
"project_url": "https://mapcomplete.osm.be/sports",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/sports/sport.svg",
"contact_name": "Pieter Vander Vennet",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "leisure",
"description": "The MapComplete theme Sports has a layer Sport pitches showing features with this tag",
"value": "pitch"
},
{
"key": "image",
"description": "The layer 'Sport pitches 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 'Sport pitches 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 'Sport pitches 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 'Sport pitches 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": "sport",
"description": "Layer 'Sport pitches' shows and asks freeform values for key 'sport' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "sport",
"description": "Layer 'Sport pitches' shows sport=basketball with a fixed text, namely 'Basketball is played here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "basketball"
},
{
"key": "sport",
"description": "Layer 'Sport pitches' shows sport=soccer with a fixed text, namely 'Soccer is played here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "soccer"
},
{
"key": "sport",
"description": "Layer 'Sport pitches' shows sport=table_tennis with a fixed text, namely 'This is a pingpong table' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "table_tennis"
},
{
"key": "sport",
"description": "Layer 'Sport pitches' shows sport=tennis with a fixed text, namely 'Tennis is played here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "tennis"
},
{
"key": "sport",
"description": "Layer 'Sport pitches' shows sport=korfball with a fixed text, namely 'Korfball is played here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "korfball"
},
{
"key": "sport",
"description": "Layer 'Sport pitches' shows sport=basket with a fixed text, namely 'Basketball is played here' (in the MapComplete.osm.be theme 'Sports')",
"value": "basket"
},
{
"key": "surface",
"description": "Layer 'Sport pitches' shows and asks freeform values for key 'surface' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "surface",
"description": "Layer 'Sport pitches' shows surface=grass with a fixed text, namely 'The surface is <b>grass</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "grass"
},
{
"key": "surface",
"description": "Layer 'Sport pitches' shows surface=sand with a fixed text, namely 'The surface is <b>sand</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "sand"
},
{
"key": "surface",
"description": "Layer 'Sport pitches' shows surface=paving_stones with a fixed text, namely 'The surface is <b>paving stones</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "paving_stones"
},
{
"key": "surface",
"description": "Layer 'Sport pitches' shows surface=asphalt with a fixed text, namely 'The surface is <b>asphalt</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "asphalt"
},
{
"key": "surface",
"description": "Layer 'Sport pitches' shows surface=concrete with a fixed text, namely 'The surface is <b>concrete</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "concrete"
},
{
"key": "access",
"description": "Layer 'Sport pitches' shows access=yes with a fixed text, namely 'Public access' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "yes"
},
{
"key": "access",
"description": "Layer 'Sport pitches' shows access=limited with a fixed text, namely 'Limited access (e.g. only with an appointment, during certain hours, …)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "limited"
},
{
"key": "access",
"description": "Layer 'Sport pitches' shows access=members with a fixed text, namely 'Only accessible for members of the club' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "members"
},
{
"key": "access",
"description": "Layer 'Sport pitches' shows access=private with a fixed text, namely 'Private - not accessible to the public' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "private"
},
{
"key": "access",
"description": "Layer 'Sport pitches' shows access=public with a fixed text, namely 'Public access' (in the MapComplete.osm.be theme 'Sports')",
"value": "public"
},
{
"key": "reservation",
"description": "Layer 'Sport pitches' shows reservation=required with a fixed text, namely 'Making an appointment is obligatory to use this sport pitch' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "required"
},
{
"key": "reservation",
"description": "Layer 'Sport pitches' shows reservation=recommended with a fixed text, namely 'Making an appointment is recommended when using this sport pitch' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "recommended"
},
{
"key": "reservation",
"description": "Layer 'Sport pitches' shows reservation=yes with a fixed text, namely 'Making an appointment is possible, but not necessary to use this sport pitch' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "yes"
},
{
"key": "reservation",
"description": "Layer 'Sport pitches' shows reservation=no with a fixed text, namely 'Making an appointment is not possible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "no"
},
{
"key": "phone",
"description": "Layer 'Sport pitches' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "email",
"description": "Layer 'Sport pitches' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "opening_hours",
"description": "Layer 'Sport pitches' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "opening_hours",
"description": "Layer 'Sport pitches' shows with a fixed text, namely 'Always accessible' (in the MapComplete.osm.be theme 'Sports') Picking this answer will delete the key opening_hours.",
"value": ""
},
{
"key": "opening_hours",
"description": "Layer 'Sport pitches' shows opening_hours=24/7 with a fixed text, namely 'Always accessible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "24/7"
},
{
"key": "leisure",
"description": "The MapComplete theme Sports has a layer Fitness Centres showing features with this tag",
"value": "fitness_centre"
},
{
"key": "name",
"description": "Layer 'Fitness Centres' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "noname",
"description": "Layer 'Fitness Centres' shows noname=yes with a fixed text, namely 'This fitness centre has no name' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "yes"
},
{
"key": "image",
"description": "The layer 'Fitness Centres 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 'Fitness Centres 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 'Fitness Centres 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 'Fitness Centres 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": "phone",
"description": "Layer 'Fitness Centres' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "contact:phone",
"description": "Layer 'Fitness Centres' shows contact:phone~.+ with a fixed text, namely '<a href='tel:{contact:phone}'>{contact:phone}</a>' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "email",
"description": "Layer 'Fitness Centres' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "contact:email",
"description": "Layer 'Fitness Centres' shows contact:email~.+ with a fixed text, namely '<a href='mailto:{contact:email}' target='_blank'>{contact:email}</a>' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "website",
"description": "Layer 'Fitness Centres' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "contact:website",
"description": "Layer 'Fitness Centres' shows contact:website~.+ with a fixed text, namely '<a href='{contact:website}' target='_blank'>{contact:website}</a>' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "opening_hours",
"description": "Layer 'Fitness Centres' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "wheelchair",
"description": "Layer 'Fitness Centres' shows wheelchair=designated with a fixed text, namely 'This place is specially adapted for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "designated"
},
{
"key": "wheelchair",
"description": "Layer 'Fitness Centres' shows wheelchair=yes with a fixed text, namely 'This place is easily reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "yes"
},
{
"key": "wheelchair",
"description": "Layer 'Fitness Centres' shows wheelchair=limited with a fixed text, namely 'It is possible to reach this place in a wheelchair, but it is not easy' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "limited"
},
{
"key": "wheelchair",
"description": "Layer 'Fitness Centres' shows wheelchair=no with a fixed text, namely 'This place is not reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "no"
},
{
"key": "level",
"description": "Layer 'Fitness Centres' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "location",
"description": "Layer 'Fitness Centres' shows location=underground with a fixed text, namely 'Located underground' (in the MapComplete.osm.be theme 'Sports')",
"value": "underground"
},
{
"key": "level",
"description": "Layer 'Fitness Centres' shows level=0 with a fixed text, namely 'Located on the ground floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "0"
},
{
"key": "level",
"description": "Layer 'Fitness Centres' shows with a fixed text, namely 'Located on the ground floor' (in the MapComplete.osm.be theme 'Sports') Picking this answer will delete the key level.",
"value": ""
},
{
"key": "level",
"description": "Layer 'Fitness Centres' shows level=1 with a fixed text, namely 'Located on the first floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "1"
},
{
"key": "level",
"description": "Layer 'Fitness Centres' shows level=-1 with a fixed text, namely 'Located on the first basement level' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "-1"
},
{
"key": "leisure",
"description": "The MapComplete theme Sports has a layer Fitness Stations showing features with this tag",
"value": "fitness_station"
},
{
"key": "name",
"description": "Layer 'Fitness Stations' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "noname",
"description": "Layer 'Fitness Stations' shows noname=yes with a fixed text, namely 'This fitness station doesn't have a name' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "yes"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=horizontal_bar with a fixed text, namely 'This fitness station has a horizontal bar, high enough for pull-ups.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "horizontal_bar"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=sign with a fixed text, namely 'This fitness station has a sign with instructions for a specific exercise.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "sign"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=sit-up with a fixed text, namely 'This fitness station has a facility for sit-ups.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "sit-up"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=push-up with a fixed text, namely 'This fitness station has a facility for push-ups. Usually consists of one or more low horizontal bars.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "push-up"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=stretch_bars with a fixed text, namely 'This fitness station has bars for stretching.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "stretch_bars"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=hyperextension with a fixed text, namely 'This fitness station has a station for making hyperextensions.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "hyperextension"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=rings with a fixed text, namely 'This fitness station has rings for gymnastic exercises.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "rings"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=horizontal_ladder with a fixed text, namely 'This fitness station has a horizontal ladder, also known as monkey bars.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "horizontal_ladder"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=wall_bars with a fixed text, namely 'This fitness station has wall bars to climb on.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "wall_bars"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=slalom with a fixed text, namely 'This fitness station has posts for performing slalom exercises.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "slalom"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=stepping_stones with a fixed text, namely 'This fitness station has stepping stones.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "stepping_stones"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=leapfrog with a fixed text, namely 'This fitness station has cones for performing leapfrog jumps.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "leapfrog"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=beam_jump with a fixed text, namely 'This fitness station has beams to jump over.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "beam_jump"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=hurdling with a fixed text, namely 'This fitness station has hurdles to cross.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "hurdling"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=wall with a fixed text, namely 'This fitness station has a wall to climb on.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "wall"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=balance_beam with a fixed text, namely 'This fitness station has a balance beam.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "balance_beam"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=log_lifting with a fixed text, namely 'This fitness station has a log with a handle on the end to lift.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "log_lifting"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=captains_chair with a fixed text, namely 'This fitness station has a chair with only elbow supports and a rear (without seat), for performing leg raises.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "captains_chair"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=box with a fixed text, namely 'This fitness station has a box that can be used for jumping.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "box"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=battling_ropes with a fixed text, namely 'This fitness station has battling ropes.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "battling_ropes"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=excercise_bike with a fixed text, namely 'This fitness station has a stationary bicycle.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "excercise_bike"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=elliptical_trainer with a fixed text, namely 'This fitness station has a cross-trainer.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "elliptical_trainer"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=air_walker with a fixed text, namely 'This fitness station has an air walker.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "air_walker"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=rower with a fixed text, namely 'This fitness station has a rower.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "rower"
},
{
"key": "fitness_station",
"description": "Layer 'Fitness Stations' shows fitness_station=slackline with a fixed text, namely 'This fitness station has a slackline.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "slackline"
},
{
"key": "operator",
"description": "Layer 'Fitness Stations' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "opening_hours",
"description": "Layer 'Fitness Stations' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "leisure",
"description": "The MapComplete theme Sports has a layer Sports centres showing features with this tag",
"value": "sports_centre"
},
{
"key": "image",
"description": "The layer 'Sports centres 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 'Sports centres 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 'Sports centres 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 'Sports centres 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": "opening_hours",
"description": "Layer 'Sports centres' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "phone",
"description": "Layer 'Sports centres' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "contact:phone",
"description": "Layer 'Sports centres' shows contact:phone~.+ with a fixed text, namely '<a href='tel:{contact:phone}'>{contact:phone}</a>' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "website",
"description": "Layer 'Sports centres' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "contact:website",
"description": "Layer 'Sports centres' shows contact:website~.+ with a fixed text, namely '<a href='{contact:website}' target='_blank'>{contact:website}</a>' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "email",
"description": "Layer 'Sports centres' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "contact:email",
"description": "Layer 'Sports centres' shows contact:email~.+ with a fixed text, namely '<a href='mailto:{contact:email}' target='_blank'>{contact:email}</a>' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "wheelchair",
"description": "Layer 'Sports centres' shows wheelchair=designated with a fixed text, namely 'This place is specially adapted for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "designated"
},
{
"key": "wheelchair",
"description": "Layer 'Sports centres' shows wheelchair=yes with a fixed text, namely 'This place is easily reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "yes"
},
{
"key": "wheelchair",
"description": "Layer 'Sports centres' shows wheelchair=limited with a fixed text, namely 'It is possible to reach this place in a wheelchair, but it is not easy' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "limited"
},
{
"key": "wheelchair",
"description": "Layer 'Sports centres' shows wheelchair=no with a fixed text, namely 'This place is not reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "no"
},
{
"key": "shop",
"description": "The MapComplete theme Sports has a layer Shop showing features with this tag",
"value": "sports"
},
{
"key": "image",
"description": "The layer 'Shop 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 'Shop 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 'Shop 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 'Shop 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": "name",
"description": "Layer 'Shop' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "opening_hours",
"description": "Layer 'Shop' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "website",
"description": "Layer 'Shop' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "contact:website",
"description": "Layer 'Shop' shows contact:website~.+ with a fixed text, namely '<a href='{contact:website}' target='_blank'>{contact:website}</a>' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "email",
"description": "Layer 'Shop' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "contact:email",
"description": "Layer 'Shop' shows contact:email~.+ with a fixed text, namely '<a href='mailto:{contact:email}' target='_blank'>{contact:email}</a>' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "phone",
"description": "Layer 'Shop' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "contact:phone",
"description": "Layer 'Shop' shows contact:phone~.+ with a fixed text, namely '<a href='tel:{contact:phone}'>{contact:phone}</a>' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "payment:cash",
"description": "Layer 'Shop' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "yes"
},
{
"key": "payment:cards",
"description": "Layer 'Shop' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "yes"
},
{
"key": "level",
"description": "Layer 'Shop' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "location",
"description": "Layer 'Shop' shows location=underground with a fixed text, namely 'Located underground' (in the MapComplete.osm.be theme 'Sports')",
"value": "underground"
},
{
"key": "level",
"description": "Layer 'Shop' shows level=0 with a fixed text, namely 'Located on the ground floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "0"
},
{
"key": "level",
"description": "Layer 'Shop' shows with a fixed text, namely 'Located on the ground floor' (in the MapComplete.osm.be theme 'Sports') Picking this answer will delete the key level.",
"value": ""
},
{
"key": "level",
"description": "Layer 'Shop' shows level=1 with a fixed text, namely 'Located on the first floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "1"
},
{
"key": "level",
"description": "Layer 'Shop' shows level=-1 with a fixed text, namely 'Located on the first basement level' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "-1"
},
{
"key": "service:print:A4",
"description": "Layer 'Shop' shows service:print:A4=yes with a fixed text, namely 'This shop can print on papers of size A4' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "yes"
},
{
"key": "service:print:A3",
"description": "Layer 'Shop' shows service:print:A3=yes with a fixed text, namely 'This shop can print on papers of size A3' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "yes"
},
{
"key": "service:print:A2",
"description": "Layer 'Shop' shows service:print:A2=yes with a fixed text, namely 'This shop can print on papers of size A2' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "yes"
},
{
"key": "service:print:A1",
"description": "Layer 'Shop' shows service:print:A1=yes with a fixed text, namely 'This shop can print on papers of size A1' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "yes"
},
{
"key": "service:print:A0",
"description": "Layer 'Shop' shows service:print:A0=yes with a fixed text, namely 'This shop can print on papers of size A0' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "yes"
},
{
"key": "internet_access",
"description": "Layer 'Shop' shows internet_access=wlan with a fixed text, namely 'This place offers wireless internet access' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "wlan"
},
{
"key": "internet_access",
"description": "Layer 'Shop' shows internet_access=no with a fixed text, namely 'This place <b>does not</b> offer internet access' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "no"
},
{
"key": "internet_access",
"description": "Layer 'Shop' shows internet_access=yes with a fixed text, namely 'This place offers internet access' (in the MapComplete.osm.be theme 'Sports')",
"value": "yes"
},
{
"key": "internet_access",
"description": "Layer 'Shop' shows internet_access=terminal with a fixed text, namely 'This place offers internet access via a terminal or computer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "terminal"
},
{
"key": "internet_access",
"description": "Layer 'Shop' shows internet_access=wired with a fixed text, namely 'This place offers wired internet access' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "wired"
},
{
"key": "internet_access:fee",
"description": "Layer 'Shop' shows internet_access:fee=yes with a fixed text, namely 'There is a fee for the internet access at this place' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "yes"
},
{
"key": "internet_access:fee",
"description": "Layer 'Shop' shows internet_access:fee=no with a fixed text, namely 'Internet access is free at this place' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "no"
},
{
"key": "internet_access:fee",
"description": "Layer 'Shop' shows internet_access:fee=customers with a fixed text, namely 'Internet access is free at this place, for customers only' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "customers"
},
{
"key": "internet_access:ssid",
"description": "Layer 'Shop' shows and asks freeform values for key 'internet_access:ssid' (in the MapComplete.osm.be theme 'Sports')"
},
{
"key": "internet_access:ssid",
"description": "Layer 'Shop' shows internet_access:ssid=Telekom with a fixed text, namely 'Telekom' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sports')",
"value": "Telekom"
}
]
}

View file

@ -119,7 +119,7 @@
},
{
"key": "opening_hours",
"description": "Layer 'Toilets' shows opening_hours=24/7 with a fixed text, namely 'Opened 24/7' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"description": "Layer 'Toilets' shows opening_hours=24/7 with a fixed text, namely '24/7 opened (including holidays)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "24/7"
},
{
@ -218,6 +218,126 @@
{
"key": "description",
"description": "Layer 'Toilets' shows and asks freeform values for key 'description' (in the MapComplete.osm.be theme 'Open Toilet Map')"
},
{
"key": "toilets",
"description": "The MapComplete theme Open Toilet Map has a layer Toilets at other amenities showing features with this tag",
"value": "yes"
},
{
"key": "image",
"description": "The layer 'Toilets at other amenities 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 'Toilets at other amenities 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 'Toilets at other amenities 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 'Toilets at other amenities 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": "level",
"description": "Layer 'Toilets at other amenities' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'Open Toilet Map')"
},
{
"key": "location",
"description": "Layer 'Toilets at other amenities' shows location=underground with a fixed text, namely 'Located underground' (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "underground"
},
{
"key": "level",
"description": "Layer 'Toilets at other amenities' shows level=0 with a fixed text, namely 'Located on the ground floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "0"
},
{
"key": "level",
"description": "Layer 'Toilets at other amenities' shows with a fixed text, namely 'Located on the ground floor' (in the MapComplete.osm.be theme 'Open Toilet Map') Picking this answer will delete the key level.",
"value": ""
},
{
"key": "level",
"description": "Layer 'Toilets at other amenities' shows level=1 with a fixed text, namely 'Located on the first floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "1"
},
{
"key": "level",
"description": "Layer 'Toilets at other amenities' shows level=-1 with a fixed text, namely 'Located on the first basement level' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "-1"
},
{
"key": "toilets:access",
"description": "Layer 'Toilets at other amenities' shows and asks freeform values for key 'toilets:access' (in the MapComplete.osm.be theme 'Open Toilet Map')"
},
{
"key": "toilets:access",
"description": "Layer 'Toilets at other amenities' shows toilets:access=yes with a fixed text, namely 'Public access' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "yes"
},
{
"key": "toilets:access",
"description": "Layer 'Toilets at other amenities' shows toilets:access=customers with a fixed text, namely 'Only access to customers of the amenity' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "customers"
},
{
"key": "toilets:access",
"description": "Layer 'Toilets at other amenities' shows toilets:access=no with a fixed text, namely 'Not accessible, even for customers of the amenity' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "no"
},
{
"key": "toilets:access",
"description": "Layer 'Toilets at other amenities' shows toilets:access=key with a fixed text, namely 'Accessible, but one has to ask a key to enter' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "key"
},
{
"key": "toilets:access",
"description": "Layer 'Toilets at other amenities' shows toilets:access=public with a fixed text, namely 'Public access' (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "public"
},
{
"key": "toilets:fee",
"description": "Layer 'Toilets at other amenities' shows toilets:fee=yes with a fixed text, namely 'These are paid toilets' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "yes"
},
{
"key": "toilets:fee",
"description": "Layer 'Toilets at other amenities' shows toilets:fee=no with a fixed text, namely 'Free to use' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "no"
},
{
"key": "toilets:charge",
"description": "Layer 'Toilets at other amenities' shows and asks freeform values for key 'toilets:charge' (in the MapComplete.osm.be theme 'Open Toilet Map')"
},
{
"key": "opening_hours",
"description": "Layer 'Toilets at other amenities' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Open Toilet Map')"
},
{
"key": "toilets:wheelchair",
"description": "Layer 'Toilets at other amenities' shows toilets:wheelchair=yes with a fixed text, namely 'There is a dedicated toilet for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "yes"
},
{
"key": "toilets:wheelchair",
"description": "Layer 'Toilets at other amenities' shows toilets:wheelchair=no with a fixed text, namely 'No wheelchair access' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "no"
},
{
"key": "toilets:wheelchair",
"description": "Layer 'Toilets at other amenities' shows toilets:wheelchair=designated with a fixed text, namely 'There is only a dedicated toilet for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "designated"
},
{
"key": "toilets:door:width",
"description": "Layer 'Toilets at other amenities' shows and asks freeform values for key 'toilets:door:width' (in the MapComplete.osm.be theme 'Open Toilet Map')"
},
{
"key": "toilets:description",
"description": "Layer 'Toilets at other amenities' shows and asks freeform values for key 'toilets:description' (in the MapComplete.osm.be theme 'Open Toilet Map')"
}
]
}

View file

@ -191,7 +191,7 @@ export default class OverpassFeatureSource implements FeatureSource {
const self = this
const overpassUrls = self.state.overpassUrl.data
if(overpassUrls === undefined || overpassUrls.length === 0){
if (overpassUrls === undefined || overpassUrls.length === 0) {
throw "Panic: overpassFeatureSource didn't receive any overpassUrls"
}
let bounds: BBox

View file

@ -46,9 +46,9 @@ export default class TitleHandler {
if (Utils.runningFromConsole) {
return
}
try{
document.title = title
}catch (e) {
try {
document.title = title
} catch (e) {
console.error(e)
}
})

View file

@ -1,24 +1,28 @@
import LayoutConfig from "../Models/ThemeConfig/LayoutConfig"
import {QueryParameters} from "./Web/QueryParameters"
import {AllKnownLayouts} from "../Customizations/AllKnownLayouts"
import {FixedUiElement} from "../UI/Base/FixedUiElement"
import {Utils} from "../Utils"
import { QueryParameters } from "./Web/QueryParameters"
import { AllKnownLayouts } from "../Customizations/AllKnownLayouts"
import { FixedUiElement } from "../UI/Base/FixedUiElement"
import { Utils } from "../Utils"
import Combine from "../UI/Base/Combine"
import {SubtleButton} from "../UI/Base/SubtleButton"
import { SubtleButton } from "../UI/Base/SubtleButton"
import BaseUIElement from "../UI/BaseUIElement"
import {UIEventSource} from "./UIEventSource"
import {LocalStorageSource} from "./Web/LocalStorageSource"
import { UIEventSource } from "./UIEventSource"
import { LocalStorageSource } from "./Web/LocalStorageSource"
import LZString from "lz-string"
import {FixLegacyTheme} from "../Models/ThemeConfig/Conversion/LegacyJsonConvert"
import {LayerConfigJson} from "../Models/ThemeConfig/Json/LayerConfigJson"
import { FixLegacyTheme } from "../Models/ThemeConfig/Conversion/LegacyJsonConvert"
import { LayerConfigJson } from "../Models/ThemeConfig/Json/LayerConfigJson"
import SharedTagRenderings from "../Customizations/SharedTagRenderings"
import * as known_layers from "../assets/generated/known_layers.json"
import {PrepareTheme} from "../Models/ThemeConfig/Conversion/PrepareTheme"
import { PrepareTheme } from "../Models/ThemeConfig/Conversion/PrepareTheme"
import * as licenses from "../assets/generated/license_info.json"
import TagRenderingConfig from "../Models/ThemeConfig/TagRenderingConfig"
import {FixImages} from "../Models/ThemeConfig/Conversion/FixImages"
import { FixImages } from "../Models/ThemeConfig/Conversion/FixImages"
import Svg from "../Svg"
import {DoesImageExist, PrevalidateTheme, ValidateThemeAndLayers} from "../Models/ThemeConfig/Conversion/Validation";
import {
DoesImageExist,
PrevalidateTheme,
ValidateThemeAndLayers,
} from "../Models/ThemeConfig/Conversion/Validation"
export default class DetermineLayout {
private static readonly _knownImages = new Set(Array.from(licenses).map((l) => l.path))
@ -130,11 +134,11 @@ export default class DetermineLayout {
}),
json !== undefined
? new SubtleButton(Svg.download_svg(), "Download the JSON file").onClick(() => {
Utils.offerContentsAsDownloadableFile(
JSON.stringify(json, null, " "),
"theme_definition.json"
)
})
Utils.offerContentsAsDownloadableFile(
JSON.stringify(json, null, " "),
"theme_definition.json"
)
})
: undefined,
])
.SetClass("flex flex-col clickable")
@ -181,14 +185,14 @@ export default class DetermineLayout {
json.id = forceId ?? json.id
{
let {errors} = new PrevalidateTheme().convert(json, "validation")
let { errors } = new PrevalidateTheme().convert(json, "validation")
if (errors.length > 0) {
throw "Detected errors: " + errors.join("\n")
}
}
{
let {errors} = new ValidateThemeAndLayers(
new DoesImageExist(new Set<string>(), _ => true),
let { errors } = new ValidateThemeAndLayers(
new DoesImageExist(new Set<string>(), (_) => true),
"",
false,
SharedTagRenderings.SharedTagRendering

View file

@ -84,7 +84,7 @@ export class NewGeometryFromChangesFeatureSource implements FeatureSource {
}
try {
const tags: OsmTags & {id: OsmId & string} = {
const tags: OsmTags & { id: OsmId & string } = {
id: <OsmId & string>(change.type + "/" + change.id),
}
for (const kv of change.tags) {

View file

@ -1,8 +1,8 @@
import FeatureSource, {FeatureSourceForLayer, Tiled} from "../FeatureSource"
import {ImmutableStore, Store} from "../../UIEventSource"
import FeatureSource, { FeatureSourceForLayer, Tiled } from "../FeatureSource"
import { ImmutableStore, Store } from "../../UIEventSource"
import FilteredLayer from "../../../Models/FilteredLayer"
import {BBox} from "../../BBox"
import {Feature} from "geojson";
import { BBox } from "../../BBox"
import { Feature } from "geojson"
/**
* A simple, read only feature store.

View file

@ -8,12 +8,13 @@ import {
booleanWithin,
Coord,
Feature,
Geometry, Lines,
Geometry,
Lines,
MultiPolygon,
Polygon,
Properties,
} from "@turf/turf"
import {GeoJSON, LineString, Point} from "geojson";
import { GeoJSON, LineString, Point } from "geojson"
export class GeoOperations {
private static readonly _earthRadius = 6378137
@ -28,7 +29,7 @@ export class GeoOperations {
* @param feature
*/
static centerpoint(feature: any): Feature<Point> {
const newFeature : Feature<Point> = turf.center(feature)
const newFeature: Feature<Point> = turf.center(feature)
newFeature.properties = feature.properties
newFeature.id = feature.id
return newFeature
@ -286,10 +287,10 @@ export class GeoOperations {
way = { ...way }
way.geometry = { ...way.geometry }
way.geometry.type = "LineString"
way.geometry.coordinates = (<Polygon> way.geometry).coordinates[0]
way.geometry.coordinates = (<Polygon>way.geometry).coordinates[0]
}
return turf.nearestPointOnLine(<Feature<LineString>> way, point, { units: "kilometers" })
return turf.nearestPointOnLine(<Feature<LineString>>way, point, { units: "kilometers" })
}
public static toCSV(features: any[]): string {

View file

@ -19,7 +19,11 @@ export default class CreateNewNodeAction extends OsmCreateAction {
private readonly _lon: number
private readonly _snapOnto: OsmWay
private readonly _reusePointDistance: number
private readonly meta: { changeType: "create" | "import"; theme: string; specialMotivation?: string }
private readonly meta: {
changeType: "create" | "import"
theme: string
specialMotivation?: string
}
private readonly _reusePreviouslyCreatedPoint: boolean
constructor(

View file

@ -3,10 +3,10 @@ import OsmChangeAction from "./OsmChangeAction"
import { Changes } from "../Changes"
import { ChangeDescription } from "./ChangeDescription"
import ChangeTagAction from "./ChangeTagAction"
import {TagsFilter} from "../../Tags/TagsFilter"
import {And} from "../../Tags/And"
import {Tag} from "../../Tags/Tag"
import {OsmId} from "../../../Models/OsmFeature";
import { TagsFilter } from "../../Tags/TagsFilter"
import { And } from "../../Tags/And"
import { Tag } from "../../Tags/Tag"
import { OsmId } from "../../../Models/OsmFeature"
import { Utils } from "../../../Utils"
export default class DeleteAction extends OsmChangeAction {
@ -19,7 +19,6 @@ export default class DeleteAction extends OsmChangeAction {
private readonly _id: OsmId
private readonly _hardDelete: boolean
constructor(
id: OsmId,
softDeletionTags: TagsFilter | undefined,
@ -39,11 +38,12 @@ export default class DeleteAction extends OsmChangeAction {
this._softDeletionTags = new And(
Utils.NoNull([
softDeletionTags,
new Tag(
"fixme",
`A mapcomplete user marked this feature to be deleted (${meta.specialMotivation})`
)
]))
new Tag(
"fixme",
`A mapcomplete user marked this feature to be deleted (${meta.specialMotivation})`
),
])
)
}
}
/**
@ -63,8 +63,11 @@ export default class DeleteAction extends OsmChangeAction {
* const descr = await da.CreateChangeDescriptions(new Changes(), obj)
* descr[0] // => {doDelete: true, meta: {theme: "test", specialMotivation: "Testcase", changeType: "deletion"}, type: "node",id: 1 }
*/
public async CreateChangeDescriptions(changes: Changes, object?: OsmObject): Promise<ChangeDescription[]> {
const osmObject = object ?? await OsmObject.DownloadObjectAsync(this._id)
public async CreateChangeDescriptions(
changes: Changes,
object?: OsmObject
): Promise<ChangeDescription[]> {
const osmObject = object ?? (await OsmObject.DownloadObjectAsync(this._id))
if (this._hardDelete) {
return [

View file

@ -13,7 +13,7 @@ import { Utils } from "../../../Utils"
import { OsmConnection } from "../OsmConnection"
import { Feature } from "@turf/turf"
import FeaturePipeline from "../../FeatureSource/FeaturePipeline"
import {Geometry, LineString, Point, Polygon} from "geojson";
import { Geometry, LineString, Point, Polygon } from "geojson"
export default class ReplaceGeometryAction extends OsmChangeAction {
/**
@ -85,7 +85,7 @@ export default class ReplaceGeometryAction extends OsmChangeAction {
public async getPreview(): Promise<FeatureSource> {
const { closestIds, allNodesById, detachedNodes, reprojectedNodes } =
await this.GetClosestIds()
const preview: Feature<Geometry> [] = closestIds.map((newId, i) => {
const preview: Feature<Geometry>[] = closestIds.map((newId, i) => {
if (this.identicalTo[i] !== undefined) {
return undefined
}
@ -390,7 +390,7 @@ export default class ReplaceGeometryAction extends OsmChangeAction {
const node = allNodesById.get(id)
// Project the node onto the target way to calculate the new coordinates
const way = <Feature<LineString>> {
const way = <Feature<LineString>>{
type: "Feature",
properties: {},
geometry: {

View file

@ -1,10 +1,10 @@
import {Utils} from "../../Utils"
import { Utils } from "../../Utils"
import * as polygon_features from "../../assets/polygon-features.json"
import {Store, UIEventSource} from "../UIEventSource"
import {BBox} from "../BBox"
import { Store, UIEventSource } from "../UIEventSource"
import { BBox } from "../BBox"
import * as OsmToGeoJson from "osmtogeojson"
import {NodeId, OsmFeature, OsmId, OsmTags, RelationId, WayId} from "../../Models/OsmFeature"
import {Feature, LineString, Polygon} from "geojson";
import { NodeId, OsmFeature, OsmId, OsmTags, RelationId, WayId } from "../../Models/OsmFeature"
import { Feature, LineString, Polygon } from "geojson"
export abstract class OsmObject {
private static defaultBackend = "https://www.openstreetmap.org/"
@ -17,7 +17,7 @@ export abstract class OsmObject {
/**
* The OSM tags as simple object
*/
tags: OsmTags & {id: OsmId}
tags: OsmTags & { id: OsmId }
version: number
public changed: boolean = false
timestamp: Date
@ -41,9 +41,9 @@ export abstract class OsmObject {
this.backendURL = url
}
public static DownloadObject(id: NodeId, forceRefresh?: boolean): Store<OsmNode> ;
public static DownloadObject(id: RelationId, forceRefresh?: boolean): Store<OsmRelation> ;
public static DownloadObject(id: WayId, forceRefresh?: boolean): Store<OsmWay> ;
public static DownloadObject(id: NodeId, forceRefresh?: boolean): Store<OsmNode>
public static DownloadObject(id: RelationId, forceRefresh?: boolean): Store<OsmRelation>
public static DownloadObject(id: WayId, forceRefresh?: boolean): Store<OsmWay>
public static DownloadObject(id: string, forceRefresh: boolean = false): Store<OsmObject> {
let src: UIEventSource<OsmObject>
if (OsmObject.objectCache.has(id)) {
@ -73,12 +73,30 @@ export abstract class OsmObject {
return rawData.elements[0].tags
}
static async DownloadObjectAsync(id: NodeId, maxCacheAgeInSecs?: number): Promise<OsmNode | undefined>
static async DownloadObjectAsync(id: WayId, maxCacheAgeInSecs?: number): Promise<OsmWay | undefined>
static async DownloadObjectAsync(id: RelationId, maxCacheAgeInSecs?: number): Promise<OsmRelation | undefined>
static async DownloadObjectAsync(id: OsmId, maxCacheAgeInSecs?: number): Promise<OsmObject | undefined>
static async DownloadObjectAsync(id: string, maxCacheAgeInSecs?: number): Promise<OsmObject | undefined>
static async DownloadObjectAsync(id: string, maxCacheAgeInSecs?: number): Promise<OsmObject | undefined> {
static async DownloadObjectAsync(
id: NodeId,
maxCacheAgeInSecs?: number
): Promise<OsmNode | undefined>
static async DownloadObjectAsync(
id: WayId,
maxCacheAgeInSecs?: number
): Promise<OsmWay | undefined>
static async DownloadObjectAsync(
id: RelationId,
maxCacheAgeInSecs?: number
): Promise<OsmRelation | undefined>
static async DownloadObjectAsync(
id: OsmId,
maxCacheAgeInSecs?: number
): Promise<OsmObject | undefined>
static async DownloadObjectAsync(
id: string,
maxCacheAgeInSecs?: number
): Promise<OsmObject | undefined>
static async DownloadObjectAsync(
id: string,
maxCacheAgeInSecs?: number
): Promise<OsmObject | undefined> {
const splitted = id.split("/")
const type = splitted[0]
const idN = Number(splitted[1])
@ -210,7 +228,7 @@ export abstract class OsmObject {
case "relation":
osmObject = new OsmRelation(idN)
const allGeojsons = OsmToGeoJson.default(
{elements},
{ elements },
// @ts-ignore
{
flatProperties: true,
@ -264,14 +282,16 @@ export abstract class OsmObject {
return false
}
private static constructPolygonFeatures(): Map<string,
{ values: Set<string>; blacklist: boolean }> {
private static constructPolygonFeatures(): Map<
string,
{ values: Set<string>; blacklist: boolean }
> {
const result = new Map<string, { values: Set<string>; blacklist: boolean }>()
for (const polygonFeature of polygon_features["default"] ?? polygon_features) {
const key = polygonFeature.key
if (polygonFeature.polygon === "all") {
result.set(key, {values: null, blacklist: false})
result.set(key, { values: null, blacklist: false })
continue
}

View file

@ -9,7 +9,7 @@ import LayerConfig from "../Models/ThemeConfig/LayerConfig"
import { CountryCoder } from "latlon2country"
import Constants from "../Models/Constants"
import { TagUtils } from "./Tags/TagUtils"
import {Feature, LineString} from "geojson";
import { Feature, LineString } from "geojson"
export class SimpleMetaTagger {
public readonly keys: string[]
@ -424,23 +424,26 @@ export default class SimpleMetaTaggers {
private static directionCenterpoint = new SimpleMetaTagger(
{
keys:["_direction:centerpoint"],
keys: ["_direction:centerpoint"],
isLazy: true,
doc: "_direction:centerpoint is the direction of the linestring (in degrees) if one were standing at the projected centerpoint."
doc: "_direction:centerpoint is the direction of the linestring (in degrees) if one were standing at the projected centerpoint.",
},
(feature: Feature) => {
if(feature.geometry.type !== "LineString"){
if (feature.geometry.type !== "LineString") {
return false
}
const ls = <Feature<LineString>> feature;
const ls = <Feature<LineString>>feature
Object.defineProperty(feature.properties, "_direction:centerpoint", {
enumerable: false,
configurable: true,
get: () => {
const centroid = GeoOperations.centerpoint(feature)
const projected = GeoOperations.nearestPoint(ls, <[number,number]> centroid.geometry.coordinates)
const projected = GeoOperations.nearestPoint(
ls,
<[number, number]>centroid.geometry.coordinates
)
const nextPoint = ls.geometry.coordinates[projected.properties.index + 1]
const bearing = GeoOperations.bearing(projected.geometry.coordinates, nextPoint)
delete feature.properties["_direction:centerpoint"]

View file

@ -1,13 +1,13 @@
import {Tag} from "./Tag"
import {TagsFilter} from "./TagsFilter"
import {And} from "./And"
import {Utils} from "../../Utils"
import { Tag } from "./Tag"
import { TagsFilter } from "./TagsFilter"
import { And } from "./And"
import { Utils } from "../../Utils"
import ComparingTag from "./ComparingTag"
import {RegexTag} from "./RegexTag"
import { RegexTag } from "./RegexTag"
import SubstitutingTag from "./SubstitutingTag"
import {Or} from "./Or"
import {TagConfigJson} from "../../Models/ThemeConfig/Json/TagConfigJson"
import {isRegExp} from "util"
import { Or } from "./Or"
import { TagConfigJson } from "../../Models/ThemeConfig/Json/TagConfigJson"
import { isRegExp } from "util"
import * as key_counts from "../../assets/key_totals.json"
type Tags = Record<string, string>
@ -373,7 +373,7 @@ export class TagUtils {
return null
}
const [_, key, invert, modifier, value] = match
return {key, value, invert: invert == "!", modifier: modifier == "i~" ? "i" : ""}
return { key, value, invert: invert == "!", modifier: modifier == "i~" ? "i" : "" }
}
/**
@ -557,9 +557,9 @@ export class TagUtils {
if (tag.indexOf("~~") >= 0) {
const split = Utils.SplitFirst(tag, "~~")
let keyRegex: RegExp;
let keyRegex: RegExp
if (split[0] === "*") {
keyRegex = new RegExp(".+","i")
keyRegex = new RegExp(".+", "i")
} else {
keyRegex = new RegExp("^(" + split[0] + ")$")
}
@ -569,10 +569,7 @@ export class TagUtils {
} else {
valueRegex = new RegExp("^(" + split[1] + ")$", "s")
}
return new RegexTag(
keyRegex,
valueRegex
)
return new RegexTag(keyRegex, valueRegex)
}
const withRegex = TagUtils.parseRegexOperator(tag)
if (withRegex != null) {
@ -627,7 +624,7 @@ export class TagUtils {
)
}
if (split[1] === "") {
return new RegexTag(split[0], /.+/si)
return new RegexTag(split[0], /.+/is)
}
return new RegexTag(split[0], split[1], true)
}

View file

@ -681,14 +681,20 @@ export class UIEventSource<T> extends Store<T> {
/**
* Monoidal map which results in a read-only store. 'undefined' is passed 'as is'
* Given a function 'f', will construct a new UIEventSource where the contents will always be "f(this.data)'
*/
*/
public mapD<J>(f: (t: T) => J, extraSources: Store<any>[] = []): Store<J | undefined> {
return new MappedStore(this, t => {
if(t === undefined){
return undefined
}
return f(t)
}, extraSources, this._callbacks, this.data === undefined ? undefined : f(this.data))
return new MappedStore(
this,
(t) => {
if (t === undefined) {
return undefined
}
return f(t)
},
extraSources,
this._callbacks,
this.data === undefined ? undefined : f(this.data)
)
}
/**

View file

@ -6,7 +6,7 @@ import Hash from "./Hash"
import { Utils } from "../../Utils"
export class QueryParameters {
static defaults : Record<string, string> = {}
static defaults: Record<string, string> = {}
static documentation: Map<string, string> = new Map<string, string>()
private static order: string[] = ["layout", "test", "z", "lat", "lon"]
protected static readonly _wasInitialized: Set<string> = new Set()
@ -105,9 +105,9 @@ export class QueryParameters {
}
if (!Utils.runningFromConsole) {
// Don't pollute the history every time a parameter changes
try{
try {
history.replaceState(null, "", "?" + parts.join("&") + Hash.Current())
}catch(e){
} catch (e) {
console.error(e)
}
}

View file

@ -1,64 +1,90 @@
import {Concat, Conversion, DesugaringContext, DesugaringStep, Each, FirstOf, Fuse, On, SetDefault,} from "./Conversion"
import {LayerConfigJson} from "../Json/LayerConfigJson"
import {TagRenderingConfigJson} from "../Json/TagRenderingConfigJson"
import {Utils} from "../../../Utils"
import {
Concat,
Conversion,
DesugaringContext,
DesugaringStep,
Each,
FirstOf,
Fuse,
On,
SetDefault,
} from "./Conversion"
import { LayerConfigJson } from "../Json/LayerConfigJson"
import { TagRenderingConfigJson } from "../Json/TagRenderingConfigJson"
import { Utils } from "../../../Utils"
import RewritableConfigJson from "../Json/RewritableConfigJson"
import SpecialVisualizations from "../../../UI/SpecialVisualizations"
import Translations from "../../../UI/i18n/Translations"
import {Translation} from "../../../UI/i18n/Translation"
import { Translation } from "../../../UI/i18n/Translation"
import * as tagrenderingconfigmeta from "../../../assets/tagrenderingconfigmeta.json"
import {AddContextToTranslations} from "./AddContextToTranslations"
import FilterConfigJson from "../Json/FilterConfigJson";
import { AddContextToTranslations } from "./AddContextToTranslations"
import FilterConfigJson from "../Json/FilterConfigJson"
import * as predifined_filters from "../../../assets/layers/filters/filters.json"
class ExpandFilter extends DesugaringStep<LayerConfigJson>{
private static load_filters(): Map<string, FilterConfigJson>{
let filters = new Map<string, FilterConfigJson>();
for (const filter of (<FilterConfigJson[]>predifined_filters.filter)) {
class ExpandFilter extends DesugaringStep<LayerConfigJson> {
private static load_filters(): Map<string, FilterConfigJson> {
let filters = new Map<string, FilterConfigJson>()
for (const filter of <FilterConfigJson[]>predifined_filters.filter) {
filters.set(filter.id, filter)
}
return filters;
return filters
}
private static readonly predefinedFilters = ExpandFilter.load_filters();
private static readonly predefinedFilters = ExpandFilter.load_filters()
constructor() {
super("Expands filters: replaces a shorthand by the value found in 'filters.json'", ["filter"], "ExpandFilter");
super(
"Expands filters: replaces a shorthand by the value found in 'filters.json'",
["filter"],
"ExpandFilter"
)
}
convert(json: LayerConfigJson, context: string): { result: LayerConfigJson; errors?: string[]; warnings?: string[]; information?: string[] } {
if(json.filter === undefined || json.filter === null){
return {result: json} // Nothing to change here
convert(
json: LayerConfigJson,
context: string
): { result: LayerConfigJson; errors?: string[]; warnings?: string[]; information?: string[] } {
if (json.filter === undefined || json.filter === null) {
return { result: json } // Nothing to change here
}
if( json.filter["sameAs"] !== undefined){
return {result: json} // Nothing to change here
if (json.filter["sameAs"] !== undefined) {
return { result: json } // Nothing to change here
}
const newFilters : FilterConfigJson[] = []
const errors :string[]= []
for (const filter of (<(FilterConfigJson|string)[]> json.filter)) {
const newFilters: FilterConfigJson[] = []
const errors: string[] = []
for (const filter of <(FilterConfigJson | string)[]>json.filter) {
if (typeof filter !== "string") {
newFilters.push(filter)
continue
}
// Search for the filter:
const found = ExpandFilter.predefinedFilters.get(filter)
if(found === undefined){
const suggestions = Utils.sortedByLevenshteinDistance(filter, Array.from(ExpandFilter.predefinedFilters.keys()), t => t)
const err = context+".filter: while searching for predifined filter "+filter+": this filter is not found. Perhaps you meant one of: "+suggestions
if (found === undefined) {
const suggestions = Utils.sortedByLevenshteinDistance(
filter,
Array.from(ExpandFilter.predefinedFilters.keys()),
(t) => t
)
const err =
context +
".filter: while searching for predifined filter " +
filter +
": this filter is not found. Perhaps you meant one of: " +
suggestions
errors.push(err)
}
newFilters.push(found)
}
return {result: {
...json, filter: newFilters
}, errors};
return {
result: {
...json,
filter: newFilters,
},
errors,
}
}
}
class ExpandTagRendering extends Conversion<

View file

@ -1,21 +1,21 @@
import {DesugaringStep, Each, Fuse, On} from "./Conversion"
import {LayerConfigJson} from "../Json/LayerConfigJson"
import { DesugaringStep, Each, Fuse, On } from "./Conversion"
import { LayerConfigJson } from "../Json/LayerConfigJson"
import LayerConfig from "../LayerConfig"
import {Utils} from "../../../Utils"
import { Utils } from "../../../Utils"
import Constants from "../../Constants"
import {Translation} from "../../../UI/i18n/Translation"
import {LayoutConfigJson} from "../Json/LayoutConfigJson"
import { Translation } from "../../../UI/i18n/Translation"
import { LayoutConfigJson } from "../Json/LayoutConfigJson"
import LayoutConfig from "../LayoutConfig"
import {TagRenderingConfigJson} from "../Json/TagRenderingConfigJson"
import {TagUtils} from "../../../Logic/Tags/TagUtils"
import {ExtractImages} from "./FixImages"
import { TagRenderingConfigJson } from "../Json/TagRenderingConfigJson"
import { TagUtils } from "../../../Logic/Tags/TagUtils"
import { ExtractImages } from "./FixImages"
import ScriptUtils from "../../../scripts/ScriptUtils"
import {And} from "../../../Logic/Tags/And"
import { And } from "../../../Logic/Tags/And"
import Translations from "../../../UI/i18n/Translations"
import Svg from "../../../Svg"
import {QuestionableTagRenderingConfigJson} from "../Json/QuestionableTagRenderingConfigJson"
import FilterConfigJson from "../Json/FilterConfigJson";
import DeleteConfig from "../DeleteConfig";
import { QuestionableTagRenderingConfigJson } from "../Json/QuestionableTagRenderingConfigJson"
import FilterConfigJson from "../Json/FilterConfigJson"
import DeleteConfig from "../DeleteConfig"
class ValidateLanguageCompleteness extends DesugaringStep<any> {
private readonly _languages: string[]
@ -42,12 +42,12 @@ class ValidateLanguageCompleteness extends DesugaringStep<any> {
.forEach((missing) => {
errors.push(
context +
"A theme should be translation-complete for " +
neededLanguage +
", but it lacks a translation for " +
missing.context +
".\n\tThe known translation is " +
missing.tr.textFor("en")
"A theme should be translation-complete for " +
neededLanguage +
", but it lacks a translation for " +
missing.context +
".\n\tThe known translation is " +
missing.tr.textFor("en")
)
})
}
@ -81,16 +81,16 @@ export class DoesImageExist extends DesugaringStep<string> {
const information = []
if (image.indexOf("{") >= 0) {
information.push("Ignoring image with { in the path: " + image)
return {result: image}
return { result: image }
}
if (image === "assets/SocialImage.png") {
return {result: image}
return { result: image }
}
if (image.match(/[a-z]*/)) {
if (Svg.All[image + ".svg"] !== undefined) {
// This is a builtin img, e.g. 'checkmark' or 'crosshair'
return {result: image}
return { result: image }
}
}
@ -157,15 +157,15 @@ class ValidateTheme extends DesugaringStep<LayoutConfigJson> {
if (json["units"] !== undefined) {
errors.push(
"The theme " +
json.id +
" has units defined - these should be defined on the layer instead. (Hint: use overrideAll: { '+units': ... }) "
json.id +
" has units defined - these should be defined on the layer instead. (Hint: use overrideAll: { '+units': ... }) "
)
}
if (json["roamingRenderings"] !== undefined) {
errors.push(
"Theme " +
json.id +
" contains an old 'roamingRenderings'. Use an 'overrideAll' instead"
json.id +
" contains an old 'roamingRenderings'. Use an 'overrideAll' instead"
)
}
}
@ -180,10 +180,10 @@ class ValidateTheme extends DesugaringStep<LayoutConfigJson> {
for (const remoteImage of remoteImages) {
errors.push(
"Found a remote image: " +
remoteImage +
" in theme " +
json.id +
", please download it."
remoteImage +
" in theme " +
json.id +
", please download it."
)
}
for (const image of images) {
@ -212,10 +212,10 @@ class ValidateTheme extends DesugaringStep<LayoutConfigJson> {
const h = parseInt(height)
if (w < 370 || h < 370) {
const e: string = [
`the icon for theme ${json.id} is too small. Please rescale the icon at ${json.icon}`,
`Even though an SVG is 'infinitely scaleable', the icon should be dimensioned bigger. One of the build steps of the theme does convert the image to a PNG (to serve as PWA-icon) and having a small dimension will cause blurry images.`,
` Width = ${width} height = ${height}; we recommend a size of at least 500px * 500px and to use a square aspect ratio.`,
].join("\n")
`the icon for theme ${json.id} is too small. Please rescale the icon at ${json.icon}`,
`Even though an SVG is 'infinitely scaleable', the icon should be dimensioned bigger. One of the build steps of the theme does convert the image to a PNG (to serve as PWA-icon) and having a small dimension will cause blurry images.`,
` Width = ${width} height = ${height}; we recommend a size of at least 500px * 500px and to use a square aspect ratio.`,
].join("\n")
;(json.hideFromOverview ? warnings : errors).push(e)
}
})
@ -227,7 +227,6 @@ class ValidateTheme extends DesugaringStep<LayoutConfigJson> {
try {
if (this._isBuiltin) {
if (theme.id !== theme.id.toLowerCase()) {
errors.push("Theme ids should be in lowercase, but it is " + theme.id)
}
@ -239,12 +238,12 @@ class ValidateTheme extends DesugaringStep<LayoutConfigJson> {
if (theme.id !== filename) {
errors.push(
"Theme ids should be the same as the name.json, but we got id: " +
theme.id +
" and filename " +
filename +
" (" +
this._path +
")"
theme.id +
" and filename " +
filename +
" (" +
this._path +
")"
)
}
this._validateImage.convertJoin(
@ -323,7 +322,7 @@ class OverrideShadowingCheck extends DesugaringStep<LayoutConfigJson> {
): { result: LayoutConfigJson; errors?: string[]; warnings?: string[] } {
const overrideAll = json.overrideAll
if (overrideAll === undefined) {
return {result: json}
return { result: json }
}
const errors = []
@ -350,7 +349,7 @@ class OverrideShadowingCheck extends DesugaringStep<LayoutConfigJson> {
}
}
return {result: json, errors}
return { result: json, errors }
}
}
@ -460,7 +459,7 @@ export class DetectShadowedMappings extends DesugaringStep<QuestionableTagRender
const errors = []
const warnings = []
if (json.mappings === undefined || json.mappings.length === 0) {
return {result: json}
return { result: json }
}
const defaultProperties = {}
for (const calculatedTagName of this._calculatedTagNames) {
@ -489,7 +488,7 @@ export class DetectShadowedMappings extends DesugaringStep<QuestionableTagRender
}
const keyValues = parsedConditions[i].asChange(defaultProperties)
const properties = {}
keyValues.forEach(({k, v}) => {
keyValues.forEach(({ k, v }) => {
properties[k] = v
})
for (let j = 0; j < i; j++) {
@ -506,10 +505,10 @@ export class DetectShadowedMappings extends DesugaringStep<QuestionableTagRender
// The current mapping is shadowed!
errors.push(`At ${context}: Mapping ${i} is shadowed by mapping ${j} and will thus never be shown:
The mapping ${parsedConditions[i].asHumanString(
false,
false,
{}
)} is fully matched by a previous mapping (namely ${j}), which matches:
false,
false,
{}
)} is fully matched by a previous mapping (namely ${j}), which matches:
${parsedConditions[j].asHumanString(false, false, {})}.
To fix this problem, you can try to:
@ -578,7 +577,7 @@ export class DetectMappingsWithImages extends DesugaringStep<TagRenderingConfigJ
const warnings: string[] = []
const information: string[] = []
if (json.mappings === undefined || json.mappings.length === 0) {
return {result: json}
return { result: json }
}
const ignoreToken = "ignore-image-in-then"
for (let i = 0; i < json.mappings.length; i++) {
@ -664,13 +663,13 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
if (json.title === undefined) {
errors.push(
context +
": this layer does not have a title defined but it does have tagRenderings. Not having a title will disable the popups, resulting in an unclickable element. Please add a title. If not having a popup is intended and the tagrenderings need to be kept (e.g. in a library layer), set `title: null` to disable this error."
": this layer does not have a title defined but it does have tagRenderings. Not having a title will disable the popups, resulting in an unclickable element. Please add a title. If not having a popup is intended and the tagrenderings need to be kept (e.g. in a library layer), set `title: null` to disable this error."
)
}
if (json.title === null) {
information.push(
context +
": title is `null`. This results in an element that cannot be clicked - even though tagRenderings is set."
": title is `null`. This results in an element that cannot be clicked - even though tagRenderings is set."
)
}
}
@ -697,16 +696,16 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
if (duplicates.length > 0) {
errors.push(
"At " +
context +
": some tagrenderings have a duplicate id: " +
duplicates.join(", ")
context +
": some tagrenderings have a duplicate id: " +
duplicates.join(", ")
)
}
}
if(json.deletion !== undefined && json.deletion instanceof DeleteConfig){
if(json.deletion.softDeletionTags === undefined){
warnings.push("No soft-deletion tags in deletion block for layer "+json.id)
if (json.deletion !== undefined && json.deletion instanceof DeleteConfig) {
if (json.deletion.softDeletionTags === undefined) {
warnings.push("No soft-deletion tags in deletion block for layer " + json.id)
}
}
@ -717,8 +716,8 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
if (json["overpassTags"] !== undefined) {
errors.push(
"Layer " +
json.id +
'still uses the old \'overpassTags\'-format. Please use "source": {"osmTags": <tags>}\' instead of "overpassTags": <tags> (note: this isn\'t your fault, the custom theme generator still spits out the old format)'
json.id +
'still uses the old \'overpassTags\'-format. Please use "source": {"osmTags": <tags>}\' instead of "overpassTags": <tags> (note: this isn\'t your fault, the custom theme generator still spits out the old format)'
)
}
const forbiddenTopLevel = [
@ -736,18 +735,18 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
if (json[forbiddenKey] !== undefined)
errors.push(
context +
": layer " +
json.id +
" still has a forbidden key " +
forbiddenKey
": layer " +
json.id +
" still has a forbidden key " +
forbiddenKey
)
}
if (json["hideUnderlayingFeaturesMinPercentage"] !== undefined) {
errors.push(
context +
": layer " +
json.id +
" contains an old 'hideUnderlayingFeaturesMinPercentage'"
": layer " +
json.id +
" contains an old 'hideUnderlayingFeaturesMinPercentage'"
)
}
@ -764,9 +763,9 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
if (this._path != undefined && this._path.indexOf(expected) < 0) {
errors.push(
"Layer is in an incorrect place. The path is " +
this._path +
", but expected " +
expected
this._path +
", but expected " +
expected
)
}
}
@ -824,9 +823,9 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
if (hasCondition?.length > 0) {
errors.push(
"At " +
context +
":\n One or more icons in the mapRenderings have a condition set. Don't do this, as this will result in an invisible but clickable element. Use extra filters in the source instead. The offending mapRenderings are:\n" +
JSON.stringify(hasCondition, null, " ")
context +
":\n One or more icons in the mapRenderings have a condition set. Don't do this, as this will result in an invisible but clickable element. Use extra filters in the source instead. The offending mapRenderings are:\n" +
JSON.stringify(hasCondition, null, " ")
)
}
}
@ -838,7 +837,7 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
const preset = json.presets[i]
const tags: { k: string; v: string }[] = new And(
preset.tags.map((t) => TagUtils.Tag(t))
).asChange({id: "node/-1"})
).asChange({ id: "node/-1" })
const properties = {}
for (const tag of tags) {
properties[tag.k] = tag.v
@ -847,12 +846,12 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
if (!doMatch) {
errors.push(
context +
".presets[" +
i +
"]: This preset does not match the required tags of this layer. This implies that a newly added point will not show up.\n A newly created point will have properties: " +
JSON.stringify(properties) +
"\n The required tags are: " +
baseTags.asHumanString(false, false, {})
".presets[" +
i +
"]: This preset does not match the required tags of this layer. This implies that a newly added point will not show up.\n A newly created point will have properties: " +
JSON.stringify(properties) +
"\n The required tags are: " +
baseTags.asHumanString(false, false, {})
)
}
}
@ -870,32 +869,45 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
}
}
export class DetectDuplicateFilters extends DesugaringStep<{ layers: LayerConfigJson[], themes: LayoutConfigJson[]}> {
export class DetectDuplicateFilters extends DesugaringStep<{
layers: LayerConfigJson[]
themes: LayoutConfigJson[]
}> {
constructor() {
super("Tries to detect layers where a shared filter can be used (or where similar filters occur)", [], "DetectDuplicateFilters");
super(
"Tries to detect layers where a shared filter can be used (or where similar filters occur)",
[],
"DetectDuplicateFilters"
)
}
/**
* Add all filter options into 'perOsmTag'
*/
private addLayerFilters(layer: LayerConfigJson, perOsmTag: Map<string, {
private addLayerFilters(
layer: LayerConfigJson,
layout: LayoutConfigJson | undefined,
filter: FilterConfigJson
}[]>, layout?: LayoutConfigJson | undefined): void {
perOsmTag: Map<
string,
{
layer: LayerConfigJson
layout: LayoutConfigJson | undefined
filter: FilterConfigJson
}[]
>,
layout?: LayoutConfigJson | undefined
): void {
if (layer.filter === undefined || layer.filter === null) {
return;
return
}
if (layer.filter["sameAs"] !== undefined) {
return;
return
}
for (const filter of (<(string | FilterConfigJson) []>layer.filter)) {
for (const filter of <(string | FilterConfigJson)[]>layer.filter) {
if (typeof filter === "string") {
continue
}
if(filter["#"]?.indexOf("ignore-possible-duplicate")>=0){
if (filter["#"]?.indexOf("ignore-possible-duplicate") >= 0) {
continue
}
@ -908,57 +920,66 @@ export class DetectDuplicateFilters extends DesugaringStep<{ layers: LayerConfig
perOsmTag.set(key, [])
}
perOsmTag.get(key).push({
layer, filter, layout
layer,
filter,
layout,
})
}
}
}
convert(json: { layers: LayerConfigJson[]; themes: LayoutConfigJson[] }, context: string): { result: { layers: LayerConfigJson[]; themes: LayoutConfigJson[] }; errors?: string[]; warnings?: string[]; information?: string[] } {
convert(
json: { layers: LayerConfigJson[]; themes: LayoutConfigJson[] },
context: string
): {
result: { layers: LayerConfigJson[]; themes: LayoutConfigJson[] }
errors?: string[]
warnings?: string[]
information?: string[]
} {
const errors: string[] = []
const warnings: string[] = []
const information: string[] = []
const {layers, themes} = json
const perOsmTag = new Map<string, {
layer: LayerConfigJson,
layout: LayoutConfigJson | undefined,
filter: FilterConfigJson
}[]>()
const { layers, themes } = json
const perOsmTag = new Map<
string,
{
layer: LayerConfigJson
layout: LayoutConfigJson | undefined
filter: FilterConfigJson
}[]
>()
for (const layer of layers) {
this.addLayerFilters(layer, perOsmTag)
}
for (const theme of themes) {
if(theme.id === "personal"){
if (theme.id === "personal") {
continue
}
for (const layer of theme.layers) {
if(typeof layer === "string"){
if (typeof layer === "string") {
continue
}
if(layer["builtin"] !== undefined){
if (layer["builtin"] !== undefined) {
continue
}
this.addLayerFilters(<LayerConfigJson> layer, perOsmTag, theme)
this.addLayerFilters(<LayerConfigJson>layer, perOsmTag, theme)
}
}
// At this point, we have gathered all filters per tag - time to find duplicates
perOsmTag.forEach((value, key) => {
if(value.length <= 1){
if (value.length <= 1) {
// Seen this key just once, it is unique
return;
return
}
let msg = "Possible duplicate filter: "+ key
for (const {filter, layer, layout} of value) {
let msg = "Possible duplicate filter: " + key
for (const { filter, layer, layout } of value) {
let id = ""
if(layout !== undefined){
if (layout !== undefined) {
id = layout.id + ":"
}
msg += `\n - ${id}${layer.id}.${filter.id}`
@ -970,8 +991,7 @@ export class DetectDuplicateFilters extends DesugaringStep<{ layers: LayerConfig
result: json,
errors,
warnings,
information
};
information,
}
}
}

View file

@ -1,15 +1,15 @@
import {Translation} from "../../UI/i18n/Translation"
import {TagsFilter} from "../../Logic/Tags/TagsFilter"
import { Translation } from "../../UI/i18n/Translation"
import { TagsFilter } from "../../Logic/Tags/TagsFilter"
import FilterConfigJson from "./Json/FilterConfigJson"
import Translations from "../../UI/i18n/Translations"
import {TagUtils} from "../../Logic/Tags/TagUtils"
import { TagUtils } from "../../Logic/Tags/TagUtils"
import ValidatedTextField from "../../UI/Input/ValidatedTextField"
import {TagConfigJson} from "./Json/TagConfigJson"
import {UIEventSource} from "../../Logic/UIEventSource"
import {FilterState} from "../FilteredLayer"
import {QueryParameters} from "../../Logic/Web/QueryParameters"
import {Utils} from "../../Utils"
import {RegexTag} from "../../Logic/Tags/RegexTag"
import { TagConfigJson } from "./Json/TagConfigJson"
import { UIEventSource } from "../../Logic/UIEventSource"
import { FilterState } from "../FilteredLayer"
import { QueryParameters } from "../../Logic/Web/QueryParameters"
import { Utils } from "../../Utils"
import { RegexTag } from "../../Logic/Tags/RegexTag"
export default class FilterConfig {
public readonly id: string

View file

@ -267,7 +267,10 @@ export default class TagRenderingConfig {
if (this.freeform.key === "wikidata" && txt.indexOf("{wikipedia()") >= 0) {
continue
}
if (this.freeform.type === "wikidata" && txt.indexOf(`{wikidata_label(${this.freeform.key})`) >= 0) {
if (
this.freeform.type === "wikidata" &&
txt.indexOf(`{wikidata_label(${this.freeform.key})`) >= 0
) {
continue
}
throw `${context}: The rendering for language ${ln} does not contain the freeform key {${this.freeform.key}}. This is a bug, as this rendering should show exactly this freeform key!\nThe rendering is ${txt} `

View file

@ -7,7 +7,6 @@ import Svg from "../../Svg"
* The little 'translate'-icon next to every icon + some static helper functions
*/
export default class LinkToWeblate extends VariableUiElement {
constructor(context: string, availableTranslations: object) {
super(
Locale.language.map(

View file

@ -3,7 +3,7 @@ import Loc from "../../Models/Loc"
import BaseLayer from "../../Models/BaseLayer"
import { UIEventSource } from "../../Logic/UIEventSource"
import { BBox } from "../../Logic/BBox"
import {deprecate} from "util";
import { deprecate } from "util"
export interface MinimapOptions {
background?: UIEventSource<BaseLayer>
@ -27,7 +27,7 @@ export interface MinimapObj {
TakeScreenshot(format): Promise<string>
TakeScreenshot(format: "image"): Promise<string>
TakeScreenshot(format:"blob"): Promise<Blob>
TakeScreenshot(format: "blob"): Promise<Blob>
TakeScreenshot(format?: "image" | "blob"): Promise<string | Blob>
}

View file

@ -114,22 +114,22 @@ export default class MinimapImplementation extends BaseUIElement implements Mini
* @param format: image: give a base64 encoded png image;
* @constructor
*/
public async TakeScreenshot(): Promise<string> ;
public async TakeScreenshot(format: "image"): Promise<string> ;
public async TakeScreenshot(format: "blob"): Promise<Blob> ;
public async TakeScreenshot(format: "image" | "blob"): Promise<string | Blob> ;
public async TakeScreenshot(): Promise<string>
public async TakeScreenshot(format: "image"): Promise<string>
public async TakeScreenshot(format: "blob"): Promise<Blob>
public async TakeScreenshot(format: "image" | "blob"): Promise<string | Blob>
public async TakeScreenshot(format: "image" | "blob" = "image"): Promise<string | Blob> {
console.log("Taking a screenshot...")
const screenshotter = new SimpleMapScreenshoter()
screenshotter.addTo(this.leafletMap.data)
const result = <any> await screenshotter.takeScreen((<any> format) ?? "image")
if(format === "image" && typeof result === "string"){
const result = <any>await screenshotter.takeScreen(<any>format ?? "image")
if (format === "image" && typeof result === "string") {
return result
}
if(format === "blob" && result instanceof Blob){
if (format === "blob" && result instanceof Blob) {
return result
}
throw "Something went wrong while creating the screenshot: "+result
throw "Something went wrong while creating the screenshot: " + result
}
protected InnerConstructElement(): HTMLElement {

View file

@ -148,7 +148,13 @@ export default abstract class BaseUIElement {
} catch (e) {
const domExc = e as DOMException
if (domExc) {
console.error("An exception occured", domExc.code, domExc.message, domExc.name, domExc)
console.error(
"An exception occured",
domExc.code,
domExc.message,
domExc.name,
domExc
)
}
console.error(e)
}

View file

@ -1,62 +1,73 @@
import Combine from "../Base/Combine";
import {FlowPanelFactory, FlowStep} from "../ImportFlow/FlowStep";
import {ImmutableStore, Store, UIEventSource} from "../../Logic/UIEventSource";
import {InputElement} from "../Input/InputElement";
import {SvgToPdf, SvgToPdfOptions} from "../../Utils/svgToPdf";
import {FixedInputElement} from "../Input/FixedInputElement";
import {FixedUiElement} from "../Base/FixedUiElement";
import FileSelectorButton from "../Input/FileSelectorButton";
import InputElementMap from "../Input/InputElementMap";
import {RadioButton} from "../Input/RadioButton";
import {Utils} from "../../Utils";
import {VariableUiElement} from "../Base/VariableUIElement";
import Loading from "../Base/Loading";
import BaseUIElement from "../BaseUIElement";
import Img from "../Base/Img";
import Title from "../Base/Title";
import {CheckBox} from "../Input/Checkboxes";
import Minimap from "../Base/Minimap";
import SearchAndGo from "./SearchAndGo";
import Toggle from "../Input/Toggle";
import List from "../Base/List";
import LeftIndex from "../Base/LeftIndex";
import Constants from "../../Models/Constants";
import Toggleable from "../Base/Toggleable";
import Lazy from "../Base/Lazy";
import LinkToWeblate from "../Base/LinkToWeblate";
import Link from "../Base/Link";
import {SearchablePillsSelector} from "../Input/SearchableMappingsSelector";
import Combine from "../Base/Combine"
import { FlowPanelFactory, FlowStep } from "../ImportFlow/FlowStep"
import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource"
import { InputElement } from "../Input/InputElement"
import { SvgToPdf, SvgToPdfOptions } from "../../Utils/svgToPdf"
import { FixedInputElement } from "../Input/FixedInputElement"
import { FixedUiElement } from "../Base/FixedUiElement"
import FileSelectorButton from "../Input/FileSelectorButton"
import InputElementMap from "../Input/InputElementMap"
import { RadioButton } from "../Input/RadioButton"
import { Utils } from "../../Utils"
import { VariableUiElement } from "../Base/VariableUIElement"
import Loading from "../Base/Loading"
import BaseUIElement from "../BaseUIElement"
import Img from "../Base/Img"
import Title from "../Base/Title"
import { CheckBox } from "../Input/Checkboxes"
import Minimap from "../Base/Minimap"
import SearchAndGo from "./SearchAndGo"
import Toggle from "../Input/Toggle"
import List from "../Base/List"
import LeftIndex from "../Base/LeftIndex"
import Constants from "../../Models/Constants"
import Toggleable from "../Base/Toggleable"
import Lazy from "../Base/Lazy"
import LinkToWeblate from "../Base/LinkToWeblate"
import Link from "../Base/Link"
import { SearchablePillsSelector } from "../Input/SearchableMappingsSelector"
import * as languages from "../../assets/language_translations.json"
import {Translation} from "../i18n/Translation";
import { Translation } from "../i18n/Translation"
class SelectTemplate extends Combine implements FlowStep<{ title: string, pages: string[] }> {
readonly IsValid: Store<boolean>;
readonly Value: Store<{ title: string, pages: string[] }>;
class SelectTemplate extends Combine implements FlowStep<{ title: string; pages: string[] }> {
readonly IsValid: Store<boolean>
readonly Value: Store<{ title: string; pages: string[] }>
constructor() {
const elements: InputElement<{ templateName: string, pages: string[] }>[] = []
const elements: InputElement<{ templateName: string; pages: string[] }>[] = []
for (const templateName in SvgToPdf.templates) {
const template = SvgToPdf.templates[templateName]
elements.push(new FixedInputElement(
new Combine([new FixedUiElement(templateName).SetClass("font-bold pr-2"),
template.description
])
, new UIEventSource({templateName, pages: template.pages})))
elements.push(
new FixedInputElement(
new Combine([
new FixedUiElement(templateName).SetClass("font-bold pr-2"),
template.description,
]),
new UIEventSource({ templateName, pages: template.pages })
)
)
}
const file = new FileSelectorButton(new FixedUiElement("Select an svg image which acts as template"), {
acceptType: "image/svg+xml",
allowMultiple: true
})
const fileMapped = new InputElementMap<FileList, { templateName: string, pages: string[], fromFile: true }>(file, (x0, x1) => x0 === x1,
const file = new FileSelectorButton(
new FixedUiElement("Select an svg image which acts as template"),
{
acceptType: "image/svg+xml",
allowMultiple: true,
}
)
const fileMapped = new InputElementMap<
FileList,
{ templateName: string; pages: string[]; fromFile: true }
>(
file,
(x0, x1) => x0 === x1,
(filelist) => {
if (filelist === undefined) {
return undefined;
return undefined
}
const pages = []
let templateName: string = undefined;
let templateName: string = undefined
for (const file of Array.from(filelist)) {
if (templateName == undefined) {
templateName = file.name.substring(file.name.lastIndexOf("/") + 1)
templateName = templateName.substring(0, templateName.lastIndexOf("."))
@ -67,40 +78,46 @@ class SelectTemplate extends Combine implements FlowStep<{ title: string, pages:
return {
templateName,
pages,
fromFile: true
fromFile: true,
}
},
_ => undefined
(_) => undefined
)
elements.push(fileMapped)
const radio = new RadioButton(elements, {selectFirstAsDefault: true})
const radio = new RadioButton(elements, { selectFirstAsDefault: true })
const loaded: Store<{ success: { title: string, pages: string[] } } | { error: any }> = radio.GetValue().bind(template => {
if (template === undefined) {
return undefined
}
if (template["fromFile"]) {
return UIEventSource.FromPromiseWithErr(Promise.all(template.pages).then(pages => ({
const loaded: Store<{ success: { title: string; pages: string[] } } | { error: any }> =
radio.GetValue().bind((template) => {
if (template === undefined) {
return undefined
}
if (template["fromFile"]) {
return UIEventSource.FromPromiseWithErr(
Promise.all(template.pages).then((pages) => ({
title: template.templateName,
pages,
}))
)
}
const urls = template.pages.map((p) => SelectTemplate.ToUrl(p))
const dloadAll: Promise<{ title: string; pages: string[] }> = Promise.all(
urls.map((url) => Utils.download(url))
).then((pages) => ({
pages,
title: template.templateName,
pages
})))
}
const urls = template.pages.map(p => SelectTemplate.ToUrl(p))
const dloadAll: Promise<{ title: string, pages: string[] }> = Promise.all(urls.map(url => Utils.download(url))).then(pages => ({
pages,
title: template.templateName
}))
}))
return UIEventSource.FromPromiseWithErr(dloadAll)
})
return UIEventSource.FromPromiseWithErr(dloadAll)
})
const preview = new VariableUiElement(
loaded.map(pages => {
loaded.map((pages) => {
if (pages === undefined) {
return new Loading()
}
if (pages["error"] !== undefined) {
return new FixedUiElement("Loading preview failed: " + pages["err"]).SetClass("alert")
return new FixedUiElement("Loading preview failed: " + pages["err"]).SetClass(
"alert"
)
}
const svgs = pages["success"].pages
if (svgs.length === 0) {
@ -108,22 +125,16 @@ class SelectTemplate extends Combine implements FlowStep<{ title: string, pages:
}
const els: BaseUIElement[] = []
for (const pageSrc of svgs) {
const el = new Img(pageSrc, true)
.SetClass("w-96 m-2 border-black border-2")
const el = new Img(pageSrc, true).SetClass("w-96 m-2 border-black border-2")
els.push(el)
}
return new Combine(els).SetClass("flex border border-subtle rounded-xl");
return new Combine(els).SetClass("flex border border-subtle rounded-xl")
})
)
super([
new Title("Select template"),
radio,
new Title("Preview"),
preview
]);
this.Value = loaded.map(l => l === undefined ? undefined : l["success"])
this.IsValid = this.Value.map(v => v !== undefined)
super([new Title("Select template"), radio, new Title("Preview"), preview])
this.Value = loaded.map((l) => (l === undefined ? undefined : l["success"]))
this.IsValid = this.Value.map((v) => v !== undefined)
}
public static ToUrl(spec: string) {
@ -134,63 +145,78 @@ class SelectTemplate extends Combine implements FlowStep<{ title: string, pages:
path = path.substring(0, path.lastIndexOf("/"))
return window.location.protocol + "//" + window.location.host + path + "/" + spec
}
}
class SelectPdfOptions extends Combine implements FlowStep<{ title: string, pages: string[], options: SvgToPdfOptions }> {
readonly IsValid: Store<boolean>;
readonly Value: Store<{ title: string, pages: string[], options: SvgToPdfOptions }>;
class SelectPdfOptions
extends Combine
implements FlowStep<{ title: string; pages: string[]; options: SvgToPdfOptions }>
{
readonly IsValid: Store<boolean>
readonly Value: Store<{ title: string; pages: string[]; options: SvgToPdfOptions }>
constructor(title: string, pages: string[], getFreeDiv: () => string) {
const dummy = new CheckBox("Don't add data to the map (to quickly preview the PDF)", false)
const overrideMapLocation = new CheckBox("Override map location: use a selected location instead of the location set in the template", false)
const overrideMapLocation = new CheckBox(
"Override map location: use a selected location instead of the location set in the template",
false
)
const locationInput = Minimap.createMiniMap().SetClass("block w-full")
const searchField = new SearchAndGo({leafletMap: locationInput.leafletMap})
const selectLocation =
new Combine([
new Toggle(new Combine([new Title("Select override location"), searchField]).SetClass("flex"), undefined, overrideMapLocation.GetValue()),
new Toggle(locationInput.SetStyle("height: 20rem"), undefined, overrideMapLocation.GetValue()).SetStyle("height: 20rem")
]).SetClass("block").SetStyle("height: 25rem")
super([new Title("Select options"),
dummy,
overrideMapLocation,
selectLocation
]);
this.Value = dummy.GetValue().map((disableMaps) => {
return {
pages,
title,
options: <SvgToPdfOptions>{
disableMaps,
getFreeDiv,
overrideLocation: overrideMapLocation.GetValue().data ? locationInput.location.data : undefined
const searchField = new SearchAndGo({ leafletMap: locationInput.leafletMap })
const selectLocation = new Combine([
new Toggle(
new Combine([new Title("Select override location"), searchField]).SetClass("flex"),
undefined,
overrideMapLocation.GetValue()
),
new Toggle(
locationInput.SetStyle("height: 20rem"),
undefined,
overrideMapLocation.GetValue()
).SetStyle("height: 20rem"),
])
.SetClass("block")
.SetStyle("height: 25rem")
super([new Title("Select options"), dummy, overrideMapLocation, selectLocation])
this.Value = dummy.GetValue().map(
(disableMaps) => {
return {
pages,
title,
options: <SvgToPdfOptions>{
disableMaps,
getFreeDiv,
overrideLocation: overrideMapLocation.GetValue().data
? locationInput.location.data
: undefined,
},
}
}
}, [overrideMapLocation.GetValue(), locationInput.location])
},
[overrideMapLocation.GetValue(), locationInput.location]
)
this.IsValid = new ImmutableStore(true)
}
}
class PreparePdf extends Combine implements FlowStep<{ svgToPdf: SvgToPdf, languages: string[] }> {
readonly IsValid: Store<boolean>;
readonly Value: Store<{ svgToPdf: SvgToPdf, languages: string[] }>;
class PreparePdf extends Combine implements FlowStep<{ svgToPdf: SvgToPdf; languages: string[] }> {
readonly IsValid: Store<boolean>
readonly Value: Store<{ svgToPdf: SvgToPdf; languages: string[] }>
constructor(title: string, pages: string[], options: SvgToPdfOptions) {
const svgToPdf = new SvgToPdf(title, pages, options)
const languageOptions = [
new FixedInputElement("Nederlands", "nl"),
new FixedInputElement("English", "en")
new FixedInputElement("English", "en"),
]
const langs: string[] = Array.from(Object.keys(languages["default"] ?? languages))
console.log("Available languages are:", langs)
const languageSelector = new SearchablePillsSelector(
langs.map(l => ({
langs.map((l) => ({
show: new Translation(languages[l]),
value: l,
mainTerm: languages[l]
})), {
mode: "select-many"
mainTerm: languages[l],
})),
{
mode: "select-many",
}
)
@ -202,45 +228,54 @@ class PreparePdf extends Combine implements FlowStep<{ svgToPdf: SvgToPdf, langu
new Toggle(
new Loading("Preparing maps..."),
undefined,
isPrepared.map(p => p === undefined)
)
]);
this.Value = isPrepared.map(isPrepped => {
if (isPrepped === undefined) {
return undefined
}
if (isPrepped["success"] !== undefined) {
const svgToPdf = isPrepped["success"]
const langs = languageSelector.GetValue().data
console.log("Languages are", langs)
if (langs.length === 0) {
isPrepared.map((p) => p === undefined)
),
])
this.Value = isPrepared.map(
(isPrepped) => {
if (isPrepped === undefined) {
return undefined
}
return {svgToPdf, languages: langs}
}
return undefined;
}, [languageSelector.GetValue()])
this.IsValid = this.Value.map(v => v !== undefined)
if (isPrepped["success"] !== undefined) {
const svgToPdf = isPrepped["success"]
const langs = languageSelector.GetValue().data
console.log("Languages are", langs)
if (langs.length === 0) {
return undefined
}
return { svgToPdf, languages: langs }
}
return undefined
},
[languageSelector.GetValue()]
)
this.IsValid = this.Value.map((v) => v !== undefined)
}
}
class InspectStrings extends Toggle implements FlowStep<{ svgToPdf: SvgToPdf, languages: string[] }> {
readonly IsValid: Store<boolean>;
readonly Value: Store<{ svgToPdf: SvgToPdf; languages: string[] }>;
class InspectStrings
extends Toggle
implements FlowStep<{ svgToPdf: SvgToPdf; languages: string[] }>
{
readonly IsValid: Store<boolean>
readonly Value: Store<{ svgToPdf: SvgToPdf; languages: string[] }>
constructor(svgToPdf: SvgToPdf, languages: string[]) {
const didLoadLanguages = UIEventSource.FromPromiseWithErr(
svgToPdf.PrepareLanguages(languages)
).map((l) => l !== undefined && l["success"] !== undefined)
const didLoadLanguages = UIEventSource.FromPromiseWithErr(svgToPdf.PrepareLanguages(languages)).map(l => l !== undefined && l["success"] !== undefined)
super(new Combine([
super(
new Combine([
new Title("Inspect translation strings"),
...languages.map(l => new Lazy(() => InspectStrings.createOverviewPanel(svgToPdf, l)))
...languages.map(
(l) => new Lazy(() => InspectStrings.createOverviewPanel(svgToPdf, l))
),
]),
new Loading(),
didLoadLanguages
);
this.Value = new ImmutableStore({svgToPdf, languages})
)
this.Value = new ImmutableStore({ svgToPdf, languages })
this.IsValid = didLoadLanguages
}
@ -259,64 +294,82 @@ class InspectStrings extends Toggle implements FlowStep<{ svgToPdf: SvgToPdf, la
if (translated) {
foundTranslations++
}
const linkToWeblate = new Link(spec, LinkToWeblate.hrefToWeblate(language, spec), true).SetClass("font-bold link-underline")
elements.push(new Combine([
linkToWeblate,
"&nbsp;",
translated ?? new FixedUiElement("No translation found!").SetClass("alert")
]))
const linkToWeblate = new Link(
spec,
LinkToWeblate.hrefToWeblate(language, spec),
true
).SetClass("font-bold link-underline")
elements.push(
new Combine([
linkToWeblate,
"&nbsp;",
translated ?? new FixedUiElement("No translation found!").SetClass("alert"),
])
)
}
return new Toggleable(
new Title("Translations for " + language),
new Combine([
`${foundTranslations}/${allKeys.length} of translations are found (${Math.floor(100 * foundTranslations / allKeys.length)}%)`,
`${foundTranslations}/${allKeys.length} of translations are found (${Math.floor(
(100 * foundTranslations) / allKeys.length
)}%)`,
"The following keys are used:",
new List(elements)
new List(elements),
]),
{closeOnClick: false, height: "15rem"})
{ closeOnClick: false, height: "15rem" }
)
}
}
class SavePdf extends Combine {
constructor(svgToPdf: SvgToPdf, languages: string[]) {
super([
new Title("Generating your pdfs..."),
new List(languages.map(lng => new Toggle(
lng + " is done!",
new Loading("Creating pdf for " + lng),
UIEventSource.FromPromiseWithErr(svgToPdf.ConvertSvg(lng).then(() => true))
.map(x => x !== undefined && x["success"] === true)
)))
]);
new List(
languages.map(
(lng) =>
new Toggle(
lng + " is done!",
new Loading("Creating pdf for " + lng),
UIEventSource.FromPromiseWithErr(
svgToPdf.ConvertSvg(lng).then(() => true)
).map((x) => x !== undefined && x["success"] === true)
)
)
),
])
}
}
export class PdfExportGui extends LeftIndex {
constructor(freeDivId: string) {
let i = 0
const createDiv = (): string => {
const div = document.createElement("div")
div.id = "freediv-" + (i++)
div.id = "freediv-" + i++
document.getElementById(freeDivId).append(div)
return div.id
}
Constants.defaultOverpassUrls.splice(0, 1)
const {flow, furthestStep, titles} = FlowPanelFactory.start(
new Title("Select template"), new SelectTemplate()
).then(new Title("Select options"), ({title, pages}) => new SelectPdfOptions(title, pages, createDiv))
.then("Generate maps...", ({title, pages, options}) => new PreparePdf(title, pages, options))
.then("Inspect translations", (({svgToPdf, languages}) => new InspectStrings(svgToPdf, languages)))
.finish("Generating...", ({svgToPdf, languages}) => new SavePdf(svgToPdf, languages))
const { flow, furthestStep, titles } = FlowPanelFactory.start(
new Title("Select template"),
new SelectTemplate()
)
.then(
new Title("Select options"),
({ title, pages }) => new SelectPdfOptions(title, pages, createDiv)
)
.then(
"Generate maps...",
({ title, pages, options }) => new PreparePdf(title, pages, options)
)
.then(
"Inspect translations",
({ svgToPdf, languages }) => new InspectStrings(svgToPdf, languages)
)
.finish("Generating...", ({ svgToPdf, languages }) => new SavePdf(svgToPdf, languages))
const toc = new List(
titles.map(
@ -338,9 +391,7 @@ export class PdfExportGui extends LeftIndex {
true
)
const leftContents: BaseUIElement[] = [
toc
].map((el) => el?.SetClass("pl-4"))
const leftContents: BaseUIElement[] = [toc].map((el) => el?.SetClass("pl-4"))
super(leftContents, flow)
}

View file

@ -26,7 +26,7 @@ import BaseLayer from "../../Models/BaseLayer"
import Loading from "../Base/Loading"
import Hash from "../../Logic/Web/Hash"
import { GlobalFilter } from "../../Logic/State/MapState"
import {WayId} from "../../Models/OsmFeature";
import { WayId } from "../../Models/OsmFeature"
/*
* The SimpleAddUI is a single panel, which can have multiple states:

View file

@ -70,7 +70,7 @@ export default class ExportPDF {
console.error(e)
self.cleanup()
}
}, 500)
}, 500),
})
minimap.SetStyle(

View file

@ -3,10 +3,10 @@ import { UIEventSource } from "../../Logic/UIEventSource"
import { Utils } from "../../Utils"
import BaseUIElement from "../BaseUIElement"
import InputElementMap from "./InputElementMap"
import Translations from "../i18n/Translations";
import Translations from "../i18n/Translations"
export class CheckBox extends InputElementMap<number[], boolean> {
constructor(el: (BaseUIElement | string), defaultValue?: boolean) {
constructor(el: BaseUIElement | string, defaultValue?: boolean) {
super(
new CheckBoxes([Translations.W(el)]),
(x0, x1) => x0 === x1,

View file

@ -1,38 +1,40 @@
import {ReadonlyInputElement} from "./InputElement"
import { ReadonlyInputElement } from "./InputElement"
import Loc from "../../Models/Loc"
import {Store, UIEventSource} from "../../Logic/UIEventSource"
import Minimap, {MinimapObj} from "../Base/Minimap"
import { Store, UIEventSource } from "../../Logic/UIEventSource"
import Minimap, { MinimapObj } from "../Base/Minimap"
import BaseLayer from "../../Models/BaseLayer"
import Combine from "../Base/Combine"
import Svg from "../../Svg"
import {GeoOperations} from "../../Logic/GeoOperations"
import { GeoOperations } from "../../Logic/GeoOperations"
import ShowDataMultiLayer from "../ShowDataLayer/ShowDataMultiLayer"
import StaticFeatureSource from "../../Logic/FeatureSource/Sources/StaticFeatureSource"
import LayerConfig from "../../Models/ThemeConfig/LayerConfig"
import {BBox} from "../../Logic/BBox"
import {FixedUiElement} from "../Base/FixedUiElement"
import { BBox } from "../../Logic/BBox"
import { FixedUiElement } from "../Base/FixedUiElement"
import ShowDataLayer from "../ShowDataLayer/ShowDataLayer"
import BaseUIElement from "../BaseUIElement"
import Toggle from "./Toggle"
import * as matchpoint from "../../assets/layers/matchpoint/matchpoint.json"
import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig";
import FilteredLayer from "../../Models/FilteredLayer";
import {ElementStorage} from "../../Logic/ElementStorage";
import AvailableBaseLayers from "../../Logic/Actors/AvailableBaseLayers";
import {RelationId, WayId} from "../../Models/OsmFeature";
import {Feature, LineString, Polygon} from "geojson";
import {OsmObject, OsmWay} from "../../Logic/Osm/OsmObject";
import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"
import FilteredLayer from "../../Models/FilteredLayer"
import { ElementStorage } from "../../Logic/ElementStorage"
import AvailableBaseLayers from "../../Logic/Actors/AvailableBaseLayers"
import { RelationId, WayId } from "../../Models/OsmFeature"
import { Feature, LineString, Polygon } from "geojson"
import { OsmObject, OsmWay } from "../../Logic/Osm/OsmObject"
export default class LocationInput
extends BaseUIElement
implements ReadonlyInputElement<Loc>, MinimapObj {
implements ReadonlyInputElement<Loc>, MinimapObj
{
private static readonly matchLayer = new LayerConfig(
matchpoint,
"LocationInput.matchpoint",
true
)
public readonly snappedOnto: UIEventSource<Feature & { properties : { id : WayId} }> = new UIEventSource(undefined)
public readonly snappedOnto: UIEventSource<Feature & { properties: { id: WayId } }> =
new UIEventSource(undefined)
public readonly _matching_layer: LayerConfig
public readonly leafletMap: UIEventSource<any>
public readonly bounds
@ -43,13 +45,15 @@ export default class LocationInput
* The features to which the input should be snapped
* @private
*/
private readonly _snapTo: Store< (Feature<LineString | Polygon> & {properties: {id : WayId}})[]>
private readonly _snapTo: Store<
(Feature<LineString | Polygon> & { properties: { id: WayId } })[]
>
/**
* The features to which the input should be snapped without cleanup of relations and memberships
* Used for rendering
* @private
*/
private readonly _snapToRaw: Store< {feature: Feature}[]>
private readonly _snapToRaw: Store<{ feature: Feature }[]>
private readonly _value: Store<Loc>
private readonly _snappedPoint: Store<any>
private readonly _maxSnapDistance: number
@ -59,10 +63,10 @@ export default class LocationInput
private readonly clickLocation: UIEventSource<Loc>
private readonly _minZoom: number
private readonly _state: {
readonly filteredLayers: Store<FilteredLayer[]>;
readonly backgroundLayer: UIEventSource<BaseLayer>;
readonly layoutToUse: LayoutConfig;
readonly selectedElement: UIEventSource<any>;
readonly filteredLayers: Store<FilteredLayer[]>
readonly backgroundLayer: UIEventSource<BaseLayer>
readonly layoutToUse: LayoutConfig
readonly selectedElement: UIEventSource<any>
readonly allElements: ElementStorage
}
@ -74,27 +78,35 @@ export default class LocationInput
*
* @private
*/
private static async prepareSnapOnto(features: Feature[]): Promise<(Feature<LineString | Polygon> & {properties : {id: WayId}})[]> {
const linesAndPolygon : Feature<LineString | Polygon>[] = <any> features.filter(f => f.geometry.type !== "Point")
private static async prepareSnapOnto(
features: Feature[]
): Promise<(Feature<LineString | Polygon> & { properties: { id: WayId } })[]> {
const linesAndPolygon: Feature<LineString | Polygon>[] = <any>(
features.filter((f) => f.geometry.type !== "Point")
)
// Clean the features: multipolygons are split into their it's members
const linestrings : (Feature<LineString | Polygon> & {properties: {id: WayId}})[] = []
const linestrings: (Feature<LineString | Polygon> & { properties: { id: WayId } })[] = []
for (const feature of linesAndPolygon) {
if(feature.properties.id.startsWith("way")){
if (feature.properties.id.startsWith("way")) {
// A normal way - we continue
linestrings.push(<any> feature)
linestrings.push(<any>feature)
continue
}
// We have a multipolygon, thus: a relation
// Download the members
const relation = await OsmObject.DownloadObjectAsync(<RelationId> feature.properties.id, 60 * 60)
const members: OsmWay[] = await Promise.all(relation.members
.filter(m => m.type === "way")
.map(m => OsmObject.DownloadObjectAsync(<WayId> ("way/"+m.ref), 60 * 60)))
linestrings.push(...members.map(m => m.asGeoJson()))
const relation = await OsmObject.DownloadObjectAsync(
<RelationId>feature.properties.id,
60 * 60
)
const members: OsmWay[] = await Promise.all(
relation.members
.filter((m) => m.type === "way")
.map((m) => OsmObject.DownloadObjectAsync(<WayId>("way/" + m.ref), 60 * 60))
)
linestrings.push(...members.map((m) => m.asGeoJson()))
}
return linestrings
}
constructor(options?: {
@ -107,20 +119,32 @@ export default class LocationInput
centerLocation?: UIEventSource<Loc>
bounds?: UIEventSource<BBox>
state?: {
readonly filteredLayers: Store<FilteredLayer[]>;
readonly backgroundLayer: UIEventSource<BaseLayer>;
readonly layoutToUse: LayoutConfig;
readonly selectedElement: UIEventSource<any>;
readonly filteredLayers: Store<FilteredLayer[]>
readonly backgroundLayer: UIEventSource<BaseLayer>
readonly layoutToUse: LayoutConfig
readonly selectedElement: UIEventSource<any>
readonly allElements: ElementStorage
}
}) {
super()
this._snapToRaw = options?.snapTo?.map(feats => feats.filter(f => f.feature.geometry.type !== "Point"))
this._snapTo = options?.snapTo?.bind((features) => UIEventSource.FromPromise(LocationInput.prepareSnapOnto(features.map(f => f.feature))))?.map(f => f ?? [])
this._snapToRaw = options?.snapTo?.map((feats) =>
feats.filter((f) => f.feature.geometry.type !== "Point")
)
this._snapTo = options?.snapTo
?.bind((features) =>
UIEventSource.FromPromise(
LocationInput.prepareSnapOnto(features.map((f) => f.feature))
)
)
?.map((f) => f ?? [])
this._maxSnapDistance = options?.maxSnapDistance
this._centerLocation = options?.centerLocation ?? new UIEventSource<Loc>({
lat: 0, lon: 0, zoom: 0
})
this._centerLocation =
options?.centerLocation ??
new UIEventSource<Loc>({
lat: 0,
lon: 0,
zoom: 0,
})
this._snappedPointTags = options?.snappedPointTags
this._bounds = options?.bounds
this._minZoom = options?.minZoom
@ -152,11 +176,11 @@ export default class LocationInput
return undefined
}
// We reproject the location onto every 'snap-to-feature' and select the closest
let min = undefined
let matchedWay: Feature<LineString | Polygon> & {properties : {id : WayId}} = undefined
let matchedWay: Feature<LineString | Polygon> & { properties: { id: WayId } } =
undefined
for (const feature of self._snapTo.data ?? []) {
try {
const nearestPointOnLine = GeoOperations.nearestPoint(feature, [
@ -191,18 +215,16 @@ export default class LocationInput
return {
type: "Feature",
properties: options?.snappedPointTags ?? min.properties,
geometry: {type: "Point", coordinates: [loc.lon, loc.lat]},
geometry: { type: "Point", coordinates: [loc.lon, loc.lat] },
}
}
}
min.properties = options?.snappedPointTags ?? min.properties
if(matchedWay.properties.id.startsWith("relation/")){
if (matchedWay.properties.id.startsWith("relation/")) {
// We matched a relation instead of a way
console.log("Snapping onto a relation. The relation is", matchedWay)
}
self.snappedOnto.setData(<any> matchedWay)
self.snappedOnto.setData(<any>matchedWay)
return min
},
[this._snapTo]
@ -217,7 +239,10 @@ export default class LocationInput
}
})
}
this.mapBackground = options?.mapBackground ?? this._state?.backgroundLayer ?? new UIEventSource<BaseLayer>(AvailableBaseLayers.osmCarto)
this.mapBackground =
options?.mapBackground ??
this._state?.backgroundLayer ??
new UIEventSource<BaseLayer>(AvailableBaseLayers.osmCarto)
this.SetClass("block h-full")
this.clickLocation = new UIEventSource<Loc>(undefined)
@ -249,7 +274,7 @@ export default class LocationInput
try {
const self = this
const hasMoved = new UIEventSource(false)
const startLocation = {...this._centerLocation.data}
const startLocation = { ...this._centerLocation.data }
this._centerLocation.addCallbackD((newLocation) => {
const f = 100000
console.log(newLocation.lon, startLocation.lon)
@ -279,7 +304,7 @@ export default class LocationInput
if (loc === undefined) {
return []
}
return [{feature: loc}]
return [{ feature: loc }]
})
console.log("Constructing the match layer", matchPoint)
@ -335,9 +360,9 @@ export default class LocationInput
}
}
TakeScreenshot(format: "image"): Promise<string>;
TakeScreenshot(format: "blob"): Promise<Blob>;
TakeScreenshot(format: "image" | "blob"): Promise<string | Blob>;
TakeScreenshot(format: "image"): Promise<string>
TakeScreenshot(format: "blob"): Promise<Blob>
TakeScreenshot(format: "image" | "blob"): Promise<string | Blob>
TakeScreenshot(format: "image" | "blob"): Promise<string | Blob> {
return this.map.TakeScreenshot(format)
}

View file

@ -13,7 +13,7 @@ export default class LanguagePicker extends Toggle {
console.log("Constructing a language pîcker for languages", languages)
if (languages === undefined || languages.length <= 1) {
super(undefined, undefined, undefined)
}else {
} else {
const normalPicker = LanguagePicker.dropdownFor(languages, label)
const fullPicker = new Lazy(() => LanguagePicker.dropdownFor(allLanguages, label))
super(fullPicker, normalPicker, Locale.showLinkToWeblate)

View file

@ -18,7 +18,7 @@ import Title from "../Base/Title"
import { GlobalFilter } from "../../Logic/State/MapState"
import { VariableUiElement } from "../Base/VariableUIElement"
import { Tag } from "../../Logic/Tags/Tag"
import {WayId} from "../../Models/OsmFeature";
import { WayId } from "../../Models/OsmFeature"
export default class ConfirmLocationOfPoint extends Combine {
constructor(
@ -76,7 +76,7 @@ export default class ConfirmLocationOfPoint extends Combine {
snappedPointTags: tags,
maxSnapDistance: preset.preciseInput.maxSnapDistance,
bounds: mapBounds,
state: <any> state
state: <any>state,
})
preciseInput.installBounds(preset.boundsFactor ?? 0.25, true)
preciseInput

View file

@ -22,7 +22,7 @@ import Title from "../Base/Title"
import { SubstitutedTranslation } from "../SubstitutedTranslation"
import FeaturePipelineState from "../../Logic/State/FeaturePipelineState"
import TagRenderingQuestion from "./TagRenderingQuestion"
import {OsmId} from "../../Models/OsmFeature";
import { OsmId } from "../../Models/OsmFeature"
export default class DeleteWizard extends Toggle {
/**

View file

@ -248,29 +248,27 @@ export default class FeatureInfoBox extends ScrollableFullScreen {
)
editElements.push(
Toggle.If(state.featureSwitchIsDebugging,
() => {
const config_all_tags: TagRenderingConfig = new TagRenderingConfig(
{ render: "{all_tags()}" },
""
)
const config_download: TagRenderingConfig = new TagRenderingConfig(
{ render: "{export_as_geojson()}" },
""
)
const config_id: TagRenderingConfig = new TagRenderingConfig(
{ render: "{open_in_iD()}" },
""
)
return new Combine([
new TagRenderingAnswer(tags, config_all_tags, state),
new TagRenderingAnswer(tags, config_download, state),
new TagRenderingAnswer(tags, config_id, state),
"This is layer " + layerConfig.id,
])
}
Toggle.If(state.featureSwitchIsDebugging, () => {
const config_all_tags: TagRenderingConfig = new TagRenderingConfig(
{ render: "{all_tags()}" },
""
)
const config_download: TagRenderingConfig = new TagRenderingConfig(
{ render: "{export_as_geojson()}" },
""
)
const config_id: TagRenderingConfig = new TagRenderingConfig(
{ render: "{open_in_iD()}" },
""
)
return new Combine([
new TagRenderingAnswer(tags, config_all_tags, state),
new TagRenderingAnswer(tags, config_download, state),
new TagRenderingAnswer(tags, config_id, state),
"This is layer " + layerConfig.id,
])
})
)
return new Combine(editElements).SetClass("flex flex-col")

View file

@ -145,7 +145,7 @@ export default class MoveWizard extends Toggle {
minZoom: reason.minZoom,
centerLocation: loc,
mapBackground: new UIEventSource<BaseLayer>(preferredBackground), // We detach the layer
state: <any> state
state: <any>state,
})
if (reason.lockBounds) {

View file

@ -51,18 +51,18 @@ export default class TagApplyButton implements AutoAction {
* // Should handle escaped ";"
* TagApplyButton.parseTagSpec("key=value;key0=value0\\;value1") // => [["key","value"],["key0","value0;value1"]]
*/
private static parseTagSpec(spec: string): [string, string][]{
const tgsSpec : [string, string][] = []
private static parseTagSpec(spec: string): [string, string][] {
const tgsSpec: [string, string][] = []
while(spec.length > 0){
while (spec.length > 0) {
const [part] = spec.match(/((\\;)|[^;])*/)
spec = spec.substring(part.length + 1) // +1 to remove the pending ';' as well
const kv = part.split("=").map((s) => s.trim().replace("\\;",";"))
const kv = part.split("=").map((s) => s.trim().replace("\\;", ";"))
if (kv.length == 2) {
tgsSpec.push(<[string, string]> kv)
}else if (kv.length < 2) {
tgsSpec.push(<[string, string]>kv)
} else if (kv.length < 2) {
throw "Invalid key spec: no '=' found in " + spec
}else{
} else {
throw "Invalid key spec: multiple '=' found in " + spec
}
}
@ -83,7 +83,7 @@ export default class TagApplyButton implements AutoAction {
spec = tagSource.data[spec.replace("$", "")]
}
const tgsSpec = TagApplyButton.parseTagSpec(spec)
const tgsSpec = TagApplyButton.parseTagSpec(spec)
return tagSource.map((tags) => {
const newTags: Tag[] = []

View file

@ -304,7 +304,7 @@ export default class TagRenderingQuestion extends Combine {
const patchedMapping = <Mapping>{
...mapping,
iconClass: mapping.iconClass ?? `small-height`,
icon: mapping.icon ?? (addIcons ? "./assets/svg/none.svg" : undefined)
icon: mapping.icon ?? (addIcons ? "./assets/svg/none.svg" : undefined),
}
const fancy = TagRenderingQuestion.GenerateMappingContent(
patchedMapping,

View file

@ -10,12 +10,15 @@ import * as clusterstyle from "../../assets/layers/cluster_style/cluster_style.j
export default class ShowTileInfo {
public static readonly styling = new LayerConfig(clusterstyle, "ShowTileInfo", true)
constructor(options: {
source: FeatureSource & Tiled
leafletMap: UIEventSource<any>
layer?: LayerConfig
doShowLayer?: UIEventSource<boolean>
}, state) {
constructor(
options: {
source: FeatureSource & Tiled
leafletMap: UIEventSource<any>
layer?: LayerConfig
doShowLayer?: UIEventSource<boolean>
},
state
) {
const source = options.source
const metaFeature: Store<{ feature; freshness: Date }[]> = source.features.map(
(features) => {
@ -55,7 +58,7 @@ export default class ShowTileInfo {
features: new StaticFeatureSource(metaFeature),
leafletMap: options.leafletMap,
doShowLayer: options.doShowLayer,
state
state,
})
}
}

View file

@ -544,7 +544,7 @@ export default class SpecialVisualizations {
const features: { freshness: Date; feature: any }[] = []
for (const key of keys) {
const value = properties[key]
if(value === undefined || value === null){
if (value === undefined || value === null) {
continue
}
@ -556,7 +556,7 @@ export default class SpecialVisualizations {
for (const id of idList) {
const feature = featureStore.get(id)
if(feature === undefined){
if (feature === undefined) {
console.warn("No feature found for id ", id)
continue
}

View file

@ -1,27 +1,26 @@
/**
* The statistics-gui shows statistics from previous MapComplete-edits
*/
import {UIEventSource} from "../Logic/UIEventSource"
import {VariableUiElement} from "./Base/VariableUIElement"
import { UIEventSource } from "../Logic/UIEventSource"
import { VariableUiElement } from "./Base/VariableUIElement"
import Loading from "./Base/Loading"
import {Utils} from "../Utils"
import { Utils } from "../Utils"
import Combine from "./Base/Combine"
import {StackedRenderingChart} from "./BigComponents/TagRenderingChart"
import {LayerFilterPanel} from "./BigComponents/FilterView"
import {AllKnownLayouts} from "../Customizations/AllKnownLayouts"
import { StackedRenderingChart } from "./BigComponents/TagRenderingChart"
import { LayerFilterPanel } from "./BigComponents/FilterView"
import { AllKnownLayouts } from "../Customizations/AllKnownLayouts"
import MapState from "../Logic/State/MapState"
import BaseUIElement from "./BaseUIElement"
import Title from "./Base/Title"
import { FixedUiElement } from "./Base/FixedUiElement"
import List from "./Base/List";
import List from "./Base/List"
class StatisticsForOverviewFile extends Combine {
constructor(homeUrl: string, paths: string[]) {
paths = paths.filter(p => !p.endsWith("file-overview.json"))
paths = paths.filter((p) => !p.endsWith("file-overview.json"))
const layer = AllKnownLayouts.allKnownLayouts.get("mapcomplete-changes").layers[0]
const filteredLayer = MapState.InitializeFilteredLayers(
{id: "statistics-view", layers: [layer]},
{ id: "statistics-view", layers: [layer] },
undefined
)[0]
const filterPanel = new LayerFilterPanel(undefined, filteredLayer)
@ -30,7 +29,7 @@ class StatisticsForOverviewFile extends Combine {
const downloaded = new UIEventSource<{ features: ChangeSetData[] }[]>([])
for (const filepath of paths) {
if(filepath.endsWith("file-overview.json")){
if (filepath.endsWith("file-overview.json")) {
continue
}
Utils.downloadJson(homeUrl + filepath).then((data) => {
@ -41,7 +40,7 @@ class StatisticsForOverviewFile extends Combine {
data.features = data
}
data?.features?.forEach((item) => {
item.properties = {...item.properties, ...item.properties.metadata}
item.properties = { ...item.properties, ...item.properties.metadata }
delete item.properties.metadata
})
downloaded.data.push(data)
@ -55,7 +54,6 @@ class StatisticsForOverviewFile extends Combine {
)
)
super([
filterPanel,
new VariableUiElement(
@ -117,27 +115,32 @@ class StatisticsForOverviewFile extends Combine {
"import",
"conflation",
"link-image",
"soft-delete"]
"soft-delete",
]
const allThemes = Utils.Dedup(overview._meta.map(f => f.properties.theme))
const allThemes = Utils.Dedup(overview._meta.map((f) => f.properties.theme))
const excludedThemes = new Set<string>()
if(allThemes.length > 1){
excludedThemes.add("grb")
excludedThemes.add("etymology")
if (allThemes.length > 1) {
excludedThemes.add("grb")
excludedThemes.add("etymology")
}
const summedValues = valuesToSum
.map(key => [key, overview.sum(key, excludedThemes)])
.filter(kv => kv[1] != 0)
.map(kv => kv.join(": "))
.map((key) => [key, overview.sum(key, excludedThemes)])
.filter((kv) => kv[1] != 0)
.map((kv) => kv.join(": "))
const elements: BaseUIElement[] = [
new Title(allThemes .length === 1 ? "General statistics for "+allThemes[0] :"General statistics (excluding etymology- and GRB-theme changes)"),
new Title(
allThemes.length === 1
? "General statistics for " + allThemes[0]
: "General statistics (excluding etymology- and GRB-theme changes)"
),
new Combine([
overview._meta.length + " changesets match the filters",
new List(summedValues)
new List(summedValues),
]).SetClass("flex flex-col border rounded-xl"),
new Title("Breakdown")
new Title("Breakdown"),
]
for (const tr of trs) {
let total = undefined
@ -244,7 +247,7 @@ class ChangesetsOverview {
public sum(key: string, excludeThemes: Set<string>): number {
let s = 0
for (const feature of this._meta) {
if(excludeThemes.has(feature.properties.theme)){
if (excludeThemes.has(feature.properties.theme)) {
continue
}
const parsed = Number(feature.properties[key])
@ -280,8 +283,7 @@ class ChangesetsOverview {
}
try {
cs.properties.host = new URL(cs.properties.host).host
} catch (e) {
}
} catch (e) {}
return cs
}
}

View file

@ -41,7 +41,10 @@ export default class Translations {
* translation.textFor("nl") // => "Nederlands"
*
*/
static T(t: string | undefined | null | Translation | TypedTranslation<object>, context = undefined): TypedTranslation<object> {
static T(
t: string | undefined | null | Translation | TypedTranslation<object>,
context = undefined
): TypedTranslation<object> {
if (t === undefined || t === null) {
return undefined
}

View file

@ -823,7 +823,7 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be
} else if (xhr.status === 509 || xhr.status === 429) {
reject("rate limited")
} else {
reject("Could not download "+url+" due to "+xhr.statusText)
reject("Could not download " + url + " due to " + xhr.statusText)
}
}
xhr.open("GET", url)

View file

@ -1,25 +1,28 @@
import FeaturePipelineState from "../Logic/State/FeaturePipelineState";
import MinimapImplementation from "../UI/Base/MinimapImplementation";
import {UIEventSource} from "../Logic/UIEventSource";
import Loc from "../Models/Loc";
import ShowDataLayer from "../UI/ShowDataLayer/ShowDataLayer";
import {BBox} from "../Logic/BBox";
import Minimap from "../UI/Base/Minimap";
import AvailableBaseLayers from "../Logic/Actors/AvailableBaseLayers";
import {Utils} from "../Utils";
import FeaturePipelineState from "../Logic/State/FeaturePipelineState"
import MinimapImplementation from "../UI/Base/MinimapImplementation"
import { UIEventSource } from "../Logic/UIEventSource"
import Loc from "../Models/Loc"
import ShowDataLayer from "../UI/ShowDataLayer/ShowDataLayer"
import { BBox } from "../Logic/BBox"
import Minimap from "../UI/Base/Minimap"
import AvailableBaseLayers from "../Logic/Actors/AvailableBaseLayers"
import { Utils } from "../Utils"
export interface PngMapCreatorOptions{
readonly divId: string; readonly width: number; readonly height: number; readonly scaling?: 1 | number,
export interface PngMapCreatorOptions {
readonly divId: string
readonly width: number
readonly height: number
readonly scaling?: 1 | number
readonly dummyMode?: boolean
}
export class PngMapCreator {
private readonly _state: FeaturePipelineState | undefined;
private readonly _options: PngMapCreatorOptions;
private readonly _state: FeaturePipelineState | undefined
private readonly _options: PngMapCreatorOptions
constructor(state: FeaturePipelineState | undefined, options: PngMapCreatorOptions) {
this._state = state;
this._options = {...options, scaling: options.scaling ?? 1};
this._state = state
this._options = { ...options, scaling: options.scaling ?? 1 }
}
/**
@ -27,10 +30,13 @@ export class PngMapCreator {
* @private
*/
private async createAndLoadMinimap(): Promise<MinimapImplementation> {
const state = this._state;
const state = this._state
const options = this._options
const baselayer = AvailableBaseLayers.layerOverview.find(bl => bl.id === state.layoutToUse.defaultBackgroundId) ?? AvailableBaseLayers.osmCarto
return new Promise(resolve => {
const baselayer =
AvailableBaseLayers.layerOverview.find(
(bl) => bl.id === state.layoutToUse.defaultBackgroundId
) ?? AvailableBaseLayers.osmCarto
return new Promise((resolve) => {
const minimap = Minimap.createMiniMap({
location: new UIEventSource<Loc>(state.locationControl.data), // We remove the link between the old and the new UI-event source as moving the map while the export is running fucks up the screenshot
background: new UIEventSource(baselayer),
@ -38,24 +44,24 @@ export class PngMapCreator {
onFullyLoaded: (_) =>
window.setTimeout(() => {
resolve(<MinimapImplementation>minimap)
}, 250)
}, 250),
})
const style = `width: ${options.width * options.scaling}mm; height: ${options.height * options.scaling}mm;`
const style = `width: ${options.width * options.scaling}mm; height: ${
options.height * options.scaling
}mm;`
minimap.SetStyle(style)
minimap.AttachTo(options.divId)
})
}
/**
* Creates a base64-encoded PNG image
* @constructor
*/
public async CreatePng(format: "image" ): Promise<string > ;
public async CreatePng(format: "blob"): Promise<Blob> ;
public async CreatePng(format: "image" | "blob"): Promise<string | Blob>;
public async CreatePng(format: "image"): Promise<string>
public async CreatePng(format: "blob"): Promise<Blob>
public async CreatePng(format: "image" | "blob"): Promise<string | Blob>
public async CreatePng(format: "image" | "blob"): Promise<string | Blob> {
// Lets first init the minimap and wait for all background tiles to load
const minimap = await this.createAndLoadMinimap()
const state = this._state
@ -67,9 +73,11 @@ export class PngMapCreator {
if (dummyMode) {
console.warn("Dummy mode is active - not loading map layers")
} else {
const bounds = BBox.fromLeafletBounds(leaflet.getBounds().pad(0.1).pad(-state.layoutToUse.widenFactor))
const bounds = BBox.fromLeafletBounds(
leaflet.getBounds().pad(0.1).pad(-state.layoutToUse.widenFactor)
)
state.currentBounds.setData(bounds)
if(!state.featurePipeline.sufficientlyZoomed.data){
if (!state.featurePipeline.sufficientlyZoomed.data) {
console.warn("Not sufficiently zoomed!")
}
@ -77,7 +85,9 @@ export class PngMapCreator {
// A query is running!
// Let's wait for it to complete
console.log("Waiting for the query to complete")
await state.featurePipeline.runningQuery.AsPromise(isRunning => !isRunning)
await state.featurePipeline.runningQuery.AsPromise(
(isRunning) => !isRunning
)
console.log("Query has completeted!")
}
@ -96,15 +106,22 @@ export class PngMapCreator {
})
await Utils.waitFor(2000)
}
minimap.TakeScreenshot(format).then(async result => {
const divId = this._options.divId
await Utils.waitFor(250)
document.getElementById(divId).removeChild(/*Will fetch the cached htmlelement:*/minimap.ConstructElement())
return resolve(result);
}).catch(failreason => {
console.error("Could no make a screenshot due to ",failreason)
reject(failreason)
})
minimap
.TakeScreenshot(format)
.then(async (result) => {
const divId = this._options.divId
await Utils.waitFor(250)
document
.getElementById(divId)
.removeChild(
/*Will fetch the cached htmlelement:*/ minimap.ConstructElement()
)
return resolve(result)
})
.catch((failreason) => {
console.error("Could no make a screenshot due to ", failreason)
reject(failreason)
})
})
state.AddAllOverlaysToMap(minimap.leafletMap)

View file

@ -1,43 +1,48 @@
import jsPDF, {Matrix} from "jspdf";
import {Translation, TypedTranslation} from "../UI/i18n/Translation";
import FeaturePipelineState from "../Logic/State/FeaturePipelineState";
import {PngMapCreator} from "./pngMapCreator";
import {AllKnownLayouts} from "../Customizations/AllKnownLayouts";
import {Store} from "../Logic/UIEventSource";
import jsPDF, { Matrix } from "jspdf"
import { Translation, TypedTranslation } from "../UI/i18n/Translation"
import FeaturePipelineState from "../Logic/State/FeaturePipelineState"
import { PngMapCreator } from "./pngMapCreator"
import { AllKnownLayouts } from "../Customizations/AllKnownLayouts"
import { Store } from "../Logic/UIEventSource"
import "../assets/templates/Ubuntu-M-normal.js"
import "../assets/templates/Ubuntu-L-normal.js"
import "../assets/templates/UbuntuMono-B-bold.js"
import {makeAbsolute, parseSVG} from 'svg-path-parser';
import Translations from "../UI/i18n/Translations";
import {Utils} from "../Utils";
import Constants from "../Models/Constants";
import Hash from "../Logic/Web/Hash";
import { makeAbsolute, parseSVG } from "svg-path-parser"
import Translations from "../UI/i18n/Translations"
import { Utils } from "../Utils"
import Constants from "../Models/Constants"
import Hash from "../Logic/Web/Hash"
class SvgToPdfInternals {
private readonly doc: jsPDF;
private readonly doc: jsPDF
private static readonly dummyDoc: jsPDF = new jsPDF()
private readonly matrices: Matrix[] = []
private readonly matricesInverted: Matrix[] = []
private currentMatrix: Matrix;
private currentMatrixInverted: Matrix;
private currentMatrix: Matrix
private currentMatrixInverted: Matrix
private readonly _images: Record<string, HTMLImageElement>;
private readonly _rects: Record<string, SVGRectElement>;
private readonly extractTranslation: (string) => string;
private readonly _images: Record<string, HTMLImageElement>
private readonly _rects: Record<string, SVGRectElement>
private readonly extractTranslation: (string) => string
constructor(advancedApi: jsPDF, images: Record<string, HTMLImageElement>, rects: Record<string, SVGRectElement>, extractTranslation: (string) => string) {
this.doc = advancedApi;
this._images = images;
this._rects = rects;
this.extractTranslation = s => extractTranslation(s)?.replace(/&nbsp;/g, " ");
this.currentMatrix = this.doc.unitMatrix;
this.currentMatrixInverted = this.doc.unitMatrix;
constructor(
advancedApi: jsPDF,
images: Record<string, HTMLImageElement>,
rects: Record<string, SVGRectElement>,
extractTranslation: (string) => string
) {
this.doc = advancedApi
this._images = images
this._rects = rects
this.extractTranslation = (s) => extractTranslation(s)?.replace(/&nbsp;/g, " ")
this.currentMatrix = this.doc.unitMatrix
this.currentMatrixInverted = this.doc.unitMatrix
}
applyMatrices(): void {
let multiplied = this.doc.unitMatrix;
let multipliedInv = this.doc.unitMatrix;
let multiplied = this.doc.unitMatrix
let multipliedInv = this.doc.unitMatrix
for (const matrix of this.matrices) {
multiplied = this.doc.matrixMult(multiplied, matrix)
}
@ -51,21 +56,19 @@ class SvgToPdfInternals {
addMatrix(m: Matrix) {
this.matrices.push(m)
this.matricesInverted.push(m.inversed())
this.doc.setCurrentTransformationMatrix(m);
this.doc.setCurrentTransformationMatrix(m)
this.applyMatrices()
}
public static extractMatrix(element: Element): Matrix {
const t = element.getAttribute("transform")
if (t === null) {
return null;
return null
}
const scaleMatch = t.match(/scale\(([-0-9.]+)\)/)
if (scaleMatch !== null) {
const s = Number(scaleMatch[1])
return SvgToPdfInternals.dummyDoc.Matrix(1 / s, 0, 0, 1 / s, 0, 0);
return SvgToPdfInternals.dummyDoc.Matrix(1 / s, 0, 0, 1 / s, 0, 0)
}
const translateMatch = t.match(/translate\(([-0-9.]+), ?([-0-9.]*)\)/)
@ -73,11 +76,12 @@ class SvgToPdfInternals {
const dx = Number(translateMatch[1])
const dy = Number(translateMatch[2])
console.log("Translating", dx, dy)
return SvgToPdfInternals.dummyDoc.Matrix(1, 0, 0, 1, dx, dy);
return SvgToPdfInternals.dummyDoc.Matrix(1, 0, 0, 1, dx, dy)
}
const transformMatch = t.match(/matrix\(([-0-9.]*),([-0-9.]*),([-0-9.]*),([-0-9.]*),([-0-9.]*),([-0-9.]*)\)/)
const transformMatch = t.match(
/matrix\(([-0-9.]*),([-0-9.]*),([-0-9.]*),([-0-9.]*),([-0-9.]*),([-0-9.]*)\)/
)
if (transformMatch !== null) {
const vals = [1, 0, 0, 1, 0, 0]
const invVals = [1, 0, 0, 1, 0, 0]
@ -90,20 +94,26 @@ class SvgToPdfInternals {
vals[i] = ti
}
}
return SvgToPdfInternals.dummyDoc.Matrix(vals[0], vals[1], vals[2], vals[3], vals[4], vals[5]);
return SvgToPdfInternals.dummyDoc.Matrix(
vals[0],
vals[1],
vals[2],
vals[3],
vals[4],
vals[5]
)
}
return null;
return null
}
public setTransform(element: Element): boolean {
const m = SvgToPdfInternals.extractMatrix(element)
if (m === null) {
return false;
return false
}
this.addMatrix(m)
return true;
return true
}
public undoTransform(): void {
@ -111,7 +121,6 @@ class SvgToPdfInternals {
const i = this.matricesInverted.pop()
this.doc.setCurrentTransformationMatrix(i)
this.applyMatrices()
}
public static parseCss(styleContent: string, separator: string = ";"): Record<string, string> {
@ -121,12 +130,12 @@ class SvgToPdfInternals {
const r: Record<string, string> = {}
for (const rule of styleContent.split(separator)) {
const [k, v] = rule.split(":").map(x => x.trim())
const [k, v] = rule.split(":").map((x) => x.trim())
r[k] = v
}
return r
};
}
private drawRect(element: SVGRectElement) {
const x = Number(element.getAttribute("x"))
@ -156,19 +165,20 @@ class SvgToPdfInternals {
if (css["fill-opacity"] !== "0" && css["fill"] !== "none") {
this.doc.setFillColor(css["fill"] ?? "black")
this.doc.circle(x, y, r, "F")
}
if (css["stroke"] && css["stroke"] !== "none") {
this.doc.setLineWidth(Number(css["stroke-width"] ?? 1))
this.doc.setDrawColor(css["stroke"] ?? "black")
this.doc.circle(x, y, r, "S")
}
return
}
private static attr(element: Element, name: string, recurseup: boolean = true): string | undefined {
private static attr(
element: Element,
name: string,
recurseup: boolean = true
): string | undefined {
if (element === null || element === undefined) {
return undefined
}
@ -188,22 +198,20 @@ class SvgToPdfInternals {
* @private
*/
private static css(element: Element): Record<string, string> {
if (element.parentElement == undefined || element.parentElement == element) {
return SvgToPdfInternals.parseCss(element.getAttribute("style"))
}
const css = SvgToPdfInternals.css(element.parentElement);
const css = SvgToPdfInternals.css(element.parentElement)
const style = element.getAttribute("style")
if (style === undefined || style == null) {
return css
}
for (const rule of style.split(";")) {
const [k, v] = rule.split(":").map(x => x.trim())
const [k, v] = rule.split(":").map((x) => x.trim())
css[k] = v
}
return css
}
static attrNumber(element: Element, name: string, recurseup: boolean = true): number {
@ -233,15 +241,14 @@ class SvgToPdfInternals {
}
}
let fontFamily = css["font-family"] ?? "Ubuntu";
let fontFamily = css["font-family"] ?? "Ubuntu"
if (fontFamily === "sans-serif") {
fontFamily = "Ubuntu"
}
let fontWeight = css["font-weight"] ?? "normal";
let fontWeight = css["font-weight"] ?? "normal"
this.doc.setFont(fontFamily, fontWeight)
const fontColor = css["fill"]
if (fontColor) {
this.doc.setTextColor(fontColor)
@ -279,13 +286,13 @@ class SvgToPdfInternals {
if (list) {
const key = list[1]
console.log("Generating a list with key" + key)
let r = this.extractTranslation("$" + key + "0");
let r = this.extractTranslation("$" + key + "0")
let i = 0
result += "\n"
while (r !== undefined && i < 100) {
result += "• " + r + "\n"
i++
r = this.extractTranslation("$" + key + i);
r = this.extractTranslation("$" + key + i)
}
result += "\n"
addSpace = false
@ -298,10 +305,15 @@ class SvgToPdfInternals {
addSpace = true
}
}
this.doc.text(result, x, y, {
maxWidth,
}, this.currentMatrix)
this.doc.text(
result,
x,
y,
{
maxWidth,
},
this.currentMatrix
)
}
private drawSvgViaCanvas(element: Element): void {
@ -310,14 +322,13 @@ class SvgToPdfInternals {
const width = SvgToPdfInternals.attrNumber(element, "width")
const height = SvgToPdfInternals.attrNumber(element, "height")
const base64src = SvgToPdfInternals.attr(element, "xlink:href")
const svgXml = atob(base64src.substring(base64src.indexOf(";base64,") + ";base64,".length));
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(svgXml, "text/xml");
const svgRoot = xmlDoc.getElementsByTagName("svg")[0];
const svgXml = atob(base64src.substring(base64src.indexOf(";base64,") + ";base64,".length))
const parser = new DOMParser()
const xmlDoc = parser.parseFromString(svgXml, "text/xml")
const svgRoot = xmlDoc.getElementsByTagName("svg")[0]
const svgWidth = SvgToPdfInternals.attrNumber(svgRoot, "width")
const svgHeight = SvgToPdfInternals.attrNumber(svgRoot, "height")
let img = this._images[base64src]
// This is an svg image, we use the canvas to convert it to a png
const canvas = document.createElement("canvas")
@ -325,22 +336,29 @@ class SvgToPdfInternals {
canvas.width = svgWidth
canvas.height = svgHeight
img.style.width = `${(svgWidth)}px`
img.style.height = `${(svgHeight)}px`
img.style.width = `${svgWidth}px`
img.style.height = `${svgHeight}px`
ctx.drawImage(img, 0, 0, svgWidth, svgHeight)
const base64img = canvas.toDataURL("image/png")
this.addMatrix(this.doc.Matrix(width / svgWidth, 0, 0, height / svgHeight, 0, 0))
const p = this.currentMatrixInverted.applyToPoint({x, y})
this.doc.addImage(base64img, "png", p.x * svgWidth / width, p.y * svgHeight / height, svgWidth, svgHeight)
const p = this.currentMatrixInverted.applyToPoint({ x, y })
this.doc.addImage(
base64img,
"png",
(p.x * svgWidth) / width,
(p.y * svgHeight) / height,
svgWidth,
svgHeight
)
this.undoTransform()
}
private drawImage(element: Element): void {
const href = SvgToPdfInternals.attr(element, "xlink:href")
if (href.endsWith('svg') || href.startsWith("data:image/svg")) {
this.drawSvgViaCanvas(element);
if (href.endsWith("svg") || href.startsWith("data:image/svg")) {
this.drawSvgViaCanvas(element)
} else {
const x = SvgToPdfInternals.attrNumber(element, "x")
const y = SvgToPdfInternals.attrNumber(element, "y")
@ -354,31 +372,31 @@ class SvgToPdfInternals {
private drawPath(element: SVGPathElement): void {
const path = element.getAttribute("d")
const parsed: { code: string, x: number, y: number, x2?, y2?, x1?, y1? }[] = parseSVG(path)
const parsed: { code: string; x: number; y: number; x2?; y2?; x1?; y1? }[] = parseSVG(path)
makeAbsolute(parsed)
for (const c of parsed) {
if (c.code === "C" || c.code === "c") {
const command = {op: "c", c: [c.x1, c.y1, c.x2, c.y2, c.x, c.y]}
const command = { op: "c", c: [c.x1, c.y1, c.x2, c.y2, c.x, c.y] }
this.doc.path([command])
continue
}
if (c.code === "H") {
const command = {op: "l", c: [c.x, c.y]}
const command = { op: "l", c: [c.x, c.y] }
this.doc.path([command])
continue
}
if (c.code === "V") {
const command = {op: "l", c: [c.x, c.y]}
const command = { op: "l", c: [c.x, c.y] }
this.doc.path([command])
continue
}
this.doc.path([{op: c.code.toLowerCase(), c: [c.x, c.y]}])
this.doc.path([{ op: c.code.toLowerCase(), c: [c.x, c.y] }])
}
//"fill:#ffffff;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:20"
//"fill:#ffffff;stroke:#000000;stroke-width:0.8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:20"
const css = SvgToPdfInternals.css(element)
if (css["color"] && css["color"].toLowerCase() !== "none") {
@ -413,7 +431,6 @@ class SvgToPdfInternals {
public handleElement(element: SVGSVGElement | Element): void {
const isTransformed = this.setTransform(element)
try {
if (element.tagName === "tspan") {
if (element.childElementCount == 0) {
this.drawTspan(element)
@ -433,7 +450,6 @@ class SvgToPdfInternals {
}
if (element.tagName === "g" || element.tagName === "text") {
for (let child of Array.from(element.children)) {
this.handleElement(child)
}
@ -446,7 +462,6 @@ class SvgToPdfInternals {
if (element.tagName === "circle") {
this.drawCircle(<any>element)
}
} catch (e) {
console.error("Could not handle element", element, "due to", e)
}
@ -461,7 +476,7 @@ class SvgToPdfInternals {
* @param mapSpec
* @constructor
*/
static GetActualXY(mapSpec: SVGTSpanElement): { x: number, y: number } {
static GetActualXY(mapSpec: SVGTSpanElement): { x: number; y: number } {
let runningM = SvgToPdfInternals.dummyDoc.unitMatrix
let e: Element = mapSpec
@ -475,35 +490,32 @@ class SvgToPdfInternals {
const x = SvgToPdfInternals.attrNumber(mapSpec, "x")
const y = SvgToPdfInternals.attrNumber(mapSpec, "y")
return runningM.applyToPoint({x, y})
return runningM.applyToPoint({ x, y })
}
}
export interface SvgToPdfOptions {
getFreeDiv: () => string,
getFreeDiv: () => string
disableMaps?: false | true
textSubstitutions?: Record<string, string>,
beforePage?: (i: number) => void,
overrideLocation?: { lat: number, lon: number }
textSubstitutions?: Record<string, string>
beforePage?: (i: number) => void
overrideLocation?: { lat: number; lon: number }
}
export class SvgToPdfPage {
private images: Record<string, HTMLImageElement> = {}
private rects: Record<string, SVGRectElement> = {}
public readonly _svgRoot: SVGSVGElement;
public readonly _svgRoot: SVGSVGElement
public readonly currentState: Store<string>
private readonly importedTranslations: Record<string, string> = {}
private readonly layerTranslations: Record<string, Record<string, any>> = {}
private readonly options: SvgToPdfOptions
constructor(page: string, options?: SvgToPdfOptions) {
this.options = options ?? (<SvgToPdfOptions>{})
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(page, "image/svg+xml");
this._svgRoot = xmlDoc.getElementsByTagName("svg")[0];
this.options = options ?? <SvgToPdfOptions>{}
const parser = new DOMParser()
const xmlDoc = parser.parseFromString(page, "image/svg+xml")
this._svgRoot = xmlDoc.getElementsByTagName("svg")[0]
}
private loadImage(element: Element): Promise<void> {
@ -511,11 +523,13 @@ export class SvgToPdfPage {
let img = document.createElement("img")
if (xlink.startsWith("data:image/svg+xml;")) {
const base64src = xlink;
let svgXml = atob(base64src.substring(base64src.indexOf(";base64,") + ";base64,".length));
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(svgXml, "text/xml");
const svgRoot = xmlDoc.getElementsByTagName("svg")[0];
const base64src = xlink
let svgXml = atob(
base64src.substring(base64src.indexOf(";base64,") + ";base64,".length)
)
const parser = new DOMParser()
const xmlDoc = parser.parseFromString(svgXml, "text/xml")
const svgRoot = xmlDoc.getElementsByTagName("svg")[0]
const svgWidthStr = svgRoot.getAttribute("width")
const svgHeightStr = svgRoot.getAttribute("height")
const svgWidth = parseFloat(svgWidthStr)
@ -533,20 +547,20 @@ export class SvgToPdfPage {
this.images[xlink] = img
return new Promise((resolve) => {
img.onload = _ => {
img.onload = (_) => {
resolve()
}
})
}
public extractTranslations(): Set<string> {
const textContents: string[] = Array.from(this._svgRoot.getElementsByTagName("tspan"))
.map(t => t.textContent)
const textContents: string[] = Array.from(this._svgRoot.getElementsByTagName("tspan")).map(
(t) => t.textContent
)
const translations = new Set<string>()
console.log("Extracting translations, contents are", textContents)
for (const tc of textContents) {
const parts = tc.split(" ").filter(p => p.startsWith("$") && p.indexOf("(") < 0)
const parts = tc.split(" ").filter((p) => p.startsWith("$") && p.indexOf("(") < 0)
for (let part of parts) {
part = part.substring(1) // Drop the $
let path = part.split(".")
@ -562,9 +576,12 @@ export class SvgToPdfPage {
return translations
}
public async prepareElement(element: SVGSVGElement | Element, mapTextSpecs: SVGTSpanElement[]): Promise<void> {
public async prepareElement(
element: SVGSVGElement | Element,
mapTextSpecs: SVGTSpanElement[]
): Promise<void> {
if (element.tagName === "rect") {
this.rects[element.id] = <SVGRectElement>element;
this.rects[element.id] = <SVGRectElement>element
}
if (element.tagName === "image") {
@ -572,17 +589,26 @@ export class SvgToPdfPage {
}
if (element.tagName === "tspan" && element.childElementCount == 0) {
const specialValues = element.textContent.split(" ").filter(t => t.startsWith("$"))
const specialValues = element.textContent.split(" ").filter((t) => t.startsWith("$"))
for (let specialValue of specialValues) {
const importMatch = element.textContent.match(/\$import ([a-zA-Z-_0-9.? ]+) as ([a-zA-Z0-9]+)/)
const importMatch = element.textContent.match(
/\$import ([a-zA-Z-_0-9.? ]+) as ([a-zA-Z0-9]+)/
)
if (importMatch !== null) {
const [, pathRaw, as] = importMatch
this.importedTranslations[as] = pathRaw
}
const setPropertyMatch = element.textContent.match(/\$set\(([a-zA-Z-_0-9.?:]+),(.+)\)/)
const setPropertyMatch = element.textContent.match(
/\$set\(([a-zA-Z-_0-9.?:]+),(.+)\)/
)
if (setPropertyMatch) {
this.options.textSubstitutions[setPropertyMatch[1].trim()] = setPropertyMatch[2].trim()
console.log("Setting a property:", setPropertyMatch, this.options.textSubstitutions)
this.options.textSubstitutions[setPropertyMatch[1].trim()] =
setPropertyMatch[2].trim()
console.log(
"Setting a property:",
setPropertyMatch,
this.options.textSubstitutions
)
}
if (element.textContent.startsWith("$map(")) {
mapTextSpecs.push(<any>element)
@ -590,20 +616,23 @@ export class SvgToPdfPage {
}
}
if (element.tagName === "g" || element.tagName === "text" || element.tagName === "tspan" || element.tagName === "defs") {
if (
element.tagName === "g" ||
element.tagName === "text" ||
element.tagName === "tspan" ||
element.tagName === "defs"
) {
for (let child of Array.from(element.children)) {
await this.prepareElement(child, mapTextSpecs)
}
}
}
private _isPrepared = false;
private _isPrepared = false
private async prepareMap(mapSpec: SVGTSpanElement,): Promise<void> {
private async prepareMap(mapSpec: SVGTSpanElement): Promise<void> {
// Upper left point of the tspan
const {x, y} = SvgToPdfInternals.GetActualXY(mapSpec)
const { x, y } = SvgToPdfInternals.GetActualXY(mapSpec)
let textElement: Element = mapSpec
// We recurse up to get the actual, full specification
@ -618,7 +647,7 @@ export class SvgToPdfPage {
const params = SvgToPdfInternals.parseCss(match[1], ",")
let smallestRect: SVGRectElement = undefined
let smallestSurface: number = undefined;
let smallestSurface: number = undefined
// We iterate over all the rectangles and pick the smallest (by surface area) that contains the upper left point of the tspan
for (const id in this.rects) {
const rect = this.rects[id]
@ -635,14 +664,17 @@ export class SvgToPdfPage {
smallestSurface = surface
smallestRect = rect
}
}
if (smallestRect === undefined) {
throw "No rectangle found around " + spec + ". Draw a rectangle around it, the map will be projected on that one"
throw (
"No rectangle found around " +
spec +
". Draw a rectangle around it, the map will be projected on that one"
)
}
const svgImage = document.createElement('image')
const svgImage = document.createElement("image")
svgImage.setAttribute("x", smallestRect.getAttribute("x"))
svgImage.setAttribute("y", smallestRect.getAttribute("y"))
const width = SvgToPdfInternals.attrNumber(smallestRect, "width")
@ -653,7 +685,9 @@ export class SvgToPdfPage {
let layout = AllKnownLayouts.allKnownLayouts.get(params["theme"])
if (layout === undefined) {
console.error("Could not show map with parameters", params)
throw "Theme not found:" + params["theme"] + ". Use theme: to define which theme to use. "
throw (
"Theme not found:" + params["theme"] + ". Use theme: to define which theme to use. "
)
}
layout.widenFactor = 0
layout.overpassTimeout = 600
@ -662,7 +696,7 @@ export class SvgToPdfPage {
if (paramsKey.startsWith("layer-")) {
const layerName = paramsKey.substring("layer-".length)
const key = params[paramsKey].toLowerCase().trim()
const layer = layout.layers.find(l => l.id === layerName)
const layer = layout.layers.find((l) => l.id === layerName)
if (layer === undefined) {
throw "No layer found for " + paramsKey
}
@ -672,7 +706,7 @@ export class SvgToPdfPage {
}
}
}
const zoom = Number(params["zoom"] ?? params["z"] ?? 14);
const zoom = Number(params["zoom"] ?? params["z"] ?? 14)
Hash.hash.setData(undefined)
// QueryParameters.ClearAll()
@ -681,7 +715,7 @@ export class SvgToPdfPage {
state.locationControl.setData({
zoom,
lat: this.options?.overrideLocation?.lat ?? Number(params["lat"] ?? 51.05016),
lon: this.options?.overrideLocation?.lon ?? Number(params["lon"] ?? 3.717842)
lon: this.options?.overrideLocation?.lon ?? Number(params["lon"] ?? 3.717842),
})
console.log("Params are", params, params["layers"] === "none")
@ -689,7 +723,9 @@ export class SvgToPdfPage {
const fl = state.filteredLayers.data
for (const filteredLayer of fl) {
if (params["layer-" + filteredLayer.layerDef.id] !== undefined) {
filteredLayer.isDisplayed.setData(params["layer-" + filteredLayer.layerDef.id].trim().toLowerCase() !== "false")
filteredLayer.isDisplayed.setData(
params["layer-" + filteredLayer.layerDef.id].trim().toLowerCase() !== "false"
)
} else if (params["layers"] === "none") {
filteredLayer.isDisplayed.setData(false)
} else if (filteredLayer.layerDef.id.startsWith("note_import")) {
@ -701,16 +737,23 @@ export class SvgToPdfPage {
if (paramsKey.startsWith("layer-")) {
const layerName = paramsKey.substring("layer-".length)
const key = params[paramsKey].toLowerCase().trim()
const isDisplayed = key === "true" || key === "force";
const layer = state.filteredLayers.data.find(l => l.layerDef.id === layerName)
console.log("Setting ", layer?.layerDef?.id, " to visibility", isDisplayed, "(minzoom:", layer?.layerDef?.minzoomVisible, layer?.layerDef?.minzoom, ")")
layer.isDisplayed.setData(
isDisplayed
const isDisplayed = key === "true" || key === "force"
const layer = state.filteredLayers.data.find((l) => l.layerDef.id === layerName)
console.log(
"Setting ",
layer?.layerDef?.id,
" to visibility",
isDisplayed,
"(minzoom:",
layer?.layerDef?.minzoomVisible,
layer?.layerDef?.minzoom,
")"
)
layer.isDisplayed.setData(isDisplayed)
if (key === "force") {
layer.layerDef.minzoom = 0
layer.layerDef.minzoomVisible = 0
layer.isDisplayed.addCallback(isDisplayed => {
layer.isDisplayed.addCallback((isDisplayed) => {
if (!isDisplayed) {
console.warn("Forcing layer " + paramsKey + " as true")
layer.isDisplayed.setData(true)
@ -720,44 +763,53 @@ export class SvgToPdfPage {
}
}
const pngCreator = new PngMapCreator(
state,
{
width,
height,
scaling: Number(params["scaling"] ?? 1.5),
divId: this.options.getFreeDiv(),
dummyMode: this.options.disableMaps
}
)
const pngCreator = new PngMapCreator(state, {
width,
height,
scaling: Number(params["scaling"] ?? 1.5),
divId: this.options.getFreeDiv(),
dummyMode: this.options.disableMaps,
})
const png = await pngCreator.CreatePng("image")
svgImage.setAttribute('xlink:href', png)
svgImage.setAttribute("xlink:href", png)
smallestRect.parentElement.insertBefore(svgImage, smallestRect)
await this.prepareElement(svgImage, [])
const smallestRectCss = SvgToPdfInternals.parseCss(smallestRect.getAttribute("style"))
smallestRectCss["fill-opacity"] = "0"
smallestRect.setAttribute("style", Object.keys(smallestRectCss).map(k => k + ":" + smallestRectCss[k]).join(";"))
smallestRect.setAttribute(
"style",
Object.keys(smallestRectCss)
.map((k) => k + ":" + smallestRectCss[k])
.join(";")
)
textElement.parentElement.removeChild(textElement)
}
public async PrepareLanguage(language: string) {
// Always fetch the remote data - it's cached anyway
this.layerTranslations[language] = await Utils.downloadJsonCached("https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/langs/layers/" + language + ".json", 24 * 60 * 60 * 1000)
const shared_questions = await Utils.downloadJsonCached("https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/langs/shared-questions/" + language + ".json", 24 * 60 * 60 * 1000)
this.layerTranslations[language] = await Utils.downloadJsonCached(
"https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/langs/layers/" +
language +
".json",
24 * 60 * 60 * 1000
)
const shared_questions = await Utils.downloadJsonCached(
"https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/langs/shared-questions/" +
language +
".json",
24 * 60 * 60 * 1000
)
this.layerTranslations[language]["shared-questions"] = shared_questions["shared_questions"]
}
public async Prepare() {
if (this._isPrepared) {
return
}
this._isPrepared = true;
this._isPrepared = true
const mapSpecs: SVGTSpanElement[] = []
for (let child of Array.from(this._svgRoot.children)) {
await this.prepareElement(<any>child, mapSpecs)
@ -766,8 +818,6 @@ export class SvgToPdfPage {
for (const mapSpec of mapSpecs) {
await this.prepareMap(mapSpec)
}
}
public drawPage(advancedApi: jsPDF, i: number, language): void {
@ -779,16 +829,21 @@ export class SvgToPdfPage {
this.options.beforePage(i)
}
const self = this
const internal = new SvgToPdfInternals(advancedApi, this.images, this.rects, key => self.extractTranslation(key, language));
const internal = new SvgToPdfInternals(advancedApi, this.images, this.rects, (key) =>
self.extractTranslation(key, language)
)
for (let child of Array.from(this._svgRoot.children)) {
internal.handleElement(<any>child)
}
}
extractTranslation(text: string, language: string, strict: boolean = false) {
if (text === "$version") {
return new Date().toISOString().substring(0, "2022-01-02THH:MM".length) + " - v" + Constants.vNumber
return (
new Date().toISOString().substring(0, "2022-01-02THH:MM".length) +
" - v" +
Constants.vNumber
)
}
const pathPart = text.match(/\$(([_a-zA-Z0-9? ]+\.)+[_a-zA-Z0-9? ]+)(.*)/)
if (pathPart === null) {
@ -817,7 +872,7 @@ export class SvgToPdfPage {
}
if (typeof t === "string") {
t = new TypedTranslation({"*": t})
t = new TypedTranslation({ "*": t })
}
if (t instanceof TypedTranslation) {
if (strict && (t.translations[language] ?? t.translations["*"]) === undefined) {
@ -833,40 +888,47 @@ export class SvgToPdfPage {
console.error("Could not get textFor from ", t, "for path", text)
}
}
}
export class SvgToPdf {
public static readonly templates: Record<string, { pages: string[], description: string | Translation }> = {
public static readonly templates: Record<
string,
{ pages: string[]; description: string | Translation }
> = {
flyer_a4: {
pages: ["/assets/templates/MapComplete-flyer.svg", "/assets/templates/MapComplete-flyer.back.svg"],
description: Translations.t.flyer.description
pages: [
"/assets/templates/MapComplete-flyer.svg",
"/assets/templates/MapComplete-flyer.back.svg",
],
description: Translations.t.flyer.description,
},
poster_a3: {
pages: ["/assets/templates/MapComplete-poster-a3.svg"],
description: "A basic A3 poster (similar to the flyer)"
description: "A basic A3 poster (similar to the flyer)",
},
poster_a2: {
pages: ["/assets/templates/MapComplete-poster-a2.svg"],
description: "A basic A2 poster (similar to the flyer); scaled up from the A3 poster"
}
description: "A basic A2 poster (similar to the flyer); scaled up from the A3 poster",
},
}
private readonly _title: string;
private readonly _title: string
private readonly _pages: SvgToPdfPage[]
constructor(title: string, pages: string[], options?: SvgToPdfOptions) {
this._title = title;
this._title = title
options = options ?? <SvgToPdfOptions>{}
options.textSubstitutions = options.textSubstitutions ?? {}
const mapCount = "" + Array.from(AllKnownLayouts.allKnownLayouts.values()).filter(th => !th.hideFromOverview).length;
const mapCount =
"" +
Array.from(AllKnownLayouts.allKnownLayouts.values()).filter(
(th) => !th.hideFromOverview
).length
options.textSubstitutions["mapCount"] = mapCount
this._pages = pages.map(page => new SvgToPdfPage(page, options))
this._pages = pages.map((page) => new SvgToPdfPage(page, options))
}
public async ConvertSvg(language: string): Promise<void> {
const firstPage = this._pages[0]._svgRoot
const width = SvgToPdfInternals.attrNumber(firstPage, "width")
@ -880,7 +942,7 @@ export class SvgToPdf {
}
const doc = new jsPDF(mode, undefined, [width, height])
doc.advancedAPI(advancedApi => {
doc.advancedAPI((advancedApi) => {
for (let i = 0; i < this._pages.length; i++) {
if (i > 0) {
const page = this._pages[i]._svgRoot
@ -888,24 +950,31 @@ export class SvgToPdf {
const height = SvgToPdfInternals.attrNumber(page, "height")
advancedApi.addPage([width, height])
const mediabox: { bottomLeftX: number, bottomLeftY: number, topRightX: number, topRightY: number } = advancedApi.getCurrentPageInfo().pageContext.mediaBox
const mediabox: {
bottomLeftX: number
bottomLeftY: number
topRightX: number
topRightY: number
} = advancedApi.getCurrentPageInfo().pageContext.mediaBox
const targetWidth = 297
const targetHeight = 210
const sx = mediabox.topRightX / targetWidth
const sy = mediabox.topRightY / targetHeight
advancedApi.setCurrentTransformationMatrix(advancedApi.Matrix(sx, 0, 0, -sy, 0, mediabox.topRightY))
advancedApi.setCurrentTransformationMatrix(
advancedApi.Matrix(sx, 0, 0, -sy, 0, mediabox.topRightY)
)
}
this._pages[i].drawPage(advancedApi, i, language)
}
})
await doc.save(this._title + "." + language + ".pdf");
await doc.save(this._title + "." + language + ".pdf")
}
public translationKeys(): Set<string> {
const allTranslations = this._pages[0].extractTranslations()
for (let i = 1; i < this._pages.length; i++) {
const translations = this._pages[i].extractTranslations()
translations.forEach(t => allTranslations.add(t))
translations.forEach((t) => allTranslations.add(t))
}
allTranslations.delete("import")
allTranslations.delete("version")
@ -927,7 +996,9 @@ export class SvgToPdf {
for (const page of this._pages) {
// Load all languages at once.
// We don't parallelize the pages, as they'll probably reload the same languages anyway (and they are cached)
await Promise.all(languages.map(async language => await page.PrepareLanguage(language)))
await Promise.all(
languages.map(async (language) => await page.PrepareLanguage(language))
)
}
return true
}
@ -935,10 +1006,10 @@ export class SvgToPdf {
getTranslation(translationKey: string, language: string, strict: boolean = false) {
for (const page of this._pages) {
const tr = page.extractTranslation(translationKey, language, strict)
if(tr === undefined){
if (tr === undefined) {
continue
}
if(tr === translationKey){
if (tr === translationKey) {
continue
}
return tr

View file

@ -1,11 +1,11 @@
import MinimapImplementation from "./UI/Base/MinimapImplementation";
import MinimapImplementation from "./UI/Base/MinimapImplementation"
import { Utils } from "./Utils"
import AllThemesGui from "./UI/AllThemesGui"
import { QueryParameters } from "./Logic/Web/QueryParameters"
import StatisticsGUI from "./UI/StatisticsGUI"
import { FixedUiElement } from "./UI/Base/FixedUiElement"
import {PdfExportGui} from "./UI/BigComponents/PdfExportGui";
import { PdfExportGui } from "./UI/BigComponents/PdfExportGui"
const layout = QueryParameters.GetQueryParameter("layout", undefined).data ?? ""
const customLayout = QueryParameters.GetQueryParameter("userlayout", undefined).data ?? ""
@ -45,7 +45,7 @@ if (mode.data === "statistics") {
console.log("Statistics mode!")
new FixedUiElement("").AttachTo("centermessage")
new StatisticsGUI().SetClass("w-full h-full pointer-events-auto").AttachTo("topleft-tools")
} else if(mode.data === "pdf"){
} else if (mode.data === "pdf") {
MinimapImplementation.initialize()
new FixedUiElement("").AttachTo("centermessage")
const div = document.createElement("div")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1,004 KiB

After

Width:  |  Height:  |  Size: 1,003 KiB

View file

@ -29,10 +29,10 @@
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="0.5378574"
inkscape:cx="611.68629"
inkscape:cy="588.44593"
inkscape:current-layer="layer6"
inkscape:zoom="0.50706283"
inkscape:cx="901.26898"
inkscape:cy="411.19165"
inkscape:current-layer="svg8"
inkscape:window-width="1920"
inkscape:window-height="995"
inkscape:window-x="0"
@ -68,9 +68,13 @@
orientation="1,0"
id="guide8724" />
<sodipodi:guide
position="-10.409528,340.20558"
position="-44.831442,320.04602"
orientation="0,-1"
id="guide9421" />
<sodipodi:guide
position="400.13196,78.02807"
orientation="0,-1"
id="guide1342" />
</sodipodi:namedview>
<defs
id="defs2">
@ -2075,7 +2079,7 @@
style="display:inline">
<g
id="g1383"
transform="matrix(1.360707,0,0,1.360707,45.569024,-58.983598)">
transform="matrix(1.360707,0,0,1.360707,45.672847,-44.915596)">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#aaaaaa;stroke-width:0.0873813;stroke-linecap:round;stroke-linejoin:bevel;stop-color:#000000"
id="path2317"
@ -2521,417 +2525,421 @@
</g>
</g>
<g
id="g839"
transform="matrix(1.4782289,0,0,1.4782289,713.41215,399.14907)">
id="g1512"
transform="translate(0,-6.0271117)">
<g
transform="translate(0,-64)"
id="layer2">
<ellipse
ry="31.513508"
rx="31.580557"
cy="96.215309"
cx="31.580557"
id="path847"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.239335;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
id="g839"
transform="matrix(1.4782289,0,0,1.4782289,713.41215,399.14907)">
<g
transform="translate(0,-64)"
id="layer2">
<ellipse
ry="31.513508"
rx="31.580557"
cy="96.215309"
cx="31.580557"
id="path847"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.239335;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</g>
<g
transform="translate(0,-64)"
id="layer3">
<rect
style="visibility:hidden;fill:none;stroke:none;stroke-width:2.75743"
id="canvas"
y="74.2229"
x="9.5211029"
height="44.118912"
width="44.118912" />
<path
style="fill:#734a08;fill-opacity:1;stroke:none;stroke-width:2.75743"
id="toilets"
d="m 29.512484,76.980332 v 38.604048 h 4.136148 V 76.980332 Z m -10.34037,2.757432 c -2.284331,0 -4.136148,1.851809 -4.136148,4.136148 0,2.284339 1.851817,4.136148 4.136148,4.136148 2.284331,0 4.136148,-1.851809 4.136148,-4.136148 0,-2.284339 -1.851817,-4.136148 -4.136148,-4.136148 z m 24.816887,0 c -2.28433,0 -4.136148,1.851809 -4.136148,4.136148 0,2.284339 1.851818,4.136148 4.136148,4.136148 2.284331,0 4.136147,-1.851809 4.136147,-4.136148 0,-2.284339 -1.851816,-4.136148 -4.136147,-4.136148 z M 16.414682,90.767492 c -1.653692,0 -2.757432,1.567738 -2.757432,2.757432 0,1.454076 3.44679,4.126883 3.44679,5.514863 0,1.533053 -4.825506,2.757433 -4.825506,8.272293 h 4.825506 v 8.2723 h 4.136148 v -8.2723 h 4.825506 c 0,-5.51486 -4.825506,-6.8122 -4.825506,-8.272293 0,-1.460087 3.44679,-3.994691 3.44679,-5.514863 0,-1.123626 -1.171156,-2.757432 -2.757432,-2.757432 z m 23.438171,0 c -1.454087,0 -2.757431,1.324863 -2.757431,2.757432 0,2.757431 4.825505,11.074036 4.825505,13.787156 v 8.2723 h 4.136147 v -8.2723 c 0,-2.65943 4.825505,-11.029725 4.825505,-13.787156 0,-1.525908 -1.237249,-2.757432 -2.757431,-2.757432 z" />
</g>
</g>
<g
transform="translate(0,-64)"
id="layer3">
<rect
style="visibility:hidden;fill:none;stroke:none;stroke-width:2.75743"
id="canvas"
y="74.2229"
x="9.5211029"
height="44.118912"
width="44.118912" />
id="g862"
transform="matrix(0.18713765,0,0,0.18713765,852.71383,399.85818)">
<circle
r="248.93001"
cy="250.6844"
cx="249.3156"
id="path7"
style="fill:#ffffff;fill-opacity:1;stroke-width:37.4665" />
<path
style="fill:#734a08;fill-opacity:1;stroke:none;stroke-width:2.75743"
id="toilets"
d="m 29.512484,76.980332 v 38.604048 h 4.136148 V 76.980332 Z m -10.34037,2.757432 c -2.284331,0 -4.136148,1.851809 -4.136148,4.136148 0,2.284339 1.851817,4.136148 4.136148,4.136148 2.284331,0 4.136148,-1.851809 4.136148,-4.136148 0,-2.284339 -1.851817,-4.136148 -4.136148,-4.136148 z m 24.816887,0 c -2.28433,0 -4.136148,1.851809 -4.136148,4.136148 0,2.284339 1.851818,4.136148 4.136148,4.136148 2.284331,0 4.136147,-1.851809 4.136147,-4.136148 0,-2.284339 -1.851816,-4.136148 -4.136147,-4.136148 z M 16.414682,90.767492 c -1.653692,0 -2.757432,1.567738 -2.757432,2.757432 0,1.454076 3.44679,4.126883 3.44679,5.514863 0,1.533053 -4.825506,2.757433 -4.825506,8.272293 h 4.825506 v 8.2723 h 4.136148 v -8.2723 h 4.825506 c 0,-5.51486 -4.825506,-6.8122 -4.825506,-8.272293 0,-1.460087 3.44679,-3.994691 3.44679,-5.514863 0,-1.123626 -1.171156,-2.757432 -2.757432,-2.757432 z m 23.438171,0 c -1.454087,0 -2.757431,1.324863 -2.757431,2.757432 0,2.757431 4.825505,11.074036 4.825505,13.787156 v 8.2723 h 4.136147 v -8.2723 c 0,-2.65943 4.825505,-11.029725 4.825505,-13.787156 0,-1.525908 -1.237249,-2.757432 -2.757431,-2.757432 z" />
style="fill:#94bb28;fill-opacity:1;stroke-width:51.7926"
d="M 152.31834,83.603749 V 130.1409 h 64.93624 V 83.603749 Z m 127.14153,0 V 130.1409 h 65.03734 V 83.603749 Z m 0,61.105621 v 128.48315 c 0,6.16398 4.96328,11.1283 11.12606,11.1283 h 0.80901 10.31698 v 124.53792 c 0,5.95642 4.86707,10.82482 10.82274,10.82482 h 95.48254 c 5.95552,0 10.82276,-4.86802 10.82276,-10.82482 v -77.4946 l 0.19857,-11.331 -41.36909,-175.32377 z m -160.62113,0.18734 -41.470173,175.32376 0.202694,11.43216 v 77.49422 c 1.84e-4,5.95718 4.867375,10.8252 10.822897,10.8252 h 95.482582 c 6.0591,0 10.92385,-4.86802 10.92385,-10.82482 V 284.71047 h 10.21563 0.80916 c 6.16265,0 11.12614,-5.06585 11.12614,-11.22946 V 144.89633 Z m 112.47524,0 v 119.47881 h 33.68184 V 144.89633 Z"
id="rect239-1" />
</g>
<g
id="g896"
transform="matrix(0.23584708,0,0,0.23584708,709.50946,446.69298)">
<g
id="g40912"
transform="matrix(0.76992625,0,0,0.76992625,-151.38128,92.316147)">
<circle
r="256.54221"
cy="255.45746"
cx="98.542206"
id="path841-3"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.377953;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
style="fill:#ffbd48;stroke-width:0.762712"
id="path2"
d="M 123.94216,68.265603 V 227.00511 H 90.171281 V 80.51667 c 0,-2.532444 1.281118,-4.895064 3.402412,-6.280459 L 112.32867,61.979186 c 4.99636,-3.259404 11.61349,0.321768 11.61349,6.286417 z m 0,0" />
<path
style="fill:#ff9c26;stroke-width:0.762712"
id="path4-6"
d="m 122.57464,96.48 c -8.58052,0 -15.8233,6.42049 -16.83926,14.92354 l -2.99126,24.96691 v -11.98888 c 0,-5.73524 -2.869112,-11.03848 -7.677774,-14.17275 l -4.895065,-3.19684 v 119.9961 H 123.94216 V 96.536608 C 123.48632,96.497877 123.03048,96.48 122.57464,96.48 Z m 0,0" />
<path
style="fill:#ffdf4a;stroke-width:0.762712"
id="path6"
d="M 71.297131,80.51667 V 189.48025 H 37.526255 V 68.265603 c 0,-5.964649 6.617125,-9.545821 11.613487,-6.286417 l 18.754977,12.257025 c 2.121294,1.385395 3.402412,3.748015 3.402412,6.280459 z m 0,0" />
<path
style="fill:#ffbd48;stroke-width:0.762712"
id="path8"
d="m 67.063482,95.183986 c 1.436043,0 2.860171,0.187699 4.233649,0.551178 V 189.48025 H 50.113988 v -77.34677 c 0,-9.34323 7.606268,-16.949494 16.949494,-16.949494 z m 0,0" />
<path
style="fill:#ffdf4a;stroke-width:0.762712"
id="path10"
d="m 147.16019,128.71055 -0.67631,5.66672 -12.28682,102.53118 -30.57404,-3.67055 -2.96146,-0.35455 14.43492,-120.3566 c 0.70611,-5.91698 7.69863,-8.68479 12.27192,-4.85633 l 17.16699,14.40215 c 1.94253,1.62673 2.93167,4.12342 2.6248,6.63798 z m 0,0" />
<path
style="fill:#ffbd48;stroke-width:0.762712"
id="path12"
d="m 146.48388,134.37727 -12.28682,102.53118 -30.57404,-3.67055 23.75134,-84.79514 c 1.54926,-5.52371 5.74418,-9.8527 11.21426,-11.57476 z m 0,0" />
<path
style="fill:#ffdf4a;stroke-width:0.762712"
id="path14"
d="M 93.311511,233.35111 H 59.540635 V 112.13348 c 0,-5.96167 6.617126,-9.54284 11.610508,-6.28344 l 18.760935,12.25405 c 2.121294,1.38539 3.399433,3.74801 3.399433,6.28344 z m 0,0" />
<path
style="fill:#ffdf4a;stroke-width:0.762712"
id="path16"
d="m 107.05523,255.91369 32.51955,9.11084 32.70427,-116.7218 c 1.60885,-5.7412 -3.79569,-10.97591 -9.48325,-9.18234 l -21.37085,6.7363 c -2.41625,0.76271 -4.28727,2.69332 -4.96954,5.13043 z m 0,0" />
<path
style="fill:#ff5656;stroke-width:0.762712"
id="path18"
d="m 171.84109,219.45545 -24.80603,52.40071 -45.0477,95.15135 -37.846616,79.94178 c -3.426247,7.23683 -14.285959,4.79973 -14.285959,-3.20577 L 41.345775,349.63495 31.320279,238.70499 23.699115,154.4372 c -0.685249,-7.56754 8.970808,-11.17552 13.50537,-5.08574 35.767038,48.02406 102.161745,57.53115 128.397855,59.40218 5.2645,0.37837 8.49411,5.93187 6.23875,10.70181 z m 0,0" />
<path
style="fill:#f72d2d;stroke-width:0.762712"
id="path20"
d="m 171.84109,219.45545 -24.80603,52.40071 -45.04472,95.15135 -37.849596,79.94178 c -3.426247,7.23683 -14.28298,4.79973 -14.28298,-3.20577 L 49.619416,441.15745 160.96648,208.37824 c 1.65949,0.14897 3.20577,0.2741 4.63586,0.3754 5.2645,0.37837 8.49411,5.93187 6.23875,10.70181 z m 0,0" />
<path
style="fill:#fe9e80;stroke-width:0.762712"
id="path22"
d="m 147.07379,271.85616 -45.04472,95.15135 -14.857989,-4.25749 -45.783595,-13.11507 -1.376457,-15.22744 -6.262584,-69.29956 -2.386455,-26.39998 101.27092,29.00691 z m 0,0" />
<path
style="fill:#fe835f;stroke-width:0.762712"
id="path24"
d="m 147.07379,271.85616 -45.04472,95.15135 -14.857989,-4.25749 45.461829,-95.03514 z m 0,0" />
<path
style="fill:#ffdf4a;stroke-width:0.762712"
id="path26"
d="m 66.545075,300.2523 c 0,16.46982 -11.300655,30.29994 -26.572778,34.15521 l -6.262583,-69.29956 c 18.337869,1.22451 32.835361,16.49067 32.835361,35.14435 z m 0,0" />
</g>
</g>
<g
id="g1987"
transform="matrix(2.8106546,0,0,2.8106546,-169.07891,220.26224)">
<circle
r="16.630953"
cy="80.532394"
cx="282.5199"
id="path1964"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
transform="matrix(0.54395857,0,0,0.54395857,269.48791,66.555529)"
id="g852"
style="overflow:inherit">
<path
d="m 7.206,31.141 c 2.885,0 5.219,-2.399 5.219,-5.368 0,-2.953 -2.334,-5.353 -5.219,-5.353 -2.873,0 -5.206,2.4 -5.206,5.353 0,2.968 2.333,5.368 5.206,5.368 z m 29.23,9.216 c 0.243,-0.172 0.564,-0.12 0.741,0.117 l 0.965,1.372 c 0.164,0.238 0.114,0.58 -0.116,0.766 l -7.08,5.287 c -0.229,0.172 -0.562,0.118 -0.743,-0.118 l -0.962,-1.372 c -0.165,-0.238 -0.113,-0.579 0.116,-0.764 z m -8.003,-6.817 -2.808,-5.063 -1.474,1.107 2.808,5.09 z M 21.882,21.713 10.962,2 8.873,2.014 20.395,22.834 Z m 10.281,10.43 C 32.78,31.682 34.192,31 35,31 h 10 c 1.974,0 3,1.986 3,4.004 C 48,37.034 46.974,38 45,38 h -9 l -10.836,8.502 c -3.808,2.819 -6.116,-0.278 -6.116,-0.278 L 10.565,37.495 C 9.142,35.742 9.45,32.406 11.156,30.929 l 11.739,-8.597 c 1.166,-1 2.897,-0.843 3.885,0.343 0.976,1.2 0.822,2.994 -0.346,3.996 l -7.515,5.657 5.399,5.484 z"
id="path841" />
</g>
</g>
<g
id="g958"
transform="matrix(1.4657321,0,0,1.4657321,783.20327,468.03016)">
<g
id="layer1-56">
<ellipse
ry="31.946436"
rx="32.00938"
cy="32.109043"
cx="31.967007"
id="path819"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.497387;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</g>
<g
id="layer2-2">
<path
style="fill:#734a08;fill-opacity:1;stroke:none;stroke-width:3.34941"
d="M 32.123859,10.440678 8.6779661,17.139504 v 3.349413 L 32.123859,13.79009 55.569753,20.488917 v -3.349413 z m -11.59865,11.964995 c -0.522431,0.02077 -1.041409,0.124297 -1.556954,0.320538 v 20.835706 c 0,0 8.38755,-0.322013 10.525792,7.817477 V 29.497007 c -1.631616,-3.400613 -5.311804,-7.237191 -8.968838,-7.091334 z m 8.968838,28.973731 C 24.066203,47.228261 16.331902,46.172115 16.331902,46.172115 V 26.376556 l -2.629816,-1.046692 v 23.445893 l 15.791961,5.207293 h 5.259628 L 50.545632,48.775757 V 25.329864 l -2.629812,1.046692 v 20.835709 l -13.162145,4.167139 c -1.754454,-0.663351 -3.795938,-0.545319 -5.259628,0 z M 45.279464,22.726221 C 40.03579,22.448689 33.986193,25.566152 30.808953,28.247518 v 22.045945 c 2.933724,-2.408355 8.190227,-5.573982 14.470511,-6.208191 z"
id="path4176" />
</g>
</g>
<g
id="g2125"
transform="matrix(3.8574971,0,0,3.8574971,510.77103,468.2685)"
inkscape:export-filename="/home/pietervdvn/git/MapComplete/assets/g2125.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
transform="translate(0.12711811)"
style="display:inline"
id="layer1-37">
<circle
r="12.076271"
cy="12.076271"
cx="11.949153"
id="path814"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</g>
<g
transform="translate(0.12711811)"
id="layer2-5">
<path
id="path2-9"
d="m 16.739623,11.453018 2.12132,-2.1213204 c 0.424264,-0.4242641 0.424264,-0.9899495 0,-1.4142136 -0.424264,-0.424264 -0.98995,-0.424264 -1.414214,0 l -2.12132,2.121321 -1.414213,-1.4142142 2.12132,-2.1213203 c 0.424264,-0.4242641 0.424264,-0.9899495 0,-1.4142136 -0.424264,-0.4242638 -1.06066,-0.3535532 -1.414214,2e-7 L 12.496982,7.2103775 11.082769,5.7961639 8.4664736,8.4124588 C 6.769417,10.109515 6.557285,12.72581 7.830077,14.705709 l -5.1618795,5.16188 1.4142136,1.414213 5.1618795,-5.161879 c 1.9798994,1.272792 4.5961944,1.06066 6.2932504,-0.636396 l 2.616295,-2.616295 z" />
</g>
</g>
<g
id="g2175"
transform="matrix(6.6832014,0,0,6.6832014,442.74768,399.98826)">
<g
id="layer2-6">
<circle
r="6.9703388"
cy="7"
cx="7"
id="path846"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</g>
<g
style="display:inline"
id="layer1-12">
<g
transform="matrix(0.86185687,0,0,0.86185687,1.4318286,1.4602523)"
id="hbars">
<rect
id="rect2"
style="fill:#ac39ac"
height="0.5"
width="11"
y="6"
x="1" />
<rect
id="rect4"
style="fill:#ac39ac"
height="0.5"
width="9.5"
y="8"
x="2" />
</g>
<g
transform="matrix(0.86185687,0,0,0.86185687,1.4318286,1.4602523)"
id="vbars">
<rect
id="rect7"
style="fill:#ac39ac"
height="5.5"
width="0.5"
y="4.5"
x="3" />
<rect
id="rect9"
style="fill:#ac39ac"
height="5.5"
width="0.5"
y="4.5"
x="5" />
<rect
id="rect11"
style="fill:#ac39ac"
height="5.5"
width="0.5"
y="4.5"
x="7.5" />
<rect
id="rect13"
style="fill:#ac39ac"
height="5.5"
width="0.5"
y="4.5"
x="9.5" />
</g>
<path
style="fill:#ac39ac;stroke:none;stroke-width:0.861857"
d="M 6.5167842,4.9076797 8.2404979,2.3221091 A 0.43626052,0.43626052 0 0 1 9.0420248,2.6668519 L 7.5510124,4.9076797 Z"
id="handle" />
<path
style="fill:#ac39ac;fill-rule:evenodd;stroke:none;stroke-width:0.861857"
d="M 1.4318286,4.9076797 H 12.635968 L 10.912254,10.940678 H 3.1555423 Z M 2.5091497,5.7695366 H 11.558647 L 10.265861,10.078821 H 3.801935 Z"
id="body" />
</g>
</g>
<g
id="g1904"
transform="matrix(0.25051572,0,0,0.25051572,872.66935,392.83279)">
<g
id="surface1">
<path
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.125;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
d="m 467.96462,215.30738 c 0,102.69922 83.2539,185.95313 185.95311,185.95313 102.69923,0 185.95313,-83.25391 185.95313,-185.95313 0,-102.69921 -83.2539,-185.953119 -185.95313,-185.953119 -102.69921,0 -185.95311,83.253909 -185.95311,185.953119 z m 0,0"
id="path1889" />
<path
style="fill:#aaaaaa;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:18.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
d="m 791.23805,231.5105 -26.97657,-8.12108 -39.53906,55.36718 46.71485,15.87109 z m -8.73438,-37.32421 -234.7578,-66.28515 c -6.14063,-1.55079 -14.71485,-0.60157 -17.66016,10.52734 0,0 -13.85156,61.74219 -20.94141,90.72265 -2.49609,10.21094 0.23047,14.57422 7.30078,16.45704 l 187,53.62109 z m 0,0"
id="path1891" />
</g>
</g>
<g
id="g2050"
transform="matrix(0.18534995,0,0,0.18534995,767.095,542.7144)">
<path
style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.34549"
d="m 2078.7593,-149.40763 c 0,138.806368 -112.5272,251.33359 -251.3336,251.33359 -138.8063,0 -251.3336,-112.527222 -251.3336,-251.33359 0,-138.80635 112.5273,-251.32831 251.3336,-251.32831 138.8064,0 251.3336,112.52196 251.3336,251.32831 z m 0,0"
id="path1904" />
<g
id="g1926"
transform="translate(1250.0673,-234.86328)">
<g
id="surface1-8"
transform="translate(387.14053,-111)">
<path
style="fill:#7ab82e;fill-opacity:1;fill-rule:evenodd;stroke:none"
d="m 101.84766,144.1875 c 22.72656,8.01562 71.23437,71.23828 90.67187,90.67187 10.15625,10.15625 26.54688,19.41407 31.73438,34 h -24.9336 c -2.67578,-1.8164 -3.8125,-1.7539 -9.07031,-2.26562 -5.23047,-14.41016 -56.83203,-63.60547 -70.26953,-77.07031 l -15.86719,-13.60157 c -4.01562,-7.38281 -2.25,-21.1914 -2.26562,-31.73437 z m 0,0"
id="path1908" />
<path
style="fill:#7ab82e;fill-opacity:1;fill-rule:evenodd;stroke:none"
d="m 322.42578,285.50781 c 15.82031,-0.29297 22.46484,3.25781 33.30078,6.24219 3.79297,6.08203 9.4375,15.53906 14.56641,20.8125 0.79687,17.37109 -2.23047,26.80078 -6.24219,41.625 -19.32422,11.75391 -30.96484,15.49219 -58.27344,8.32422 -8.11718,-12.36719 -15.78906,-20.89844 -16.65234,-41.625 4.00391,-5.20313 4.43359,-13.27735 8.32812,-18.73047 5.98047,-8.39063 16.89844,-10.24609 24.97266,-16.64844 z m 2.08203,20.8086 c -6.99219,7.25 -12.68359,9.91015 -14.5664,22.89843 9.07812,12.61719 5.43359,17.49219 29.13281,16.64453 3.95703,-4.22265 5.97656,-3.88281 8.32812,-10.40234 6.08594,-7.61719 2.34766,-13.77734 0,-22.89453 -3.05078,-1.6875 -5.85547,-3.78906 -8.32812,-6.24609 z m 0,0"
id="path1910" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
d="m 218.36328,0.367188 c 21.31641,-0.2773442 44.07031,-1.761719 60.35938,4.164062 63.92578,23.28125 127.39453,115.67188 74.92187,199.80078 -22.63281,36.29297 -64.625,70.07813 -112.39062,81.17578 -36.03907,8.36719 -75.17188,-15.78515 -101.98047,2.07813 C 112.11719,305.68359 80.964844,373.78906 43.535156,375 30.347656,355.57031 2.351562,348.11328 1.910156,316.72656 26.886719,300.14453 45.382812,271.17187 66.429688,250.125 75.359375,241.19531 89.71875,232.47656 93.488281,218.90625 96.878906,206.68359 89.324219,193.59766 87.242188,185.60156 81.503906,163.5625 83.9375,127.91797 91.402344,110.67578 108.14063,72.035156 143.75,33.496094 178.81641,12.855469 Z m 0,20.816406 -33.30469,12.488281 c -33.39843,20.421875 -68.5664,59.28125 -79.08593,101.980465 -9.429691,38.29688 20.64453,71.62891 2.08203,101.98438 l -35.382815,35.38281 -24.976563,29.13672 c -7.785156,7.81641 -18.785156,13.58984 -22.890624,24.97266 10.320312,7.00781 15.042968,20.02734 29.136718,22.89453 12.667969,-18.98438 68.867184,-79.77735 89.496094,-87.41016 29.78516,-11.03125 62.99219,9.625 95.73828,2.07813 36.97266,-8.51954 77.51563,-41.5 95.73828,-68.67969 49.29297,-73.52344 -11.875,-159.328126 -74.92578,-174.828126 z m 0,0"
id="path1912" />
</g>
</g>
</g>
<g
id="surface1-1"
transform="translate(1309.4348,89.334266)">
<g
id="g2054"
transform="matrix(0.24938676,0,0,0.24938676,-390.20618,378.58256)">
<path
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 375.55859,188.20312 C 375.55859,291.36719 291.92578,375 188.76172,375 85.597656,375 1.964844,291.36719 1.964844,188.20312 1.964844,85.039062 85.597656,1.410156 188.76172,1.410156 c 103.16406,0 186.79687,83.628906 186.79687,186.792964 z m 0,0"
id="path2023" />
<path
style="fill:#734a07;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.785601"
d="m 185.04339,58.004287 c -11.27768,0 -20.43178,9.1541 -20.43178,20.431779 0,11.27768 9.1541,20.394955 20.43178,20.394955 11.27768,0 20.43485,-9.117275 20.43485,-20.394955 0,-11.277679 -9.15717,-20.431779 -20.43485,-20.431779 z M 164.61161,112.4655 c -7.17782,0 -13.59459,6.52418 -13.59459,13.59459 0,13.61301 23.81048,54.70059 23.81048,68.09571 v 40.82366 h 20.43177 V 194.1558 c 0,-13.13121 23.81355,-54.4827 23.81355,-68.09571 0,-7.53379 -6.09148,-13.59459 -13.59458,-13.59459 z m -38.55892,142.17855 v 19.66459 h 117.98447 v -19.66459 z m 19.66458,39.32918 v 39.32611 h 78.6553 v -39.32611 z m 0,0"
id="path2025" />
</g>
</g>
</g>
<g
id="g862"
transform="matrix(0.18713765,0,0,0.18713765,852.71383,399.85818)">
<circle
r="248.93001"
cy="250.6844"
cx="249.3156"
id="path7"
style="fill:#ffffff;fill-opacity:1;stroke-width:37.4665" />
<path
style="fill:#94bb28;fill-opacity:1;stroke-width:51.7926"
d="M 152.31834,83.603749 V 130.1409 h 64.93624 V 83.603749 Z m 127.14153,0 V 130.1409 h 65.03734 V 83.603749 Z m 0,61.105621 v 128.48315 c 0,6.16398 4.96328,11.1283 11.12606,11.1283 h 0.80901 10.31698 v 124.53792 c 0,5.95642 4.86707,10.82482 10.82274,10.82482 h 95.48254 c 5.95552,0 10.82276,-4.86802 10.82276,-10.82482 v -77.4946 l 0.19857,-11.331 -41.36909,-175.32377 z m -160.62113,0.18734 -41.470173,175.32376 0.202694,11.43216 v 77.49422 c 1.84e-4,5.95718 4.867375,10.8252 10.822897,10.8252 h 95.482582 c 6.0591,0 10.92385,-4.86802 10.92385,-10.82482 V 284.71047 h 10.21563 0.80916 c 6.16265,0 11.12614,-5.06585 11.12614,-11.22946 V 144.89633 Z m 112.47524,0 v 119.47881 h 33.68184 V 144.89633 Z"
id="rect239-1" />
</g>
<g
id="g896"
transform="matrix(0.23584708,0,0,0.23584708,709.50946,446.69298)">
style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.249387"
d="m 1220.341,446.77018 c 0,25.72776 -20.8569,46.58467 -46.5847,46.58467 -25.7277,0 -46.5846,-20.85691 -46.5846,-46.58467 0,-25.72775 20.8569,-46.58369 46.5846,-46.58369 25.7278,0 46.5847,20.85594 46.5847,46.58369 z m 0,0"
id="path2295" />
<g
id="g40912"
transform="matrix(0.76992625,0,0,0.76992625,-151.38128,92.316147)">
<circle
r="256.54221"
cy="255.45746"
cx="98.542206"
id="path841-3"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.377953;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
id="surface1-0"
transform="matrix(0.21701693,0,0,0.21701693,1134.9237,410.79292)">
<path
style="fill:#ffbd48;stroke-width:0.762712"
id="path2"
d="M 123.94216,68.265603 V 227.00511 H 90.171281 V 80.51667 c 0,-2.532444 1.281118,-4.895064 3.402412,-6.280459 L 112.32867,61.979186 c 4.99636,-3.259404 11.61349,0.321768 11.61349,6.286417 z m 0,0" />
style="fill:#ff613f;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 265.625,264.84375 h -156.25 c -14.0625,0 -25,-10.9375 -25,-25 V 47.65625 c 0,-14.0625 10.9375,-25 25,-25 h 156.25 c 14.0625,0 25,10.9375 25,25 v 192.1875 c 0,14.0625 -10.9375,25 -25,25 z m 0,0"
id="path1948" />
<path
style="fill:#ff9c26;stroke-width:0.762712"
id="path4-6"
d="m 122.57464,96.48 c -8.58052,0 -15.8233,6.42049 -16.83926,14.92354 l -2.99126,24.96691 v -11.98888 c 0,-5.73524 -2.869112,-11.03848 -7.677774,-14.17275 l -4.895065,-3.19684 v 119.9961 H 123.94216 V 96.536608 C 123.48632,96.497877 123.03048,96.48 122.57464,96.48 Z m 0,0" />
style="fill:#ff856e;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 265.625,22.65625 h -156.25 c -14.0625,0 -25,10.9375 -25,25 V 67.1875 c 0,-14.0625 10.9375,-25 25,-25 h 156.25 c 14.0625,0 25,10.9375 25,25 V 47.65625 c 0,-14.0625 -10.9375,-25 -25,-25 z m 0,0"
id="path1950" />
<path
style="fill:#ffdf4a;stroke-width:0.762712"
id="path6"
d="M 71.297131,80.51667 V 189.48025 H 37.526255 V 68.265603 c 0,-5.964649 6.617125,-9.545821 11.613487,-6.286417 l 18.754977,12.257025 c 2.121294,1.385395 3.402412,3.748015 3.402412,6.280459 z m 0,0" />
style="fill:none;stroke:#453f3a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
d="M 34,33.9 H 14 c -1.8,0 -3.2,-1.4 -3.2,-3.2 V 6.1 c 0,-1.8 1.4,-3.2 3.2,-3.2 h 20 c 1.8,0 3.2,1.4 3.2,3.2 v 24.6 c 0,1.8 -1.4,3.2 -3.2,3.2 z m 0,0"
transform="scale(7.8125)"
id="path1952" />
<path
style="fill:#ffbd48;stroke-width:0.762712"
id="path8"
d="m 67.063482,95.183986 c 1.436043,0 2.860171,0.187699 4.233649,0.551178 V 189.48025 H 50.113988 v -77.34677 c 0,-9.34323 7.606268,-16.949494 16.949494,-16.949494 z m 0,0" />
style="fill:#deba7d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 204.6875,264.84375 h -35.15625 v 74.21875 c 0,4.6875 3.90625,8.59375 8.59375,8.59375 h 17.96875 c 4.6875,0 8.59375,-3.90625 8.59375,-8.59375 z m 0,0"
id="path1954" />
<path
style="fill:#ffdf4a;stroke-width:0.762712"
id="path10"
d="m 147.16019,128.71055 -0.67631,5.66672 -12.28682,102.53118 -30.57404,-3.67055 -2.96146,-0.35455 14.43492,-120.3566 c 0.70611,-5.91698 7.69863,-8.68479 12.27192,-4.85633 l 17.16699,14.40215 c 1.94253,1.62673 2.93167,4.12342 2.6248,6.63798 z m 0,0" />
style="fill:#b89457;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 170.3125,264.84375 h 35.15625 V 285.9375 H 170.3125 Z m 0,0"
id="path1956" />
<path
style="fill:#ffbd48;stroke-width:0.762712"
id="path12"
d="m 146.48388,134.37727 -12.28682,102.53118 -30.57404,-3.67055 23.75134,-84.79514 c 1.54926,-5.52371 5.74418,-9.8527 11.21426,-11.57476 z m 0,0" />
style="fill:none;stroke:#453f3a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
d="m 26.2,33.9 h -4.5 v 9.5 c 0,0.6 0.5,1.1 1.1,1.1 h 2.3 c 0.6,0 1.1,-0.5 1.1,-1.1 z m 0,0"
transform="scale(7.8125)"
id="path1958" />
<path
style="fill:#ffdf4a;stroke-width:0.762712"
id="path14"
d="M 93.311511,233.35111 H 59.540635 V 112.13348 c 0,-5.96167 6.617126,-9.54284 11.610508,-6.28344 l 18.760935,12.25405 c 2.121294,1.38539 3.399433,3.74801 3.399433,6.28344 z m 0,0" />
style="fill:#636668;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 253.90625,113.28125 h -132.8125 c -4.6875,0 -8.59375,-3.90625 -8.59375,-8.59375 V 94.53125 c 0,-4.6875 3.90625,-8.59375 8.59375,-8.59375 h 132.8125 c 4.6875,0 8.59375,3.90625 8.59375,8.59375 v 10.15625 c 0,5.46875 -3.90625,8.59375 -8.59375,8.59375 z m 0,0"
id="path1960" />
<path
style="fill:#ffdf4a;stroke-width:0.762712"
id="path16"
d="m 107.05523,255.91369 32.51955,9.11084 32.70427,-116.7218 c 1.60885,-5.7412 -3.79569,-10.97591 -9.48325,-9.18234 l -21.37085,6.7363 c -2.41625,0.76271 -4.28727,2.69332 -4.96954,5.13043 z m 0,0" />
style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 253.90625,86.71875 h -132.8125 c -4.6875,0 -8.59375,3.90625 -8.59375,8.59375 v 10.15625 c 0,-4.6875 3.90625,-8.59375 8.59375,-8.59375 h 132.8125 c 4.6875,0 8.59375,3.90625 8.59375,8.59375 V 95.3125 c 0,-5.46875 -3.90625,-8.59375 -8.59375,-8.59375 z m 0,0"
id="path1962" />
<path
style="fill:#ff5656;stroke-width:0.762712"
id="path18"
d="m 171.84109,219.45545 -24.80603,52.40071 -45.0477,95.15135 -37.846616,79.94178 c -3.426247,7.23683 -14.285959,4.79973 -14.285959,-3.20577 L 41.345775,349.63495 31.320279,238.70499 23.699115,154.4372 c -0.685249,-7.56754 8.970808,-11.17552 13.50537,-5.08574 35.767038,48.02406 102.161745,57.53115 128.397855,59.40218 5.2645,0.37837 8.49411,5.93187 6.23875,10.70181 z m 0,0" />
style="fill:none;stroke:#453f3a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
d="m 32.5,14.5 h -17 c -0.6,0 -1.1,-0.5 -1.1,-1.1 v -1.3 c 0,-0.6 0.5,-1.1 1.1,-1.1 h 17 c 0.6,0 1.1,0.5 1.1,1.1 v 1.3 c 0,0.7 -0.5,1.1 -1.1,1.1 z m 0,0"
transform="scale(7.8125)"
id="path1964-2" />
<path
style="fill:#f72d2d;stroke-width:0.762712"
id="path20"
d="m 171.84109,219.45545 -24.80603,52.40071 -45.04472,95.15135 -37.849596,79.94178 c -3.426247,7.23683 -14.28298,4.79973 -14.28298,-3.20577 L 49.619416,441.15745 160.96648,208.37824 c 1.65949,0.14897 3.20577,0.2741 4.63586,0.3754 5.2645,0.37837 8.49411,5.93187 6.23875,10.70181 z m 0,0" />
style="fill:#de3f21;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 264.84375,51.5625 h -154.6875 c -4.6875,0 -8.59375,3.90625 -8.59375,8.59375 0,4.6875 3.90625,8.59375 8.59375,8.59375 h 154.6875 c 4.6875,0 8.59375,-3.90625 8.59375,-8.59375 0,-4.6875 -3.90625,-8.59375 -8.59375,-8.59375 z m 0,0"
id="path1966" />
<path
style="fill:#fe9e80;stroke-width:0.762712"
id="path22"
d="m 147.07379,271.85616 -45.04472,95.15135 -14.857989,-4.25749 -45.783595,-13.11507 -1.376457,-15.22744 -6.262584,-69.29956 -2.386455,-26.39998 101.27092,29.00691 z m 0,0" />
style="fill:#ff613f;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 110.15625,60.15625 h 154.6875 c 3.125,0 6.25,1.5625 7.8125,4.6875 0.78125,-1.5625 0.78125,-3.125 0.78125,-4.6875 0,-4.6875 -3.90625,-8.59375 -8.59375,-8.59375 h -154.6875 c -4.6875,0 -8.59375,3.90625 -8.59375,8.59375 0,1.5625 0.78125,3.125 0.78125,4.6875 1.5625,-3.125 4.6875,-4.6875 7.8125,-4.6875 z m 0,0"
id="path1968" />
<path
style="fill:#fe835f;stroke-width:0.762712"
id="path24"
d="m 147.07379,271.85616 -45.04472,95.15135 -14.857989,-4.25749 45.461829,-95.03514 z m 0,0" />
<path
style="fill:#ffdf4a;stroke-width:0.762712"
id="path26"
d="m 66.545075,300.2523 c 0,16.46982 -11.300655,30.29994 -26.572778,34.15521 l -6.262583,-69.29956 c 18.337869,1.22451 32.835361,16.49067 32.835361,35.14435 z m 0,0" />
</g>
</g>
<g
id="g1987"
transform="matrix(2.8106546,0,0,2.8106546,-169.07891,220.26224)">
<circle
r="16.630953"
cy="80.532394"
cx="282.5199"
id="path1964"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
transform="matrix(0.54395857,0,0,0.54395857,269.48791,66.555529)"
id="g852"
style="overflow:inherit">
<path
d="m 7.206,31.141 c 2.885,0 5.219,-2.399 5.219,-5.368 0,-2.953 -2.334,-5.353 -5.219,-5.353 -2.873,0 -5.206,2.4 -5.206,5.353 0,2.968 2.333,5.368 5.206,5.368 z m 29.23,9.216 c 0.243,-0.172 0.564,-0.12 0.741,0.117 l 0.965,1.372 c 0.164,0.238 0.114,0.58 -0.116,0.766 l -7.08,5.287 c -0.229,0.172 -0.562,0.118 -0.743,-0.118 l -0.962,-1.372 c -0.165,-0.238 -0.113,-0.579 0.116,-0.764 z m -8.003,-6.817 -2.808,-5.063 -1.474,1.107 2.808,5.09 z M 21.882,21.713 10.962,2 8.873,2.014 20.395,22.834 Z m 10.281,10.43 C 32.78,31.682 34.192,31 35,31 h 10 c 1.974,0 3,1.986 3,4.004 C 48,37.034 46.974,38 45,38 h -9 l -10.836,8.502 c -3.808,2.819 -6.116,-0.278 -6.116,-0.278 L 10.565,37.495 C 9.142,35.742 9.45,32.406 11.156,30.929 l 11.739,-8.597 c 1.166,-1 2.897,-0.843 3.885,0.343 0.976,1.2 0.822,2.994 -0.346,3.996 l -7.515,5.657 5.399,5.484 z"
id="path841" />
</g>
</g>
<g
id="g958"
transform="matrix(1.4657321,0,0,1.4657321,783.20327,468.03016)">
<g
id="layer1-56">
<ellipse
ry="31.946436"
rx="32.00938"
cy="32.109043"
cx="31.967007"
id="path819"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.497387;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</g>
<g
id="layer2-2">
<path
style="fill:#734a08;fill-opacity:1;stroke:none;stroke-width:3.34941"
d="M 32.123859,10.440678 8.6779661,17.139504 v 3.349413 L 32.123859,13.79009 55.569753,20.488917 v -3.349413 z m -11.59865,11.964995 c -0.522431,0.02077 -1.041409,0.124297 -1.556954,0.320538 v 20.835706 c 0,0 8.38755,-0.322013 10.525792,7.817477 V 29.497007 c -1.631616,-3.400613 -5.311804,-7.237191 -8.968838,-7.091334 z m 8.968838,28.973731 C 24.066203,47.228261 16.331902,46.172115 16.331902,46.172115 V 26.376556 l -2.629816,-1.046692 v 23.445893 l 15.791961,5.207293 h 5.259628 L 50.545632,48.775757 V 25.329864 l -2.629812,1.046692 v 20.835709 l -13.162145,4.167139 c -1.754454,-0.663351 -3.795938,-0.545319 -5.259628,0 z M 45.279464,22.726221 C 40.03579,22.448689 33.986193,25.566152 30.808953,28.247518 v 22.045945 c 2.933724,-2.408355 8.190227,-5.573982 14.470511,-6.208191 z"
id="path4176" />
</g>
</g>
<g
id="g2125"
transform="matrix(3.8574971,0,0,3.8574971,510.77103,468.2685)"
inkscape:export-filename="/home/pietervdvn/git/MapComplete/assets/g2125.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
transform="translate(0.12711811)"
style="display:inline"
id="layer1-37">
<circle
r="12.076271"
cy="12.076271"
cx="11.949153"
id="path814"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</g>
<g
transform="translate(0.12711811)"
id="layer2-5">
<path
id="path2-9"
d="m 16.739623,11.453018 2.12132,-2.1213204 c 0.424264,-0.4242641 0.424264,-0.9899495 0,-1.4142136 -0.424264,-0.424264 -0.98995,-0.424264 -1.414214,0 l -2.12132,2.121321 -1.414213,-1.4142142 2.12132,-2.1213203 c 0.424264,-0.4242641 0.424264,-0.9899495 0,-1.4142136 -0.424264,-0.4242638 -1.06066,-0.3535532 -1.414214,2e-7 L 12.496982,7.2103775 11.082769,5.7961639 8.4664736,8.4124588 C 6.769417,10.109515 6.557285,12.72581 7.830077,14.705709 l -5.1618795,5.16188 1.4142136,1.414213 5.1618795,-5.161879 c 1.9798994,1.272792 4.5961944,1.06066 6.2932504,-0.636396 l 2.616295,-2.616295 z" />
</g>
</g>
<g
id="g2175"
transform="matrix(6.6832014,0,0,6.6832014,442.74768,399.98826)">
<g
id="layer2-6">
<circle
r="6.9703388"
cy="7"
cx="7"
id="path846"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</g>
<g
style="display:inline"
id="layer1-12">
<g
transform="matrix(0.86185687,0,0,0.86185687,1.4318286,1.4602523)"
id="hbars">
<rect
id="rect2"
style="fill:#ac39ac"
height="0.5"
width="11"
y="6"
x="1" />
<rect
id="rect4"
style="fill:#ac39ac"
height="0.5"
width="9.5"
y="8"
x="2" />
</g>
<g
transform="matrix(0.86185687,0,0,0.86185687,1.4318286,1.4602523)"
id="vbars">
<rect
id="rect7"
style="fill:#ac39ac"
height="5.5"
width="0.5"
y="4.5"
x="3" />
<rect
id="rect9"
style="fill:#ac39ac"
height="5.5"
width="0.5"
y="4.5"
x="5" />
<rect
id="rect11"
style="fill:#ac39ac"
height="5.5"
width="0.5"
y="4.5"
x="7.5" />
<rect
id="rect13"
style="fill:#ac39ac"
height="5.5"
width="0.5"
y="4.5"
x="9.5" />
</g>
<path
style="fill:#ac39ac;stroke:none;stroke-width:0.861857"
d="M 6.5167842,4.9076797 8.2404979,2.3221091 A 0.43626052,0.43626052 0 0 1 9.0420248,2.6668519 L 7.5510124,4.9076797 Z"
id="handle" />
<path
style="fill:#ac39ac;fill-rule:evenodd;stroke:none;stroke-width:0.861857"
d="M 1.4318286,4.9076797 H 12.635968 L 10.912254,10.940678 H 3.1555423 Z M 2.5091497,5.7695366 H 11.558647 L 10.265861,10.078821 H 3.801935 Z"
id="body" />
</g>
</g>
<g
id="g1904"
transform="matrix(0.25051572,0,0,0.25051572,872.66935,392.83279)">
<g
id="surface1">
<path
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.125;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
d="m 467.96462,215.30738 c 0,102.69922 83.2539,185.95313 185.95311,185.95313 102.69923,0 185.95313,-83.25391 185.95313,-185.95313 0,-102.69921 -83.2539,-185.953119 -185.95313,-185.953119 -102.69921,0 -185.95311,83.253909 -185.95311,185.953119 z m 0,0"
id="path1889" />
<path
style="fill:#aaaaaa;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:18.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
d="m 791.23805,231.5105 -26.97657,-8.12108 -39.53906,55.36718 46.71485,15.87109 z m -8.73438,-37.32421 -234.7578,-66.28515 c -6.14063,-1.55079 -14.71485,-0.60157 -17.66016,10.52734 0,0 -13.85156,61.74219 -20.94141,90.72265 -2.49609,10.21094 0.23047,14.57422 7.30078,16.45704 l 187,53.62109 z m 0,0"
id="path1891" />
</g>
</g>
<g
id="g2050"
transform="matrix(0.18534995,0,0,0.18534995,767.095,542.7144)">
<path
style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.34549"
d="m 2078.7593,-149.40763 c 0,138.806368 -112.5272,251.33359 -251.3336,251.33359 -138.8063,0 -251.3336,-112.527222 -251.3336,-251.33359 0,-138.80635 112.5273,-251.32831 251.3336,-251.32831 138.8064,0 251.3336,112.52196 251.3336,251.32831 z m 0,0"
id="path1904" />
<g
id="g1926"
transform="translate(1250.0673,-234.86328)">
<g
id="surface1-8"
transform="translate(387.14053,-111)">
<path
style="fill:#7ab82e;fill-opacity:1;fill-rule:evenodd;stroke:none"
d="m 101.84766,144.1875 c 22.72656,8.01562 71.23437,71.23828 90.67187,90.67187 10.15625,10.15625 26.54688,19.41407 31.73438,34 h -24.9336 c -2.67578,-1.8164 -3.8125,-1.7539 -9.07031,-2.26562 -5.23047,-14.41016 -56.83203,-63.60547 -70.26953,-77.07031 l -15.86719,-13.60157 c -4.01562,-7.38281 -2.25,-21.1914 -2.26562,-31.73437 z m 0,0"
id="path1908" />
<path
style="fill:#7ab82e;fill-opacity:1;fill-rule:evenodd;stroke:none"
d="m 322.42578,285.50781 c 15.82031,-0.29297 22.46484,3.25781 33.30078,6.24219 3.79297,6.08203 9.4375,15.53906 14.56641,20.8125 0.79687,17.37109 -2.23047,26.80078 -6.24219,41.625 -19.32422,11.75391 -30.96484,15.49219 -58.27344,8.32422 -8.11718,-12.36719 -15.78906,-20.89844 -16.65234,-41.625 4.00391,-5.20313 4.43359,-13.27735 8.32812,-18.73047 5.98047,-8.39063 16.89844,-10.24609 24.97266,-16.64844 z m 2.08203,20.8086 c -6.99219,7.25 -12.68359,9.91015 -14.5664,22.89843 9.07812,12.61719 5.43359,17.49219 29.13281,16.64453 3.95703,-4.22265 5.97656,-3.88281 8.32812,-10.40234 6.08594,-7.61719 2.34766,-13.77734 0,-22.89453 -3.05078,-1.6875 -5.85547,-3.78906 -8.32812,-6.24609 z m 0,0"
id="path1910" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
d="m 218.36328,0.367188 c 21.31641,-0.2773442 44.07031,-1.761719 60.35938,4.164062 63.92578,23.28125 127.39453,115.67188 74.92187,199.80078 -22.63281,36.29297 -64.625,70.07813 -112.39062,81.17578 -36.03907,8.36719 -75.17188,-15.78515 -101.98047,2.07813 C 112.11719,305.68359 80.964844,373.78906 43.535156,375 30.347656,355.57031 2.351562,348.11328 1.910156,316.72656 26.886719,300.14453 45.382812,271.17187 66.429688,250.125 75.359375,241.19531 89.71875,232.47656 93.488281,218.90625 96.878906,206.68359 89.324219,193.59766 87.242188,185.60156 81.503906,163.5625 83.9375,127.91797 91.402344,110.67578 108.14063,72.035156 143.75,33.496094 178.81641,12.855469 Z m 0,20.816406 -33.30469,12.488281 c -33.39843,20.421875 -68.5664,59.28125 -79.08593,101.980465 -9.429691,38.29688 20.64453,71.62891 2.08203,101.98438 l -35.382815,35.38281 -24.976563,29.13672 c -7.785156,7.81641 -18.785156,13.58984 -22.890624,24.97266 10.320312,7.00781 15.042968,20.02734 29.136718,22.89453 12.667969,-18.98438 68.867184,-79.77735 89.496094,-87.41016 29.78516,-11.03125 62.99219,9.625 95.73828,2.07813 36.97266,-8.51954 77.51563,-41.5 95.73828,-68.67969 49.29297,-73.52344 -11.875,-159.328126 -74.92578,-174.828126 z m 0,0"
id="path1912" />
</g>
</g>
</g>
<g
id="surface1-1"
transform="translate(1309.4348,89.334266)">
<g
id="g2054"
transform="matrix(0.24938676,0,0,0.24938676,-390.20618,378.58256)">
style="fill:none;stroke:#453f3a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
d="M 33.9,6.6 H 14.1 c -0.6,0 -1.1,0.5 -1.1,1.1 0,0.6 0.5,1.1 1.1,1.1 H 33.9 C 34.5,8.8 35,8.3 35,7.7 35,7.1 34.5,6.6 33.9,6.6 Z m 0,0"
transform="scale(7.8125)"
id="path1970" />
<path
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 375.55859,188.20312 C 375.55859,291.36719 291.92578,375 188.76172,375 85.597656,375 1.964844,291.36719 1.964844,188.20312 1.964844,85.039062 85.597656,1.410156 188.76172,1.410156 c 103.16406,0 186.79687,83.628906 186.79687,186.792964 z m 0,0"
id="path2023" />
d="m 262.5,165.625 h -76.5625 c -3.125,0 -6.25,-1.5625 -7.8125,-4.6875 L 144.53125,86.71875 H 232.8125 L 265.625,159.375 c 1.5625,3.125 -0.78125,6.25 -3.125,6.25 z m 0,0"
id="path1972" />
<path
style="fill:#734a07;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.785601"
d="m 185.04339,58.004287 c -11.27768,0 -20.43178,9.1541 -20.43178,20.431779 0,11.27768 9.1541,20.394955 20.43178,20.394955 11.27768,0 20.43485,-9.117275 20.43485,-20.394955 0,-11.277679 -9.15717,-20.431779 -20.43485,-20.431779 z M 164.61161,112.4655 c -7.17782,0 -13.59459,6.52418 -13.59459,13.59459 0,13.61301 23.81048,54.70059 23.81048,68.09571 v 40.82366 h 20.43177 V 194.1558 c 0,-13.13121 23.81355,-54.4827 23.81355,-68.09571 0,-7.53379 -6.09148,-13.59459 -13.59458,-13.59459 z m -38.55892,142.17855 v 19.66459 h 117.98447 v -19.66459 z m 19.66458,39.32918 v 39.32611 h 78.6553 v -39.32611 z m 0,0"
id="path2025" />
style="fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 241.40625,103.90625 -8.59375,-17.1875 h -88.28125 l 8.59375,17.1875 z m 0,0"
id="path1974" />
<path
style="fill:none;stroke:#453f3a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
d="m 33.6,21.2 h -9.8 c -0.4,0 -0.8,-0.2 -1,-0.6 l -4.3,-9.5 h 11.3 l 4.2,9.3 c 0.2,0.4 -0.1,0.8 -0.4,0.8 z m 0,0"
transform="scale(7.8125)"
id="path1976" />
<path
style="fill:none;stroke:#453f3a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
d="m 34,20.9 -7.5,-6.2 0.8,-3.6"
transform="scale(7.8125)"
id="path1978" />
<path
style="fill:none;stroke:#453f3a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
d="M 27.6,15.7 23.2,21"
transform="scale(7.8125)"
id="path1980" />
<path
style="fill:none;stroke:#453f3a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
d="M 26.7,13.7 21.5,11.1"
transform="scale(7.8125)"
id="path1982" />
</g>
</g>
<path
style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.249387"
d="m 1220.341,446.77018 c 0,25.72776 -20.8569,46.58467 -46.5847,46.58467 -25.7277,0 -46.5846,-20.85691 -46.5846,-46.58467 0,-25.72775 20.8569,-46.58369 46.5846,-46.58369 25.7278,0 46.5847,20.85594 46.5847,46.58369 z m 0,0"
id="path2295" />
<g
id="surface1-0"
transform="matrix(0.21701693,0,0,0.21701693,1134.9237,410.79292)">
<path
style="fill:#ff613f;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 265.625,264.84375 h -156.25 c -14.0625,0 -25,-10.9375 -25,-25 V 47.65625 c 0,-14.0625 10.9375,-25 25,-25 h 156.25 c 14.0625,0 25,10.9375 25,25 v 192.1875 c 0,14.0625 -10.9375,25 -25,25 z m 0,0"
id="path1948" />
<path
style="fill:#ff856e;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 265.625,22.65625 h -156.25 c -14.0625,0 -25,10.9375 -25,25 V 67.1875 c 0,-14.0625 10.9375,-25 25,-25 h 156.25 c 14.0625,0 25,10.9375 25,25 V 47.65625 c 0,-14.0625 -10.9375,-25 -25,-25 z m 0,0"
id="path1950" />
<path
style="fill:none;stroke:#453f3a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
d="M 34,33.9 H 14 c -1.8,0 -3.2,-1.4 -3.2,-3.2 V 6.1 c 0,-1.8 1.4,-3.2 3.2,-3.2 h 20 c 1.8,0 3.2,1.4 3.2,3.2 v 24.6 c 0,1.8 -1.4,3.2 -3.2,3.2 z m 0,0"
transform="scale(7.8125)"
id="path1952" />
<path
style="fill:#deba7d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 204.6875,264.84375 h -35.15625 v 74.21875 c 0,4.6875 3.90625,8.59375 8.59375,8.59375 h 17.96875 c 4.6875,0 8.59375,-3.90625 8.59375,-8.59375 z m 0,0"
id="path1954" />
<path
style="fill:#b89457;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 170.3125,264.84375 h 35.15625 V 285.9375 H 170.3125 Z m 0,0"
id="path1956" />
<path
style="fill:none;stroke:#453f3a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
d="m 26.2,33.9 h -4.5 v 9.5 c 0,0.6 0.5,1.1 1.1,1.1 h 2.3 c 0.6,0 1.1,-0.5 1.1,-1.1 z m 0,0"
transform="scale(7.8125)"
id="path1958" />
<path
style="fill:#636668;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 253.90625,113.28125 h -132.8125 c -4.6875,0 -8.59375,-3.90625 -8.59375,-8.59375 V 94.53125 c 0,-4.6875 3.90625,-8.59375 8.59375,-8.59375 h 132.8125 c 4.6875,0 8.59375,3.90625 8.59375,8.59375 v 10.15625 c 0,5.46875 -3.90625,8.59375 -8.59375,8.59375 z m 0,0"
id="path1960" />
<path
style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 253.90625,86.71875 h -132.8125 c -4.6875,0 -8.59375,3.90625 -8.59375,8.59375 v 10.15625 c 0,-4.6875 3.90625,-8.59375 8.59375,-8.59375 h 132.8125 c 4.6875,0 8.59375,3.90625 8.59375,8.59375 V 95.3125 c 0,-5.46875 -3.90625,-8.59375 -8.59375,-8.59375 z m 0,0"
id="path1962" />
<path
style="fill:none;stroke:#453f3a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
d="m 32.5,14.5 h -17 c -0.6,0 -1.1,-0.5 -1.1,-1.1 v -1.3 c 0,-0.6 0.5,-1.1 1.1,-1.1 h 17 c 0.6,0 1.1,0.5 1.1,1.1 v 1.3 c 0,0.7 -0.5,1.1 -1.1,1.1 z m 0,0"
transform="scale(7.8125)"
id="path1964-2" />
<path
style="fill:#de3f21;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 264.84375,51.5625 h -154.6875 c -4.6875,0 -8.59375,3.90625 -8.59375,8.59375 0,4.6875 3.90625,8.59375 8.59375,8.59375 h 154.6875 c 4.6875,0 8.59375,-3.90625 8.59375,-8.59375 0,-4.6875 -3.90625,-8.59375 -8.59375,-8.59375 z m 0,0"
id="path1966" />
<path
style="fill:#ff613f;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 110.15625,60.15625 h 154.6875 c 3.125,0 6.25,1.5625 7.8125,4.6875 0.78125,-1.5625 0.78125,-3.125 0.78125,-4.6875 0,-4.6875 -3.90625,-8.59375 -8.59375,-8.59375 h -154.6875 c -4.6875,0 -8.59375,3.90625 -8.59375,8.59375 0,1.5625 0.78125,3.125 0.78125,4.6875 1.5625,-3.125 4.6875,-4.6875 7.8125,-4.6875 z m 0,0"
id="path1968" />
<path
style="fill:none;stroke:#453f3a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
d="M 33.9,6.6 H 14.1 c -0.6,0 -1.1,0.5 -1.1,1.1 0,0.6 0.5,1.1 1.1,1.1 H 33.9 C 34.5,8.8 35,8.3 35,7.7 35,7.1 34.5,6.6 33.9,6.6 Z m 0,0"
transform="scale(7.8125)"
id="path1970" />
<path
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 262.5,165.625 h -76.5625 c -3.125,0 -6.25,-1.5625 -7.8125,-4.6875 L 144.53125,86.71875 H 232.8125 L 265.625,159.375 c 1.5625,3.125 -0.78125,6.25 -3.125,6.25 z m 0,0"
id="path1972" />
<path
style="fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 241.40625,103.90625 -8.59375,-17.1875 h -88.28125 l 8.59375,17.1875 z m 0,0"
id="path1974" />
<path
style="fill:none;stroke:#453f3a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
d="m 33.6,21.2 h -9.8 c -0.4,0 -0.8,-0.2 -1,-0.6 l -4.3,-9.5 h 11.3 l 4.2,9.3 c 0.2,0.4 -0.1,0.8 -0.4,0.8 z m 0,0"
transform="scale(7.8125)"
id="path1976" />
<path
style="fill:none;stroke:#453f3a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
d="m 34,20.9 -7.5,-6.2 0.8,-3.6"
transform="scale(7.8125)"
id="path1978" />
<path
style="fill:none;stroke:#453f3a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
d="M 27.6,15.7 23.2,21"
transform="scale(7.8125)"
id="path1980" />
<path
style="fill:none;stroke:#453f3a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
d="M 26.7,13.7 21.5,11.1"
transform="scale(7.8125)"
id="path1982" />
</g>
</g>
<text
xml:space="preserve"
id="text7464"
style="white-space:pre;shape-inside:url(#rect7466);fill:#000000"
transform="matrix(1.0367869,0,0,1.0367869,-116.43303,-84.366224)"><tspan
transform="matrix(1.0367869,0,0,1.0367869,-116.43303,-78.344741)"><tspan
x="566.99609"
y="257.90817"
id="tspan10027"><tspan
id="tspan1873"><tspan
style="font-weight:bold;font-size:93.3333px;-inkscape-font-specification:'sans-serif, Bold'"
id="tspan10025">MapComplete</tspan></tspan></text>
id="tspan1871">MapComplete</tspan></tspan></text>
<text
xml:space="preserve"
id="text16582"
style="white-space:pre;shape-inside:url(#rect16584);fill:#000000"
transform="matrix(1.0367869,0,0,1.0367869,-142.96208,37.044569)"
transform="matrix(1.0367869,0,0,1.0367869,-142.96208,30.862319)"
x="341.71875"
y="0"
inkscape:export-filename="/home/pietervdvn/git/MapComplete/assets/text16582.png"
@ -2939,15 +2947,15 @@
inkscape:export-ydpi="96"><tspan
x="580.88522"
y="232.22157"
id="tspan10031"><tspan
id="tspan1877"><tspan
style="font-weight:bold;font-size:64.3012px;-inkscape-font-specification:'sans-serif, Bold';text-align:center;text-anchor:middle"
id="tspan10029">Edit OpenStreetMap
id="tspan1875">Edit OpenStreetMap
</tspan></tspan><tspan
x="831.71642"
y="312.59807"
id="tspan10035"><tspan
id="tspan1881"><tspan
style="font-weight:bold;font-size:64.3012px;-inkscape-font-specification:'sans-serif, Bold';text-align:center;text-anchor:middle"
id="tspan10033"> easily</tspan></tspan></text>
id="tspan1879"> easily</tspan></tspan></text>
<text
xml:space="preserve"
id="text25150"

Before

Width:  |  Height:  |  Size: 3.1 MiB

After

Width:  |  Height:  |  Size: 3.1 MiB

View file

@ -1,11 +1,11 @@
{
"contributors": [
{
"commits": 4464,
"commits": 4594,
"contributor": "Pieter Vander Vennet"
},
{
"commits": 184,
"commits": 244,
"contributor": "Robin van der Linde"
},
{
@ -41,7 +41,7 @@
"contributor": "Ward"
},
{
"commits": 22,
"commits": 23,
"contributor": "riQQ"
},
{
@ -74,11 +74,11 @@
},
{
"commits": 15,
"contributor": "ToastHawaii"
"contributor": "Brice Maron"
},
{
"commits": 14,
"contributor": "Brice Maron"
"commits": 15,
"contributor": "ToastHawaii"
},
{
"commits": 13,
@ -100,6 +100,10 @@
"commits": 10,
"contributor": "LiamSimons"
},
{
"commits": 9,
"contributor": "wjtje"
},
{
"commits": 9,
"contributor": "RobJN"
@ -120,6 +124,10 @@
"commits": 7,
"contributor": "Binnette"
},
{
"commits": 6,
"contributor": "David Haberthür"
},
{
"commits": 6,
"contributor": "Thibault Molleman"
@ -133,8 +141,8 @@
"contributor": "pelderson"
},
{
"commits": 5,
"contributor": "David Haberthür"
"commits": 4,
"contributor": "Nadhem"
},
{
"commits": 4,
@ -160,6 +168,10 @@
"commits": 3,
"contributor": "Léo Villeveygoux"
},
{
"commits": 2,
"contributor": "Jiří Podhorecký"
},
{
"commits": 2,
"contributor": "pdassori"
@ -200,6 +212,14 @@
"commits": 2,
"contributor": "Stanislas Gueniffey"
},
{
"commits": 1,
"contributor": "bgo-eiu"
},
{
"commits": 1,
"contributor": "Wouter van der Wal"
},
{
"commits": 1,
"contributor": "eMerzh"
@ -244,10 +264,6 @@
"commits": 1,
"contributor": "Štefan Baebler"
},
{
"commits": 1,
"contributor": "Jiří Podhorecký"
},
{
"commits": 1,
"contributor": "Mark Rogerson"

View file

@ -412,7 +412,8 @@
"if": "artwork_type=woodcarving",
"then": {
"nl": "Houtsculptuur",
"en": "Woodcarving"
"en": "Woodcarving",
"de": "Holzschnitzerei"
}
}
],
@ -421,10 +422,14 @@
{
"id": "artwork-artist-wikidata",
"render": {
"en": "This artwork was made by {wikidata_label(artist:wikidata):font-weight:bold}<br/>{wikipedia(artist:wikidata)}"
"en": "This artwork was made by {wikidata_label(artist:wikidata):font-weight:bold}<br/>{wikipedia(artist:wikidata)}",
"de": "Dieses Kunstwerk wurde geschaffen von {wikidata_label(artist:wikidata):font-weight:bold}<br/>{wikipedia(artist:wikidata)}",
"nl": "Dit kunstwerk is gemaakt door {wikidata_label(artist:wikidata):font-weight:bold}<br/>{wikipedia(artist:wikidata)}"
},
"question": {
"en": "Who made this artwork?"
"en": "Who made this artwork?",
"de": "Wer hat dieses Kunstwerk geschaffen?",
"nl": "Wie heeft dit kunstwerk gemaakt?"
},
"freeform": {
"key": "artist:wikidata",
@ -526,14 +531,18 @@
"id": "artwork_subject",
"condition": "subject:wikidata~*",
"question": {
"en": "What does this artwork depict?"
"en": "What does this artwork depict?",
"de": "Was zeigt dieses Kunstwerk?",
"nl": "Wat beeldt dit kunstwerk af?"
},
"freeform": {
"key": "subject:wikidata",
"type": "wikidata"
},
"render": {
"en": "This artwork depicts {wikidata_label(subject:wikidata)}{wikipedia(subject:wikidata)}"
"en": "This artwork depicts {wikidata_label(subject:wikidata)}{wikipedia(subject:wikidata)}",
"de": "Das Kunstwerk zeigt {wikidata_label(subject:wikidata)}{wikipedia(subject:wikidata)}",
"nl": "Dit kunstwerk beeldt {wikidata_label(subject:wikidata)}{wikipedia(subject:wikidata)} af"
}
}
],

View file

@ -79,7 +79,7 @@
"en": "Does <b>not</b> have a backrest",
"de": "Die Sitzbank hat <b>keine</b> Rückenlehne",
"fr": "Dossier : Non",
"nl": "Heeft geen rugleuning",
"nl": "Heeft <b>geen</b> rugleuning",
"es": "Respaldo: no",
"hu": "Háttámla nincs",
"id": "Sandaran: Tidak",

View file

@ -142,7 +142,7 @@
"if": "bicycle_rental=dropoff_point",
"then": {
"en": "This is a dropoff point, e.g. a reserved parking to place the bicycles which clearly marked as being for the rental service only",
"nl": "Dit is een dropzone, bv. een fietsparkeerplaats die is voorbehouden voor fietsverhuur ",
"nl": "Dit is een dropzone, bv. een fietsparkeerplaats die is voorbehouden voor fietsverhuur",
"de": "Dies ist ein Rückgabepunkt, z. B. ein reservierter Fahrradstellplatz, der deutlich als solcher gekennzeichnet ist",
"es": "Este es un punto de entrega, ej. un aparcamiento reservado para colocar las bicicletas, claramente marcado como solo para el servicio de alquiler",
"fr": "Ceci est un point de dépôt, p.ex. un emplacement de parking réservé aux vélos de location",

View file

@ -591,13 +591,13 @@
{
"if": "service:bicycle:pump=separate",
"then": {
"en": "There is bicycle pump, it is shown as a separate point ",
"en": "There is bicycle pump, it is shown as a separate point",
"nl": "Er is een fietspomp, deze is apart aangeduid",
"fr": "Il y a une pompe à vélo, c'est indiqué comme un point séparé ",
"it": "Cè una pompa per bici, è mostrata come punto separato ",
"de": "Es gibt eine Luftpumpe, sie ist als separater Punkt eingetragen ",
"es": "Hay una bomba para bicicletas, se muestra como un punto separado ",
"da": "Der er cykelpumpe, den er vist som et separat punkt "
"fr": "Il y a une pompe à vélo, c'est indiqué comme un point séparé",
"it": "Cè una pompa per bici, è mostrata come punto separato",
"de": "Es gibt eine Luftpumpe, sie ist als separater Punkt eingetragen",
"es": "Hay una bomba para bicicletas, se muestra como un punto separado",
"da": "Der er cykelpumpe, den er vist som et separat punkt"
}
}
]

View file

@ -3166,12 +3166,12 @@
"group": "technical",
"question": {
"en": "What voltage do the plugs with <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> offer?",
"nl": "Welke spanning levert de stekker van type <div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>",
"nl": "Welke spanning levert de stekker van type <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>",
"de": "Welche Spannung bieten die <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>?"
},
"render": {
"en": "<div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> outputs {socket:tesla_destination:voltage} volt",
"nl": "<div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> heeft een spanning van {socket:tesla_destination:voltage} volt",
"nl": "<div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> heeft een spanning van {socket:tesla_destination:voltage} volt",
"de": "<div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> liefert {socket:tesla_destination:voltage} Volt"
},
"freeform": {
@ -3183,7 +3183,7 @@
"if": "socket:tesla_destination:voltage=480 V",
"then": {
"en": "<b>Tesla Supercharger (Destination)</b> outputs 480 volt",
"nl": "<b>Tesla Supercharger (destination)</b> heeft een spanning van 480 volt",
"nl": "<b>Tesla Supercharger (Destination)</b> heeft een spanning van 480 volt",
"de": "<b>Tesla Supercharger (Destination)</b> liefert 480 Volt"
},
"icon": {
@ -3204,13 +3204,13 @@
"group": "technical",
"question": {
"en": "What current do the plugs with <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> offer?",
"nl": "Welke stroom levert de stekker van type <div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>?",
"nl": "Welke stroom levert de stekker van type <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>?",
"da": "Hvilken strømstyrke har stikkene med <div style='display: inline-block'><b><b> Tesla Supercharger (Destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> med Tesla Supercharger (Destination) ?",
"de": "Welche Stromstärke liefern die Anschlüsse mit <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>?"
},
"render": {
"en": "<div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> outputs at most {socket:tesla_destination:current}A",
"nl": "<div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> levert een stroom van maximaal {socket:tesla_destination:current}A",
"nl": "<div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> levert een stroom van maximaal {socket:tesla_destination:current}A",
"da": "<div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> udgange højst {socket:tesla_destination:current}A",
"de": "<div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> liefert maximal {socket:tesla_destination:current} A"
},
@ -3285,7 +3285,7 @@
"if": "socket:tesla_destination:output=150 kW",
"then": {
"en": "<b>Tesla Supercharger (Destination)</b> outputs at most 150 kw A",
"nl": "<b>Tesla Supercharger (destination)</b> levert een vermogen van maximaal 150 kw A",
"nl": "<b>Tesla Supercharger (Destination)</b> levert een vermogen van maximaal 150 kw A",
"de": "<b>Tesla Supercharger (Destination)</b> liefert maximal 150 kw A"
},
"icon": {
@ -3335,7 +3335,7 @@
"if": "socket:tesla_destination:voltage=230 V",
"then": {
"en": "<b>Tesla Supercharger (Destination)</b> (A Type 2 with cable branded as Tesla) outputs 230 volt",
"nl": "<b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo) heeft een spanning van 230 volt",
"nl": "<b>Tesla Supercharger (Destination</b> (Een Type 2 met kabel en Tesla-logo) heeft een spanning van 230 volt",
"de": "<b>Tesla Supercharger (Destination)</b> (Typ 2 mit Kabel von Tesla) liefert 230 Volt"
},
"icon": {
@ -3347,7 +3347,7 @@
"if": "socket:tesla_destination:voltage=400 V",
"then": {
"en": "<b>Tesla Supercharger (Destination)</b> (A Type 2 with cable branded as Tesla) outputs 400 volt",
"nl": "<b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo) heeft een spanning van 400 volt",
"nl": "<b>Tesla Supercharger (Destination</b> (Een Type 2 met kabel en Tesla-logo) heeft een spanning van 400 volt",
"de": "<b>Tesla Supercharger (Destination)</b> (Typ 2 mit Kabel von Tesla) liefert 400 Volt"
},
"icon": {
@ -3368,13 +3368,13 @@
"group": "technical",
"question": {
"en": "What current do the plugs with <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b> (A Type 2 with cable branded as Tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> offer?",
"nl": "Welke stroom levert de stekker van type <div style='display: inline-block'><b><b>Tesla supercharger (destination)</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>?",
"nl": "Welke stroom levert de stekker van type <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>?",
"da": "Hvilken strømstyrke har stikkene med <div style='display: inline-block'><b><b> Tesla Supercharger (Destination)</b> (A Type 2 med kabel med Tesla-mærket)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> ?",
"de": "Welche Stromstärke liefern die Stecker mit <div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b> (Typ 2 mit Kabel von Tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>?"
},
"render": {
"en": "<div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b> (A Type 2 with cable branded as Tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> outputs at most {socket:tesla_destination:current}A",
"nl": "<div style='display: inline-block'><b><b>Tesla supercharger (destination)</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> levert een stroom van maximaal {socket:tesla_destination:current}A",
"nl": "<div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> levert een stroom van maximaal {socket:tesla_destination:current}A",
"de": "<div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b> (Typ 2 mit Kabel von Tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> liefert maximal {socket:tesla_destination:current} A"
},
"freeform": {
@ -3386,7 +3386,7 @@
"if": "socket:tesla_destination:current=16 A",
"then": {
"en": "<b>Tesla Supercharger (Destination)</b> (A Type 2 with cable branded as tesla) outputs at most 16 A",
"nl": "<b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo) levert een stroom van maximaal 16 A",
"nl": "<b>Tesla supercharger (Destination</b> (Een Type 2 met kabel en Tesla-logo) levert een stroom van maximaal 16 A",
"da": "<b>Tesla Supercharger (Destination)</b> (A Type 2 med kabel mærket som tesla) yder højst 16 A",
"de": "<b>Tesla Supercharger (Destination)</b> (Typ 2 mit Kabel) liefert maximal 16 A"
},
@ -3399,7 +3399,7 @@
"if": "socket:tesla_destination:current=32 A",
"then": {
"en": "<b>Tesla Supercharger (Destination)</b> (A Type 2 with cable branded as Tesla) outputs at most 32 A",
"nl": "<b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo) levert een stroom van maximaal 32 A",
"nl": "<b>Tesla Supercharger (Destination</b> (Een Type 2 met kabel en Tesla-logo) levert een stroom van maximaal 32 A",
"da": "<b>Tesla Supercharger (Destination)</b> (A Type 2 med kabel af Tesla-mærket) yder højst 32 A",
"de": "<b>Tesla Supercharger (Destination)</b> (Typ 2 mit Kabel von Tesla) liefert maximal 32 A"
},
@ -3426,7 +3426,7 @@
},
"render": {
"en": "<div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b> (A Type 2 with cable branded as Tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> outputs at most {socket:tesla_destination:output}",
"nl": "<div style='display: inline-block'><b><b>Tesla supercharger (destination)</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> levert een vermogen van maximaal {socket:tesla_destination:output}",
"nl": "<div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> levert een vermogen van maximaal {socket:tesla_destination:output}",
"de": "<div style='display: inline-block'><b><b>Tesla Supercharger (Destination)</b> (Typ 2 mit Kabel von Tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> liefert maximal {socket:tesla_destination:output}"
},
"freeform": {
@ -3857,7 +3857,7 @@
]
},
"then": {
"nl": "Betalend te gebruiken, maar gratis voor klanten van het bijhorende hotel/café/ziekenhuis/...",
"nl": "Betalend te gebruiken, maar gratis voor klanten van het bijhorende hotel/café/ziekenhuis/",
"en": "Paid use, but free for customers of the hotel/pub/hospital/… who operates the charging station",
"da": "Betalt brug, men gratis for kunder på det hotel/pub/hospital/... der driver ladestationen",
"de": "Die Nutzung ist kostenpflichtig, aber für Kunden des Betreibers der Einrichtung, wie Hotel, Krankenhaus, … kostenlos",

Some files were not shown because too many files have changed in this diff Show more