Add binoculars theme, auto reformat everything

This commit is contained in:
pietervdvn 2021-09-09 00:05:51 +02:00
parent 38dea806c5
commit 78d6482c88
586 changed files with 115573 additions and 111842 deletions

View file

@ -1,27 +1,25 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.187.0/containers/typescript-node
{
"name": "MapComplete",
"build": {
"dockerfile": "Dockerfile",
// Update 'VARIANT' to pick a Node version: 12, 14, 16
"args": {
"VARIANT": "14"
}
},
"name": "MapComplete",
"build": {
"dockerfile": "Dockerfile",
// Update 'VARIANT' to pick a Node version: 12, 14, 16
"args": {
"VARIANT": "14"
}
},
// Set *default* container specific settings.json values on container create.
"settings": {},
// Add the IDs of extensions you want installed when the container is created.
"extensions": [],
// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [
1234
],
// Use 'postCreateCommand' to run commands after the container is created.
//"postCreateCommand": "npm run init",
// Set *default* container specific settings.json values on container create.
"settings": {},
// Add the IDs of extensions you want installed when the container is created.
"extensions": [],
// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [1234],
// Use 'postCreateCommand' to run commands after the container is created.
//"postCreateCommand": "npm run init",
// Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
"remoteUser": "node"
// Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
"remoteUser": "node"
}

View file

@ -1,9 +1,8 @@
Opening a pull request on MapComplete
=====================================
Hey! Thanks for opening a pull request on Mapcomplete! This probably means you want to add a new theme - if so, please follow the checklist below.
If this pull request is for some other issue, please ignore the template.
Hey! Thanks for opening a pull request on Mapcomplete! This probably means you want to add a new theme - if so, please
follow the checklist below. If this pull request is for some other issue, please ignore the template.
Adding your new theme
---------------------
@ -14,4 +13,6 @@ To making merging smooth, please make sure that each of the following conditions
- [ ] The codebase is GPL-licensed. By opening a pull request, the new theme will be GPL too
- [ ] All images are included in the pull request and no images are loaded from an external service (e.g. Wikipedia)
- [ ] The [guidelines on how to make your own theme](https://github.com/pietervdvn/MapComplete/blob/master/Docs/Making_Your_Own_Theme.md) are read and followed
- [ ]
The [guidelines on how to make your own theme](https://github.com/pietervdvn/MapComplete/blob/master/Docs/Making_Your_Own_Theme.md)
are read and followed

View file

@ -1,42 +1,42 @@
name: Deployment on pietervdvn
on:
push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v1.2.0
with:
node-version: '15'
node-version: '15'
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true'
ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true'
- name: install deps
run: npm ci
- name: create generated dir
run: mkdir ./assets/generated
- name: create stub themes
run: "echo '{\"layers\": [], \"themes\": []}' > ./assets/generated/known_layers_and_themes.json"
- name: Prepare deploy
run: npm run prepare-deploy
- name: Clone deployment repo
env:
DEPLOY_KEY_PIETERVDVN: ${{ secrets.DEPLOY_KEY_PIETERVDVN }}
run: |
run: |
echo "Cloning destination repo"
git config --global user.email "pietervdvn@posteo.net"
git config --global user.name "pietervdvn"
git clone --depth 1 --single-branch --branch master "https://x-access-token:$DEPLOY_KEY_PIETERVDVN@github.com/pietervdvn/pietervdvn.github.io.git"
echo "Destination repo is cloned"
- name: "Copying files"
run: |
echo "Deploying"

View file

@ -1,38 +1,38 @@
name: Pull request check
on:
pull_request_target:
types: [opened, edited, synchronize, ready_for_review, review_requested]
types: [ opened, edited, synchronize, ready_for_review, review_requested ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v1.2.0
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true'
ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true'
- name: install deps
run: npm ci
- name: create generated dir
run: mkdir ./assets/generated
- name: create stub themes
run: "echo '{\"layers\": [], \"themes\": []}' > ./assets/generated/known_layers_and_themes.json"
- name: generate translations
run: npm run generate:translations
- name: Compile license info
run: npm run generate:licenses
- name: Compile and validate themes and layers
run: npm run validate:layeroverview
run: npm run validate:layeroverview
- name: Validate license info
run: npm run validate:licenses
@ -45,10 +45,10 @@ jobs:
else
echo "VALIDATION_FAILED=false" >> $GITHUB_ENV
fi
- name: Test variable
run: echo "${{ env.VALIDATION_FAILED }}"
- name: Archive reports
uses: actions/upload-artifact@v2
if: >-
@ -58,7 +58,7 @@ jobs:
path: |
layer_report.txt
missing_licenses.txt
- name: Comment PR
uses: allthatjazzleo/actions-pull-request-add-comment@master
if: >-

View file

@ -3,42 +3,42 @@ on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v1.2.0
with:
node-version: '15'
node-version: '15'
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true'
ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true'
- name: install deps
run: npm ci
- name: create generated dir
run: mkdir ./assets/generated
- name: create stub themes
run: "echo '{\"layers\": [], \"themes\": []}' > ./assets/generated/known_layers_and_themes.json"
- name: Prepare deploy
run: npm run prepare-deploy
- name: Clone deployment repo
env:
DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
run: |
run: |
echo "Cloning destination repo"
git config --global user.email "pietervdvn@posteo.net"
git config --global user.name "MapComplete"
git clone --depth 1 --single-branch --branch main "https://x-access-token:$DEPLOY_KEY@github.com/MapComplete/mapcomplete.github.io.git"
echo "Destination repo is cloned"
- name: "Copying files"
run: |
echo "Deploying"

View file

@ -1,3 +1,3 @@
{
"files.eol": "\n"
"files.eol": "\n"
}

View file

@ -5,17 +5,17 @@ import TagRenderingConfig from "../Models/ThemeConfig/TagRenderingConfig";
export default class SharedTagRenderings {
public static SharedTagRendering : Map<string, TagRenderingConfig> = SharedTagRenderings.generatedSharedFields();
public static SharedIcons : Map<string, TagRenderingConfig> = SharedTagRenderings.generatedSharedFields(true);
public static SharedTagRendering: Map<string, TagRenderingConfig> = SharedTagRenderings.generatedSharedFields();
public static SharedIcons: Map<string, TagRenderingConfig> = SharedTagRenderings.generatedSharedFields(true);
private static generatedSharedFields(iconsOnly = false) : Map<string, TagRenderingConfig>{
private static generatedSharedFields(iconsOnly = false): Map<string, TagRenderingConfig> {
const dict = new Map<string, TagRenderingConfig>();
function add(key, store) {
try {
dict.set(key, new TagRenderingConfig(store[key], undefined, `SharedTagRenderings.${key}`))
} catch (e) {
if(!Utils.runningFromConsole){
if (!Utils.runningFromConsole) {
console.error("BUG: could not parse", key, " from questions.json or icons.json - this error happened during the build step of the SharedTagRenderings", e)
}

View file

@ -1,7 +1,8 @@
Architecture
============
This document aims to give an architectural overview of how MapCompelte is built. It should give some feeling on how everything fits together.
This document aims to give an architectural overview of how MapCompelte is built. It should give some feeling on how
everything fits together.
Servers?
--------
@ -11,24 +12,30 @@ There are no servers for MapComplete, all services are configured by third parti
Minimal HTML - Minimal CSS
--------------------------
There is quasi no HTML. Most of the components are generated by TypeScript and attached dynamically. The html is a barebones skeleton which serves every theme.
There is quasi no HTML. Most of the components are generated by TypeScript and attached dynamically. The html is a
barebones skeleton which serves every theme.
The UIEventSource
-----------------
Most (but not all) objects in MapComplete get all the state they need as a parameter in the constructor. However, as is the case with most graphical applications, there are quite some dynamical values.
Most (but not all) objects in MapComplete get all the state they need as a parameter in the constructor. However, as is
the case with most graphical applications, there are quite some dynamical values.
All values which change regularly are wrapped into a [UIEventSource](https://github.com/pietervdvn/MapComplete/blob/master/Logic/UIEventSource.ts).
An UiEventSource is a wrapper containing a value and offers the possibility to add a callback function which is called every time the value is changed (with setData)
All values which change regularly are wrapped into
a [UIEventSource](https://github.com/pietervdvn/MapComplete/blob/master/Logic/UIEventSource.ts). An UiEventSource is a
wrapper containing a value and offers the possibility to add a callback function which is called every time the value is
changed (with setData)
Furthermore, there are various helper functions, the most widely used one being `map` - generating a new event source with the new value applied.
Note that 'map' will also absorb some changes, e.g. `const someEventSource : UIEventSource<string[]> = ... ; someEventSource.map(list = list.length)` will only trigger when the length of the list has changed.
Furthermore, there are various helper functions, the most widely used one being `map` - generating a new event source
with the new value applied. Note that 'map' will also absorb some changes,
e.g. `const someEventSource : UIEventSource<string[]> = ... ; someEventSource.map(list = list.length)` will only trigger
when the length of the list has changed.
An object which receives an UIEventSource is responsible of responding onto changes of this object. This is especially true for UI-components
An object which receives an UIEventSource is responsible of responding onto changes of this object. This is especially
true for UI-components
UI
--```
UI --```
export default class MyComponent {
@ -37,6 +44,7 @@ export default class MyComponent {
}
}
```
The Graphical User Interface is composed of various UI-elements. For every UI-element, there is a BaseUIElement which creates the actual HTMLElement when needed.
@ -55,9 +63,9 @@ For example:
```
const src : UIEventSource<string> = ... // E.g. user input, data that will be updated...
new VariableUIElement(src)
.AttachTo('some-id') // attach it to the html
const src : UIEventSource<string> = ... // E.g. user input, data that will be updated... new VariableUIElement(src)
.AttachTo('some-id') // attach it to the html
```
Note that every component offers support for `onClick( someCallBack)`
@ -109,6 +117,7 @@ This can be constructed as following:
```
// We construct the dropdown element with values and labelshttps://tailwindcss.com/
const isOpened = new Dropdown<string>(Translations.t.is_this_shop_opened_during_holidays,
[
@ -127,6 +136,7 @@ This can be constructed as following:
)
return new Combine([isOpened, extraQuestion])
```
### Constructing a special class
@ -144,6 +154,7 @@ export default class MyComponent {
}
}
```
2. Construct the needed UI in the constructor
@ -166,6 +177,7 @@ export default class MyComponent {
}
}
```
3. You'll notice that you'll end up with one certain component (in this example the combine) to wrap it all together. Change the class to extend this type of component and use super to wrap it all up:

View file

@ -1,116 +1,91 @@
Metatags
Metatags
==========
Metatags are extra tags available, in order to display more data or to give better questions.
The are calculated automatically on every feature when the data arrives in the webbrowser. This document gives an overview of the available metatags.
The are calculated automatically on every feature when the data arrives in the webbrowser. This document gives an
overview of the available metatags.
**Hint:** when using metatags, add the [query parameter](URL_Parameters.md) `debug=true` to the URL. This will include a box in the popup for features which shows all the properties of the object
**Hint:** when using metatags, add the [query parameter](URL_Parameters.md) `debug=true` to the URL. This will include a
box in the popup for features which shows all the properties of the object
Metatags calculated by MapComplete
Metatags calculated by MapComplete
------------------------------------
The following values are always calculated, by default, by MapComplete and are available automatically on all elements in every theme
### _lat, _lon
The following values are always calculated, by default, by MapComplete and are available automatically on all elements
in every theme
### _lat, _lon
The latitude and longitude of the point (or centerpoint in the case of a way/area)
### _surface, _surface:ha
### _surface, _surface:ha
The surface area of the feature, in square meters and in hectare. Not set on points and ways
### _length, _length:km
### _length, _length:km
The total length of a feature in meters (and in kilometers, rounded to one decimal for '_length:km'). For a surface, the
length of the perimeter
### Theme-defined keys
If 'units' is defined in the layoutConfig, then this metatagger will rewrite the specified keys to have the canonical
form (e.g. `1meter` will be rewritten to `1m`)
The total length of a feature in meters (and in kilometers, rounded to one decimal for '_length:km'). For a surface, the length of the perimeter
### Theme-defined keys
If 'units' is defined in the layoutConfig, then this metatagger will rewrite the specified keys to have the canonical form (e.g. `1meter` will be rewritten to `1m`)
### _country
### _country
The country code of the property (with latlon2country)
### _isOpen, _isOpen:description
### _isOpen, _isOpen:description
If 'opening_hours' is present, it will add the current state of the feature (being 'yes' or 'no')
### _width:needed, _width:needed:no_pedestrians, _width:difference
### _width:needed, _width:needed:no_pedestrians, _width:difference
Legacy for a specific project calculating the needed width for safe traffic on a road. Only activated if 'width:
carriageway' is present
### _direction:numerical, _direction:leftright
_direction:numerical is a normalized, numerical direction based on 'camera:direction' or on 'direction'; it is only
present if a valid direction is found (e.g. 38.5 or NE). _direction:leftright is either 'left' or 'right', which is
left-looking on the map or 'right-looking' on the map
Legacy for a specific project calculating the needed width for safe traffic on a road. Only activated if 'width:carriageway' is present
### _direction:numerical, _direction:leftright
_direction:numerical is a normalized, numerical direction based on 'camera:direction' or on 'direction'; it is only present if a valid direction is found (e.g. 38.5 or NE). _direction:leftright is either 'left' or 'right', which is left-looking on the map or 'right-looking' on the map
### _now:date, _now:datetime, _loaded:date, _loaded:_datetime
Adds the time that the data got loaded - pretty much the time of downloading from overpass. The format is YYYY-MM-DD hh:mm, aka 'sortable' aka ISO-8601-but-not-entirely
### _last_edit:contributor, _last_edit:contributor:uid, _last_edit:changeset, _last_edit:timestamp, _version_number
### _now:date, _now:datetime, _loaded:date, _loaded:_datetime
Adds the time that the data got loaded - pretty much the time of downloading from overpass. The format is YYYY-MM-DD hh:
mm, aka 'sortable' aka ISO-8601-but-not-entirely
### _last_edit:contributor, _last_edit:contributor:uid, _last_edit:changeset, _last_edit:timestamp, _version_number
Information about the last edit of this object.
Calculating tags with Javascript
Calculating tags with Javascript
----------------------------------
In some cases, it is useful to have some tags calculated based on other properties. Some useful tags are available by default (e.g. `lat`, `lon`, `_country`), as detailed above.
In some cases, it is useful to have some tags calculated based on other properties. Some useful tags are available by
default (e.g. `lat`, `lon`, `_country`), as detailed above.
It is also possible to calculate your own tags - but this requires some javascript knowledge.
Before proceeding, some warnings:
- DO NOT DO THIS AS BEGINNER
- **Only do this if all other techniques fail** This should _not_ be done to create a rendering effect, only to
calculate a specific value
- **THIS MIGHT BE DISABLED WITHOUT ANY NOTICE ON UNOFFICIAL THEMES** As unofficial themes might be loaded from the
internet, this is the equivalent of injecting arbitrary code into the client. It'll be disabled if abuse occurs.
- DO NOT DO THIS AS BEGINNER
- **Only do this if all other techniques fail** This should _not_ be done to create a rendering effect, only to calculate a specific value
- **THIS MIGHT BE DISABLED WITHOUT ANY NOTICE ON UNOFFICIAL THEMES** As unofficial themes might be loaded from the internet, this is the equivalent of injecting arbitrary code into the client. It'll be disabled if abuse occurs.
To enable this feature, add a field `calculatedTags` in the layer object, e.g.:
To enable this feature, add a field `calculatedTags` in the layer object, e.g.:
````
@ -126,56 +101,56 @@ To enable this feature, add a field `calculatedTags` in the layer object, e.g.:
````
The above code will be executed for every feature in the layer. The feature is accessible as `feat` and is an amended
geojson object:
- `area` contains the surface area (in square meters) of the object
- `lat` and `lon` contain the latitude and longitude
The above code will be executed for every feature in the layer. The feature is accessible as `feat` and is an amended geojson object:
Some advanced functions are available on **feat** as well:
- distanceTo
- overlapWith
- closest
- memberships
- score
### distanceTo
- `area` contains the surface area (in square meters) of the object
- `lat` and `lon` contain the latitude and longitude
Calculates the distance between the feature and a specified point in kilometer. The input should either be a pair of
coordinates, a geojson feature or the ID of an object
0. longitude
1. latitude
Some advanced functions are available on **feat** as well:
### overlapWith
- distanceTo
- overlapWith
- closest
- memberships
- score
### distanceTo
Gives a list of features from the specified layer which this feature (partly) overlaps with. If the current feature is a
point, all features that embed the point are given. The returned value is `{ feat: GeoJSONFeature, overlap: number}[]`
where `overlap` is the overlapping surface are (in m²) for areas, the overlapping length (in meter) if the current
feature is a line or `undefined` if the current feature is a point
Calculates the distance between the feature and a specified point in kilometer. The input should either be a pair of coordinates, a geojson feature or the ID of an object
0. ...layerIds - one or more layer ids of the layer from which every feature is checked for overlap)
0. longitude
1. latitude
### overlapWith
### closest
Gives a list of features from the specified layer which this feature (partly) overlaps with. If the current feature is a point, all features that embed the point are given. The returned value is `{ feat: GeoJSONFeature, overlap: number}[]` where `overlap` is the overlapping surface are (in m²) for areas, the overlapping length (in meter) if the current feature is a line or `undefined` if the current feature is a point
Given either a list of geojson features or a single layer name, gives the single object which is nearest to the feature.
In the case of ways/polygons, only the centerpoint is considered.
0. ...layerIds - one or more layer ids of the layer from which every feature is checked for overlap)
### closest
0. list of features
Given either a list of geojson features or a single layer name, gives the single object which is nearest to the feature. In the case of ways/polygons, only the centerpoint is considered.
### memberships
0. list of features
### memberships
Gives a list of `{role: string, relation: Relation}`-objects, containing all the relations that this feature is part of.
Gives a list of `{role: string, relation: Relation}`-objects, containing all the relations that this feature is part of.
For example: `_part_of_walking_routes=feat.memberships().map(r => r.relation.tags.name).join(';')`
For example: `_part_of_walking_routes=feat.memberships().map(r => r.relation.tags.name).join(';')`
### score
Given the path of an aspected routing json file, will calculate the score. This score is wrapped in a UIEventSource, so
for further calculations, use `.map(score => ...)`
### score
For
example: `_comfort_score=feat.score('https://raw.githubusercontent.com/pietervdvn/AspectedRouting/master/Examples/bicycle/aspects/bicycle.comfort.json')`
Given the path of an aspected routing json file, will calculate the score. This score is wrapped in a UIEventSource, so for further calculations, use `.map(score => ...)`
For example: `_comfort_score=feat.score('https://raw.githubusercontent.com/pietervdvn/AspectedRouting/master/Examples/bicycle/aspects/bicycle.comfort.json')`
0. path
Generated from SimpleMetaTagger, ExtraFunction
0. path Generated from SimpleMetaTagger, ExtraFunction

View file

@ -1,113 +1,128 @@
Development and deployment
==========================
There are various scripts to help setup MapComplete for deployment and develop-deployment.
This documents attempts to shed some light on these scripts.
Note: these scripts change every now and then - if the documentation here is incorrect or you run into troubles, do
leave a message in [the issue tracker](https://github.com/pietervdvn/MapComplete/issues)
Architecture overview
---------------------
At its core, MapComplete is a static (!) website. There are no servers to host.
The data is fetched from Overpass/OSM/Wikidata/Wikipedia/Mapillary/... and written there directly. This means that any
static file server will do to create a self-hosted version of MapComplete.
Development
-----------
**Windows users**: All scripts are made for linux devices. Use the Ubuntu terminal for Windows (or even better - make
the switch ;) ). If you are using Visual Studio Code you can use
a [WSL Remote](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl) window, or use the
Devcontainer (see more details later).
To develop and build MapComplete, you
Development and deployment
==========================
There are various scripts to help setup MapComplete for deployment and develop-deployment.
This documents attempts to shed some light on these scripts.
Note: these scripts change every now and then - if the documentation here is incorrect or you run into troubles, do leave a message in [the issue tracker](https://github.com/pietervdvn/MapComplete/issues)
Architecture overview
---------------------
At its core, MapComplete is a static (!) website. There are no servers to host.
The data is fetched from Overpass/OSM/Wikidata/Wikipedia/Mapillary/... and written there directly. This means that any static file server will do to create a self-hosted version of MapComplete.
Development
-----------
**Windows users**: All scripts are made for linux devices. Use the Ubuntu terminal for Windows (or even better - make the switch ;) ). If you are using Visual Studio Code you can use a [WSL Remote](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl) window, or use the Devcontainer (see more details later).
To develop and build MapComplete, you
0. Make sure you have a recent version of nodejs - at least 12.0, preferably 15
0. Make a fork and clone the repository.
1. Install `npm`. Linux: `sudo apt install npm` (or your favourite package manager), Windows: install nodeJS: https://nodejs.org/en/download/
3. Run `npm run init` and generate some additional dependencies and generated files. Note that it'll install the dependencies too
1. Install `npm`. Linux: `sudo apt install npm` (or your favourite package manager), Windows: install
nodeJS: https://nodejs.org/en/download/
3. Run `npm run init` and generate some additional dependencies and generated files. Note that it'll install the
dependencies too
4. Run `npm run start` to host a local testversion at http://localhost:1234/index.html
5. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename` or `userlayout=true#<layout configuration>` as [Query parameter](URL_Parameters.md). Note that the shorter URLs (e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version.
5. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename`
or `userlayout=true#<layout configuration>` as [Query parameter](URL_Parameters.md). Note that the shorter URLs (
e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version.
Development using Windows
------------------------
Development using Windows
------------------------
For Windows you can use the devcontainer, or the WSL subsystem.
For Windows you can use the devcontainer, or the WSL subsystem.
To use the devcontainer in Visual Studio Code:
To use the devcontainer in Visual Studio Code:
0. Make sure you have installed the [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension and it's dependencies.
0. Make sure you have installed
the [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
extension and it's dependencies.
1. Make a fork and clone the repository.
2. After cloning, Visual Studio Code will ask you if you want to use the devcontainer.
3. Then you can either clone it again in a volume (for better performance), or open the current folder in a container.
4. By now, you should be able to run `npm run start` to host a local testversion at http://localhost:1234/index.html
5. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename` or `userlayout=true#<layout configuration>` as [Query parameter](URL_Parameters.md). Note that the shorter URLs (e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version.
5. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename`
or `userlayout=true#<layout configuration>` as [Query parameter](URL_Parameters.md). Note that the shorter URLs (
e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version.
To use the WSL in Visual Studio Code:
To use the WSL in Visual Studio Code:
0. Make sure you have installed the [Remote - WSL]() extension and it's dependencies.
1. Open a remote WSL window using the button in the bottom left.
2. Make a fork and clone the repository.
3. Install `npm` using `sudo apt install npm`.
4. Run `npm run init` and generate some additional dependencies and generated files. Note that it'll install the dependencies too
4. Run `npm run init` and generate some additional dependencies and generated files. Note that it'll install the
dependencies too
5. Run `npm run start` to host a local testversion at http://localhost:1234/index.html
6. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename` or `userlayout=true#<layout configuration>` as [Query parameter](URL_Parameters.md). Note that the shorter URLs (e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version.
6. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename`
or `userlayout=true#<layout configuration>` as [Query parameter](URL_Parameters.md). Note that the shorter URLs (
e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version.
Automatic deployment
--------------------
Currently, the master branch is automatically deployed to 'mapcomplete.osm.be' by a github action.
Every branch is automatically built (upon push) to 'pietervdvn.github.io/mc/<branchname>' by a github action.
Automatic deployment
--------------------
Currently, the master branch is automatically deployed to 'mapcomplete.osm.be' by a github action.
Every branch is automatically built (upon push) to 'pietervdvn.github.io/mc/<branchname>' by a github action.
Deploying a fork
----------------
A script creates a webpage for every theme automatically, with some customizations in order to:
Deploying a fork
----------------
A script creates a webpage for every theme automatically, with some customizations in order to:
- to have shorter urls
- have individual social images
- have individual web manifests
This script can be invoked with `npm run prepare-deploy`
- to have shorter urls
- have individual social images
- have individual web manifests
This script can be invoked with `npm run prepare-deploy`
If you want to deploy your fork:
0. `npm run prepare-deploy`
1. `npm run build`
2. Copy the entire `dist` folder to where you host your website. Visiting `index.html` gives you the landing page, visiting `yourwebsite/<theme>` should bring you to the appropriate theme.
2. Copy the entire `dist` folder to where you host your website. Visiting `index.html` gives you the landing page,
visiting `yourwebsite/<theme>` should bring you to the appropriate theme.
Weird errors
------------
Try removing `node_modules`, `package-lock.json` and `.cache`
Overview of package.json-scripts
--------------------------------
- `increase-memory`: this is a big (and memory-intensive) project to build and run, so we give nodejs some more RAM.
- `start`: start a development server.
- `test`: run the unit tests
- `init`: Generates and downloads various assets which are needed to compile
- `generate:editor-layer-index`: downloads the editor-layer-index-json from osmlab.github.io
- `generate:images`: compiles the SVG's into an asset
- `generate:translations`: compiles the translation file into a javascript file
- `generate:layouts`: uses `index.html` as template to create all the theme index pages. You'll want to run `clean` when done
- `generate:docs`: generates various documents, such as information about available metatags, information to put on the [OSM-wiki](https://wiki.openstreetmap.org/wiki/MapComplete),...
- `generate:report`: downloads statistics from OsmCha, compiles neat graphs
- `generate:cache:speelplekken`: creates an offline copy of all the data required for one specific (paid for) theme
- `generate:layeroverview`: reads all the theme- and layerconfigurations, compiles them into a single JSON.
- `reset:layeroverview`: if something is wrong with the layeroverview, creates an empty one
- `generate:licenses`: compiles all the license info of images into a single json
- `optimize:images`: attempts to make smaller pngs - optional to run before a deployment
- `generate`: run all the necesary generate-scripts
- `build`: actually bundle all the files into a single `dist/`-folder
- `prepare-deploy`: create the layouts
- `deploy:staging`,`deploy:pietervdvn`, `deploy:production`: deploy the latest code on various locations
- `lint`: get depressed by the amount of warnings
- `clean`: remove some generated files which are annoying in the repo
Overview of package.json-scripts
--------------------------------
- `increase-memory`: this is a big (and memory-intensive) project to build and run, so we give nodejs some more RAM.
- `start`: start a development server.
- `test`: run the unit tests
- `init`: Generates and downloads various assets which are needed to compile
- `generate:editor-layer-index`: downloads the editor-layer-index-json from osmlab.github.io
- `generate:images`: compiles the SVG's into an asset
- `generate:translations`: compiles the translation file into a javascript file
- `generate:layouts`: uses `index.html` as template to create all the theme index pages. You'll want to run `clean` when
done
- `generate:docs`: generates various documents, such as information about available metatags, information to put on
the [OSM-wiki](https://wiki.openstreetmap.org/wiki/MapComplete),...
- `generate:report`: downloads statistics from OsmCha, compiles neat graphs
- `generate:cache:speelplekken`: creates an offline copy of all the data required for one specific (paid for) theme
- `generate:layeroverview`: reads all the theme- and layerconfigurations, compiles them into a single JSON.
- `reset:layeroverview`: if something is wrong with the layeroverview, creates an empty one
- `generate:licenses`: compiles all the license info of images into a single json
- `optimize:images`: attempts to make smaller pngs - optional to run before a deployment
- `generate`: run all the necesary generate-scripts
- `build`: actually bundle all the files into a single `dist/`-folder
- `prepare-deploy`: create the layouts
- `deploy:staging`,`deploy:pietervdvn`, `deploy:production`: deploy the latest code on various locations
- `lint`: get depressed by the amount of warnings
- `clean`: remove some generated files which are annoying in the repo

View file

@ -1,28 +1,45 @@
Gebruikersgids MapComplete
==========================
MapComplete is een website waar geodata op basis van [OpenStreetMap](https://osm.org), [Wikidata](https://wikidata.org) en andere open bronnen wordt gevisualiseerd en aangevuld.
MapComplete is een website waar geodata op basis van [OpenStreetMap](https://osm.org), [Wikidata](https://wikidata.org)
en andere open bronnen wordt gevisualiseerd en aangevuld.
De getoonde geodata is afhankelijk van het thema - zo is er bijvoorbeeld het thema voor [boekenruilkasten](https://mapcomplete.osm.be/bookcases) [cyclofix](http://mapcomplete.osm.be/cyclofix) die focust op fietspompen, fietswinkels, ...
De getoonde geodata is afhankelijk van het thema - zo is er bijvoorbeeld het thema
voor [boekenruilkasten](https://mapcomplete.osm.be/bookcases) [cyclofix](http://mapcomplete.osm.be/cyclofix) die focust
op fietspompen, fietswinkels, ...
MapComplete mag gratis gebruikt worden. Om de data te raadplegen heb je geen account nodig - de webpagina bezoeken is voldoende.
MapComplete mag gratis gebruikt worden. Om de data te raadplegen heb je geen account nodig - de webpagina bezoeken is
voldoende.
### Data toevoegen
OpenStreetMap is een gedeelde databank van geodata. Om die correct en up to date te houden, voegen we _enkel_ gegevens toe waarvan we zeker weten dat die op dit moment ook zo zijn in de echte wereld. Twijfel je dus over een vraag? Sla de vraag dan over en ga opnieuw ter plaatse kijken. **Beter geen informatie dan foute informatie**.
OpenStreetMap is een gedeelde databank van geodata. Om die correct en up to date te houden, voegen we _enkel_ gegevens
toe waarvan we zeker weten dat die op dit moment ook zo zijn in de echte wereld. Twijfel je dus over een vraag? Sla de
vraag dan over en ga opnieuw ter plaatse kijken. **Beter geen informatie dan foute informatie**.
Daarnaast verwachten we ook dat je op een vriendelijke en correcte manier omgaat met andere leden van de community. Je kan feedback of vragen krijgen over je aanpassingen - bijvoorbeeld wanneer andere bijdragers denken dat er een vergissing is gebeurd. Meestal is de vergissing met een paar heen- en weerberichtjes uitgeklaard. Vergissen is menselijk.
Daarnaast verwachten we ook dat je op een vriendelijke en correcte manier omgaat met andere leden van de community. Je
kan feedback of vragen krijgen over je aanpassingen - bijvoorbeeld wanneer andere bijdragers denken dat er een
vergissing is gebeurd. Meestal is de vergissing met een paar heen- en weerberichtjes uitgeklaard. Vergissen is
menselijk.
Als je bijdragen grote fouten bevatten, kunnen je wijzigingen ongedaan gemaakt worden door andere leden van OpenStreetMap. Dit is echter erg uitzonderlijk. Bij herhaaldelijke grote fouten, (vermoeden van) kwaad opzet of vandalisme kan je account geblokkeerd worden. Merk op dat MapComplete is opgezet om (grote) vergissingen te vermijden, dus dit is bijna onmogelijk.
Als je bijdragen grote fouten bevatten, kunnen je wijzigingen ongedaan gemaakt worden door andere leden van
OpenStreetMap. Dit is echter erg uitzonderlijk. Bij herhaaldelijke grote fouten, (vermoeden van) kwaad opzet of
vandalisme kan je account geblokkeerd worden. Merk op dat MapComplete is opgezet om (grote) vergissingen te vermijden,
dus dit is bijna onmogelijk.
Data hergebruiken
-----------------
De getoonde data (locaties van POI, ...) mogen vrij en gratis hergebruikt worden voor alle doeleinden (ook commercieel), mits de vermelding `Data van OpenStreetMap, vrij beschikbaar onder ODBL` of een gelijkaardige zin. Hiervoor hoef je geen toestemming te vragen.
De getoonde data (locaties van POI, ...) mogen vrij en gratis hergebruikt worden voor alle doeleinden (ook commercieel),
mits de vermelding `Data van OpenStreetMap, vrij beschikbaar onder ODBL` of een gelijkaardige zin. Hiervoor hoef je geen
toestemming te vragen.
Let op: aanpassingen aan de data worden ook als open data beschouwd. Let ook op wanneer je OpenStreetMap-data gaat mengen uit andere databronnen waar copyright op rust; vaak mag dit niet. Voor meer informatie, zie de [volledige copyrightnotice](https://osm.org/copyright).
Let op: aanpassingen aan de data worden ook als open data beschouwd. Let ook op wanneer je OpenStreetMap-data gaat
mengen uit andere databronnen waar copyright op rust; vaak mag dit niet. Voor meer informatie, zie
de [volledige copyrightnotice](https://osm.org/copyright).
Om de data als computerbestand op te vragen, bestaan er [verschillende opties](https://learnosm.org/en/osm-data/getting-data/).
Om de data als computerbestand op te vragen, bestaan
er [verschillende opties](https://learnosm.org/en/osm-data/getting-data/).
Privacy
-------
@ -31,17 +48,24 @@ Privacy
Zolang je je niet aanmeldt, worden er geen persoonsgegevens opgeslaan.
Je computer stuurt echter wel een klein berichtje naar [pietervdvn.goatcounter.com](pietervdvn.goatcounter.com), waar statistieken over de bezoekersaantallen worden bijgehouden. Dit omvat een minimum aan technische gegevens en kan niet gelinkt worden aan een OSM-gebruikersaccount of persoon door de makers van MapComplete.
Je computer stuurt echter wel een klein berichtje naar [pietervdvn.goatcounter.com](pietervdvn.goatcounter.com), waar
statistieken over de bezoekersaantallen worden bijgehouden. Dit omvat een minimum aan technische gegevens en kan niet
gelinkt worden aan een OSM-gebruikersaccount of persoon door de makers van MapComplete.
### Met account
Wanneer je een account maakt, is dit een account op OpenStreetMap. Voor je een account maakt, gelieve hun [privacy statement](https://wiki.osmfoundation.org/wiki/Privacy_Policy) te lezen.
Wanneer je een account maakt, is dit een account op OpenStreetMap. Voor je een account maakt, gelieve
hun [privacy statement](https://wiki.osmfoundation.org/wiki/Privacy_Policy) te lezen.
Een account maken is gratis, je moet enkel een email-adres en gebruikersnaam opgeven. Je email-adres is niet publiek zichtbaar, je gebruikersnaam wel.
Een account maken is gratis, je moet enkel een email-adres en gebruikersnaam opgeven. Je email-adres is niet publiek
zichtbaar, je gebruikersnaam wel.
Je kan opteren om een _pseudoniem_ te gebruiken - je gebruikersnaam hoeft niet je echte naam te zijn. Ook de naam van je huisdier of iets zelfbedacht mag gerust.
Je kan opteren om een _pseudoniem_ te gebruiken - je gebruikersnaam hoeft niet je echte naam te zijn. Ook de naam van je
huisdier of iets zelfbedacht mag gerust.
Wanneer je gegevens aanvult via MapComplete, zal je wijziging **publiek zichtbaar** zijn voor iedereen ter wereld. Dit betekent dus dat iedereen weet dat _gebruikersnaam_ op een bepaalde plaats op een bepaald uur aanwezig was.
Wanneer je gegevens aanvult via MapComplete, zal je wijziging **publiek zichtbaar** zijn voor iedereen ter wereld. Dit
betekent dus dat iedereen weet dat _gebruikersnaam_ op een bepaalde plaats op een bepaald uur aanwezig was.
**Ben je minderjarig?** Vraag toestemming aan je ouders voordat je een account aanmaakt en kies ervoor om je echte naam _niet_ te gebruiken.
**Ben je minderjarig?** Vraag toestemming aan je ouders voordat je een account aanmaakt en kies ervoor om je echte
naam _niet_ te gebruiken.

View file

@ -1,7 +1,8 @@
Making your own theme
=====================
In MapComplete, it is relatively simple to make your own theme. This guide will give some information on how you can do this.
In MapComplete, it is relatively simple to make your own theme. This guide will give some information on how you can do
this.
Requirements
------------
@ -11,17 +12,22 @@ Before you start, you should have the following qualifications:
- You are a longtime contributor and do know the OpenStreetMap tagging scheme very well.
- You are not afraid of editing a .JSON-file
- You're theme will add well-understood tags (aka: the tags have a wiki page, are not controversial and are objective)
- You are in contact with your local OpenStreetMap community and do know some other members to discuss tagging and to help testing
- You are in contact with your local OpenStreetMap community and do know some other members to discuss tagging and to
help testing
If you do not have those qualifications, reach out to the MapComplete community channel on [Telegram](https://t.me/MapComplete)
If you do not have those qualifications, reach out to the MapComplete community channel
on [Telegram](https://t.me/MapComplete)
or [Matrix](https://app.element.io/#/room/#MapComplete:matrix.org).
The custom theme generator
--------------------------
The custom theme generator is a special page of MapComplete, where one can create their own theme. It makes it easier to get started.
The custom theme generator is a special page of MapComplete, where one can create their own theme. It makes it easier to
get started.
However, the custom theme generator is extremely buggy and built before some updates. This means that some features are _not_ available through the custom theme generator. The custom theme generator is good to get the basics of the theme set up, but you will have to edit the raw JSON-file anyway afterwards.
However, the custom theme generator is extremely buggy and built before some updates. This means that some features
are _not_ available through the custom theme generator. The custom theme generator is good to get the basics of the
theme set up, but you will have to edit the raw JSON-file anyway afterwards.
[A quick tutorial for the custom theme generator can be found here](https://www.youtube.com/watch?v=nVbFrNVPxPw).
@ -30,48 +36,67 @@ Loading your theme
If you have your .json file, there are three ways to distribute your theme:
- Take the entire JSON-file and [base64](https://www.base64encode.org/) encode it. Then open up the url `https://mapcomplete.osm.be?userlayout=true#<base64-encoded-json-here>`. Yes, this URL will be huge; and updates are difficult to distribute as you have to send a new URL to everyone. This is however excellent to have a 'quick and dirty' test version up and running as these links can be generated from the customThemeGenerator and can be quickly shared with a few other contributors.
- Host the JSON file on a publicly accessible webserver (e.g. github) and open up `https://mapcomplete.osm.be?userlayout=<url-to-the-raw.json>`
- Take the entire JSON-file and [base64](https://www.base64encode.org/) encode it. Then open up the
url `https://mapcomplete.osm.be?userlayout=true#<base64-encoded-json-here>`. Yes, this URL will be huge; and updates
are difficult to distribute as you have to send a new URL to everyone. This is however excellent to have a 'quick and
dirty' test version up and running as these links can be generated from the customThemeGenerator and can be quickly
shared with a few other contributors.
- Host the JSON file on a publicly accessible webserver (e.g. github) and open
up `https://mapcomplete.osm.be?userlayout=<url-to-the-raw.json>`
- Ask to have your theme included into the official MapComplete - requirements below
### Getting your theme included into the official mapcomplete
Did you make an awesome theme that you want to share with the OpenStreetMap community? Have it included in the main application, which makes it more discoverable.
Did you make an awesome theme that you want to share with the OpenStreetMap community? Have it included in the main
application, which makes it more discoverable.
Your theme has to be:
0) Make sure the theme has an English version. This makes it easier for me to understand what is going on. The more other languages, the better of course!
0) Make sure the theme has an English version. This makes it easier for me to understand what is going on. The more
other languages, the better of course!
1) Make sure your theme has good tagging
3) Make sure there are somewhat decent icons. Note that there is _no_ styleguide at the moment though.
The preferred way to add your theme is via a Pull Request. A Pull Request is less work for the maintainer (which makes it really easy and for me to add it) and your name will be included in the git history (so you'll be listed as contributor). If that is not possible, send the .Json-file and assets, e.g. as a zip in an issue, per email, ...
The preferred way to add your theme is via a Pull Request. A Pull Request is less work for the maintainer (which makes
it really easy and for me to add it) and your name will be included in the git history (so you'll be listed as
contributor). If that is not possible, send the .Json-file and assets, e.g. as a zip in an issue, per email, ...
*Via a pull request:*
1) Fork this repository
2) Go to `assets/themes` and create a new directory `yourtheme`
3) Create a new file `yourtheme.json`, paste the theme configuration in there. You can find your theme configuration in the customThemeBuilder (the tab with the *Floppy disk* icon)
4) Copy all the images into this new directory. **No external sources are allowed!** External image sources leak privacy or can break.
3) Create a new file `yourtheme.json`, paste the theme configuration in there. You can find your theme configuration in
the customThemeBuilder (the tab with the *Floppy disk* icon)
4) Copy all the images into this new directory. **No external sources are allowed!** External image sources leak privacy
or can break.
- Make sure the license is suitable, preferable a Creative Commons license or CC0-license.
- If an SVG version is available, use the SVG version
- Make sure all the links in `yourtheme.json` are updated. You can use `./assets/themes/yourtheme/yourimage.svg` instead of the HTML link
- Create a file `license_info.json` in the theme directory, which contains metadata on every artwork source
5) Add your theme to the code base: add it into "assets/themes" and make sure all the images are there too. Running 'ts-node scripts/fixTheme <path to your theme>' will help downloading the images and attempts to get the licenses if on wikimedia.
6) Add some finishing touches, such as a social image. See [this blog post](https://www.h3xed.com/web-and-internet/how-to-use-og-image-meta-tag-facebook-reddit) for some hints
7) Test your theme: run the project as described in [development_deployment](Development_deployment.md)
8) Happy with your theme? Time to open a Pull Request!
9) Thanks a lot for improving MapComplete!
The .JSON-format
----------------
- Make sure all the links in `yourtheme.json` are updated. You can use `./assets/themes/yourtheme/yourimage.svg`
instead of the HTML link
- Create a file `license_info.json` in the theme directory, which contains metadata on every artwork source
5) Add your theme to the code base: add it into "assets/themes" and make sure all the images are there too. Running '
ts-node scripts/fixTheme <path to your theme>' will help downloading the images and attempts to get the licenses if
on wikimedia.
6) Add some finishing touches, such as a social image.
See [this blog post](https://www.h3xed.com/web-and-internet/how-to-use-og-image-meta-tag-facebook-reddit) for some
hints
7) Test your theme: run the project as described in [development_deployment](Development_deployment.md)
8) Happy with your theme? Time to open a Pull Request!
9) Thanks a lot for improving MapComplete!
The .JSON-format
----------------
There are three important levels in the .JSON-file:
- The toplevel describes the metadata of the entire theme. It contains the `title`, `description`, `icon`... of the theme. The most important object is `layers`, which is a list of objects describing layers.
- A `layer` describes a layer. It contains the `name`, `icon`, `tags of objects to download from overpass`, and especially the `icon` and a way to ask dynamically render tags and ask questions. A lot of those fields (`icon`, `title`, ...) are actually a `TagRendering`
- A `TagRendering` is an object describing a relationship between what should be shown on screen and the OSM-tagging. It works in two ways: if the correct tag is known, the appropriate text will be shown. If the tag is missing (and a question is defined), the question will be shown.
- The toplevel describes the metadata of the entire theme. It contains the `title`, `description`, `icon`... of the
theme. The most important object is `layers`, which is a list of objects describing layers.
- A `layer` describes a layer. It contains the `name`, `icon`, `tags of objects to download from overpass`, and
especially the `icon` and a way to ask dynamically render tags and ask questions. A lot of those fields (`icon`
, `title`, ...) are actually a `TagRendering`
- A `TagRendering` is an object describing a relationship between what should be shown on screen and the OSM-tagging. It
works in two ways: if the correct tag is known, the appropriate text will be shown. If the tag is missing (and a
question is defined), the question will be shown.
Every field is documented in the source code itself - you can find them here:
@ -82,50 +107,65 @@ Every field is documented in the source code itself - you can find them here:
### MetaTags
There are few tags available that are calculated for convenience - e.g. the country an object is located at. [An overview of all these metatags is available here](Docs/CalculatedTags.md)
There are few tags available that are calculated for convenience - e.g. the country an object is located
at. [An overview of all these metatags is available here](Docs/CalculatedTags.md)
Some hints
Some hints
------------
### Everything is HTML
All the texts are actually *HTML*-snippets, so you can use `<b>` to add bold, or `<img src=...>` to add images to mappings or tagrenderings.
All the texts are actually *HTML*-snippets, so you can use `<b>` to add bold, or `<img src=...>` to add images to
mappings or tagrenderings.
Some remarks:
Some remarks:
- links are disabled when answering a question (e.g. a link in a mapping) as it should trigger the answer - not trigger to open the link.
- If you include images, e.g. to clarify a type, make sure these are _icons_ or _diagrams_ - not actual pictures! If users see a picture, they think it is a picture of _that actual object_, not a type to clarify the type. An icon is however perceived as something more abstract.
- links are disabled when answering a question (e.g. a link in a mapping) as it should trigger the answer - not trigger
to open the link.
- If you include images, e.g. to clarify a type, make sure these are _icons_ or _diagrams_ - not actual pictures! If
users see a picture, they think it is a picture of _that actual object_, not a type to clarify the type. An icon is
however perceived as something more abstract.
Some pitfalls
Some pitfalls
---------------
### Not publishing
Not publishing because 'it is not good enough'. _Share your theme, even if it is still not great, let the community help it improve_
Not publishing because 'it is not good enough'. _Share your theme, even if it is still not great, let the community help
it improve_
### Thinking in terms of a question
Making a tagrendering as if it were a question only. If you have a question such as: _Does this bench have a backrest?_, it is very tempting to have as options _yes_ for `backrest=yes` and _no_ for `backrest=no`. However, when this data is known, it will simply show a lone _yes_ or _no_ which is very unclear.
Making a tagrendering as if it were a question only. If you have a question such as: _Does this bench have a backrest?_,
it is very tempting to have as options _yes_ for `backrest=yes` and _no_ for `backrest=no`. However, when this data is
known, it will simply show a lone _yes_ or _no_ which is very unclear.
The correct way to handle this is to use _This bench does have a backrest_ and _This bench does not have a backrest_ as answers.
The correct way to handle this is to use _This bench does have a backrest_ and _This bench does not have a backrest_ as
answers.
One has to think first in terms of _what is shown to the user if it is known_, only then in terms of _what is the question I want to ask_
One has to think first in terms of _what is shown to the user if it is known_, only then in terms of _what is the
question I want to ask_
### Forgetting the casual/noob mapper
MapComplete is in the first place a tool to help *non-technical* people visualize their interest and contribute to it. In order to maximize contribution:
MapComplete is in the first place a tool to help *non-technical* people visualize their interest and contribute to it.
In order to maximize contribution:
1. Use simple language. Avoid difficult words and explain jargon
2. Put the simple questions first and the difficult ones on the back. The contributor can then stop at a difficult point and go to the next POI
2. Put the simple questions first and the difficult ones on the back. The contributor can then stop at a difficult point
and go to the next POI
3. Use symbols and images, also in the mappings on questions
4. Make sure the icons (on the map and in the questions) are big enough, clear enough and contrast enough with the background map
4. Make sure the icons (on the map and in the questions) are big enough, clear enough and contrast enough with the
background map
### Using layers to distinguish on attributes
One layer should portray one kind of physical object, e.g. "benches" or "restaurants". It should contain all of them, disregarding other properties.
One layer should portray one kind of physical object, e.g. "benches" or "restaurants". It should contain all of them,
disregarding other properties.
One should not make one layer for benches with a backrest and one layer for benches without. This is confusing for users and poses problems: what if the backrest status is unknown? What if it is some weird value?
Also, it isn't possible to 'move' an attribute to another layer.
One should not make one layer for benches with a backrest and one layer for benches without. This is confusing for users
and poses problems: what if the backrest status is unknown? What if it is some weird value? Also, it isn't possible to '
move' an attribute to another layer.
Instead, make one layer for one kind of object and change the icon based on attributes.
@ -133,12 +173,19 @@ Instead, make one layer for one kind of object and change the icon based on attr
Using layers as filters - this doesn't work!
_All_ data is downloaded in one go and cached locally first. The layer selection (bottom left of the live app) then selects _anything_ that matches the criteria. This match is then passed of to the rendering layer, which selects the layer independently. This means that a feature can show up, even if it's layer is unselected!
_All_ data is downloaded in one go and cached locally first. The layer selection (bottom left of the live app) then
selects _anything_ that matches the criteria. This match is then passed of to the rendering layer, which selects the
layer independently. This means that a feature can show up, even if it's layer is unselected!
For example, in the [cyclofix-theme](https://mapcomplete.osm.org/cyclofix), there is the layer with _bike-wash_ for do it yourself bikecleaning - points marked with `service:bicycle:cleaning`. However, a bicycle repair shop can offer this service too!
For example, in the [cyclofix-theme](https://mapcomplete.osm.org/cyclofix), there is the layer with _bike-wash_ for do
it yourself bikecleaning - points marked with `service:bicycle:cleaning`. However, a bicycle repair shop can offer this
service too!
If all the layers are deselected except the bike wash layer, a shop having this tag will still match and will still show up as shop.
If all the layers are deselected except the bike wash layer, a shop having this tag will still match and will still show
up as shop.
### Not reading the .JSON-specs
There are a few advanced features to do fancy stuff available, which are documented only in the spec above - for example, reusing background images and substituting the colours or HTML-rendering. If you need advanced stuff, read it through!
There are a few advanced features to do fancy stuff available, which are documented only in the spec above - for
example, reusing background images and substituting the colours or HTML-rendering. If you need advanced stuff, read it
through!

View file

@ -4,15 +4,18 @@
## StreetComplete
StreetComplete might look pretty similar to MapComplete at first glance - especially as it was a huge inspiration. However, there are a few huge differences between the two, especially in vision.
StreetComplete might look pretty similar to MapComplete at first glance - especially as it was a huge inspiration.
However, there are a few huge differences between the two, especially in vision.
### Vision
The core philosophy of StreetComplete is **OpenStreetMap is cool! Help to improve it by answering these questions**
The core philosophy of MapComplete is **Here is a map of topic XYZ - enjoy it and update it if there is still some info missing**
The core philosophy of MapComplete is **Here is a map of topic XYZ - enjoy it and update it if there is still some info
missing**
This means that StreetComplete is mainly aimed towards people who are already OpenStreetMap-enthusiasts, whereas MapComplete is aimed to an audience interested in a certain topic.
Of course, the next step is to attempt to inform that audience why having an open map is so cool and that they can contribute as well.
This means that StreetComplete is mainly aimed towards people who are already OpenStreetMap-enthusiasts, whereas
MapComplete is aimed to an audience interested in a certain topic. Of course, the next step is to attempt to inform that
audience why having an open map is so cool and that they can contribute as well.
### Use cases
@ -29,7 +32,9 @@ MapComplete is made to
StreetComplete is an android app, so can only be used on Android Phones.
MapComplete is a web-app, and thus works on all devices. It can be installed as PWA to give an 'app-like'-experience, but can just as well be embedded in other websites. On the other hand PWA are a bit of a second class citizen compared to native apps.
MapComplete is a web-app, and thus works on all devices. It can be installed as PWA to give an 'app-like'-experience,
but can just as well be embedded in other websites. On the other hand PWA are a bit of a second class citizen compared
to native apps.
### Feature comparison
@ -37,22 +42,26 @@ MapComplete is also an OpenStreetMap-viewer, while StreetComplete hides known va
MapComplete will not work offline.
In MapComplete it is easier to add more experimental, extremely detailed and more personal styles, as each topic is separated with its own part.
In MapComplete it is easier to add more experimental, extremely detailed and more personal styles, as each topic is
separated with its own part.
MapComplete is a bit more complex to use. One needs to go hunting for a specific map style rather than getting bunch of quests by default. And is likely to ask far more detailed question (email address and phone number of bicycle shop etc).
After all if it would duplicate StreetComplete it would be a bit pointless and it is pretty hard to compete with SC by being easier to use and more newbie friendly, while there is space for "more complicated/detailed/involved editor working like SC".
MapComplete is a bit more complex to use. One needs to go hunting for a specific map style rather than getting bunch of
quests by default. And is likely to ask far more detailed question (email address and phone number of bicycle shop etc).
After all if it would duplicate StreetComplete it would be a bit pointless and it is pretty hard to compete with SC by
being easier to use and more newbie friendly, while there is space for "more complicated/detailed/involved editor
working like SC".
Also, MapComplete has no requirement to make question easy to answer, making both possible to ask more questions than StreetComplete but making it more complicated to use.
Also, MapComplete has no requirement to make question easy to answer, making both possible to ask more questions than
StreetComplete but making it more complicated to use.
No support for splitting ways in MapComplete (as of now - hopefully it'll get added one day).
MapComplete allows the addition of new points, whereas StreetComplete does not.
## MapContrib
MapContrib is another very similar editor which served as inspiration. MapContrib offers - just like MapComplete - an extensible, thematic map view. However, I never understood the MapContrib user interface.
MapContrib is another very similar editor which served as inspiration. MapContrib offers - just like MapComplete - an
extensible, thematic map view. However, I never understood the MapContrib user interface.
MapContrib also allows to add new points and to edit tags - but it is very cumbersome.

View file

@ -2,18 +2,19 @@
In this document, you'll find a short overview of which (paid) projects have been completed with MapComplete
## Buurtnatuur
Commisioned by Groen (the Belgian Green Party): "a project to crowdsource data about parks, nature reserve and forests"
## Cyclofix
Cycle-related Points of interest (pumps, shops, drinking water, ...). Commissioned by "Brussels Mobility", executed during OSOC
Cycle-related Points of interest (pumps, shops, drinking water, ...). Commissioned by "Brussels Mobility", executed
during OSOC
## Speelplekken in de Antwerpse Zuidrand
Playgrounds, play forests and village green in the southern part of the Province of Antwerp; commisioned by Province of Antwerp
Playgrounds, play forests and village green in the southern part of the Province of Antwerp; commisioned by Province of
Antwerp
## Natuurpunt Map (planned)

View file

@ -1,7 +1,7 @@
# Available types for text fields
The listed types here trigger a special input element. Use them in `tagrendering.freeform.type` of your tagrendering to activate them
The listed types here trigger a special input element. Use them in `tagrendering.freeform.type` of your tagrendering to
activate them
## string
@ -21,7 +21,8 @@ A geographical direction, in degrees. 0° is north, 90° is east, ... Will retur
## length
A geographical length in meters (rounded at two points). Will give an extra minimap with a measurement tool. Arguments: [ zoomlevel, preferredBackgroundMapType (comma separated) ], e.g. `["21", "map,photo"]
A geographical length in meters (rounded at two points). Will give an extra minimap with a measurement tool.
Arguments: [ zoomlevel, preferredBackgroundMapType (comma separated) ], e.g. `["21", "map,photo"]
## wikidata

View file

@ -1,92 +1,110 @@
### Special tag renderings
### Special tag renderings
In a tagrendering, some special values are substituted by an advanced UI-element. This allows advanced features and
visualizations to be reused by custom themes or even to query third-party API's. General usage is `{func_name()}`
, `{func_name(arg, someotherarg)}` or `{func_name(args):cssStyle}`. Note that you _do not_fcs need to use quotes around
your arguments, the comma is enough to separate them. This also implies you cannot use a comma in your args
In a tagrendering, some special values are substituted by an advanced UI-element. This allows advanced features and visualizations to be reused by custom themes or even to query third-party API's. General usage is `{func_name()}`, `{func_name(arg, someotherarg)}` or `{func_name(args):cssStyle}`. Note that you _do not_fcs need to use quotes around your arguments, the comma is enough to separate them. This also implies you cannot use a comma in your args
### all_tags
### all_tags
Prints all key-value pairs of the object - used for debugging
Prints all key-value pairs of the object - used for debugging
name | default | description
------ | --------- | -------------
#### Example usage
#### Example usage
{all_tags()}
### image_carousel
{all_tags()}
Creates an image carousel for the given sources. An attempt will be made to guess what source is used. Supported: Wikidata identifiers, Wikipedia pages, Wikimedia categories, IMGUR (with attribution, direct links)
### image_carousel
Creates an image carousel for the given sources. An attempt will be made to guess what source is used. Supported:
Wikidata identifiers, Wikipedia pages, Wikimedia categories, IMGUR (with attribution, direct links)
name | default | description
------ | --------- | -------------
image key/prefix | image | The keys given to the images, e.g. if <span class='literal-code'>image</span> is given, the first picture URL will be added as <span class='literal-code'>image</span>, the second as <span class='literal-code'>image:0</span>, the third as <span class='literal-code'>image:1</span>, etc...
image key/prefix | image | The keys given to the images, e.g. if <span class='literal-code'>image</span> is given, the first picture URL will be added as <span class='literal-code'>image</span>, the second as <span class='literal-code'>image:0</span>, the third as <span class='literal-code'>image:1</span>, etc...
smart search | true | Also include images given via 'Wikidata', 'wikimedia_commons' and 'mapillary
#### Example usage
{image_carousel(image,true)}
### image_upload
#### Example usage
Creates a button where a user can upload an image to IMGUR
{image_carousel(image,true)}
### image_upload
Creates a button where a user can upload an image to IMGUR
name | default | description
------ | --------- | -------------
image-key | image | Image tag to add the URL to (or image-tag:0, image-tag:1 when multiple images are added)
#### Example usage
{image_upload(image)}
### minimap
#### Example usage
A small map showing the selected feature. Note that no styling is applied, wrap this in a div
{image_upload(image)}
### minimap
A small map showing the selected feature. Note that no styling is applied, wrap this in a div
name | default | description
------ | --------- | -------------
zoomlevel | 18 | The (maximum) zoomlevel: the target zoomlevel after fitting the entire feature. The minimap will fit the entire feature, then zoom out to this zoom level. The higher, the more zoomed in with 1 being the entire world and 19 being really close
idKey | id | (Matches all resting arguments) This argument should be the key of a property of the feature. The corresponding value is interpreted as either the id or the a list of ID's. The features with these ID's will be shown on this minimap.
#### Example usage
`{minimap()}`, `{minimap(17, id, _list_of_embedded_feature_ids_calculated_by_calculated_tag):height:10rem; border: 2px solid black}`
### reviews
#### Example usage
Adds an overview of the mangrove-reviews of this object. Mangrove.Reviews needs - in order to identify the reviewed object - a coordinate and a name. By default, the name of the object is given, but this can be overwritten
`{minimap()}`
, `{minimap(17, id, _list_of_embedded_feature_ids_calculated_by_calculated_tag):height:10rem; border: 2px solid black}`
### reviews
Adds an overview of the mangrove-reviews of this object. Mangrove.Reviews needs - in order to identify the reviewed
object - a coordinate and a name. By default, the name of the object is given, but this can be overwritten
name | default | description
------ | --------- | -------------
subjectKey | name | The key to use to determine the subject. If specified, the subject will be <b>tags[subjectKey]</b>
fallback | undefined | The identifier to use, if <i>tags[subjectKey]</i> as specified above is not available. This is effectively a fallback value
#### Example usage
<b>{reviews()}<b> for a vanilla review, <b>{reviews(name, play_forest)}</b> to review a play forest. If a name is known, the name will be used as identifier, otherwise 'play_forest' is used
### opening_hours_table
#### Example usage
Creates an opening-hours table. Usage: {opening_hours_table(opening_hours)} to create a table of the tag 'opening_hours'.
<b>{reviews()}<b> for a vanilla review, <b>{reviews(name, play_forest)}</b> to review a play forest. If a name is known,
the name will be used as identifier, otherwise 'play_forest' is used
### opening_hours_table
Creates an opening-hours table. Usage: {opening_hours_table(opening_hours)} to create a table of the tag '
opening_hours'.
name | default | description
------ | --------- | -------------
key | opening_hours | The tagkey from which the table is constructed.
#### Example usage
{opening_hours_table(opening_hours)}
### live
#### Example usage
Downloads a JSON from the given URL, e.g. '{live(example.org/data.json, shorthand:x.y.z, other:a.b.c, shorthand)}' will download the given file, will create an object {shorthand: json[x][y][z], other: json[a][b][c] out of it and will return 'other' or 'json[a][b][c]. This is made to use in combination with tags, e.g. {live({url}, {url:format}, needed_value)}
{opening_hours_table(opening_hours)}
### live
Downloads a JSON from the given URL, e.g. '{live(example.org/data.json, shorthand:x.y.z, other:a.b.c, shorthand)}' will
download the given file, will create an object {shorthand: json[x][y][z], other: json[a][b][c] out of it and will
return 'other' or 'json[a][b][c]. This is made to use in combination with tags, e.g. {live({url}, {url:format},
needed_value)}
name | default | description
------ | --------- | -------------
Url | undefined | The URL to load
Shorthands | undefined | A list of shorthands, of the format 'shorthandname:path.path.path'. separated by ;
path | undefined | The path (or shorthand) that should be returned
#### Example usage
{live({url},{url:format},hour)} {live(https://data.mobility.brussels/bike/api/counts/?request=live&featureID=CB2105,hour:data.hour_cnt;day:data.day_cnt;year:data.year_cnt,hour)}
### histogram
#### Example usage
Create a histogram for a list of given values, read from the properties.
{live({url},{url:format},hour)}
{live(https://data.mobility.brussels/bike/api/counts/?request=live&featureID=CB2105,hour:data.hour_cnt;day:data.day_cnt;year:data.year_cnt,hour)}
### histogram
Create a histogram for a list of given values, read from the properties.
name | default | description
------ | --------- | -------------
@ -94,29 +112,31 @@ key | undefined | The key to be read and to generate a histogram from
title | | The text to put above the given values column
countHeader | | The text to put above the counts
colors* | undefined | (Matches all resting arguments - optional) Matches a regex onto a color value, e.g. `3[a-zA-Z+-]*:#33cc33`
#### Example usage
`{histogram('some_key')}` with properties being `{some_key: ['a','b','a','c']} to create a histogram
### share_link
#### Example usage
Creates a link that (attempts to) open the native 'share'-screen
`{histogram('some_key')}` with properties being `{some_key: ['a','b','a','c']} to create a histogram
### share_link
Creates a link that (attempts to) open the native 'share'-screen
name | default | description
------ | --------- | -------------
url | undefined | The url to share (default: current URL)
#### Example usage
{share_link()} to share the current page, {share_link(<some_url>)} to share the given url
### canonical
#### Example usage
Converts a short, canonical value into the long, translated text
{share_link()} to share the current page, {share_link(<some_url>)} to share the given url
### canonical
Converts a short, canonical value into the long, translated text
name | default | description
------ | --------- | -------------
key | undefined | The key of the tag to give the canonical text for
#### Example usage
{canonical(length)} will give 42 metre (in french) Generated from UI/SpecialVisualisations.ts
#### Example usage
{canonical(length)} will give 42 metre (in french) Generated from UI/SpecialVisualisations.ts

View file

@ -1,7 +1,8 @@
Statistics
==========
There are some fancy statistics available about MapComplete use. The most important once are listed below, some more graphs (and the scripts to generate them) are [in the tools directory](Tools/)
There are some fancy statistics available about MapComplete use. The most important once are listed below, some more
graphs (and the scripts to generate them) are [in the tools directory](Tools/)
All Time usage
--------------
@ -9,7 +10,8 @@ All Time usage
![](Tools/CumulativeContributors.png)
![](Tools/Cumulative%20changesets%20per%20contributor.png)
Note: in 2020, MapComplete would still make one changeset per answered question. This heavily skews the below graphs towards `buurtnatuur` and `cyclofìx`, two heavily used themes at the beginning.
Note: in 2020, MapComplete would still make one changeset per answered question. This heavily skews the below graphs
towards `buurtnatuur` and `cyclofìx`, two heavily used themes at the beginning.
![](Tools/Cumulative%20changesets%20per%20theme.png)
![](Tools/Theme%20distribution.png)

View file

@ -1,172 +1,172 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Open AED Map",
"description": "On this map, one can find and mark nearby defibrillators",
"project_url": "https://mapcomplete.osm.be/aed",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/aed/logo.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "emergency",
"description": "The MapComplete theme Open AED Map has a layer Defibrillators showing features with this tag",
"value": "defibrillator"
"data_format": 1,
"project": {
"name": "MapComplete Open AED Map",
"description": "On this map, one can find and mark nearby defibrillators",
"project_url": "https://mapcomplete.osm.be/aed",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/aed/logo.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
{
"key": "image",
"description": "The layer 'Defibrillators 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 'Defibrillators 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 'Defibrillators 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 'Defibrillators 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": "indoor",
"description": "Layer 'Defibrillators' shows indoor=yes with a fixed text, namely 'This defibrillator is located indoors' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "yes"
},
{
"key": "indoor",
"description": "Layer 'Defibrillators' shows indoor=no with a fixed text, namely 'This defibrillator is located outdoors' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "no"
},
{
"key": "access",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'access' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "access",
"description": "Layer 'Defibrillators' shows access=yes with a fixed text, namely 'Publicly accessible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "yes"
},
{
"key": "access",
"description": "Layer 'Defibrillators' shows access=public with a fixed text, namely 'Publicly accessible' (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "public"
},
{
"key": "access",
"description": "Layer 'Defibrillators' shows access=customers with a fixed text, namely 'Only accessible to customers' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "customers"
},
{
"key": "access",
"description": "Layer 'Defibrillators' shows access=private with a fixed text, namely 'Not accessible to the general public (e.g. only accesible to staff, the owners, ...)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "private"
},
{
"key": "access",
"description": "Layer 'Defibrillators' shows access=no with a fixed text, namely 'Not accessible, possibly only for professional use' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "no"
},
{
"key": "defibrillator",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'defibrillator' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "defibrillator",
"description": "Layer 'Defibrillators' shows defibrillator=manual with a fixed text, namely 'This is a manual defibrillator for professionals' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "manual"
},
{
"key": "defibrillator",
"description": "Layer 'Defibrillators' shows defibrillator=automatic with a fixed text, namely 'This is a normal automatic defibrillator' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "automatic"
},
{
"key": "level",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "level",
"description": "Layer 'Defibrillators' shows level=0 with a fixed text, namely 'This defibrillator is on the <b>ground floor</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "0"
},
{
"key": "level",
"description": "Layer 'Defibrillators' shows level=1 with a fixed text, namely 'This defibrillator is on the <b>first floor</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "1"
},
{
"key": "defibrillator:location",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'defibrillator:location' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "defibrillator:location:en",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'defibrillator:location:en' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "defibrillator:location:fr",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'defibrillator:location:fr' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "wheelchair",
"description": "Layer 'Defibrillators' shows wheelchair=designated with a fixed text, namely 'This defibrillator is specially adapated for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "designated"
},
{
"key": "wheelchair",
"description": "Layer 'Defibrillators' shows wheelchair=yes with a fixed text, namely 'This defibrillator is easily reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "yes"
},
{
"key": "wheelchair",
"description": "Layer 'Defibrillators' shows wheelchair=limited with a fixed text, namely 'It is possible to reach the defibrillator in a wheelchair, but it is not easy' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "limited"
},
{
"key": "wheelchair",
"description": "Layer 'Defibrillators' shows wheelchair=no with a fixed text, namely 'This defibrillator is not reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "no"
},
{
"key": "ref",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'ref' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "email",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "phone",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "opening_hours",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "opening_hours",
"description": "Layer 'Defibrillators' 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 AED Map')",
"value": "24/7"
},
{
"key": "description",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'description' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "survey:date",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'survey:date' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "survey:date",
"description": "Layer 'Defibrillators' shows survey:date= with a fixed text, namely 'Checked today!' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map') Picking this answer will delete the key survey:date.",
"value": ""
},
{
"key": "fixme",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'fixme' (in the MapComplete.osm.be theme 'Open AED Map')"
}
]
"tags": [
{
"key": "emergency",
"description": "The MapComplete theme Open AED Map has a layer Defibrillators showing features with this tag",
"value": "defibrillator"
},
{
"key": "image",
"description": "The layer 'Defibrillators 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 'Defibrillators 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 'Defibrillators 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 'Defibrillators 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": "indoor",
"description": "Layer 'Defibrillators' shows indoor=yes with a fixed text, namely 'This defibrillator is located indoors' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "yes"
},
{
"key": "indoor",
"description": "Layer 'Defibrillators' shows indoor=no with a fixed text, namely 'This defibrillator is located outdoors' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "no"
},
{
"key": "access",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'access' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "access",
"description": "Layer 'Defibrillators' shows access=yes with a fixed text, namely 'Publicly accessible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "yes"
},
{
"key": "access",
"description": "Layer 'Defibrillators' shows access=public with a fixed text, namely 'Publicly accessible' (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "public"
},
{
"key": "access",
"description": "Layer 'Defibrillators' shows access=customers with a fixed text, namely 'Only accessible to customers' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "customers"
},
{
"key": "access",
"description": "Layer 'Defibrillators' shows access=private with a fixed text, namely 'Not accessible to the general public (e.g. only accesible to staff, the owners, ...)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "private"
},
{
"key": "access",
"description": "Layer 'Defibrillators' shows access=no with a fixed text, namely 'Not accessible, possibly only for professional use' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "no"
},
{
"key": "defibrillator",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'defibrillator' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "defibrillator",
"description": "Layer 'Defibrillators' shows defibrillator=manual with a fixed text, namely 'This is a manual defibrillator for professionals' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "manual"
},
{
"key": "defibrillator",
"description": "Layer 'Defibrillators' shows defibrillator=automatic with a fixed text, namely 'This is a normal automatic defibrillator' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "automatic"
},
{
"key": "level",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "level",
"description": "Layer 'Defibrillators' shows level=0 with a fixed text, namely 'This defibrillator is on the <b>ground floor</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "0"
},
{
"key": "level",
"description": "Layer 'Defibrillators' shows level=1 with a fixed text, namely 'This defibrillator is on the <b>first floor</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "1"
},
{
"key": "defibrillator:location",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'defibrillator:location' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "defibrillator:location:en",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'defibrillator:location:en' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "defibrillator:location:fr",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'defibrillator:location:fr' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "wheelchair",
"description": "Layer 'Defibrillators' shows wheelchair=designated with a fixed text, namely 'This defibrillator is specially adapated for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "designated"
},
{
"key": "wheelchair",
"description": "Layer 'Defibrillators' shows wheelchair=yes with a fixed text, namely 'This defibrillator is easily reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "yes"
},
{
"key": "wheelchair",
"description": "Layer 'Defibrillators' shows wheelchair=limited with a fixed text, namely 'It is possible to reach the defibrillator in a wheelchair, but it is not easy' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "limited"
},
{
"key": "wheelchair",
"description": "Layer 'Defibrillators' shows wheelchair=no with a fixed text, namely 'This defibrillator is not reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map')",
"value": "no"
},
{
"key": "ref",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'ref' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "email",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "phone",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "opening_hours",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "opening_hours",
"description": "Layer 'Defibrillators' 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 AED Map')",
"value": "24/7"
},
{
"key": "description",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'description' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "survey:date",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'survey:date' (in the MapComplete.osm.be theme 'Open AED Map')"
},
{
"key": "survey:date",
"description": "Layer 'Defibrillators' shows survey:date= with a fixed text, namely 'Checked today!' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open AED Map') Picking this answer will delete the key survey:date.",
"value": ""
},
{
"key": "fixme",
"description": "Layer 'Defibrillators' shows and asks freeform values for key 'fixme' (in the MapComplete.osm.be theme 'Open AED Map')"
}
]
}

View file

@ -1,111 +1,111 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Open Artwork Map",
"description": "Welcome to Open Artwork Map, a map of statues, busts, grafittis and other artwork all over the world",
"project_url": "https://mapcomplete.osm.be/artwork",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/artwork/artwork.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "tourism",
"description": "The MapComplete theme Open Artwork Map has a layer Artworks showing features with this tag",
"value": "artwork"
"data_format": 1,
"project": {
"name": "MapComplete Open Artwork Map",
"description": "Welcome to Open Artwork Map, a map of statues, busts, grafittis and other artwork all over the world",
"project_url": "https://mapcomplete.osm.be/artwork",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/artwork/artwork.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
{
"key": "image",
"description": "The layer 'Artworks allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "mapillary",
"description": "The layer 'Artworks allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "wikidata",
"description": "The layer 'Artworks allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "wikipedia",
"description": "The layer 'Artworks allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows and asks freeform values for key 'artwork_type' (in the MapComplete.osm.be theme 'Open Artwork Map')"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=architecture with a fixed text, namely 'Architecture' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "architecture"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=mural with a fixed text, namely 'Mural' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "mural"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=painting with a fixed text, namely 'Painting' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "painting"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=sculpture with a fixed text, namely 'Sculpture' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "sculpture"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=statue with a fixed text, namely 'Statue' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "statue"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=bust with a fixed text, namely 'Bust' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "bust"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=stone with a fixed text, namely 'Stone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "stone"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=installation with a fixed text, namely 'Installation' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "installation"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=graffiti with a fixed text, namely 'Graffiti' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "graffiti"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=relief with a fixed text, namely 'Relief' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "relief"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=azulejo with a fixed text, namely 'Azulejo (Spanish decorative tilework)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "azulejo"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=tilework with a fixed text, namely 'Tilework' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "tilework"
},
{
"key": "artist_name",
"description": "Layer 'Artworks' shows and asks freeform values for key 'artist_name' (in the MapComplete.osm.be theme 'Open Artwork Map')"
},
{
"key": "website",
"description": "Layer 'Artworks' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Open Artwork Map')"
},
{
"key": "wikidata",
"description": "Layer 'Artworks' shows and asks freeform values for key 'wikidata' (in the MapComplete.osm.be theme 'Open Artwork Map')"
}
]
"tags": [
{
"key": "tourism",
"description": "The MapComplete theme Open Artwork Map has a layer Artworks showing features with this tag",
"value": "artwork"
},
{
"key": "image",
"description": "The layer 'Artworks allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "mapillary",
"description": "The layer 'Artworks allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "wikidata",
"description": "The layer 'Artworks allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "wikipedia",
"description": "The layer 'Artworks allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows and asks freeform values for key 'artwork_type' (in the MapComplete.osm.be theme 'Open Artwork Map')"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=architecture with a fixed text, namely 'Architecture' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "architecture"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=mural with a fixed text, namely 'Mural' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "mural"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=painting with a fixed text, namely 'Painting' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "painting"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=sculpture with a fixed text, namely 'Sculpture' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "sculpture"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=statue with a fixed text, namely 'Statue' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "statue"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=bust with a fixed text, namely 'Bust' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "bust"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=stone with a fixed text, namely 'Stone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "stone"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=installation with a fixed text, namely 'Installation' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "installation"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=graffiti with a fixed text, namely 'Graffiti' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "graffiti"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=relief with a fixed text, namely 'Relief' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "relief"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=azulejo with a fixed text, namely 'Azulejo (Spanish decorative tilework)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "azulejo"
},
{
"key": "artwork_type",
"description": "Layer 'Artworks' shows artwork_type=tilework with a fixed text, namely 'Tilework' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
"value": "tilework"
},
{
"key": "artist_name",
"description": "Layer 'Artworks' shows and asks freeform values for key 'artist_name' (in the MapComplete.osm.be theme 'Open Artwork Map')"
},
{
"key": "website",
"description": "Layer 'Artworks' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Open Artwork Map')"
},
{
"key": "wikidata",
"description": "Layer 'Artworks' shows and asks freeform values for key 'wikidata' (in the MapComplete.osm.be theme 'Open Artwork Map')"
}
]
}

View file

@ -1,197 +1,197 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Benches",
"description": "A map of benches",
"project_url": "https://mapcomplete.osm.be/benches",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/benches/bench_poi.svg",
"contact_name": "Pieter Vander Vennet, Florian Edelmann",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "amenity",
"description": "The MapComplete theme Benches has a layer Benches showing features with this tag",
"value": "bench"
"data_format": 1,
"project": {
"name": "MapComplete Benches",
"description": "A map of benches",
"project_url": "https://mapcomplete.osm.be/benches",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/benches/bench_poi.svg",
"contact_name": "Pieter Vander Vennet, Florian Edelmann",
"contact_email": "pietervdvn@posteo.net"
},
{
"key": "image",
"description": "The layer 'Benches 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 'Benches 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 'Benches 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 'Benches 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": "backrest",
"description": "Layer 'Benches' shows and asks freeform values for key 'backrest' (in the MapComplete.osm.be theme 'Benches')"
},
{
"key": "backrest",
"description": "Layer 'Benches' shows backrest=yes with a fixed text, namely 'Backrest: Yes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "yes"
},
{
"key": "backrest",
"description": "Layer 'Benches' shows backrest=no with a fixed text, namely 'Backrest: No' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "no"
},
{
"key": "seats",
"description": "Layer 'Benches' shows and asks freeform values for key 'seats' (in the MapComplete.osm.be theme 'Benches')"
},
{
"key": "material",
"description": "Layer 'Benches' shows and asks freeform values for key 'material' (in the MapComplete.osm.be theme 'Benches')"
},
{
"key": "material",
"description": "Layer 'Benches' shows material=wood with a fixed text, namely 'Material: wood' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "wood"
},
{
"key": "material",
"description": "Layer 'Benches' shows material=metal with a fixed text, namely 'Material: metal' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "metal"
},
{
"key": "material",
"description": "Layer 'Benches' shows material=stone with a fixed text, namely 'Material: stone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "stone"
},
{
"key": "material",
"description": "Layer 'Benches' shows material=concrete with a fixed text, namely 'Material: concrete' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "concrete"
},
{
"key": "material",
"description": "Layer 'Benches' shows material=plastic with a fixed text, namely 'Material: plastic' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "plastic"
},
{
"key": "material",
"description": "Layer 'Benches' shows material=steel with a fixed text, namely 'Material: steel' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "steel"
},
{
"key": "direction",
"description": "Layer 'Benches' shows and asks freeform values for key 'direction' (in the MapComplete.osm.be theme 'Benches')"
},
{
"key": "colour",
"description": "Layer 'Benches' shows and asks freeform values for key 'colour' (in the MapComplete.osm.be theme 'Benches')"
},
{
"key": "colour",
"description": "Layer 'Benches' shows colour=brown with a fixed text, namely 'Colour: brown' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "brown"
},
{
"key": "colour",
"description": "Layer 'Benches' shows colour=green with a fixed text, namely 'Colour: green' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "green"
},
{
"key": "colour",
"description": "Layer 'Benches' shows colour=gray with a fixed text, namely 'Colour: gray' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "gray"
},
{
"key": "colour",
"description": "Layer 'Benches' shows colour=white with a fixed text, namely 'Colour: white' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "white"
},
{
"key": "colour",
"description": "Layer 'Benches' shows colour=red with a fixed text, namely 'Colour: red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "red"
},
{
"key": "colour",
"description": "Layer 'Benches' shows colour=black with a fixed text, namely 'Colour: black' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "black"
},
{
"key": "colour",
"description": "Layer 'Benches' shows colour=blue with a fixed text, namely 'Colour: blue' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "blue"
},
{
"key": "colour",
"description": "Layer 'Benches' shows colour=yellow with a fixed text, namely 'Colour: yellow' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "yellow"
},
{
"key": "survey:date",
"description": "Layer 'Benches' shows and asks freeform values for key 'survey:date' (in the MapComplete.osm.be theme 'Benches')"
},
{
"key": "survey:date",
"description": "Layer 'Benches' shows survey:date= with a fixed text, namely 'Surveyed today!' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches') Picking this answer will delete the key survey:date.",
"value": ""
},
{
"key": "bench",
"description": "The MapComplete theme Benches has a layer Benches at public transport stops showing features with this tag",
"value": "yes"
},
{
"key": "bench",
"description": "The MapComplete theme Benches has a layer Benches at public transport stops showing features with this tag",
"value": "stand_up_bench"
},
{
"key": "image",
"description": "The layer 'Benches at public transport stops 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 'Benches at public transport stops 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 'Benches at public transport stops 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 'Benches at public transport stops 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 'Benches at public transport stops' shows values with key 'name' (in the MapComplete.osm.be theme 'Benches')"
},
{
"key": "bench",
"description": "Layer 'Benches at public transport stops' shows values with key 'bench' (in the MapComplete.osm.be theme 'Benches')"
},
{
"key": "leisure",
"description": "The MapComplete theme Benches has a layer Picnic tables showing features with this tag",
"value": "picnic_table"
},
{
"key": "material",
"description": "Layer 'Picnic tables' shows and asks freeform values for key 'material' (in the MapComplete.osm.be theme 'Benches')"
},
{
"key": "material",
"description": "Layer 'Picnic tables' shows material=wood with a fixed text, namely 'This is a wooden picnic table' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "wood"
},
{
"key": "material",
"description": "Layer 'Picnic tables' shows material=concrete with a fixed text, namely 'This is a concrete picnic table' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "concrete"
}
]
"tags": [
{
"key": "amenity",
"description": "The MapComplete theme Benches has a layer Benches showing features with this tag",
"value": "bench"
},
{
"key": "image",
"description": "The layer 'Benches 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 'Benches 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 'Benches 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 'Benches 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": "backrest",
"description": "Layer 'Benches' shows and asks freeform values for key 'backrest' (in the MapComplete.osm.be theme 'Benches')"
},
{
"key": "backrest",
"description": "Layer 'Benches' shows backrest=yes with a fixed text, namely 'Backrest: Yes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "yes"
},
{
"key": "backrest",
"description": "Layer 'Benches' shows backrest=no with a fixed text, namely 'Backrest: No' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "no"
},
{
"key": "seats",
"description": "Layer 'Benches' shows and asks freeform values for key 'seats' (in the MapComplete.osm.be theme 'Benches')"
},
{
"key": "material",
"description": "Layer 'Benches' shows and asks freeform values for key 'material' (in the MapComplete.osm.be theme 'Benches')"
},
{
"key": "material",
"description": "Layer 'Benches' shows material=wood with a fixed text, namely 'Material: wood' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "wood"
},
{
"key": "material",
"description": "Layer 'Benches' shows material=metal with a fixed text, namely 'Material: metal' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "metal"
},
{
"key": "material",
"description": "Layer 'Benches' shows material=stone with a fixed text, namely 'Material: stone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "stone"
},
{
"key": "material",
"description": "Layer 'Benches' shows material=concrete with a fixed text, namely 'Material: concrete' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "concrete"
},
{
"key": "material",
"description": "Layer 'Benches' shows material=plastic with a fixed text, namely 'Material: plastic' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "plastic"
},
{
"key": "material",
"description": "Layer 'Benches' shows material=steel with a fixed text, namely 'Material: steel' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "steel"
},
{
"key": "direction",
"description": "Layer 'Benches' shows and asks freeform values for key 'direction' (in the MapComplete.osm.be theme 'Benches')"
},
{
"key": "colour",
"description": "Layer 'Benches' shows and asks freeform values for key 'colour' (in the MapComplete.osm.be theme 'Benches')"
},
{
"key": "colour",
"description": "Layer 'Benches' shows colour=brown with a fixed text, namely 'Colour: brown' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "brown"
},
{
"key": "colour",
"description": "Layer 'Benches' shows colour=green with a fixed text, namely 'Colour: green' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "green"
},
{
"key": "colour",
"description": "Layer 'Benches' shows colour=gray with a fixed text, namely 'Colour: gray' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "gray"
},
{
"key": "colour",
"description": "Layer 'Benches' shows colour=white with a fixed text, namely 'Colour: white' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "white"
},
{
"key": "colour",
"description": "Layer 'Benches' shows colour=red with a fixed text, namely 'Colour: red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "red"
},
{
"key": "colour",
"description": "Layer 'Benches' shows colour=black with a fixed text, namely 'Colour: black' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "black"
},
{
"key": "colour",
"description": "Layer 'Benches' shows colour=blue with a fixed text, namely 'Colour: blue' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "blue"
},
{
"key": "colour",
"description": "Layer 'Benches' shows colour=yellow with a fixed text, namely 'Colour: yellow' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "yellow"
},
{
"key": "survey:date",
"description": "Layer 'Benches' shows and asks freeform values for key 'survey:date' (in the MapComplete.osm.be theme 'Benches')"
},
{
"key": "survey:date",
"description": "Layer 'Benches' shows survey:date= with a fixed text, namely 'Surveyed today!' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches') Picking this answer will delete the key survey:date.",
"value": ""
},
{
"key": "bench",
"description": "The MapComplete theme Benches has a layer Benches at public transport stops showing features with this tag",
"value": "yes"
},
{
"key": "bench",
"description": "The MapComplete theme Benches has a layer Benches at public transport stops showing features with this tag",
"value": "stand_up_bench"
},
{
"key": "image",
"description": "The layer 'Benches at public transport stops 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 'Benches at public transport stops 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 'Benches at public transport stops 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 'Benches at public transport stops 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 'Benches at public transport stops' shows values with key 'name' (in the MapComplete.osm.be theme 'Benches')"
},
{
"key": "bench",
"description": "Layer 'Benches at public transport stops' shows values with key 'bench' (in the MapComplete.osm.be theme 'Benches')"
},
{
"key": "leisure",
"description": "The MapComplete theme Benches has a layer Picnic tables showing features with this tag",
"value": "picnic_table"
},
{
"key": "material",
"description": "Layer 'Picnic tables' shows and asks freeform values for key 'material' (in the MapComplete.osm.be theme 'Benches')"
},
{
"key": "material",
"description": "Layer 'Picnic tables' shows material=wood with a fixed text, namely 'This is a wooden picnic table' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "wood"
},
{
"key": "material",
"description": "Layer 'Picnic tables' shows material=concrete with a fixed text, namely 'This is a concrete picnic table' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Benches')",
"value": "concrete"
}
]
}

View file

@ -1,98 +1,98 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Bicycle libraries",
"description": "A bicycle library is a place where bicycles can be lent, often for a small yearly fee",
"project_url": "https://mapcomplete.osm.be/bicyclelib",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/bicyclelib/logo.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "amenity",
"description": "The MapComplete theme Bicycle libraries has a layer Bicycle library showing features with this tag",
"value": "bicycle_library"
"data_format": 1,
"project": {
"name": "MapComplete Bicycle libraries",
"description": "A bicycle library is a place where bicycles can be lent, often for a small yearly fee",
"project_url": "https://mapcomplete.osm.be/bicyclelib",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/bicyclelib/logo.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
{
"key": "image",
"description": "The layer 'Bicycle library 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 'Bicycle library 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 'Bicycle library 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 'Bicycle library 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 'Bicycle library' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Bicycle libraries')"
},
{
"key": "website",
"description": "Layer 'Bicycle library' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Bicycle libraries')"
},
{
"key": "phone",
"description": "Layer 'Bicycle library' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Bicycle libraries')"
},
{
"key": "email",
"description": "Layer 'Bicycle library' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Bicycle libraries')"
},
{
"key": "opening_hours",
"description": "Layer 'Bicycle library' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Bicycle libraries')"
},
{
"key": "charge",
"description": "Layer 'Bicycle library' shows and asks freeform values for key 'charge' (in the MapComplete.osm.be theme 'Bicycle libraries')"
},
{
"key": "fee",
"description": "Layer 'Bicycle library' shows fee=no&charge= with a fixed text, namely 'Lending a bicycle is free' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle libraries')",
"value": "no"
},
{
"key": "charge",
"description": "Layer 'Bicycle library' shows fee=no&charge= with a fixed text, namely 'Lending a bicycle is free' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle libraries') Picking this answer will delete the key charge.",
"value": ""
},
{
"key": "fee",
"description": "Layer 'Bicycle library' shows fee=yes&charge=€20warranty + €20/year with a fixed text, namely 'Lending a bicycle costs €20/year and €20 warranty' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle libraries')",
"value": "yes"
},
{
"key": "charge",
"description": "Layer 'Bicycle library' shows fee=yes&charge=€20warranty + €20/year with a fixed text, namely 'Lending a bicycle costs €20/year and €20 warranty' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle libraries')",
"value": "€20warranty + €20/year"
},
{
"key": "bicycle_library:for",
"description": "Layer 'Bicycle library' shows bicycle_library:for=child with a fixed text, namely 'Bikes for children available' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle libraries')",
"value": "child"
},
{
"key": "bicycle_library:for",
"description": "Layer 'Bicycle library' shows bicycle_library:for=adult with a fixed text, namely 'Bikes for adult available' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle libraries')",
"value": "adult"
},
{
"key": "bicycle_library:for",
"description": "Layer 'Bicycle library' shows bicycle_library:for=disabled with a fixed text, namely 'Bikes for disabled persons available' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle libraries')",
"value": "disabled"
},
{
"key": "description",
"description": "Layer 'Bicycle library' shows and asks freeform values for key 'description' (in the MapComplete.osm.be theme 'Bicycle libraries')"
}
]
"tags": [
{
"key": "amenity",
"description": "The MapComplete theme Bicycle libraries has a layer Bicycle library showing features with this tag",
"value": "bicycle_library"
},
{
"key": "image",
"description": "The layer 'Bicycle library 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 'Bicycle library 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 'Bicycle library 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 'Bicycle library 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 'Bicycle library' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Bicycle libraries')"
},
{
"key": "website",
"description": "Layer 'Bicycle library' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Bicycle libraries')"
},
{
"key": "phone",
"description": "Layer 'Bicycle library' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Bicycle libraries')"
},
{
"key": "email",
"description": "Layer 'Bicycle library' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Bicycle libraries')"
},
{
"key": "opening_hours",
"description": "Layer 'Bicycle library' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Bicycle libraries')"
},
{
"key": "charge",
"description": "Layer 'Bicycle library' shows and asks freeform values for key 'charge' (in the MapComplete.osm.be theme 'Bicycle libraries')"
},
{
"key": "fee",
"description": "Layer 'Bicycle library' shows fee=no&charge= with a fixed text, namely 'Lending a bicycle is free' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle libraries')",
"value": "no"
},
{
"key": "charge",
"description": "Layer 'Bicycle library' shows fee=no&charge= with a fixed text, namely 'Lending a bicycle is free' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle libraries') Picking this answer will delete the key charge.",
"value": ""
},
{
"key": "fee",
"description": "Layer 'Bicycle library' shows fee=yes&charge=€20warranty + €20/year with a fixed text, namely 'Lending a bicycle costs €20/year and €20 warranty' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle libraries')",
"value": "yes"
},
{
"key": "charge",
"description": "Layer 'Bicycle library' shows fee=yes&charge=€20warranty + €20/year with a fixed text, namely 'Lending a bicycle costs €20/year and €20 warranty' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle libraries')",
"value": "€20warranty + €20/year"
},
{
"key": "bicycle_library:for",
"description": "Layer 'Bicycle library' shows bicycle_library:for=child with a fixed text, namely 'Bikes for children available' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle libraries')",
"value": "child"
},
{
"key": "bicycle_library:for",
"description": "Layer 'Bicycle library' shows bicycle_library:for=adult with a fixed text, namely 'Bikes for adult available' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle libraries')",
"value": "adult"
},
{
"key": "bicycle_library:for",
"description": "Layer 'Bicycle library' shows bicycle_library:for=disabled with a fixed text, namely 'Bikes for disabled persons available' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle libraries')",
"value": "disabled"
},
{
"key": "description",
"description": "Layer 'Bicycle library' shows and asks freeform values for key 'description' (in the MapComplete.osm.be theme 'Bicycle libraries')"
}
]
}

View file

@ -1,148 +1,148 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Open Bookcase Map",
"description": "A public bookcase is a small streetside cabinet, box, old phone boot or some other objects where books are stored",
"project_url": "https://mapcomplete.osm.be/bookcases",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/bookcases/bookcase.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "amenity",
"description": "The MapComplete theme Open Bookcase Map has a layer Bookcases showing features with this tag",
"value": "public_bookcase"
"data_format": 1,
"project": {
"name": "MapComplete Open Bookcase Map",
"description": "A public bookcase is a small streetside cabinet, box, old phone boot or some other objects where books are stored",
"project_url": "https://mapcomplete.osm.be/bookcases",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/bookcases/bookcase.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
{
"key": "image",
"description": "The layer 'Bookcases 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 'Bookcases 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 'Bookcases 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 'Bookcases 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 'Bookcases' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Open Bookcase Map')"
},
{
"key": "noname",
"description": "Layer 'Bookcases' shows noname=yes&name= with a fixed text, namely 'This bookcase doesn't have a name' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "yes"
},
{
"key": "name",
"description": "Layer 'Bookcases' shows noname=yes&name= with a fixed text, namely 'This bookcase doesn't have a name' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map') Picking this answer will delete the key name.",
"value": ""
},
{
"key": "capacity",
"description": "Layer 'Bookcases' shows and asks freeform values for key 'capacity' (in the MapComplete.osm.be theme 'Open Bookcase Map')"
},
{
"key": "books",
"description": "Layer 'Bookcases' shows books=children with a fixed text, namely 'Mostly children books' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "children"
},
{
"key": "books",
"description": "Layer 'Bookcases' shows books=adults with a fixed text, namely 'Mostly books for adults' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "adults"
},
{
"key": "books",
"description": "Layer 'Bookcases' shows books=children;adults with a fixed text, namely 'Both books for kids and adults' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "children;adults"
},
{
"key": "indoor",
"description": "Layer 'Bookcases' shows indoor=yes with a fixed text, namely 'This bookcase is located indoors' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "yes"
},
{
"key": "indoor",
"description": "Layer 'Bookcases' shows indoor=no with a fixed text, namely 'This bookcase is located outdoors' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "no"
},
{
"key": "indoor",
"description": "Layer 'Bookcases' shows indoor= with a fixed text, namely 'This bookcase is located outdoors' (in the MapComplete.osm.be theme 'Open Bookcase Map') Picking this answer will delete the key indoor.",
"value": ""
},
{
"key": "access",
"description": "Layer 'Bookcases' shows access=yes with a fixed text, namely 'Publicly accessible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "yes"
},
{
"key": "access",
"description": "Layer 'Bookcases' shows access=customers with a fixed text, namely 'Only accessible to customers' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "customers"
},
{
"key": "operator",
"description": "Layer 'Bookcases' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Open Bookcase Map')"
},
{
"key": "brand",
"description": "Layer 'Bookcases' shows and asks freeform values for key 'brand' (in the MapComplete.osm.be theme 'Open Bookcase Map')"
},
{
"key": "brand",
"description": "Layer 'Bookcases' shows brand=Little Free Library&nobrand= with a fixed text, namely 'Part of the network 'Little Free Library'' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "Little Free Library"
},
{
"key": "nobrand",
"description": "Layer 'Bookcases' shows brand=Little Free Library&nobrand= with a fixed text, namely 'Part of the network 'Little Free Library'' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map') Picking this answer will delete the key nobrand.",
"value": ""
},
{
"key": "nobrand",
"description": "Layer 'Bookcases' shows nobrand=yes&brand= with a fixed text, namely 'This public bookcase is not part of a bigger network' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "yes"
},
{
"key": "brand",
"description": "Layer 'Bookcases' shows nobrand=yes&brand= with a fixed text, namely 'This public bookcase is not part of a bigger network' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map') Picking this answer will delete the key brand.",
"value": ""
},
{
"key": "ref",
"description": "Layer 'Bookcases' shows and asks freeform values for key 'ref' (in the MapComplete.osm.be theme 'Open Bookcase Map')"
},
{
"key": "nobrand",
"description": "Layer 'Bookcases' shows nobrand=yes&brand=&ref= with a fixed text, namely 'This bookcase is not part of a bigger network' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "yes"
},
{
"key": "brand",
"description": "Layer 'Bookcases' shows nobrand=yes&brand=&ref= with a fixed text, namely 'This bookcase is not part of a bigger network' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map') Picking this answer will delete the key brand.",
"value": ""
},
{
"key": "ref",
"description": "Layer 'Bookcases' shows nobrand=yes&brand=&ref= with a fixed text, namely 'This bookcase is not part of a bigger network' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map') Picking this answer will delete the key ref.",
"value": ""
},
{
"key": "start_date",
"description": "Layer 'Bookcases' shows and asks freeform values for key 'start_date' (in the MapComplete.osm.be theme 'Open Bookcase Map')"
},
{
"key": "website",
"description": "Layer 'Bookcases' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Open Bookcase Map')"
}
]
"tags": [
{
"key": "amenity",
"description": "The MapComplete theme Open Bookcase Map has a layer Bookcases showing features with this tag",
"value": "public_bookcase"
},
{
"key": "image",
"description": "The layer 'Bookcases 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 'Bookcases 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 'Bookcases 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 'Bookcases 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 'Bookcases' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Open Bookcase Map')"
},
{
"key": "noname",
"description": "Layer 'Bookcases' shows noname=yes&name= with a fixed text, namely 'This bookcase doesn't have a name' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "yes"
},
{
"key": "name",
"description": "Layer 'Bookcases' shows noname=yes&name= with a fixed text, namely 'This bookcase doesn't have a name' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map') Picking this answer will delete the key name.",
"value": ""
},
{
"key": "capacity",
"description": "Layer 'Bookcases' shows and asks freeform values for key 'capacity' (in the MapComplete.osm.be theme 'Open Bookcase Map')"
},
{
"key": "books",
"description": "Layer 'Bookcases' shows books=children with a fixed text, namely 'Mostly children books' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "children"
},
{
"key": "books",
"description": "Layer 'Bookcases' shows books=adults with a fixed text, namely 'Mostly books for adults' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "adults"
},
{
"key": "books",
"description": "Layer 'Bookcases' shows books=children;adults with a fixed text, namely 'Both books for kids and adults' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "children;adults"
},
{
"key": "indoor",
"description": "Layer 'Bookcases' shows indoor=yes with a fixed text, namely 'This bookcase is located indoors' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "yes"
},
{
"key": "indoor",
"description": "Layer 'Bookcases' shows indoor=no with a fixed text, namely 'This bookcase is located outdoors' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "no"
},
{
"key": "indoor",
"description": "Layer 'Bookcases' shows indoor= with a fixed text, namely 'This bookcase is located outdoors' (in the MapComplete.osm.be theme 'Open Bookcase Map') Picking this answer will delete the key indoor.",
"value": ""
},
{
"key": "access",
"description": "Layer 'Bookcases' shows access=yes with a fixed text, namely 'Publicly accessible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "yes"
},
{
"key": "access",
"description": "Layer 'Bookcases' shows access=customers with a fixed text, namely 'Only accessible to customers' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "customers"
},
{
"key": "operator",
"description": "Layer 'Bookcases' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Open Bookcase Map')"
},
{
"key": "brand",
"description": "Layer 'Bookcases' shows and asks freeform values for key 'brand' (in the MapComplete.osm.be theme 'Open Bookcase Map')"
},
{
"key": "brand",
"description": "Layer 'Bookcases' shows brand=Little Free Library&nobrand= with a fixed text, namely 'Part of the network 'Little Free Library'' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "Little Free Library"
},
{
"key": "nobrand",
"description": "Layer 'Bookcases' shows brand=Little Free Library&nobrand= with a fixed text, namely 'Part of the network 'Little Free Library'' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map') Picking this answer will delete the key nobrand.",
"value": ""
},
{
"key": "nobrand",
"description": "Layer 'Bookcases' shows nobrand=yes&brand= with a fixed text, namely 'This public bookcase is not part of a bigger network' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "yes"
},
{
"key": "brand",
"description": "Layer 'Bookcases' shows nobrand=yes&brand= with a fixed text, namely 'This public bookcase is not part of a bigger network' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map') Picking this answer will delete the key brand.",
"value": ""
},
{
"key": "ref",
"description": "Layer 'Bookcases' shows and asks freeform values for key 'ref' (in the MapComplete.osm.be theme 'Open Bookcase Map')"
},
{
"key": "nobrand",
"description": "Layer 'Bookcases' shows nobrand=yes&brand=&ref= with a fixed text, namely 'This bookcase is not part of a bigger network' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map')",
"value": "yes"
},
{
"key": "brand",
"description": "Layer 'Bookcases' shows nobrand=yes&brand=&ref= with a fixed text, namely 'This bookcase is not part of a bigger network' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map') Picking this answer will delete the key brand.",
"value": ""
},
{
"key": "ref",
"description": "Layer 'Bookcases' shows nobrand=yes&brand=&ref= with a fixed text, namely 'This bookcase is not part of a bigger network' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Bookcase Map') Picking this answer will delete the key ref.",
"value": ""
},
{
"key": "start_date",
"description": "Layer 'Bookcases' shows and asks freeform values for key 'start_date' (in the MapComplete.osm.be theme 'Open Bookcase Map')"
},
{
"key": "website",
"description": "Layer 'Bookcases' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Open Bookcase Map')"
}
]
}

View file

@ -1,257 +1,257 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Campersites",
"description": "Find sites to spend the night with your camper",
"project_url": "https://mapcomplete.osm.be/campersite",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/campersite/caravan.svg",
"contact_name": "Pieter Vander Vennet, joost schouppe",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "tourism",
"description": "The MapComplete theme Campersites has a layer Camper sites showing features with this tag",
"value": "caravan_site"
"data_format": 1,
"project": {
"name": "MapComplete Campersites",
"description": "Find sites to spend the night with your camper",
"project_url": "https://mapcomplete.osm.be/campersite",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/campersite/caravan.svg",
"contact_name": "Pieter Vander Vennet, joost schouppe",
"contact_email": "pietervdvn@posteo.net"
},
{
"key": "image",
"description": "The layer 'Camper sites 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 'Camper sites 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 'Camper sites 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 'Camper sites 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 'Camper sites' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Campersites')"
},
{
"key": "fee",
"description": "Layer 'Camper sites' shows fee=yes with a fixed text, namely 'You need to pay for use' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "fee",
"description": "Layer 'Camper sites' shows fee=no&charge= with a fixed text, namely 'Can be used for free' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "charge",
"description": "Layer 'Camper sites' shows fee=no&charge= with a fixed text, namely 'Can be used for free' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites') Picking this answer will delete the key charge.",
"value": ""
},
{
"key": "fee",
"description": "Layer 'Camper sites' shows fee=no with a fixed text, namely 'Can be used for free' (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "charge",
"description": "Layer 'Camper sites' shows and asks freeform values for key 'charge' (in the MapComplete.osm.be theme 'Campersites')"
},
{
"key": "sanitary_dump_station",
"description": "Layer 'Camper sites' shows sanitary_dump_station=yes with a fixed text, namely 'This place has a sanitary dump station' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "sanitary_dump_station",
"description": "Layer 'Camper sites' shows sanitary_dump_station=no with a fixed text, namely 'This place does not have a sanitary dump station' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "capacity",
"description": "Layer 'Camper sites' shows and asks freeform values for key 'capacity' (in the MapComplete.osm.be theme 'Campersites')"
},
{
"key": "internet_access",
"description": "Layer 'Camper sites' shows internet_access=yes with a fixed text, namely 'There is internet access' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "internet_access",
"description": "Layer 'Camper sites' shows internet_access=wifi|internet_access=wlan with a fixed text, namely 'There is internet access' (in the MapComplete.osm.be theme 'Campersites')",
"value": "wifi"
},
{
"key": "internet_access",
"description": "Layer 'Camper sites' shows internet_access=wifi|internet_access=wlan with a fixed text, namely 'There is internet access' (in the MapComplete.osm.be theme 'Campersites')",
"value": "wlan"
},
{
"key": "internet_access",
"description": "Layer 'Camper sites' shows internet_access=no with a fixed text, namely 'There is no internet access' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "internet_access:fee",
"description": "Layer 'Camper sites' shows internet_access:fee=yes with a fixed text, namely 'You need to pay extra for internet access' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "internet_access:fee",
"description": "Layer 'Camper sites' shows internet_access:fee=no with a fixed text, namely 'You do not need to pay extra for internet access' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "toilets",
"description": "Layer 'Camper sites' shows toilets=yes with a fixed text, namely 'This place has toilets' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "toilets",
"description": "Layer 'Camper sites' shows toilets=no with a fixed text, namely 'This place does not have toilets' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "website",
"description": "Layer 'Camper sites' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Campersites')"
},
{
"key": "permanent_camping",
"description": "Layer 'Camper sites' shows permanent_camping=yes with a fixed text, namely 'Yes, there are some spots for long term rental, but you can also stay on a daily basis' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "permanent_camping",
"description": "Layer 'Camper sites' shows permanent_camping=no with a fixed text, namely 'No, there are no permanent guests here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "permanent_camping",
"description": "Layer 'Camper sites' shows permanent_camping=only with a fixed text, namely 'It is only possible to stay here if you have a long term contract(this place will disappear from this map if you choose this)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "only"
},
{
"key": "description",
"description": "Layer 'Camper sites' shows and asks freeform values for key 'description' (in the MapComplete.osm.be theme 'Campersites')"
},
{
"key": "operator",
"description": "Layer 'Camper sites' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Campersites')"
},
{
"key": "power_supply",
"description": "Layer 'Camper sites' shows power_supply=yes with a fixed text, namely 'This place has a power supply' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "power_supply",
"description": "Layer 'Camper sites' shows power_supply=no with a fixed text, namely 'This place does not have power supply' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "amenity",
"description": "The MapComplete theme Campersites has a layer Sanitary dump stations showing features with this tag",
"value": "sanitary_dump_station"
},
{
"key": "image",
"description": "The layer 'Sanitary dump stations 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 'Sanitary dump stations 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 'Sanitary dump stations 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 'Sanitary dump stations 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": "fee",
"description": "Layer 'Sanitary dump stations' shows fee=yes with a fixed text, namely 'You need to pay for use' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "fee",
"description": "Layer 'Sanitary dump stations' shows fee=no with a fixed text, namely 'Can be used for free' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "charge",
"description": "Layer 'Sanitary dump stations' shows and asks freeform values for key 'charge' (in the MapComplete.osm.be theme 'Campersites')"
},
{
"key": "water_point",
"description": "Layer 'Sanitary dump stations' shows water_point=yes with a fixed text, namely 'This place has a water point' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "water_point",
"description": "Layer 'Sanitary dump stations' shows water_point=no with a fixed text, namely 'This place does not have a water point' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "sanitary_dump_station:grey_water",
"description": "Layer 'Sanitary dump stations' shows sanitary_dump_station:grey_water=yes with a fixed text, namely 'You can dispose of grey water here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "sanitary_dump_station:grey_water",
"description": "Layer 'Sanitary dump stations' shows sanitary_dump_station:grey_water=no with a fixed text, namely 'You cannot dispose of gray water here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "sanitary_dump_station:chemical_toilet",
"description": "Layer 'Sanitary dump stations' shows sanitary_dump_station:chemical_toilet=yes with a fixed text, namely 'You can dispose of chemical toilet waste here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "sanitary_dump_station:chemical_toilet",
"description": "Layer 'Sanitary dump stations' shows sanitary_dump_station:chemical_toilet=no with a fixed text, namely 'You cannot dispose of chemical toilet waste here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "access",
"description": "Layer 'Sanitary dump stations' shows access=network with a fixed text, namely 'You need a network key/code to use this' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "network"
},
{
"key": "access",
"description": "Layer 'Sanitary dump stations' shows access=customers with a fixed text, namely 'You need to be a customer of camping/campersite to use this place' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "customers"
},
{
"key": "access",
"description": "Layer 'Sanitary dump stations' shows access=public with a fixed text, namely 'Anyone can use this dump station' (in the MapComplete.osm.be theme 'Campersites')",
"value": "public"
},
{
"key": "access",
"description": "Layer 'Sanitary dump stations' shows access=yes with a fixed text, namely 'Anyone can use this dump station' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "network",
"description": "Layer 'Sanitary dump stations' shows and asks freeform values for key 'network' (in the MapComplete.osm.be theme 'Campersites')"
},
{
"key": "operator",
"description": "Layer 'Sanitary dump stations' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Campersites')"
},
{
"key": "power_supply",
"description": "Layer 'Sanitary dump stations' shows power_supply=yes with a fixed text, namely 'This place has a power supply' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "power_supply",
"description": "Layer 'Sanitary dump stations' shows power_supply=no with a fixed text, namely 'This place does not have power supply' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
}
]
"tags": [
{
"key": "tourism",
"description": "The MapComplete theme Campersites has a layer Camper sites showing features with this tag",
"value": "caravan_site"
},
{
"key": "image",
"description": "The layer 'Camper sites 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 'Camper sites 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 'Camper sites 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 'Camper sites 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 'Camper sites' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Campersites')"
},
{
"key": "fee",
"description": "Layer 'Camper sites' shows fee=yes with a fixed text, namely 'You need to pay for use' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "fee",
"description": "Layer 'Camper sites' shows fee=no&charge= with a fixed text, namely 'Can be used for free' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "charge",
"description": "Layer 'Camper sites' shows fee=no&charge= with a fixed text, namely 'Can be used for free' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites') Picking this answer will delete the key charge.",
"value": ""
},
{
"key": "fee",
"description": "Layer 'Camper sites' shows fee=no with a fixed text, namely 'Can be used for free' (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "charge",
"description": "Layer 'Camper sites' shows and asks freeform values for key 'charge' (in the MapComplete.osm.be theme 'Campersites')"
},
{
"key": "sanitary_dump_station",
"description": "Layer 'Camper sites' shows sanitary_dump_station=yes with a fixed text, namely 'This place has a sanitary dump station' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "sanitary_dump_station",
"description": "Layer 'Camper sites' shows sanitary_dump_station=no with a fixed text, namely 'This place does not have a sanitary dump station' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "capacity",
"description": "Layer 'Camper sites' shows and asks freeform values for key 'capacity' (in the MapComplete.osm.be theme 'Campersites')"
},
{
"key": "internet_access",
"description": "Layer 'Camper sites' shows internet_access=yes with a fixed text, namely 'There is internet access' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "internet_access",
"description": "Layer 'Camper sites' shows internet_access=wifi|internet_access=wlan with a fixed text, namely 'There is internet access' (in the MapComplete.osm.be theme 'Campersites')",
"value": "wifi"
},
{
"key": "internet_access",
"description": "Layer 'Camper sites' shows internet_access=wifi|internet_access=wlan with a fixed text, namely 'There is internet access' (in the MapComplete.osm.be theme 'Campersites')",
"value": "wlan"
},
{
"key": "internet_access",
"description": "Layer 'Camper sites' shows internet_access=no with a fixed text, namely 'There is no internet access' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "internet_access:fee",
"description": "Layer 'Camper sites' shows internet_access:fee=yes with a fixed text, namely 'You need to pay extra for internet access' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "internet_access:fee",
"description": "Layer 'Camper sites' shows internet_access:fee=no with a fixed text, namely 'You do not need to pay extra for internet access' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "toilets",
"description": "Layer 'Camper sites' shows toilets=yes with a fixed text, namely 'This place has toilets' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "toilets",
"description": "Layer 'Camper sites' shows toilets=no with a fixed text, namely 'This place does not have toilets' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "website",
"description": "Layer 'Camper sites' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Campersites')"
},
{
"key": "permanent_camping",
"description": "Layer 'Camper sites' shows permanent_camping=yes with a fixed text, namely 'Yes, there are some spots for long term rental, but you can also stay on a daily basis' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "permanent_camping",
"description": "Layer 'Camper sites' shows permanent_camping=no with a fixed text, namely 'No, there are no permanent guests here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "permanent_camping",
"description": "Layer 'Camper sites' shows permanent_camping=only with a fixed text, namely 'It is only possible to stay here if you have a long term contract(this place will disappear from this map if you choose this)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "only"
},
{
"key": "description",
"description": "Layer 'Camper sites' shows and asks freeform values for key 'description' (in the MapComplete.osm.be theme 'Campersites')"
},
{
"key": "operator",
"description": "Layer 'Camper sites' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Campersites')"
},
{
"key": "power_supply",
"description": "Layer 'Camper sites' shows power_supply=yes with a fixed text, namely 'This place has a power supply' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "power_supply",
"description": "Layer 'Camper sites' shows power_supply=no with a fixed text, namely 'This place does not have power supply' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "amenity",
"description": "The MapComplete theme Campersites has a layer Sanitary dump stations showing features with this tag",
"value": "sanitary_dump_station"
},
{
"key": "image",
"description": "The layer 'Sanitary dump stations 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 'Sanitary dump stations 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 'Sanitary dump stations 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 'Sanitary dump stations 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": "fee",
"description": "Layer 'Sanitary dump stations' shows fee=yes with a fixed text, namely 'You need to pay for use' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "fee",
"description": "Layer 'Sanitary dump stations' shows fee=no with a fixed text, namely 'Can be used for free' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "charge",
"description": "Layer 'Sanitary dump stations' shows and asks freeform values for key 'charge' (in the MapComplete.osm.be theme 'Campersites')"
},
{
"key": "water_point",
"description": "Layer 'Sanitary dump stations' shows water_point=yes with a fixed text, namely 'This place has a water point' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "water_point",
"description": "Layer 'Sanitary dump stations' shows water_point=no with a fixed text, namely 'This place does not have a water point' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "sanitary_dump_station:grey_water",
"description": "Layer 'Sanitary dump stations' shows sanitary_dump_station:grey_water=yes with a fixed text, namely 'You can dispose of grey water here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "sanitary_dump_station:grey_water",
"description": "Layer 'Sanitary dump stations' shows sanitary_dump_station:grey_water=no with a fixed text, namely 'You cannot dispose of gray water here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "sanitary_dump_station:chemical_toilet",
"description": "Layer 'Sanitary dump stations' shows sanitary_dump_station:chemical_toilet=yes with a fixed text, namely 'You can dispose of chemical toilet waste here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "sanitary_dump_station:chemical_toilet",
"description": "Layer 'Sanitary dump stations' shows sanitary_dump_station:chemical_toilet=no with a fixed text, namely 'You cannot dispose of chemical toilet waste here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
},
{
"key": "access",
"description": "Layer 'Sanitary dump stations' shows access=network with a fixed text, namely 'You need a network key/code to use this' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "network"
},
{
"key": "access",
"description": "Layer 'Sanitary dump stations' shows access=customers with a fixed text, namely 'You need to be a customer of camping/campersite to use this place' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "customers"
},
{
"key": "access",
"description": "Layer 'Sanitary dump stations' shows access=public with a fixed text, namely 'Anyone can use this dump station' (in the MapComplete.osm.be theme 'Campersites')",
"value": "public"
},
{
"key": "access",
"description": "Layer 'Sanitary dump stations' shows access=yes with a fixed text, namely 'Anyone can use this dump station' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "network",
"description": "Layer 'Sanitary dump stations' shows and asks freeform values for key 'network' (in the MapComplete.osm.be theme 'Campersites')"
},
{
"key": "operator",
"description": "Layer 'Sanitary dump stations' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Campersites')"
},
{
"key": "power_supply",
"description": "Layer 'Sanitary dump stations' shows power_supply=yes with a fixed text, namely 'This place has a power supply' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "yes"
},
{
"key": "power_supply",
"description": "Layer 'Sanitary dump stations' shows power_supply=no with a fixed text, namely 'This place does not have power supply' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Campersites')",
"value": "no"
}
]
}

View file

@ -1,176 +1,176 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Charging stations",
"description": "A worldwide map of charging stations",
"project_url": "https://mapcomplete.osm.be/charging_stations",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/charging_stations/logo.svg",
"contact_name": "Pieter Vander Vennet, ",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "amenity",
"description": "The MapComplete theme Charging stations has a layer Charging stations showing features with this tag",
"value": "charging_station"
"data_format": 1,
"project": {
"name": "MapComplete Charging stations",
"description": "A worldwide map of charging stations",
"project_url": "https://mapcomplete.osm.be/charging_stations",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/charging_stations/logo.svg",
"contact_name": "Pieter Vander Vennet, ",
"contact_email": "pietervdvn@posteo.net"
},
{
"key": "image",
"description": "The layer 'Charging stations 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 'Charging stations 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 'Charging stations 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 'Charging stations 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": "motorcar",
"description": "Layer 'Charging stations' shows motorcar=yes&bicycle=yes with a fixed text, namely 'This is a charging station for <b>both bicycles and cars</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "bicycle",
"description": "Layer 'Charging stations' shows motorcar=yes&bicycle=yes with a fixed text, namely 'This is a charging station for <b>both bicycles and cars</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "motorcar",
"description": "Layer 'Charging stations' shows motorcar=&car=&bicycle=yes with a fixed text, namely 'This is a charging station exclusively for <b>bicycles</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations') Picking this answer will delete the key motorcar.",
"value": ""
},
{
"key": "car",
"description": "Layer 'Charging stations' shows motorcar=&car=&bicycle=yes with a fixed text, namely 'This is a charging station exclusively for <b>bicycles</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations') Picking this answer will delete the key car.",
"value": ""
},
{
"key": "bicycle",
"description": "Layer 'Charging stations' shows motorcar=&car=&bicycle=yes with a fixed text, namely 'This is a charging station exclusively for <b>bicycles</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "motorcar",
"description": "Layer 'Charging stations' shows motorcar=yes&car=&bicycle= with a fixed text, namely 'This is a charging station exclusively for <b>electric cars and similar vehicles</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "car",
"description": "Layer 'Charging stations' shows motorcar=yes&car=&bicycle= with a fixed text, namely 'This is a charging station exclusively for <b>electric cars and similar vehicles</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations') Picking this answer will delete the key car.",
"value": ""
},
{
"key": "bicycle",
"description": "Layer 'Charging stations' shows motorcar=yes&car=&bicycle= with a fixed text, namely 'This is a charging station exclusively for <b>electric cars and similar vehicles</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations') Picking this answer will delete the key bicycle.",
"value": ""
},
{
"key": "car",
"description": "Layer 'Charging stations' shows car=yes&bicycle= with a fixed text, namely 'This is a charging station exclusively for <b>electric cars</b>' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "bicycle",
"description": "Layer 'Charging stations' shows car=yes&bicycle= with a fixed text, namely 'This is a charging station exclusively for <b>electric cars</b>' (in the MapComplete.osm.be theme 'Charging stations') Picking this answer will delete the key bicycle.",
"value": ""
},
{
"key": "car",
"description": "Layer 'Charging stations' shows car=yes&bicycle=yes with a fixed text, namely 'This is a charging station for <b>both electric cars and bicycles</b>' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "bicycle",
"description": "Layer 'Charging stations' shows car=yes&bicycle=yes with a fixed text, namely 'This is a charging station for <b>both electric cars and bicycles</b>' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "capacity",
"description": "Layer 'Charging stations' shows and asks freeform values for key 'capacity' (in the MapComplete.osm.be theme 'Charging stations')"
},
{
"key": "authentication:membership_card",
"description": "Layer 'Charging stations' shows authentication:membership_card=yes with a fixed text, namely 'Authentication by a membership card' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "authentication:app",
"description": "Layer 'Charging stations' shows authentication:app=yes with a fixed text, namely 'Authentication by an app' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "authentication:phone_call",
"description": "Layer 'Charging stations' shows authentication:phone_call=yes with a fixed text, namely 'Authentication via phone call is available' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "authentication:short_message",
"description": "Layer 'Charging stations' shows authentication:short_message=yes with a fixed text, namely 'Authentication via phone call is available' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "authentication:nfc",
"description": "Layer 'Charging stations' shows authentication:nfc=yes with a fixed text, namely 'Authentication via NFC is available' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "authentication:money_card",
"description": "Layer 'Charging stations' shows authentication:money_card=yes with a fixed text, namely 'Authentication via Money Card is available' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "authentication:debig",
"description": "Layer 'Charging stations' shows authentication:debig=yes with a fixed text, namely 'Authentication via debit card is available' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "authentication:none",
"description": "Layer 'Charging stations' shows authentication:none=yes with a fixed text, namely 'No authentication is needed' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "authentication:phone_call:number",
"description": "Layer 'Charging stations' shows values with key 'authentication:phone_call:number' (in the MapComplete.osm.be theme 'Charging stations')"
},
{
"key": "opening_hours",
"description": "Layer 'Charging stations' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Charging stations')"
},
{
"key": "opening_hours",
"description": "Layer 'Charging stations' 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 'Charging stations')",
"value": "24/7"
},
{
"key": "network",
"description": "Layer 'Charging stations' shows and asks freeform values for key 'network' (in the MapComplete.osm.be theme 'Charging stations')"
},
{
"key": "no:network",
"description": "Layer 'Charging stations' shows no:network=yes with a fixed text, namely 'Not part of a bigger network' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "network",
"description": "Layer 'Charging stations' shows network=AeroVironment with a fixed text, namely 'AeroVironment' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')",
"value": "AeroVironment"
},
{
"key": "network",
"description": "Layer 'Charging stations' shows network=Blink with a fixed text, namely 'Blink' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')",
"value": "Blink"
},
{
"key": "network",
"description": "Layer 'Charging stations' shows network=eVgo with a fixed text, namely 'eVgo' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')",
"value": "eVgo"
}
]
"tags": [
{
"key": "amenity",
"description": "The MapComplete theme Charging stations has a layer Charging stations showing features with this tag",
"value": "charging_station"
},
{
"key": "image",
"description": "The layer 'Charging stations 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 'Charging stations 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 'Charging stations 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 'Charging stations 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": "motorcar",
"description": "Layer 'Charging stations' shows motorcar=yes&bicycle=yes with a fixed text, namely 'This is a charging station for <b>both bicycles and cars</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "bicycle",
"description": "Layer 'Charging stations' shows motorcar=yes&bicycle=yes with a fixed text, namely 'This is a charging station for <b>both bicycles and cars</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "motorcar",
"description": "Layer 'Charging stations' shows motorcar=&car=&bicycle=yes with a fixed text, namely 'This is a charging station exclusively for <b>bicycles</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations') Picking this answer will delete the key motorcar.",
"value": ""
},
{
"key": "car",
"description": "Layer 'Charging stations' shows motorcar=&car=&bicycle=yes with a fixed text, namely 'This is a charging station exclusively for <b>bicycles</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations') Picking this answer will delete the key car.",
"value": ""
},
{
"key": "bicycle",
"description": "Layer 'Charging stations' shows motorcar=&car=&bicycle=yes with a fixed text, namely 'This is a charging station exclusively for <b>bicycles</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "motorcar",
"description": "Layer 'Charging stations' shows motorcar=yes&car=&bicycle= with a fixed text, namely 'This is a charging station exclusively for <b>electric cars and similar vehicles</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "car",
"description": "Layer 'Charging stations' shows motorcar=yes&car=&bicycle= with a fixed text, namely 'This is a charging station exclusively for <b>electric cars and similar vehicles</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations') Picking this answer will delete the key car.",
"value": ""
},
{
"key": "bicycle",
"description": "Layer 'Charging stations' shows motorcar=yes&car=&bicycle= with a fixed text, namely 'This is a charging station exclusively for <b>electric cars and similar vehicles</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations') Picking this answer will delete the key bicycle.",
"value": ""
},
{
"key": "car",
"description": "Layer 'Charging stations' shows car=yes&bicycle= with a fixed text, namely 'This is a charging station exclusively for <b>electric cars</b>' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "bicycle",
"description": "Layer 'Charging stations' shows car=yes&bicycle= with a fixed text, namely 'This is a charging station exclusively for <b>electric cars</b>' (in the MapComplete.osm.be theme 'Charging stations') Picking this answer will delete the key bicycle.",
"value": ""
},
{
"key": "car",
"description": "Layer 'Charging stations' shows car=yes&bicycle=yes with a fixed text, namely 'This is a charging station for <b>both electric cars and bicycles</b>' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "bicycle",
"description": "Layer 'Charging stations' shows car=yes&bicycle=yes with a fixed text, namely 'This is a charging station for <b>both electric cars and bicycles</b>' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "capacity",
"description": "Layer 'Charging stations' shows and asks freeform values for key 'capacity' (in the MapComplete.osm.be theme 'Charging stations')"
},
{
"key": "authentication:membership_card",
"description": "Layer 'Charging stations' shows authentication:membership_card=yes with a fixed text, namely 'Authentication by a membership card' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "authentication:app",
"description": "Layer 'Charging stations' shows authentication:app=yes with a fixed text, namely 'Authentication by an app' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "authentication:phone_call",
"description": "Layer 'Charging stations' shows authentication:phone_call=yes with a fixed text, namely 'Authentication via phone call is available' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "authentication:short_message",
"description": "Layer 'Charging stations' shows authentication:short_message=yes with a fixed text, namely 'Authentication via phone call is available' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "authentication:nfc",
"description": "Layer 'Charging stations' shows authentication:nfc=yes with a fixed text, namely 'Authentication via NFC is available' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "authentication:money_card",
"description": "Layer 'Charging stations' shows authentication:money_card=yes with a fixed text, namely 'Authentication via Money Card is available' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "authentication:debig",
"description": "Layer 'Charging stations' shows authentication:debig=yes with a fixed text, namely 'Authentication via debit card is available' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "authentication:none",
"description": "Layer 'Charging stations' shows authentication:none=yes with a fixed text, namely 'No authentication is needed' (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "authentication:phone_call:number",
"description": "Layer 'Charging stations' shows values with key 'authentication:phone_call:number' (in the MapComplete.osm.be theme 'Charging stations')"
},
{
"key": "opening_hours",
"description": "Layer 'Charging stations' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Charging stations')"
},
{
"key": "opening_hours",
"description": "Layer 'Charging stations' 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 'Charging stations')",
"value": "24/7"
},
{
"key": "network",
"description": "Layer 'Charging stations' shows and asks freeform values for key 'network' (in the MapComplete.osm.be theme 'Charging stations')"
},
{
"key": "no:network",
"description": "Layer 'Charging stations' shows no:network=yes with a fixed text, namely 'Not part of a bigger network' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')",
"value": "yes"
},
{
"key": "network",
"description": "Layer 'Charging stations' shows network=AeroVironment with a fixed text, namely 'AeroVironment' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')",
"value": "AeroVironment"
},
{
"key": "network",
"description": "Layer 'Charging stations' shows network=Blink with a fixed text, namely 'Blink' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')",
"value": "Blink"
},
{
"key": "network",
"description": "Layer 'Charging stations' shows network=eVgo with a fixed text, namely 'eVgo' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')",
"value": "eVgo"
}
]
}

File diff suppressed because it is too large Load diff

View file

@ -1,264 +1,264 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Cyclestreets",
"description": "A map of cyclestreets",
"project_url": "https://mapcomplete.osm.be/cyclestreets",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/cyclestreets/F111.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "cyclestreet",
"description": "The MapComplete theme Cyclestreets has a layer Cyclestreets showing features with this tag",
"value": "yes"
"data_format": 1,
"project": {
"name": "MapComplete Cyclestreets",
"description": "A map of cyclestreets",
"project_url": "https://mapcomplete.osm.be/cyclestreets",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/cyclestreets/F111.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
{
"key": "image",
"description": "The layer 'Cyclestreets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "mapillary",
"description": "The layer 'Cyclestreets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "wikidata",
"description": "The layer 'Cyclestreets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "wikipedia",
"description": "The layer 'Cyclestreets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "cyclestreet",
"description": "Layer 'Cyclestreets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "maxspeed",
"description": "Layer 'Cyclestreets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "30"
},
{
"key": "overtaking:motor_vehicle",
"description": "Layer 'Cyclestreets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "no"
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'Cyclestreets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
"value": ""
},
{
"key": "cyclestreet",
"description": "Layer 'Cyclestreets' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'Cyclestreets' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
"value": ""
},
{
"key": "cyclestreet",
"description": "Layer 'Cyclestreets' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.",
"value": ""
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'Cyclestreets' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "cyclestreet",
"description": "Layer 'Cyclestreets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.",
"value": ""
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'Cyclestreets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
"value": ""
},
{
"key": "overtaking:motor_vehicle",
"description": "Layer 'Cyclestreets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key overtaking:motor_vehicle.",
"value": ""
},
{
"key": "cyclestreet:start_date",
"description": "Layer 'Cyclestreets' shows and asks freeform values for key 'cyclestreet:start_date' (in the MapComplete.osm.be theme 'Cyclestreets')"
},
{
"key": "proposed:cyclestreet",
"description": "The MapComplete theme Cyclestreets has a layer Future cyclestreet showing features with this tag",
"value": "yes"
},
{
"key": "image",
"description": "The layer 'Future cyclestreet allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "mapillary",
"description": "The layer 'Future cyclestreet allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "wikidata",
"description": "The layer 'Future cyclestreet allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "wikipedia",
"description": "The layer 'Future cyclestreet allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "cyclestreet",
"description": "Layer 'Future cyclestreet' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "maxspeed",
"description": "Layer 'Future cyclestreet' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "30"
},
{
"key": "overtaking:motor_vehicle",
"description": "Layer 'Future cyclestreet' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "no"
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'Future cyclestreet' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
"value": ""
},
{
"key": "cyclestreet",
"description": "Layer 'Future cyclestreet' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'Future cyclestreet' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
"value": ""
},
{
"key": "cyclestreet",
"description": "Layer 'Future cyclestreet' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.",
"value": ""
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'Future cyclestreet' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "cyclestreet",
"description": "Layer 'Future cyclestreet' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.",
"value": ""
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'Future cyclestreet' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
"value": ""
},
{
"key": "overtaking:motor_vehicle",
"description": "Layer 'Future cyclestreet' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key overtaking:motor_vehicle.",
"value": ""
},
{
"key": "cyclestreet:start_date",
"description": "Layer 'Future cyclestreet' shows and asks freeform values for key 'cyclestreet:start_date' (in the MapComplete.osm.be theme 'Cyclestreets')"
},
{
"key": "highway",
"description": "The MapComplete theme Cyclestreets has a layer All streets showing features with this tag",
"value": "residential"
},
{
"key": "highway",
"description": "The MapComplete theme Cyclestreets has a layer All streets showing features with this tag",
"value": "tertiary"
},
{
"key": "highway",
"description": "The MapComplete theme Cyclestreets has a layer All streets showing features with this tag",
"value": "unclassified"
},
{
"key": "image",
"description": "The layer 'All streets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "mapillary",
"description": "The layer 'All streets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "wikidata",
"description": "The layer 'All streets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "wikipedia",
"description": "The layer 'All streets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "cyclestreet",
"description": "Layer 'All streets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "maxspeed",
"description": "Layer 'All streets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "30"
},
{
"key": "overtaking:motor_vehicle",
"description": "Layer 'All streets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "no"
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'All streets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
"value": ""
},
{
"key": "cyclestreet",
"description": "Layer 'All streets' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'All streets' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
"value": ""
},
{
"key": "cyclestreet",
"description": "Layer 'All streets' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.",
"value": ""
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'All streets' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "cyclestreet",
"description": "Layer 'All streets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.",
"value": ""
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'All streets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
"value": ""
},
{
"key": "overtaking:motor_vehicle",
"description": "Layer 'All streets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key overtaking:motor_vehicle.",
"value": ""
},
{
"key": "cyclestreet:start_date",
"description": "Layer 'All streets' shows and asks freeform values for key 'cyclestreet:start_date' (in the MapComplete.osm.be theme 'Cyclestreets')"
}
]
"tags": [
{
"key": "cyclestreet",
"description": "The MapComplete theme Cyclestreets has a layer Cyclestreets showing features with this tag",
"value": "yes"
},
{
"key": "image",
"description": "The layer 'Cyclestreets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "mapillary",
"description": "The layer 'Cyclestreets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "wikidata",
"description": "The layer 'Cyclestreets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "wikipedia",
"description": "The layer 'Cyclestreets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "cyclestreet",
"description": "Layer 'Cyclestreets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "maxspeed",
"description": "Layer 'Cyclestreets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "30"
},
{
"key": "overtaking:motor_vehicle",
"description": "Layer 'Cyclestreets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "no"
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'Cyclestreets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
"value": ""
},
{
"key": "cyclestreet",
"description": "Layer 'Cyclestreets' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'Cyclestreets' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
"value": ""
},
{
"key": "cyclestreet",
"description": "Layer 'Cyclestreets' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.",
"value": ""
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'Cyclestreets' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "cyclestreet",
"description": "Layer 'Cyclestreets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.",
"value": ""
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'Cyclestreets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
"value": ""
},
{
"key": "overtaking:motor_vehicle",
"description": "Layer 'Cyclestreets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key overtaking:motor_vehicle.",
"value": ""
},
{
"key": "cyclestreet:start_date",
"description": "Layer 'Cyclestreets' shows and asks freeform values for key 'cyclestreet:start_date' (in the MapComplete.osm.be theme 'Cyclestreets')"
},
{
"key": "proposed:cyclestreet",
"description": "The MapComplete theme Cyclestreets has a layer Future cyclestreet showing features with this tag",
"value": "yes"
},
{
"key": "image",
"description": "The layer 'Future cyclestreet allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "mapillary",
"description": "The layer 'Future cyclestreet allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "wikidata",
"description": "The layer 'Future cyclestreet allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "wikipedia",
"description": "The layer 'Future cyclestreet allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "cyclestreet",
"description": "Layer 'Future cyclestreet' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "maxspeed",
"description": "Layer 'Future cyclestreet' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "30"
},
{
"key": "overtaking:motor_vehicle",
"description": "Layer 'Future cyclestreet' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "no"
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'Future cyclestreet' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
"value": ""
},
{
"key": "cyclestreet",
"description": "Layer 'Future cyclestreet' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'Future cyclestreet' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
"value": ""
},
{
"key": "cyclestreet",
"description": "Layer 'Future cyclestreet' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.",
"value": ""
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'Future cyclestreet' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "cyclestreet",
"description": "Layer 'Future cyclestreet' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.",
"value": ""
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'Future cyclestreet' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
"value": ""
},
{
"key": "overtaking:motor_vehicle",
"description": "Layer 'Future cyclestreet' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key overtaking:motor_vehicle.",
"value": ""
},
{
"key": "cyclestreet:start_date",
"description": "Layer 'Future cyclestreet' shows and asks freeform values for key 'cyclestreet:start_date' (in the MapComplete.osm.be theme 'Cyclestreets')"
},
{
"key": "highway",
"description": "The MapComplete theme Cyclestreets has a layer All streets showing features with this tag",
"value": "residential"
},
{
"key": "highway",
"description": "The MapComplete theme Cyclestreets has a layer All streets showing features with this tag",
"value": "tertiary"
},
{
"key": "highway",
"description": "The MapComplete theme Cyclestreets has a layer All streets showing features with this tag",
"value": "unclassified"
},
{
"key": "image",
"description": "The layer 'All streets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "mapillary",
"description": "The layer 'All streets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "wikidata",
"description": "The layer 'All streets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "wikipedia",
"description": "The layer 'All streets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
},
{
"key": "cyclestreet",
"description": "Layer 'All streets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "maxspeed",
"description": "Layer 'All streets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "30"
},
{
"key": "overtaking:motor_vehicle",
"description": "Layer 'All streets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "no"
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'All streets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
"value": ""
},
{
"key": "cyclestreet",
"description": "Layer 'All streets' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'All streets' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
"value": ""
},
{
"key": "cyclestreet",
"description": "Layer 'All streets' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.",
"value": ""
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'All streets' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
"value": "yes"
},
{
"key": "cyclestreet",
"description": "Layer 'All streets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.",
"value": ""
},
{
"key": "proposed:cyclestreet",
"description": "Layer 'All streets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
"value": ""
},
{
"key": "overtaking:motor_vehicle",
"description": "Layer 'All streets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key overtaking:motor_vehicle.",
"value": ""
},
{
"key": "cyclestreet:start_date",
"description": "Layer 'All streets' shows and asks freeform values for key 'cyclestreet:start_date' (in the MapComplete.osm.be theme 'Cyclestreets')"
}
]
}

File diff suppressed because it is too large Load diff

View file

@ -1,83 +1,83 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Drinking Water",
"description": "On this map, publicly accessible drinking water spots are shown and can be easily added",
"project_url": "https://mapcomplete.osm.be/drinking_water",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/drinking_water/logo.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "amenity",
"description": "The MapComplete theme Drinking Water has a layer Drinking water showing features with this tag",
"value": "drinking_water"
"data_format": 1,
"project": {
"name": "MapComplete Drinking Water",
"description": "On this map, publicly accessible drinking water spots are shown and can be easily added",
"project_url": "https://mapcomplete.osm.be/drinking_water",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/drinking_water/logo.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
{
"key": "image",
"description": "The layer 'Drinking water 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 'Drinking water 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 'Drinking water 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 'Drinking water 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": "operational_status",
"description": "Layer 'Drinking water' shows and asks freeform values for key 'operational_status' (in the MapComplete.osm.be theme 'Drinking Water')"
},
{
"key": "operational_status",
"description": "Layer 'Drinking water' shows operational_status= with a fixed text, namely 'This drinking water works' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Drinking Water') Picking this answer will delete the key operational_status.",
"value": ""
},
{
"key": "operational_status",
"description": "Layer 'Drinking water' shows operational_status=broken with a fixed text, namely 'This drinking water is broken' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Drinking Water')",
"value": "broken"
},
{
"key": "operational_status",
"description": "Layer 'Drinking water' shows operational_status=closed with a fixed text, namely 'This drinking water is closed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Drinking Water')",
"value": "closed"
},
{
"key": "bottle",
"description": "Layer 'Drinking water' shows bottle=yes with a fixed text, namely 'It is easy to refill water bottles' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Drinking Water')",
"value": "yes"
},
{
"key": "bottle",
"description": "Layer 'Drinking water' shows bottle=no with a fixed text, namely 'Water bottles may not fit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Drinking Water')",
"value": "no"
},
{
"key": "service:bicycle:cleaning:charge",
"description": "Layer 'Drinking water' shows and asks freeform values for key 'service:bicycle:cleaning:charge' (in the MapComplete.osm.be theme 'Drinking Water')"
},
{
"key": "service:bicycle:cleaning:fee",
"description": "Layer 'Drinking water' shows service:bicycle:cleaning:fee=no&service:bicycle:cleaning:charge= 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 'Drinking Water')",
"value": "no&service:bicycle:cleaning:charge="
},
{
"key": "service:bicycle:cleaning:fee",
"description": "Layer 'Drinking water' shows service:bicycle:cleaning:fee=no& with a fixed text, namely 'Free to use' (in the MapComplete.osm.be theme 'Drinking Water')",
"value": "no&"
},
{
"key": "service:bicycle:cleaning:fee",
"description": "Layer 'Drinking water' shows service:bicycle:cleaning:fee=yes with a fixed text, namely 'The cleaning service has a fee' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Drinking Water')",
"value": "yes"
}
]
"tags": [
{
"key": "amenity",
"description": "The MapComplete theme Drinking Water has a layer Drinking water showing features with this tag",
"value": "drinking_water"
},
{
"key": "image",
"description": "The layer 'Drinking water 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 'Drinking water 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 'Drinking water 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 'Drinking water 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": "operational_status",
"description": "Layer 'Drinking water' shows and asks freeform values for key 'operational_status' (in the MapComplete.osm.be theme 'Drinking Water')"
},
{
"key": "operational_status",
"description": "Layer 'Drinking water' shows operational_status= with a fixed text, namely 'This drinking water works' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Drinking Water') Picking this answer will delete the key operational_status.",
"value": ""
},
{
"key": "operational_status",
"description": "Layer 'Drinking water' shows operational_status=broken with a fixed text, namely 'This drinking water is broken' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Drinking Water')",
"value": "broken"
},
{
"key": "operational_status",
"description": "Layer 'Drinking water' shows operational_status=closed with a fixed text, namely 'This drinking water is closed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Drinking Water')",
"value": "closed"
},
{
"key": "bottle",
"description": "Layer 'Drinking water' shows bottle=yes with a fixed text, namely 'It is easy to refill water bottles' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Drinking Water')",
"value": "yes"
},
{
"key": "bottle",
"description": "Layer 'Drinking water' shows bottle=no with a fixed text, namely 'Water bottles may not fit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Drinking Water')",
"value": "no"
},
{
"key": "service:bicycle:cleaning:charge",
"description": "Layer 'Drinking water' shows and asks freeform values for key 'service:bicycle:cleaning:charge' (in the MapComplete.osm.be theme 'Drinking Water')"
},
{
"key": "service:bicycle:cleaning:fee",
"description": "Layer 'Drinking water' shows service:bicycle:cleaning:fee=no&service:bicycle:cleaning:charge= 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 'Drinking Water')",
"value": "no&service:bicycle:cleaning:charge="
},
{
"key": "service:bicycle:cleaning:fee",
"description": "Layer 'Drinking water' shows service:bicycle:cleaning:fee=no& with a fixed text, namely 'Free to use' (in the MapComplete.osm.be theme 'Drinking Water')",
"value": "no&"
},
{
"key": "service:bicycle:cleaning:fee",
"description": "Layer 'Drinking water' shows service:bicycle:cleaning:fee=yes with a fixed text, namely 'The cleaning service has a fee' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Drinking Water')",
"value": "yes"
}
]
}

View file

@ -1,107 +1,107 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Facade gardens",
"description": "This map shows facade gardens with pictures and useful info about orientation, sunshine and plant types.",
"project_url": "https://mapcomplete.osm.be/facadegardens",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/facadegardens/geveltuin.svg",
"contact_name": "Pieter Vander Vennet, joost schouppe; stla",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "leisure",
"description": "The MapComplete theme Facade gardens has a layer Facade gardens showing features with this tag",
"value": "garden"
"data_format": 1,
"project": {
"name": "MapComplete Facade gardens",
"description": "This map shows facade gardens with pictures and useful info about orientation, sunshine and plant types.",
"project_url": "https://mapcomplete.osm.be/facadegardens",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/facadegardens/geveltuin.svg",
"contact_name": "Pieter Vander Vennet, joost schouppe; stla",
"contact_email": "pietervdvn@posteo.net"
},
{
"key": "garden:type",
"description": "The MapComplete theme Facade gardens has a layer Facade gardens showing features with this tag",
"value": "facade_garden"
},
{
"key": "image",
"description": "The layer 'Facade gardens 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 'Facade gardens 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 'Facade gardens 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 'Facade gardens 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": "direction",
"description": "Layer 'Facade gardens' shows and asks freeform values for key 'direction' (in the MapComplete.osm.be theme 'Facade gardens')"
},
{
"key": "direct_sunlight",
"description": "Layer 'Facade gardens' shows direct_sunlight=yes with a fixed text, namely 'The garden is in full sun' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "yes"
},
{
"key": "direct_sunlight",
"description": "Layer 'Facade gardens' shows direct_sunlight=partial with a fixed text, namely 'The garden is in partial shade' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "partial"
},
{
"key": "direct_sunlight",
"description": "Layer 'Facade gardens' shows direct_sunlight=no with a fixed text, namely 'The garden is in the shade' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "no"
},
{
"key": "rain_barrel",
"description": "Layer 'Facade gardens' shows rain_barrel=yes with a fixed text, namely 'There is a rain barrel' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "yes"
},
{
"key": "rain_barrel",
"description": "Layer 'Facade gardens' shows rain_barrel=no with a fixed text, namely 'There is no rain barrel' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "no"
},
{
"key": "start_date",
"description": "Layer 'Facade gardens' shows and asks freeform values for key 'start_date' (in the MapComplete.osm.be theme 'Facade gardens')"
},
{
"key": "edible",
"description": "Layer 'Facade gardens' shows edible=yes with a fixed text, namely 'There are edible plants' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "yes"
},
{
"key": "edible",
"description": "Layer 'Facade gardens' shows edible=no with a fixed text, namely 'There are no edible plants' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "no"
},
{
"key": "plant",
"description": "Layer 'Facade gardens' shows plant=vine with a fixed text, namely 'There are vines' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "vine"
},
{
"key": "plant",
"description": "Layer 'Facade gardens' shows plant=flower with a fixed text, namely 'There are flowering plants' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "flower"
},
{
"key": "plant",
"description": "Layer 'Facade gardens' shows plant=shrub with a fixed text, namely 'There are shrubs' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "shrub"
},
{
"key": "plant",
"description": "Layer 'Facade gardens' shows plant=groundcover with a fixed text, namely 'There are groundcovering plants' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "groundcover"
},
{
"key": "description",
"description": "Layer 'Facade gardens' shows and asks freeform values for key 'description' (in the MapComplete.osm.be theme 'Facade gardens')"
}
]
"tags": [
{
"key": "leisure",
"description": "The MapComplete theme Facade gardens has a layer Facade gardens showing features with this tag",
"value": "garden"
},
{
"key": "garden:type",
"description": "The MapComplete theme Facade gardens has a layer Facade gardens showing features with this tag",
"value": "facade_garden"
},
{
"key": "image",
"description": "The layer 'Facade gardens 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 'Facade gardens 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 'Facade gardens 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 'Facade gardens 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": "direction",
"description": "Layer 'Facade gardens' shows and asks freeform values for key 'direction' (in the MapComplete.osm.be theme 'Facade gardens')"
},
{
"key": "direct_sunlight",
"description": "Layer 'Facade gardens' shows direct_sunlight=yes with a fixed text, namely 'The garden is in full sun' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "yes"
},
{
"key": "direct_sunlight",
"description": "Layer 'Facade gardens' shows direct_sunlight=partial with a fixed text, namely 'The garden is in partial shade' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "partial"
},
{
"key": "direct_sunlight",
"description": "Layer 'Facade gardens' shows direct_sunlight=no with a fixed text, namely 'The garden is in the shade' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "no"
},
{
"key": "rain_barrel",
"description": "Layer 'Facade gardens' shows rain_barrel=yes with a fixed text, namely 'There is a rain barrel' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "yes"
},
{
"key": "rain_barrel",
"description": "Layer 'Facade gardens' shows rain_barrel=no with a fixed text, namely 'There is no rain barrel' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "no"
},
{
"key": "start_date",
"description": "Layer 'Facade gardens' shows and asks freeform values for key 'start_date' (in the MapComplete.osm.be theme 'Facade gardens')"
},
{
"key": "edible",
"description": "Layer 'Facade gardens' shows edible=yes with a fixed text, namely 'There are edible plants' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "yes"
},
{
"key": "edible",
"description": "Layer 'Facade gardens' shows edible=no with a fixed text, namely 'There are no edible plants' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "no"
},
{
"key": "plant",
"description": "Layer 'Facade gardens' shows plant=vine with a fixed text, namely 'There are vines' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "vine"
},
{
"key": "plant",
"description": "Layer 'Facade gardens' shows plant=flower with a fixed text, namely 'There are flowering plants' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "flower"
},
{
"key": "plant",
"description": "Layer 'Facade gardens' shows plant=shrub with a fixed text, namely 'There are shrubs' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "shrub"
},
{
"key": "plant",
"description": "Layer 'Facade gardens' shows plant=groundcover with a fixed text, namely 'There are groundcovering plants' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Facade gardens')",
"value": "groundcover"
},
{
"key": "description",
"description": "Layer 'Facade gardens' shows and asks freeform values for key 'description' (in the MapComplete.osm.be theme 'Facade gardens')"
}
]
}

View file

@ -1,105 +1,105 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Friturenkaart",
"description": "Op deze kaart vind je je favoriete frituur!",
"project_url": "https://mapcomplete.osm.be/fritures",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/fritures/logo.svg",
"contact_name": "Pieter Vander Vennet, ",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "cuisine",
"description": "The MapComplete theme Friturenkaart has a layer Frituren showing features with this tag"
"data_format": 1,
"project": {
"name": "MapComplete Friturenkaart",
"description": "Op deze kaart vind je je favoriete frituur!",
"project_url": "https://mapcomplete.osm.be/fritures",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/fritures/logo.svg",
"contact_name": "Pieter Vander Vennet, ",
"contact_email": "pietervdvn@posteo.net"
},
{
"key": "image",
"description": "The layer 'Frituren 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 'Frituren 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 'Frituren 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 'Frituren 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 'Frituren' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Friturenkaart')"
},
{
"key": "opening_hours",
"description": "Layer 'Frituren' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Friturenkaart')"
},
{
"key": "website",
"description": "Layer 'Frituren' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Friturenkaart')"
},
{
"key": "phone",
"description": "Layer 'Frituren' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Friturenkaart')"
},
{
"key": "diet:vegetarian",
"description": "Layer 'Frituren' shows diet:vegetarian=yes with a fixed text, namely 'Er zijn vegetarische snacks aanwezig' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "yes"
},
{
"key": "diet:vegetarian",
"description": "Layer 'Frituren' shows diet:vegetarian=limited with a fixed text, namely 'Slechts enkele vegetarische snacks' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "limited"
},
{
"key": "diet:vegetarian",
"description": "Layer 'Frituren' shows diet:vegetarian=no with a fixed text, namely 'Geen vegetarische snacks beschikbaar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "no"
},
{
"key": "diet:vegan",
"description": "Layer 'Frituren' shows diet:vegan=yes with a fixed text, namely 'Er zijn veganistische snacks aanwezig' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "yes"
},
{
"key": "diet:vegan",
"description": "Layer 'Frituren' shows diet:vegan=limited with a fixed text, namely 'Slechts enkele veganistische snacks' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "limited"
},
{
"key": "diet:vegetarian",
"description": "Layer 'Frituren' shows diet:vegetarian=no with a fixed text, namely 'Geen veganistische snacks beschikbaar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "no"
},
{
"key": "friture:oil",
"description": "Layer 'Frituren' shows friture:oil=vegetable with a fixed text, namely 'Plantaardige olie' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "vegetable"
},
{
"key": "friture:oil",
"description": "Layer 'Frituren' shows friture:oil=animal with a fixed text, namely 'Dierlijk vet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "animal"
},
{
"key": "bulk_purchase",
"description": "Layer 'Frituren' shows bulk_purchase=yes with a fixed text, namely 'You can bring <b>your own containers</b> to get your order, saving on single-use packaging material and thus waste' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "yes"
},
{
"key": "bulk_purchase",
"description": "Layer 'Frituren' shows bulk_purchase=no with a fixed text, namely 'Bringing your own container is <b>not allowed</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "no"
},
{
"key": "bulk_purchase",
"description": "Layer 'Frituren' shows bulk_purchase=only with a fixed text, namely 'You <b>must</b> bring your own container to order here.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "only"
}
]
"tags": [
{
"key": "cuisine",
"description": "The MapComplete theme Friturenkaart has a layer Frituren showing features with this tag"
},
{
"key": "image",
"description": "The layer 'Frituren 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 'Frituren 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 'Frituren 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 'Frituren 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 'Frituren' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Friturenkaart')"
},
{
"key": "opening_hours",
"description": "Layer 'Frituren' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Friturenkaart')"
},
{
"key": "website",
"description": "Layer 'Frituren' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Friturenkaart')"
},
{
"key": "phone",
"description": "Layer 'Frituren' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Friturenkaart')"
},
{
"key": "diet:vegetarian",
"description": "Layer 'Frituren' shows diet:vegetarian=yes with a fixed text, namely 'Er zijn vegetarische snacks aanwezig' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "yes"
},
{
"key": "diet:vegetarian",
"description": "Layer 'Frituren' shows diet:vegetarian=limited with a fixed text, namely 'Slechts enkele vegetarische snacks' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "limited"
},
{
"key": "diet:vegetarian",
"description": "Layer 'Frituren' shows diet:vegetarian=no with a fixed text, namely 'Geen vegetarische snacks beschikbaar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "no"
},
{
"key": "diet:vegan",
"description": "Layer 'Frituren' shows diet:vegan=yes with a fixed text, namely 'Er zijn veganistische snacks aanwezig' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "yes"
},
{
"key": "diet:vegan",
"description": "Layer 'Frituren' shows diet:vegan=limited with a fixed text, namely 'Slechts enkele veganistische snacks' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "limited"
},
{
"key": "diet:vegetarian",
"description": "Layer 'Frituren' shows diet:vegetarian=no with a fixed text, namely 'Geen veganistische snacks beschikbaar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "no"
},
{
"key": "friture:oil",
"description": "Layer 'Frituren' shows friture:oil=vegetable with a fixed text, namely 'Plantaardige olie' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "vegetable"
},
{
"key": "friture:oil",
"description": "Layer 'Frituren' shows friture:oil=animal with a fixed text, namely 'Dierlijk vet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "animal"
},
{
"key": "bulk_purchase",
"description": "Layer 'Frituren' shows bulk_purchase=yes with a fixed text, namely 'You can bring <b>your own containers</b> to get your order, saving on single-use packaging material and thus waste' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "yes"
},
{
"key": "bulk_purchase",
"description": "Layer 'Frituren' shows bulk_purchase=no with a fixed text, namely 'Bringing your own container is <b>not allowed</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "no"
},
{
"key": "bulk_purchase",
"description": "Layer 'Frituren' shows bulk_purchase=only with a fixed text, namely 'You <b>must</b> bring your own container to order here.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')",
"value": "only"
}
]
}

View file

@ -1,56 +1,56 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Ghost bikes",
"description": "A <b>ghost bike</b> is a memorial for a cyclist who died in a traffic accident, in the form of a white bicycle placed permanently near the accident location",
"project_url": "https://mapcomplete.osm.be/ghostbikes",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/ghostbikes/logo.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "memorial",
"description": "The MapComplete theme Ghost bikes has a layer Ghost bikes showing features with this tag",
"value": "ghost_bike"
"data_format": 1,
"project": {
"name": "MapComplete Ghost bikes",
"description": "A <b>ghost bike</b> is a memorial for a cyclist who died in a traffic accident, in the form of a white bicycle placed permanently near the accident location",
"project_url": "https://mapcomplete.osm.be/ghostbikes",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/ghostbikes/logo.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
{
"key": "image",
"description": "The layer 'Ghost bikes 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 'Ghost bikes 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 'Ghost bikes 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 'Ghost bikes 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 'Ghost bikes' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Ghost bikes')"
},
{
"key": "noname",
"description": "Layer 'Ghost bikes' shows noname=yes with a fixed text, namely 'No name is marked on the bike' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Ghost bikes')",
"value": "yes"
},
{
"key": "source",
"description": "Layer 'Ghost bikes' shows and asks freeform values for key 'source' (in the MapComplete.osm.be theme 'Ghost bikes')"
},
{
"key": "inscription",
"description": "Layer 'Ghost bikes' shows and asks freeform values for key 'inscription' (in the MapComplete.osm.be theme 'Ghost bikes')"
},
{
"key": "start_date",
"description": "Layer 'Ghost bikes' shows and asks freeform values for key 'start_date' (in the MapComplete.osm.be theme 'Ghost bikes')"
}
]
"tags": [
{
"key": "memorial",
"description": "The MapComplete theme Ghost bikes has a layer Ghost bikes showing features with this tag",
"value": "ghost_bike"
},
{
"key": "image",
"description": "The layer 'Ghost bikes 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 'Ghost bikes 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 'Ghost bikes 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 'Ghost bikes 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 'Ghost bikes' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Ghost bikes')"
},
{
"key": "noname",
"description": "Layer 'Ghost bikes' shows noname=yes with a fixed text, namely 'No name is marked on the bike' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Ghost bikes')",
"value": "yes"
},
{
"key": "source",
"description": "Layer 'Ghost bikes' shows and asks freeform values for key 'source' (in the MapComplete.osm.be theme 'Ghost bikes')"
},
{
"key": "inscription",
"description": "Layer 'Ghost bikes' shows and asks freeform values for key 'inscription' (in the MapComplete.osm.be theme 'Ghost bikes')"
},
{
"key": "start_date",
"description": "Layer 'Ghost bikes' shows and asks freeform values for key 'start_date' (in the MapComplete.osm.be theme 'Ghost bikes')"
}
]
}

View file

@ -1,279 +1,279 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Hydrants, Extinguishers, Fire stations, and Ambulance stations.",
"description": "Map to show hydrants, extinguishers, fire stations, and ambulance stations.",
"project_url": "https://mapcomplete.osm.be/hailhydrant",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/hailhydrant/logo.svg",
"contact_name": "Pieter Vander Vennet, Erwin Olario",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "emergency",
"description": "The MapComplete theme Hydrants, Extinguishers, Fire stations, and Ambulance stations. has a layer Map of hydrants showing features with this tag",
"value": "fire_hydrant"
"data_format": 1,
"project": {
"name": "MapComplete Hydrants, Extinguishers, Fire stations, and Ambulance stations.",
"description": "Map to show hydrants, extinguishers, fire stations, and ambulance stations.",
"project_url": "https://mapcomplete.osm.be/hailhydrant",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/hailhydrant/logo.svg",
"contact_name": "Pieter Vander Vennet, Erwin Olario",
"contact_email": "pietervdvn@posteo.net"
},
{
"key": "colour",
"description": "Layer 'Map of hydrants' shows and asks freeform values for key 'colour' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "colour",
"description": "Layer 'Map of hydrants' shows colour= with a fixed text, namely 'The hydrant color is unknown.' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.') Picking this answer will delete the key colour.",
"value": ""
},
{
"key": "colour",
"description": "Layer 'Map of hydrants' shows colour=yellow with a fixed text, namely 'The hydrant color is yellow.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "yellow"
},
{
"key": "colour",
"description": "Layer 'Map of hydrants' shows colour=red with a fixed text, namely 'The hydrant color is red.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "red"
},
{
"key": "fire_hydrant:type",
"description": "Layer 'Map of hydrants' shows and asks freeform values for key 'fire_hydrant:type' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "fire_hydrant:type",
"description": "Layer 'Map of hydrants' shows fire_hydrant:type= with a fixed text, namely 'The hydrant type is unknown.' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.') Picking this answer will delete the key fire_hydrant:type.",
"value": ""
},
{
"key": "fire_hydrant:type",
"description": "Layer 'Map of hydrants' shows fire_hydrant:type=pillar with a fixed text, namely '<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_pillar.svg\" /> Pillar type.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "pillar"
},
{
"key": "fire_hydrant:type",
"description": "Layer 'Map of hydrants' shows fire_hydrant:type=pipe with a fixed text, namely '<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Pipe type.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "pipe"
},
{
"key": "fire_hydrant:type",
"description": "Layer 'Map of hydrants' shows fire_hydrant:type=wall with a fixed text, namely '<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Wall type.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "wall"
},
{
"key": "fire_hydrant:type",
"description": "Layer 'Map of hydrants' shows fire_hydrant:type=underground with a fixed text, namely '<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_underground.svg\" /> Underground type.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "underground"
},
{
"key": "disused:emergency",
"description": "Layer 'Map of hydrants' shows and asks freeform values for key 'disused:emergency' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "emergency",
"description": "Layer 'Map of hydrants' shows emergency=fire_hydrant with a fixed text, namely 'The hydrant is (fully or partially) working.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "fire_hydrant"
},
{
"key": "disused:emergency",
"description": "Layer 'Map of hydrants' shows disused:emergency=fire_hydrant&emergency= with a fixed text, namely 'The hydrant is unavailable.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "fire_hydrant"
},
{
"key": "emergency",
"description": "Layer 'Map of hydrants' shows disused:emergency=fire_hydrant&emergency= with a fixed text, namely 'The hydrant is unavailable.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.') Picking this answer will delete the key emergency.",
"value": ""
},
{
"key": "removed:emergency",
"description": "Layer 'Map of hydrants' shows removed:emergency=fire_hydrant&emergency= with a fixed text, namely 'The hydrant has been removed.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "fire_hydrant"
},
{
"key": "emergency",
"description": "Layer 'Map of hydrants' shows removed:emergency=fire_hydrant&emergency= with a fixed text, namely 'The hydrant has been removed.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.') Picking this answer will delete the key emergency.",
"value": ""
},
{
"key": "image",
"description": "The layer 'Map of hydrants 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 'Map of hydrants 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 'Map of hydrants 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 'Map of hydrants 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": "emergency",
"description": "The MapComplete theme Hydrants, Extinguishers, Fire stations, and Ambulance stations. has a layer Map of fire extinguishers. showing features with this tag",
"value": "fire_extinguisher"
},
{
"key": "location",
"description": "Layer 'Map of fire extinguishers.' shows and asks freeform values for key 'location' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "location",
"description": "Layer 'Map of fire extinguishers.' shows location=indoor with a fixed text, namely 'Found indoors.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "indoor"
},
{
"key": "location",
"description": "Layer 'Map of fire extinguishers.' shows location=outdoor with a fixed text, namely 'Found outdoors.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "outdoor"
},
{
"key": "image",
"description": "The layer 'Map of fire extinguishers. 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 'Map of fire extinguishers. 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 'Map of fire extinguishers. 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 'Map of fire extinguishers. 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": "amenity",
"description": "The MapComplete theme Hydrants, Extinguishers, Fire stations, and Ambulance stations. has a layer Map of fire stations showing features with this tag",
"value": "fire_station"
},
{
"key": "name",
"description": "Layer 'Map of fire stations' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "addr:street",
"description": "Layer 'Map of fire stations' shows and asks freeform values for key 'addr:street' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "addr:place",
"description": "Layer 'Map of fire stations' shows and asks freeform values for key 'addr:place' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "operator",
"description": "Layer 'Map of fire stations' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "operator",
"description": "Layer 'Map of fire stations' shows operator=Bureau of Fire Protection&operator:type=government with a fixed text, namely 'Bureau of Fire Protection' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "Bureau of Fire Protection"
},
{
"key": "operator:type",
"description": "Layer 'Map of fire stations' shows operator=Bureau of Fire Protection&operator:type=government with a fixed text, namely 'Bureau of Fire Protection' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "government"
},
{
"key": "operator:type",
"description": "Layer 'Map of fire stations' shows and asks freeform values for key 'operator:type' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "operator:type",
"description": "Layer 'Map of fire stations' shows operator:type=government with a fixed text, namely 'The station is operated by the government.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "government"
},
{
"key": "operator:type",
"description": "Layer 'Map of fire stations' shows operator:type=community with a fixed text, namely 'The station is operated by a community-based, or informal organization.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "community"
},
{
"key": "operator:type",
"description": "Layer 'Map of fire stations' shows operator:type=ngo with a fixed text, namely 'The station is operated by a formal group of volunteers.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "ngo"
},
{
"key": "operator:type",
"description": "Layer 'Map of fire stations' shows operator:type=private with a fixed text, namely 'The station is privately operated.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "private"
},
{
"key": "image",
"description": "The layer 'Map of fire stations 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 'Map of fire stations 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 'Map of fire stations 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 'Map of fire stations 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": "emergency",
"description": "The MapComplete theme Hydrants, Extinguishers, Fire stations, and Ambulance stations. has a layer Map of ambulance stations showing features with this tag",
"value": "ambulance_station"
},
{
"key": "name",
"description": "Layer 'Map of ambulance stations' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "addr:street",
"description": "Layer 'Map of ambulance stations' shows and asks freeform values for key 'addr:street' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "addr:place",
"description": "Layer 'Map of ambulance stations' shows and asks freeform values for key 'addr:place' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "operator",
"description": "Layer 'Map of ambulance stations' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "operator:type",
"description": "Layer 'Map of ambulance stations' shows and asks freeform values for key 'operator:type' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "operator:type",
"description": "Layer 'Map of ambulance stations' shows operator:type=government with a fixed text, namely 'The station is operated by the government.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "government"
},
{
"key": "operator:type",
"description": "Layer 'Map of ambulance stations' shows operator:type=community with a fixed text, namely 'The station is operated by a community-based, or informal organization.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "community"
},
{
"key": "operator:type",
"description": "Layer 'Map of ambulance stations' shows operator:type=ngo with a fixed text, namely 'The station is operated by a formal group of volunteers.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "ngo"
},
{
"key": "operator:type",
"description": "Layer 'Map of ambulance stations' shows operator:type=private with a fixed text, namely 'The station is privately operated.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "private"
},
{
"key": "image",
"description": "The layer 'Map of ambulance stations 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 'Map of ambulance stations 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 'Map of ambulance stations 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 'Map of ambulance stations 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"
}
]
"tags": [
{
"key": "emergency",
"description": "The MapComplete theme Hydrants, Extinguishers, Fire stations, and Ambulance stations. has a layer Map of hydrants showing features with this tag",
"value": "fire_hydrant"
},
{
"key": "colour",
"description": "Layer 'Map of hydrants' shows and asks freeform values for key 'colour' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "colour",
"description": "Layer 'Map of hydrants' shows colour= with a fixed text, namely 'The hydrant color is unknown.' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.') Picking this answer will delete the key colour.",
"value": ""
},
{
"key": "colour",
"description": "Layer 'Map of hydrants' shows colour=yellow with a fixed text, namely 'The hydrant color is yellow.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "yellow"
},
{
"key": "colour",
"description": "Layer 'Map of hydrants' shows colour=red with a fixed text, namely 'The hydrant color is red.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "red"
},
{
"key": "fire_hydrant:type",
"description": "Layer 'Map of hydrants' shows and asks freeform values for key 'fire_hydrant:type' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "fire_hydrant:type",
"description": "Layer 'Map of hydrants' shows fire_hydrant:type= with a fixed text, namely 'The hydrant type is unknown.' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.') Picking this answer will delete the key fire_hydrant:type.",
"value": ""
},
{
"key": "fire_hydrant:type",
"description": "Layer 'Map of hydrants' shows fire_hydrant:type=pillar with a fixed text, namely '<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_pillar.svg\" /> Pillar type.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "pillar"
},
{
"key": "fire_hydrant:type",
"description": "Layer 'Map of hydrants' shows fire_hydrant:type=pipe with a fixed text, namely '<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Pipe type.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "pipe"
},
{
"key": "fire_hydrant:type",
"description": "Layer 'Map of hydrants' shows fire_hydrant:type=wall with a fixed text, namely '<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Wall type.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "wall"
},
{
"key": "fire_hydrant:type",
"description": "Layer 'Map of hydrants' shows fire_hydrant:type=underground with a fixed text, namely '<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_underground.svg\" /> Underground type.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "underground"
},
{
"key": "disused:emergency",
"description": "Layer 'Map of hydrants' shows and asks freeform values for key 'disused:emergency' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "emergency",
"description": "Layer 'Map of hydrants' shows emergency=fire_hydrant with a fixed text, namely 'The hydrant is (fully or partially) working.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "fire_hydrant"
},
{
"key": "disused:emergency",
"description": "Layer 'Map of hydrants' shows disused:emergency=fire_hydrant&emergency= with a fixed text, namely 'The hydrant is unavailable.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "fire_hydrant"
},
{
"key": "emergency",
"description": "Layer 'Map of hydrants' shows disused:emergency=fire_hydrant&emergency= with a fixed text, namely 'The hydrant is unavailable.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.') Picking this answer will delete the key emergency.",
"value": ""
},
{
"key": "removed:emergency",
"description": "Layer 'Map of hydrants' shows removed:emergency=fire_hydrant&emergency= with a fixed text, namely 'The hydrant has been removed.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "fire_hydrant"
},
{
"key": "emergency",
"description": "Layer 'Map of hydrants' shows removed:emergency=fire_hydrant&emergency= with a fixed text, namely 'The hydrant has been removed.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.') Picking this answer will delete the key emergency.",
"value": ""
},
{
"key": "image",
"description": "The layer 'Map of hydrants 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 'Map of hydrants 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 'Map of hydrants 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 'Map of hydrants 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": "emergency",
"description": "The MapComplete theme Hydrants, Extinguishers, Fire stations, and Ambulance stations. has a layer Map of fire extinguishers. showing features with this tag",
"value": "fire_extinguisher"
},
{
"key": "location",
"description": "Layer 'Map of fire extinguishers.' shows and asks freeform values for key 'location' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "location",
"description": "Layer 'Map of fire extinguishers.' shows location=indoor with a fixed text, namely 'Found indoors.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "indoor"
},
{
"key": "location",
"description": "Layer 'Map of fire extinguishers.' shows location=outdoor with a fixed text, namely 'Found outdoors.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "outdoor"
},
{
"key": "image",
"description": "The layer 'Map of fire extinguishers. 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 'Map of fire extinguishers. 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 'Map of fire extinguishers. 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 'Map of fire extinguishers. 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": "amenity",
"description": "The MapComplete theme Hydrants, Extinguishers, Fire stations, and Ambulance stations. has a layer Map of fire stations showing features with this tag",
"value": "fire_station"
},
{
"key": "name",
"description": "Layer 'Map of fire stations' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "addr:street",
"description": "Layer 'Map of fire stations' shows and asks freeform values for key 'addr:street' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "addr:place",
"description": "Layer 'Map of fire stations' shows and asks freeform values for key 'addr:place' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "operator",
"description": "Layer 'Map of fire stations' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "operator",
"description": "Layer 'Map of fire stations' shows operator=Bureau of Fire Protection&operator:type=government with a fixed text, namely 'Bureau of Fire Protection' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "Bureau of Fire Protection"
},
{
"key": "operator:type",
"description": "Layer 'Map of fire stations' shows operator=Bureau of Fire Protection&operator:type=government with a fixed text, namely 'Bureau of Fire Protection' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "government"
},
{
"key": "operator:type",
"description": "Layer 'Map of fire stations' shows and asks freeform values for key 'operator:type' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "operator:type",
"description": "Layer 'Map of fire stations' shows operator:type=government with a fixed text, namely 'The station is operated by the government.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "government"
},
{
"key": "operator:type",
"description": "Layer 'Map of fire stations' shows operator:type=community with a fixed text, namely 'The station is operated by a community-based, or informal organization.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "community"
},
{
"key": "operator:type",
"description": "Layer 'Map of fire stations' shows operator:type=ngo with a fixed text, namely 'The station is operated by a formal group of volunteers.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "ngo"
},
{
"key": "operator:type",
"description": "Layer 'Map of fire stations' shows operator:type=private with a fixed text, namely 'The station is privately operated.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "private"
},
{
"key": "image",
"description": "The layer 'Map of fire stations 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 'Map of fire stations 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 'Map of fire stations 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 'Map of fire stations 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": "emergency",
"description": "The MapComplete theme Hydrants, Extinguishers, Fire stations, and Ambulance stations. has a layer Map of ambulance stations showing features with this tag",
"value": "ambulance_station"
},
{
"key": "name",
"description": "Layer 'Map of ambulance stations' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "addr:street",
"description": "Layer 'Map of ambulance stations' shows and asks freeform values for key 'addr:street' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "addr:place",
"description": "Layer 'Map of ambulance stations' shows and asks freeform values for key 'addr:place' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "operator",
"description": "Layer 'Map of ambulance stations' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "operator:type",
"description": "Layer 'Map of ambulance stations' shows and asks freeform values for key 'operator:type' (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')"
},
{
"key": "operator:type",
"description": "Layer 'Map of ambulance stations' shows operator:type=government with a fixed text, namely 'The station is operated by the government.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "government"
},
{
"key": "operator:type",
"description": "Layer 'Map of ambulance stations' shows operator:type=community with a fixed text, namely 'The station is operated by a community-based, or informal organization.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "community"
},
{
"key": "operator:type",
"description": "Layer 'Map of ambulance stations' shows operator:type=ngo with a fixed text, namely 'The station is operated by a formal group of volunteers.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "ngo"
},
{
"key": "operator:type",
"description": "Layer 'Map of ambulance stations' shows operator:type=private with a fixed text, namely 'The station is privately operated.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Hydrants, Extinguishers, Fire stations, and Ambulance stations.')",
"value": "private"
},
{
"key": "image",
"description": "The layer 'Map of ambulance stations 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 'Map of ambulance stations 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 'Map of ambulance stations 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 'Map of ambulance stations 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"
}
]
}

View file

@ -1,98 +1,98 @@
{
"data_format": 1,
"project": {
"name": "MapComplete A map of maps",
"description": "This theme shows all (touristic) maps that OpenStreetMap knows of",
"project_url": "https://mapcomplete.osm.be/maps",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/maps/logo.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "tourism",
"description": "The MapComplete theme A map of maps has a layer Maps showing features with this tag",
"value": "map"
"data_format": 1,
"project": {
"name": "MapComplete A map of maps",
"description": "This theme shows all (touristic) maps that OpenStreetMap knows of",
"project_url": "https://mapcomplete.osm.be/maps",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/maps/logo.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
{
"key": "information",
"description": "The MapComplete theme A map of maps has a layer Maps showing features with this tag",
"value": "map"
},
{
"key": "image",
"description": "The layer 'Maps 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 'Maps 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 'Maps 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 'Maps 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": "map_source",
"description": "Layer 'Maps' shows and asks freeform values for key 'map_source' (in the MapComplete.osm.be theme 'A map of maps')"
},
{
"key": "map_source",
"description": "Layer 'Maps' shows map_source=OpenStreetMap&not:map_source= with a fixed text, namely 'This map is based on OpenStreetMap' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'A map of maps')",
"value": "OpenStreetMap"
},
{
"key": "not:map_source",
"description": "Layer 'Maps' shows map_source=OpenStreetMap&not:map_source= with a fixed text, namely 'This map is based on OpenStreetMap' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'A map of maps') Picking this answer will delete the key not:map_source.",
"value": ""
},
{
"key": "map_source:attribution",
"description": "Layer 'Maps' shows map_source:attribution=yes with a fixed text, namely 'OpenStreetMap is clearly attributed, including the ODBL-license' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'A map of maps')",
"value": "yes"
},
{
"key": "map_source:attribution",
"description": "Layer 'Maps' shows map_source:attribution=incomplete with a fixed text, namely 'OpenStreetMap is clearly attributed, but the license is not mentioned' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'A map of maps')",
"value": "incomplete"
},
{
"key": "map_source:attribution",
"description": "Layer 'Maps' shows map_source:attribution=sticker with a fixed text, namely 'OpenStreetMap wasn't mentioned, but someone put an OpenStreetMap-sticker on it' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'A map of maps')",
"value": "sticker"
},
{
"key": "map_source:attribution",
"description": "Layer 'Maps' shows map_source:attribution=none with a fixed text, namely 'There is no attribution at all' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'A map of maps')",
"value": "none"
},
{
"key": "map_source:attribution",
"description": "Layer 'Maps' shows map_source:attribution=no with a fixed text, namely 'There is no attribution at all' (in the MapComplete.osm.be theme 'A map of maps')",
"value": "no"
},
{
"key": "service:bicycle:cleaning:charge",
"description": "Layer 'Maps' shows and asks freeform values for key 'service:bicycle:cleaning:charge' (in the MapComplete.osm.be theme 'A map of maps')"
},
{
"key": "service:bicycle:cleaning:fee",
"description": "Layer 'Maps' shows service:bicycle:cleaning:fee=no&service:bicycle:cleaning:charge= 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 'A map of maps')",
"value": "no&service:bicycle:cleaning:charge="
},
{
"key": "service:bicycle:cleaning:fee",
"description": "Layer 'Maps' shows service:bicycle:cleaning:fee=no& with a fixed text, namely 'Free to use' (in the MapComplete.osm.be theme 'A map of maps')",
"value": "no&"
},
{
"key": "service:bicycle:cleaning:fee",
"description": "Layer 'Maps' shows service:bicycle:cleaning:fee=yes with a fixed text, namely 'The cleaning service has a fee' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'A map of maps')",
"value": "yes"
}
]
"tags": [
{
"key": "tourism",
"description": "The MapComplete theme A map of maps has a layer Maps showing features with this tag",
"value": "map"
},
{
"key": "information",
"description": "The MapComplete theme A map of maps has a layer Maps showing features with this tag",
"value": "map"
},
{
"key": "image",
"description": "The layer 'Maps 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 'Maps 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 'Maps 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 'Maps 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": "map_source",
"description": "Layer 'Maps' shows and asks freeform values for key 'map_source' (in the MapComplete.osm.be theme 'A map of maps')"
},
{
"key": "map_source",
"description": "Layer 'Maps' shows map_source=OpenStreetMap&not:map_source= with a fixed text, namely 'This map is based on OpenStreetMap' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'A map of maps')",
"value": "OpenStreetMap"
},
{
"key": "not:map_source",
"description": "Layer 'Maps' shows map_source=OpenStreetMap&not:map_source= with a fixed text, namely 'This map is based on OpenStreetMap' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'A map of maps') Picking this answer will delete the key not:map_source.",
"value": ""
},
{
"key": "map_source:attribution",
"description": "Layer 'Maps' shows map_source:attribution=yes with a fixed text, namely 'OpenStreetMap is clearly attributed, including the ODBL-license' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'A map of maps')",
"value": "yes"
},
{
"key": "map_source:attribution",
"description": "Layer 'Maps' shows map_source:attribution=incomplete with a fixed text, namely 'OpenStreetMap is clearly attributed, but the license is not mentioned' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'A map of maps')",
"value": "incomplete"
},
{
"key": "map_source:attribution",
"description": "Layer 'Maps' shows map_source:attribution=sticker with a fixed text, namely 'OpenStreetMap wasn't mentioned, but someone put an OpenStreetMap-sticker on it' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'A map of maps')",
"value": "sticker"
},
{
"key": "map_source:attribution",
"description": "Layer 'Maps' shows map_source:attribution=none with a fixed text, namely 'There is no attribution at all' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'A map of maps')",
"value": "none"
},
{
"key": "map_source:attribution",
"description": "Layer 'Maps' shows map_source:attribution=no with a fixed text, namely 'There is no attribution at all' (in the MapComplete.osm.be theme 'A map of maps')",
"value": "no"
},
{
"key": "service:bicycle:cleaning:charge",
"description": "Layer 'Maps' shows and asks freeform values for key 'service:bicycle:cleaning:charge' (in the MapComplete.osm.be theme 'A map of maps')"
},
{
"key": "service:bicycle:cleaning:fee",
"description": "Layer 'Maps' shows service:bicycle:cleaning:fee=no&service:bicycle:cleaning:charge= 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 'A map of maps')",
"value": "no&service:bicycle:cleaning:charge="
},
{
"key": "service:bicycle:cleaning:fee",
"description": "Layer 'Maps' shows service:bicycle:cleaning:fee=no& with a fixed text, namely 'Free to use' (in the MapComplete.osm.be theme 'A map of maps')",
"value": "no&"
},
{
"key": "service:bicycle:cleaning:fee",
"description": "Layer 'Maps' shows service:bicycle:cleaning:fee=yes with a fixed text, namely 'The cleaning service has a fee' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'A map of maps')",
"value": "yes"
}
]
}

File diff suppressed because it is too large Load diff

View file

@ -1,55 +1,55 @@
{
"data_format": 1,
"project": {
"name": "MapComplete OpenWindPowerMap",
"description": "A map for showing and editing wind turbines",
"project_url": "https://mapcomplete.osm.be/openwindpowermap",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/openwindpowermap/wind_turbine.svg",
"contact_name": "Pieter Vander Vennet, Seppe Santens",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "generator:source",
"description": "The MapComplete theme OpenWindPowerMap has a layer wind turbine showing features with this tag",
"value": "wind"
"data_format": 1,
"project": {
"name": "MapComplete OpenWindPowerMap",
"description": "A map for showing and editing wind turbines",
"project_url": "https://mapcomplete.osm.be/openwindpowermap",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/openwindpowermap/wind_turbine.svg",
"contact_name": "Pieter Vander Vennet, Seppe Santens",
"contact_email": "pietervdvn@posteo.net"
},
{
"key": "generator:output:electricity",
"description": "Layer 'wind turbine' shows and asks freeform values for key 'generator:output:electricity' (in the MapComplete.osm.be theme 'OpenWindPowerMap')"
},
{
"key": "operator",
"description": "Layer 'wind turbine' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'OpenWindPowerMap')"
},
{
"key": "height",
"description": "Layer 'wind turbine' shows and asks freeform values for key 'height' (in the MapComplete.osm.be theme 'OpenWindPowerMap')"
},
{
"key": "rotor:diameter",
"description": "Layer 'wind turbine' shows and asks freeform values for key 'rotor:diameter' (in the MapComplete.osm.be theme 'OpenWindPowerMap')"
},
{
"key": "start_date",
"description": "Layer 'wind turbine' shows and asks freeform values for key 'start_date' (in the MapComplete.osm.be theme 'OpenWindPowerMap')"
},
{
"key": "image",
"description": "The layer 'wind turbine 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 'wind turbine 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 'wind turbine 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 'wind turbine 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"
}
]
"tags": [
{
"key": "generator:source",
"description": "The MapComplete theme OpenWindPowerMap has a layer wind turbine showing features with this tag",
"value": "wind"
},
{
"key": "generator:output:electricity",
"description": "Layer 'wind turbine' shows and asks freeform values for key 'generator:output:electricity' (in the MapComplete.osm.be theme 'OpenWindPowerMap')"
},
{
"key": "operator",
"description": "Layer 'wind turbine' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'OpenWindPowerMap')"
},
{
"key": "height",
"description": "Layer 'wind turbine' shows and asks freeform values for key 'height' (in the MapComplete.osm.be theme 'OpenWindPowerMap')"
},
{
"key": "rotor:diameter",
"description": "Layer 'wind turbine' shows and asks freeform values for key 'rotor:diameter' (in the MapComplete.osm.be theme 'OpenWindPowerMap')"
},
{
"key": "start_date",
"description": "Layer 'wind turbine' shows and asks freeform values for key 'start_date' (in the MapComplete.osm.be theme 'OpenWindPowerMap')"
},
{
"key": "image",
"description": "The layer 'wind turbine 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 'wind turbine 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 'wind turbine 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 'wind turbine 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"
}
]
}

View file

@ -1,122 +1,122 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Parking",
"description": "This map shows different parking spots",
"project_url": "https://mapcomplete.osm.be/parkings",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/parkings/parkings.svg",
"contact_name": "Pieter Vander Vennet, ",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "amenity",
"description": "The MapComplete theme Parking has a layer parking showing features with this tag",
"value": "parking"
"data_format": 1,
"project": {
"name": "MapComplete Parking",
"description": "This map shows different parking spots",
"project_url": "https://mapcomplete.osm.be/parkings",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/parkings/parkings.svg",
"contact_name": "Pieter Vander Vennet, ",
"contact_email": "pietervdvn@posteo.net"
},
{
"key": "amenity",
"description": "The MapComplete theme Parking has a layer parking showing features with this tag",
"value": "motorcycle_parking"
},
{
"key": "amenity",
"description": "The MapComplete theme Parking has a layer parking showing features with this tag",
"value": "bicycle_parking"
},
{
"key": "image",
"description": "The layer 'parking 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 'parking 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 'parking 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 'parking 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": "access:description",
"description": "Layer 'parking' shows and asks freeform values for key 'access:description' (in the MapComplete.osm.be theme 'Parking')"
},
{
"key": "access",
"description": "Layer 'parking' shows access=yes&fee= with a fixed text, namely 'Vrij toegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking')",
"value": "yes"
},
{
"key": "fee",
"description": "Layer 'parking' shows access=yes&fee= with a fixed text, namely 'Vrij toegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking') Picking this answer will delete the key fee.",
"value": ""
},
{
"key": "access",
"description": "Layer 'parking' shows access=no&fee= with a fixed text, namely 'Niet toegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking')",
"value": "no"
},
{
"key": "fee",
"description": "Layer 'parking' shows access=no&fee= with a fixed text, namely 'Niet toegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking') Picking this answer will delete the key fee.",
"value": ""
},
{
"key": "access",
"description": "Layer 'parking' shows access=private&fee= with a fixed text, namely 'Niet toegankelijk, want privégebied' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking')",
"value": "private"
},
{
"key": "fee",
"description": "Layer 'parking' shows access=private&fee= with a fixed text, namely 'Niet toegankelijk, want privégebied' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking') Picking this answer will delete the key fee.",
"value": ""
},
{
"key": "access",
"description": "Layer 'parking' shows access=permissive&fee= with a fixed text, namely 'Toegankelijk, ondanks dat het privegebied is' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking')",
"value": "permissive"
},
{
"key": "fee",
"description": "Layer 'parking' shows access=permissive&fee= with a fixed text, namely 'Toegankelijk, ondanks dat het privegebied is' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking') Picking this answer will delete the key fee.",
"value": ""
},
{
"key": "access",
"description": "Layer 'parking' shows access=guided&fee= with a fixed text, namely 'Enkel toegankelijk met een gids of tijdens een activiteit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking')",
"value": "guided"
},
{
"key": "fee",
"description": "Layer 'parking' shows access=guided&fee= with a fixed text, namely 'Enkel toegankelijk met een gids of tijdens een activiteit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking') Picking this answer will delete the key fee.",
"value": ""
},
{
"key": "access",
"description": "Layer 'parking' shows access=yes&fee=yes with a fixed text, namely 'Toegankelijk mits betaling' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking')",
"value": "yes"
},
{
"key": "fee",
"description": "Layer 'parking' shows access=yes&fee=yes with a fixed text, namely 'Toegankelijk mits betaling' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking')",
"value": "yes"
},
{
"key": "operator",
"description": "Layer 'parking' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Parking')"
},
{
"key": "operator",
"description": "Layer 'parking' shows operator=Natuurpunt with a fixed text, namely '<img src=\"./assets/themes/buurtnatuur/Natuurpunt.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door Natuurpunt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking')",
"value": "Natuurpunt"
},
{
"key": "operator",
"description": "Layer 'parking' shows operator~^(n|N)atuurpunt.*$ with a fixed text, namely '<img src=\"./assets/themes/buurtnatuur/Natuurpunt.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door {operator}' (in the MapComplete.osm.be theme 'Parking')"
}
]
"tags": [
{
"key": "amenity",
"description": "The MapComplete theme Parking has a layer parking showing features with this tag",
"value": "parking"
},
{
"key": "amenity",
"description": "The MapComplete theme Parking has a layer parking showing features with this tag",
"value": "motorcycle_parking"
},
{
"key": "amenity",
"description": "The MapComplete theme Parking has a layer parking showing features with this tag",
"value": "bicycle_parking"
},
{
"key": "image",
"description": "The layer 'parking 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 'parking 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 'parking 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 'parking 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": "access:description",
"description": "Layer 'parking' shows and asks freeform values for key 'access:description' (in the MapComplete.osm.be theme 'Parking')"
},
{
"key": "access",
"description": "Layer 'parking' shows access=yes&fee= with a fixed text, namely 'Vrij toegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking')",
"value": "yes"
},
{
"key": "fee",
"description": "Layer 'parking' shows access=yes&fee= with a fixed text, namely 'Vrij toegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking') Picking this answer will delete the key fee.",
"value": ""
},
{
"key": "access",
"description": "Layer 'parking' shows access=no&fee= with a fixed text, namely 'Niet toegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking')",
"value": "no"
},
{
"key": "fee",
"description": "Layer 'parking' shows access=no&fee= with a fixed text, namely 'Niet toegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking') Picking this answer will delete the key fee.",
"value": ""
},
{
"key": "access",
"description": "Layer 'parking' shows access=private&fee= with a fixed text, namely 'Niet toegankelijk, want privégebied' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking')",
"value": "private"
},
{
"key": "fee",
"description": "Layer 'parking' shows access=private&fee= with a fixed text, namely 'Niet toegankelijk, want privégebied' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking') Picking this answer will delete the key fee.",
"value": ""
},
{
"key": "access",
"description": "Layer 'parking' shows access=permissive&fee= with a fixed text, namely 'Toegankelijk, ondanks dat het privegebied is' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking')",
"value": "permissive"
},
{
"key": "fee",
"description": "Layer 'parking' shows access=permissive&fee= with a fixed text, namely 'Toegankelijk, ondanks dat het privegebied is' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking') Picking this answer will delete the key fee.",
"value": ""
},
{
"key": "access",
"description": "Layer 'parking' shows access=guided&fee= with a fixed text, namely 'Enkel toegankelijk met een gids of tijdens een activiteit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking')",
"value": "guided"
},
{
"key": "fee",
"description": "Layer 'parking' shows access=guided&fee= with a fixed text, namely 'Enkel toegankelijk met een gids of tijdens een activiteit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking') Picking this answer will delete the key fee.",
"value": ""
},
{
"key": "access",
"description": "Layer 'parking' shows access=yes&fee=yes with a fixed text, namely 'Toegankelijk mits betaling' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking')",
"value": "yes"
},
{
"key": "fee",
"description": "Layer 'parking' shows access=yes&fee=yes with a fixed text, namely 'Toegankelijk mits betaling' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking')",
"value": "yes"
},
{
"key": "operator",
"description": "Layer 'parking' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Parking')"
},
{
"key": "operator",
"description": "Layer 'parking' shows operator=Natuurpunt with a fixed text, namely '<img src=\"./assets/themes/buurtnatuur/Natuurpunt.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door Natuurpunt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Parking')",
"value": "Natuurpunt"
},
{
"key": "operator",
"description": "Layer 'parking' shows operator~^(n|N)atuurpunt.*$ with a fixed text, namely '<img src=\"./assets/themes/buurtnatuur/Natuurpunt.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door {operator}' (in the MapComplete.osm.be theme 'Parking')"
}
]
}

View file

@ -1,13 +1,13 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Personal theme",
"description": "Create a personal theme based on all the available layers of all themes",
"project_url": "https://mapcomplete.osm.be/personal",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/svg/addSmall.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
"tags": []
"data_format": 1,
"project": {
"name": "MapComplete Personal theme",
"description": "Create a personal theme based on all the available layers of all themes",
"project_url": "https://mapcomplete.osm.be/personal",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/svg/addSmall.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
"tags": []
}

View file

@ -1,168 +1,168 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Playgrounds",
"description": "A map with playgrounds",
"project_url": "https://mapcomplete.osm.be/playgrounds",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/playgrounds/playground.svg",
"contact_name": "Pieter Vander Vennet, ",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "leisure",
"description": "The MapComplete theme Playgrounds has a layer Playgrounds showing features with this tag",
"value": "playground"
"data_format": 1,
"project": {
"name": "MapComplete Playgrounds",
"description": "A map with playgrounds",
"project_url": "https://mapcomplete.osm.be/playgrounds",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/playgrounds/playground.svg",
"contact_name": "Pieter Vander Vennet, ",
"contact_email": "pietervdvn@posteo.net"
},
{
"key": "image",
"description": "The layer 'Playgrounds 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 'Playgrounds 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 'Playgrounds 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 'Playgrounds 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": "surface",
"description": "Layer 'Playgrounds' shows and asks freeform values for key 'surface' (in the MapComplete.osm.be theme 'Playgrounds')"
},
{
"key": "surface",
"description": "Layer 'Playgrounds' 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 'Playgrounds')",
"value": "grass"
},
{
"key": "surface",
"description": "Layer 'Playgrounds' 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 'Playgrounds')",
"value": "sand"
},
{
"key": "surface",
"description": "Layer 'Playgrounds' shows surface=woodchips with a fixed text, namely 'The surface consist of <b>woodchips</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "woodchips"
},
{
"key": "surface",
"description": "Layer 'Playgrounds' 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 'Playgrounds')",
"value": "paving_stones"
},
{
"key": "surface",
"description": "Layer 'Playgrounds' 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 'Playgrounds')",
"value": "asphalt"
},
{
"key": "surface",
"description": "Layer 'Playgrounds' 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 'Playgrounds')",
"value": "concrete"
},
{
"key": "surface",
"description": "Layer 'Playgrounds' shows surface=unpaved with a fixed text, namely 'The surface is <b>unpaved</b>' (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "unpaved"
},
{
"key": "surface",
"description": "Layer 'Playgrounds' shows surface=paved with a fixed text, namely 'The surface is <b>paved</b>' (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "paved"
},
{
"key": "lit",
"description": "Layer 'Playgrounds' shows lit=yes with a fixed text, namely 'This playground is lit at night' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "yes"
},
{
"key": "lit",
"description": "Layer 'Playgrounds' shows lit=no with a fixed text, namely 'This playground is not lit at night' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "no"
},
{
"key": "min_age",
"description": "Layer 'Playgrounds' shows and asks freeform values for key 'min_age' (in the MapComplete.osm.be theme 'Playgrounds')"
},
{
"key": "max_age",
"description": "Layer 'Playgrounds' shows and asks freeform values for key 'max_age' (in the MapComplete.osm.be theme 'Playgrounds')"
},
{
"key": "operator",
"description": "Layer 'Playgrounds' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Playgrounds')"
},
{
"key": "access",
"description": "Layer 'Playgrounds' shows access= with a fixed text, namely 'Accessible to the general public' (in the MapComplete.osm.be theme 'Playgrounds') Picking this answer will delete the key access.",
"value": ""
},
{
"key": "access",
"description": "Layer 'Playgrounds' shows access=yes with a fixed text, namely 'Accessible to the general public' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "yes"
},
{
"key": "access",
"description": "Layer 'Playgrounds' shows access=customers with a fixed text, namely 'Only accessible for clients of the operating business' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "customers"
},
{
"key": "access",
"description": "Layer 'Playgrounds' shows access=students with a fixed text, namely 'Only accessible to students of the school' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "students"
},
{
"key": "access",
"description": "Layer 'Playgrounds' shows access=private with a fixed text, namely 'Not accessible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "private"
},
{
"key": "email",
"description": "Layer 'Playgrounds' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Playgrounds')"
},
{
"key": "phone",
"description": "Layer 'Playgrounds' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Playgrounds')"
},
{
"key": "wheelchair",
"description": "Layer 'Playgrounds' shows wheelchair=yes with a fixed text, namely 'Completely accessible for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "yes"
},
{
"key": "wheelchair",
"description": "Layer 'Playgrounds' shows wheelchair=limited with a fixed text, namely 'Limited accessibility for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "limited"
},
{
"key": "wheelchair",
"description": "Layer 'Playgrounds' shows wheelchair=no with a fixed text, namely 'Not accessible for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "no"
},
{
"key": "opening_hours",
"description": "Layer 'Playgrounds' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Playgrounds')"
},
{
"key": "opening_hours",
"description": "Layer 'Playgrounds' shows opening_hours=sunrise-sunset with a fixed text, namely 'Accessible from sunrise till sunset' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "sunrise-sunset"
},
{
"key": "opening_hours",
"description": "Layer 'Playgrounds' 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 'Playgrounds')",
"value": "24/7"
},
{
"key": "opening_hours",
"description": "Layer 'Playgrounds' shows opening_hours= with a fixed text, namely 'Always accessible' (in the MapComplete.osm.be theme 'Playgrounds') Picking this answer will delete the key opening_hours.",
"value": ""
}
]
"tags": [
{
"key": "leisure",
"description": "The MapComplete theme Playgrounds has a layer Playgrounds showing features with this tag",
"value": "playground"
},
{
"key": "image",
"description": "The layer 'Playgrounds 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 'Playgrounds 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 'Playgrounds 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 'Playgrounds 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": "surface",
"description": "Layer 'Playgrounds' shows and asks freeform values for key 'surface' (in the MapComplete.osm.be theme 'Playgrounds')"
},
{
"key": "surface",
"description": "Layer 'Playgrounds' 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 'Playgrounds')",
"value": "grass"
},
{
"key": "surface",
"description": "Layer 'Playgrounds' 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 'Playgrounds')",
"value": "sand"
},
{
"key": "surface",
"description": "Layer 'Playgrounds' shows surface=woodchips with a fixed text, namely 'The surface consist of <b>woodchips</b>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "woodchips"
},
{
"key": "surface",
"description": "Layer 'Playgrounds' 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 'Playgrounds')",
"value": "paving_stones"
},
{
"key": "surface",
"description": "Layer 'Playgrounds' 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 'Playgrounds')",
"value": "asphalt"
},
{
"key": "surface",
"description": "Layer 'Playgrounds' 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 'Playgrounds')",
"value": "concrete"
},
{
"key": "surface",
"description": "Layer 'Playgrounds' shows surface=unpaved with a fixed text, namely 'The surface is <b>unpaved</b>' (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "unpaved"
},
{
"key": "surface",
"description": "Layer 'Playgrounds' shows surface=paved with a fixed text, namely 'The surface is <b>paved</b>' (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "paved"
},
{
"key": "lit",
"description": "Layer 'Playgrounds' shows lit=yes with a fixed text, namely 'This playground is lit at night' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "yes"
},
{
"key": "lit",
"description": "Layer 'Playgrounds' shows lit=no with a fixed text, namely 'This playground is not lit at night' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "no"
},
{
"key": "min_age",
"description": "Layer 'Playgrounds' shows and asks freeform values for key 'min_age' (in the MapComplete.osm.be theme 'Playgrounds')"
},
{
"key": "max_age",
"description": "Layer 'Playgrounds' shows and asks freeform values for key 'max_age' (in the MapComplete.osm.be theme 'Playgrounds')"
},
{
"key": "operator",
"description": "Layer 'Playgrounds' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Playgrounds')"
},
{
"key": "access",
"description": "Layer 'Playgrounds' shows access= with a fixed text, namely 'Accessible to the general public' (in the MapComplete.osm.be theme 'Playgrounds') Picking this answer will delete the key access.",
"value": ""
},
{
"key": "access",
"description": "Layer 'Playgrounds' shows access=yes with a fixed text, namely 'Accessible to the general public' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "yes"
},
{
"key": "access",
"description": "Layer 'Playgrounds' shows access=customers with a fixed text, namely 'Only accessible for clients of the operating business' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "customers"
},
{
"key": "access",
"description": "Layer 'Playgrounds' shows access=students with a fixed text, namely 'Only accessible to students of the school' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "students"
},
{
"key": "access",
"description": "Layer 'Playgrounds' shows access=private with a fixed text, namely 'Not accessible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "private"
},
{
"key": "email",
"description": "Layer 'Playgrounds' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Playgrounds')"
},
{
"key": "phone",
"description": "Layer 'Playgrounds' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Playgrounds')"
},
{
"key": "wheelchair",
"description": "Layer 'Playgrounds' shows wheelchair=yes with a fixed text, namely 'Completely accessible for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "yes"
},
{
"key": "wheelchair",
"description": "Layer 'Playgrounds' shows wheelchair=limited with a fixed text, namely 'Limited accessibility for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "limited"
},
{
"key": "wheelchair",
"description": "Layer 'Playgrounds' shows wheelchair=no with a fixed text, namely 'Not accessible for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "no"
},
{
"key": "opening_hours",
"description": "Layer 'Playgrounds' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Playgrounds')"
},
{
"key": "opening_hours",
"description": "Layer 'Playgrounds' shows opening_hours=sunrise-sunset with a fixed text, namely 'Accessible from sunrise till sunset' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Playgrounds')",
"value": "sunrise-sunset"
},
{
"key": "opening_hours",
"description": "Layer 'Playgrounds' 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 'Playgrounds')",
"value": "24/7"
},
{
"key": "opening_hours",
"description": "Layer 'Playgrounds' shows opening_hours= with a fixed text, namely 'Always accessible' (in the MapComplete.osm.be theme 'Playgrounds') Picking this answer will delete the key opening_hours.",
"value": ""
}
]
}

View file

@ -1,93 +1,93 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Open Shop Map",
"description": "An editable map with basic shop information",
"project_url": "https://mapcomplete.osm.be/shops",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/shops/shop.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "shop",
"description": "The MapComplete theme Open Shop Map has a layer Shop showing features with this tag"
"data_format": 1,
"project": {
"name": "MapComplete Open Shop Map",
"description": "An editable map with basic shop information",
"project_url": "https://mapcomplete.osm.be/shops",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/shops/shop.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
{
"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 '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=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=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=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=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=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=car_repair with a fixed text, namely 'Car repair (garage)' 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=car with a fixed text, namely 'Car dealer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "car"
},
{
"key": "phone",
"description": "Layer 'Shop' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Open Shop Map')"
},
{
"key": "website",
"description": "Layer 'Shop' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Open Shop Map')"
},
{
"key": "email",
"description": "Layer 'Shop' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Open Shop Map')"
},
{
"key": "opening_hours",
"description": "Layer 'Shop' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Open Shop Map')"
}
]
"tags": [
{
"key": "shop",
"description": "The MapComplete theme Open Shop Map has a layer Shop showing features with this tag"
},
{
"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 '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=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=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=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=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=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=car_repair with a fixed text, namely 'Car repair (garage)' 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=car with a fixed text, namely 'Car dealer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')",
"value": "car"
},
{
"key": "phone",
"description": "Layer 'Shop' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Open Shop Map')"
},
{
"key": "website",
"description": "Layer 'Shop' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Open Shop Map')"
},
{
"key": "email",
"description": "Layer 'Shop' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Open Shop Map')"
},
{
"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

@ -1,160 +1,160 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Sport pitches",
"description": "A map showing sport pitches",
"project_url": "https://mapcomplete.osm.be/sport_pitches",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/layers/sport_pitch/table_tennis.svg",
"contact_name": "Pieter Vander Vennet, ",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "leisure",
"description": "The MapComplete theme Sport pitches has a layer Sport pitches showing features with this tag",
"value": "pitch"
"data_format": 1,
"project": {
"name": "MapComplete Sport pitches",
"description": "A map showing sport pitches",
"project_url": "https://mapcomplete.osm.be/sport_pitches",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/layers/sport_pitch/table_tennis.svg",
"contact_name": "Pieter Vander Vennet, ",
"contact_email": "pietervdvn@posteo.net"
},
{
"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 'Sport pitches')"
},
{
"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 'Sport pitches')",
"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 'Sport pitches')",
"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 'Sport pitches')",
"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 'Sport pitches')",
"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 'Sport pitches')",
"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 'Sport pitches')",
"value": "basket"
},
{
"key": "surface",
"description": "Layer 'Sport pitches' shows and asks freeform values for key 'surface' (in the MapComplete.osm.be theme 'Sport pitches')"
},
{
"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 'Sport pitches')",
"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 'Sport pitches')",
"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 'Sport pitches')",
"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 'Sport pitches')",
"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 'Sport pitches')",
"value": "concrete"
},
{
"key": "access",
"description": "Layer 'Sport pitches' shows access=public with a fixed text, namely 'Public access' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sport pitches')",
"value": "public"
},
{
"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 'Sport pitches')",
"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 'Sport pitches')",
"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 'Sport pitches')",
"value": "private"
},
{
"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 'Sport pitches')",
"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 'Sport pitches')",
"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 'Sport pitches')",
"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 'Sport pitches')",
"value": "no"
},
{
"key": "phone",
"description": "Layer 'Sport pitches' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Sport pitches')"
},
{
"key": "email",
"description": "Layer 'Sport pitches' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Sport pitches')"
},
{
"key": "opening_hours",
"description": "Layer 'Sport pitches' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Sport pitches')"
},
{
"key": "opening_hours",
"description": "Layer 'Sport pitches' shows opening_hours= with a fixed text, namely '24/7 toegankelijk' (in the MapComplete.osm.be theme 'Sport pitches') 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 'Sport pitches')",
"value": "24/7"
}
]
"tags": [
{
"key": "leisure",
"description": "The MapComplete theme Sport pitches 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 'Sport pitches')"
},
{
"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 'Sport pitches')",
"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 'Sport pitches')",
"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 'Sport pitches')",
"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 'Sport pitches')",
"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 'Sport pitches')",
"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 'Sport pitches')",
"value": "basket"
},
{
"key": "surface",
"description": "Layer 'Sport pitches' shows and asks freeform values for key 'surface' (in the MapComplete.osm.be theme 'Sport pitches')"
},
{
"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 'Sport pitches')",
"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 'Sport pitches')",
"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 'Sport pitches')",
"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 'Sport pitches')",
"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 'Sport pitches')",
"value": "concrete"
},
{
"key": "access",
"description": "Layer 'Sport pitches' shows access=public with a fixed text, namely 'Public access' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Sport pitches')",
"value": "public"
},
{
"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 'Sport pitches')",
"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 'Sport pitches')",
"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 'Sport pitches')",
"value": "private"
},
{
"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 'Sport pitches')",
"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 'Sport pitches')",
"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 'Sport pitches')",
"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 'Sport pitches')",
"value": "no"
},
{
"key": "phone",
"description": "Layer 'Sport pitches' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Sport pitches')"
},
{
"key": "email",
"description": "Layer 'Sport pitches' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Sport pitches')"
},
{
"key": "opening_hours",
"description": "Layer 'Sport pitches' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Sport pitches')"
},
{
"key": "opening_hours",
"description": "Layer 'Sport pitches' shows opening_hours= with a fixed text, namely '24/7 toegankelijk' (in the MapComplete.osm.be theme 'Sport pitches') 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 'Sport pitches')",
"value": "24/7"
}
]
}

View file

@ -1,177 +1,177 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Surveillance under Surveillance",
"description": "Surveillance cameras and other means of surveillance",
"project_url": "https://mapcomplete.osm.be/surveillance",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/surveillance/logo.svg",
"contact_name": "Pieter Vander Vennet, ",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "camera:direction",
"description": "The MapComplete theme Surveillance under Surveillance has a layer Direction visualization showing features with this tag"
"data_format": 1,
"project": {
"name": "MapComplete Surveillance under Surveillance",
"description": "Surveillance cameras and other means of surveillance",
"project_url": "https://mapcomplete.osm.be/surveillance",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/surveillance/logo.svg",
"contact_name": "Pieter Vander Vennet, ",
"contact_email": "pietervdvn@posteo.net"
},
{
"key": "direction",
"description": "The MapComplete theme Surveillance under Surveillance has a layer Direction visualization showing features with this tag"
},
{
"key": "man_made",
"description": "The MapComplete theme Surveillance under Surveillance has a layer Surveillance camera's showing features with this tag",
"value": "surveillance"
},
{
"key": "surveillance:type",
"description": "The MapComplete theme Surveillance under Surveillance has a layer Surveillance camera's showing features with this tag",
"value": "camera"
},
{
"key": "surveillance:type",
"description": "The MapComplete theme Surveillance under Surveillance has a layer Surveillance camera's showing features with this tag",
"value": "ALPR"
},
{
"key": "surveillance:type",
"description": "The MapComplete theme Surveillance under Surveillance has a layer Surveillance camera's showing features with this tag",
"value": "ANPR"
},
{
"key": "image",
"description": "The layer 'Surveillance camera's 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 'Surveillance camera's 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 'Surveillance camera's 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 'Surveillance camera's 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": "camera:type",
"description": "Layer 'Surveillance camera's' shows camera:type=fixed with a fixed text, namely 'A fixed (non-moving) camera' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "fixed"
},
{
"key": "camera:type",
"description": "Layer 'Surveillance camera's' shows camera:type=dome with a fixed text, namely 'A dome camera (which can turn)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "dome"
},
{
"key": "camera:type",
"description": "Layer 'Surveillance camera's' shows camera:type=panning with a fixed text, namely 'A panning camera' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "panning"
},
{
"key": "camera:direction",
"description": "Layer 'Surveillance camera's' shows and asks freeform values for key 'camera:direction' (in the MapComplete.osm.be theme 'Surveillance under Surveillance')"
},
{
"key": "camera:direction",
"description": "Layer 'Surveillance camera's' shows camera:direction=&direction~^..*$ with a fixed text, namely 'Films to a compass heading of {direction}' (in the MapComplete.osm.be theme 'Surveillance under Surveillance') Picking this answer will delete the key camera:direction.",
"value": ""
},
{
"key": "direction",
"description": "Layer 'Surveillance camera's' shows camera:direction=&direction~^..*$ with a fixed text, namely 'Films to a compass heading of {direction}' (in the MapComplete.osm.be theme 'Surveillance under Surveillance')"
},
{
"key": "operator",
"description": "Layer 'Surveillance camera's' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Surveillance under Surveillance')"
},
{
"key": "surveillance",
"description": "Layer 'Surveillance camera's' shows surveillance=public with a fixed text, namely 'A public area is surveilled, such as a street, a bridge, a square, a park, a train station, a public corridor or tunnel,...' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "public"
},
{
"key": "surveillance",
"description": "Layer 'Surveillance camera's' shows surveillance=outdoor with a fixed text, namely 'An outdoor, yet private area is surveilled (e.g. a parking lot, a fuel station, courtyard, entrance, private driveway, ...)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "outdoor"
},
{
"key": "surveillance",
"description": "Layer 'Surveillance camera's' shows surveillance=indoor with a fixed text, namely 'A private indoor area is surveilled, e.g. a shop, a private underground parking, ...' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "indoor"
},
{
"key": "indoor",
"description": "Layer 'Surveillance camera's' shows indoor=yes with a fixed text, namely 'This camera is located indoors' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "yes"
},
{
"key": "indoor",
"description": "Layer 'Surveillance camera's' shows indoor=no with a fixed text, namely 'This camera is located outdoors' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "no"
},
{
"key": "indoor",
"description": "Layer 'Surveillance camera's' shows indoor= with a fixed text, namely 'This camera is probably located outdoors' (in the MapComplete.osm.be theme 'Surveillance under Surveillance') Picking this answer will delete the key indoor.",
"value": ""
},
{
"key": "level",
"description": "Layer 'Surveillance camera's' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'Surveillance under Surveillance')"
},
{
"key": "surveillance:zone",
"description": "Layer 'Surveillance camera's' shows and asks freeform values for key 'surveillance:zone' (in the MapComplete.osm.be theme 'Surveillance under Surveillance')"
},
{
"key": "surveillance:zone",
"description": "Layer 'Surveillance camera's' shows surveillance:zone=parking with a fixed text, namely 'Surveills a parking' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "parking"
},
{
"key": "surveillance:zone",
"description": "Layer 'Surveillance camera's' shows surveillance:zone=traffic with a fixed text, namely 'Surveills the traffic' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "traffic"
},
{
"key": "surveillance:zone",
"description": "Layer 'Surveillance camera's' shows surveillance:zone=entrance with a fixed text, namely 'Surveills an entrance' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "entrance"
},
{
"key": "surveillance:zone",
"description": "Layer 'Surveillance camera's' shows surveillance:zone=corridor with a fixed text, namely 'Surveills a corridor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "corridor"
},
{
"key": "surveillance:zone",
"description": "Layer 'Surveillance camera's' shows surveillance:zone=public_transport_platform with a fixed text, namely 'Surveills a public tranport platform' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "public_transport_platform"
},
{
"key": "surveillance:zone",
"description": "Layer 'Surveillance camera's' shows surveillance:zone=shop with a fixed text, namely 'Surveills a shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "shop"
},
{
"key": "camera:mount",
"description": "Layer 'Surveillance camera's' shows and asks freeform values for key 'camera:mount' (in the MapComplete.osm.be theme 'Surveillance under Surveillance')"
},
{
"key": "camera:mount",
"description": "Layer 'Surveillance camera's' shows camera:mount=wall with a fixed text, namely 'This camera is placed against a wall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "wall"
},
{
"key": "camera:mount",
"description": "Layer 'Surveillance camera's' shows camera:mount=pole with a fixed text, namely 'This camera is placed one a pole' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "pole"
},
{
"key": "camera:mount",
"description": "Layer 'Surveillance camera's' shows camera:mount=ceiling with a fixed text, namely 'This camera is placed on the ceiling' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "ceiling"
}
]
"tags": [
{
"key": "camera:direction",
"description": "The MapComplete theme Surveillance under Surveillance has a layer Direction visualization showing features with this tag"
},
{
"key": "direction",
"description": "The MapComplete theme Surveillance under Surveillance has a layer Direction visualization showing features with this tag"
},
{
"key": "man_made",
"description": "The MapComplete theme Surveillance under Surveillance has a layer Surveillance camera's showing features with this tag",
"value": "surveillance"
},
{
"key": "surveillance:type",
"description": "The MapComplete theme Surveillance under Surveillance has a layer Surveillance camera's showing features with this tag",
"value": "camera"
},
{
"key": "surveillance:type",
"description": "The MapComplete theme Surveillance under Surveillance has a layer Surveillance camera's showing features with this tag",
"value": "ALPR"
},
{
"key": "surveillance:type",
"description": "The MapComplete theme Surveillance under Surveillance has a layer Surveillance camera's showing features with this tag",
"value": "ANPR"
},
{
"key": "image",
"description": "The layer 'Surveillance camera's 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 'Surveillance camera's 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 'Surveillance camera's 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 'Surveillance camera's 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": "camera:type",
"description": "Layer 'Surveillance camera's' shows camera:type=fixed with a fixed text, namely 'A fixed (non-moving) camera' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "fixed"
},
{
"key": "camera:type",
"description": "Layer 'Surveillance camera's' shows camera:type=dome with a fixed text, namely 'A dome camera (which can turn)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "dome"
},
{
"key": "camera:type",
"description": "Layer 'Surveillance camera's' shows camera:type=panning with a fixed text, namely 'A panning camera' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "panning"
},
{
"key": "camera:direction",
"description": "Layer 'Surveillance camera's' shows and asks freeform values for key 'camera:direction' (in the MapComplete.osm.be theme 'Surveillance under Surveillance')"
},
{
"key": "camera:direction",
"description": "Layer 'Surveillance camera's' shows camera:direction=&direction~^..*$ with a fixed text, namely 'Films to a compass heading of {direction}' (in the MapComplete.osm.be theme 'Surveillance under Surveillance') Picking this answer will delete the key camera:direction.",
"value": ""
},
{
"key": "direction",
"description": "Layer 'Surveillance camera's' shows camera:direction=&direction~^..*$ with a fixed text, namely 'Films to a compass heading of {direction}' (in the MapComplete.osm.be theme 'Surveillance under Surveillance')"
},
{
"key": "operator",
"description": "Layer 'Surveillance camera's' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Surveillance under Surveillance')"
},
{
"key": "surveillance",
"description": "Layer 'Surveillance camera's' shows surveillance=public with a fixed text, namely 'A public area is surveilled, such as a street, a bridge, a square, a park, a train station, a public corridor or tunnel,...' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "public"
},
{
"key": "surveillance",
"description": "Layer 'Surveillance camera's' shows surveillance=outdoor with a fixed text, namely 'An outdoor, yet private area is surveilled (e.g. a parking lot, a fuel station, courtyard, entrance, private driveway, ...)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "outdoor"
},
{
"key": "surveillance",
"description": "Layer 'Surveillance camera's' shows surveillance=indoor with a fixed text, namely 'A private indoor area is surveilled, e.g. a shop, a private underground parking, ...' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "indoor"
},
{
"key": "indoor",
"description": "Layer 'Surveillance camera's' shows indoor=yes with a fixed text, namely 'This camera is located indoors' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "yes"
},
{
"key": "indoor",
"description": "Layer 'Surveillance camera's' shows indoor=no with a fixed text, namely 'This camera is located outdoors' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "no"
},
{
"key": "indoor",
"description": "Layer 'Surveillance camera's' shows indoor= with a fixed text, namely 'This camera is probably located outdoors' (in the MapComplete.osm.be theme 'Surveillance under Surveillance') Picking this answer will delete the key indoor.",
"value": ""
},
{
"key": "level",
"description": "Layer 'Surveillance camera's' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'Surveillance under Surveillance')"
},
{
"key": "surveillance:zone",
"description": "Layer 'Surveillance camera's' shows and asks freeform values for key 'surveillance:zone' (in the MapComplete.osm.be theme 'Surveillance under Surveillance')"
},
{
"key": "surveillance:zone",
"description": "Layer 'Surveillance camera's' shows surveillance:zone=parking with a fixed text, namely 'Surveills a parking' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "parking"
},
{
"key": "surveillance:zone",
"description": "Layer 'Surveillance camera's' shows surveillance:zone=traffic with a fixed text, namely 'Surveills the traffic' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "traffic"
},
{
"key": "surveillance:zone",
"description": "Layer 'Surveillance camera's' shows surveillance:zone=entrance with a fixed text, namely 'Surveills an entrance' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "entrance"
},
{
"key": "surveillance:zone",
"description": "Layer 'Surveillance camera's' shows surveillance:zone=corridor with a fixed text, namely 'Surveills a corridor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "corridor"
},
{
"key": "surveillance:zone",
"description": "Layer 'Surveillance camera's' shows surveillance:zone=public_transport_platform with a fixed text, namely 'Surveills a public tranport platform' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "public_transport_platform"
},
{
"key": "surveillance:zone",
"description": "Layer 'Surveillance camera's' shows surveillance:zone=shop with a fixed text, namely 'Surveills a shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "shop"
},
{
"key": "camera:mount",
"description": "Layer 'Surveillance camera's' shows and asks freeform values for key 'camera:mount' (in the MapComplete.osm.be theme 'Surveillance under Surveillance')"
},
{
"key": "camera:mount",
"description": "Layer 'Surveillance camera's' shows camera:mount=wall with a fixed text, namely 'This camera is placed against a wall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "wall"
},
{
"key": "camera:mount",
"description": "Layer 'Surveillance camera's' shows camera:mount=pole with a fixed text, namely 'This camera is placed one a pole' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "pole"
},
{
"key": "camera:mount",
"description": "Layer 'Surveillance camera's' shows camera:mount=ceiling with a fixed text, namely 'This camera is placed on the ceiling' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Surveillance under Surveillance')",
"value": "ceiling"
}
]
}

View file

@ -1,137 +1,137 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Open Toilet Map",
"description": "A map of public toilets",
"project_url": "https://mapcomplete.osm.be/toilets",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/toilets/toilets.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "amenity",
"description": "The MapComplete theme Open Toilet Map has a layer Toilets showing features with this tag",
"value": "toilets"
"data_format": 1,
"project": {
"name": "MapComplete Open Toilet Map",
"description": "A map of public toilets",
"project_url": "https://mapcomplete.osm.be/toilets",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/toilets/toilets.svg",
"contact_name": "Pieter Vander Vennet, MapComplete",
"contact_email": "pietervdvn@posteo.net"
},
{
"key": "image",
"description": "The layer 'Toilets 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 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 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 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": "access",
"description": "Layer 'Toilets' shows and asks freeform values for key 'access' (in the MapComplete.osm.be theme 'Open Toilet Map')"
},
{
"key": "access",
"description": "Layer 'Toilets' 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 'Open Toilet Map')",
"value": "yes"
},
{
"key": "access",
"description": "Layer 'Toilets' shows access=customers with a fixed text, namely 'Only access to customers' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "customers"
},
{
"key": "access",
"description": "Layer 'Toilets' shows access=no with a fixed text, namely 'Not accessible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "no"
},
{
"key": "access",
"description": "Layer 'Toilets' shows 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": "fee",
"description": "Layer 'Toilets' shows 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": "fee",
"description": "Layer 'Toilets' shows 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": "charge",
"description": "Layer 'Toilets' shows and asks freeform values for key 'charge' (in the MapComplete.osm.be theme 'Open Toilet Map')"
},
{
"key": "wheelchair",
"description": "Layer 'Toilets' shows 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": "wheelchair",
"description": "Layer 'Toilets' shows 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:position",
"description": "Layer 'Toilets' shows toilets:position=seated with a fixed text, namely 'There are only seated toilets' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "seated"
},
{
"key": "toilets:position",
"description": "Layer 'Toilets' shows toilets:position=urinal with a fixed text, namely 'There are only urinals here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "urinal"
},
{
"key": "toilets:position",
"description": "Layer 'Toilets' shows toilets:position=squat with a fixed text, namely 'There are only squat toilets here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "squat"
},
{
"key": "toilets:position",
"description": "Layer 'Toilets' shows toilets:position=seated;urinal with a fixed text, namely 'Both seated toilets and urinals are available here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "seated;urinal"
},
{
"key": "changing_table",
"description": "Layer 'Toilets' shows changing_table=yes with a fixed text, namely 'A changing table is available' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "yes"
},
{
"key": "changing_table",
"description": "Layer 'Toilets' shows changing_table=no with a fixed text, namely 'No changing table is available' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "no"
},
{
"key": "changing_table:location",
"description": "Layer 'Toilets' shows and asks freeform values for key 'changing_table:location' (in the MapComplete.osm.be theme 'Open Toilet Map')"
},
{
"key": "changing_table:location",
"description": "Layer 'Toilets' shows changing_table:location=female_toilet with a fixed text, namely 'The changing table is in the toilet for women. ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "female_toilet"
},
{
"key": "changing_table:location",
"description": "Layer 'Toilets' shows changing_table:location=male_toilet with a fixed text, namely 'The changing table is in the toilet for men. ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "male_toilet"
},
{
"key": "changing_table:location",
"description": "Layer 'Toilets' shows changing_table:location=wheelchair_toilet with a fixed text, namely 'The changing table is in the toilet for wheelchair users. ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "wheelchair_toilet"
},
{
"key": "changing_table:location",
"description": "Layer 'Toilets' shows changing_table:location=dedicated_room with a fixed text, namely 'The changing table is in a dedicated room. ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "dedicated_room"
}
]
"tags": [
{
"key": "amenity",
"description": "The MapComplete theme Open Toilet Map has a layer Toilets showing features with this tag",
"value": "toilets"
},
{
"key": "image",
"description": "The layer 'Toilets 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 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 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 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": "access",
"description": "Layer 'Toilets' shows and asks freeform values for key 'access' (in the MapComplete.osm.be theme 'Open Toilet Map')"
},
{
"key": "access",
"description": "Layer 'Toilets' 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 'Open Toilet Map')",
"value": "yes"
},
{
"key": "access",
"description": "Layer 'Toilets' shows access=customers with a fixed text, namely 'Only access to customers' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "customers"
},
{
"key": "access",
"description": "Layer 'Toilets' shows access=no with a fixed text, namely 'Not accessible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "no"
},
{
"key": "access",
"description": "Layer 'Toilets' shows 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": "fee",
"description": "Layer 'Toilets' shows 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": "fee",
"description": "Layer 'Toilets' shows 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": "charge",
"description": "Layer 'Toilets' shows and asks freeform values for key 'charge' (in the MapComplete.osm.be theme 'Open Toilet Map')"
},
{
"key": "wheelchair",
"description": "Layer 'Toilets' shows 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": "wheelchair",
"description": "Layer 'Toilets' shows 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:position",
"description": "Layer 'Toilets' shows toilets:position=seated with a fixed text, namely 'There are only seated toilets' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "seated"
},
{
"key": "toilets:position",
"description": "Layer 'Toilets' shows toilets:position=urinal with a fixed text, namely 'There are only urinals here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "urinal"
},
{
"key": "toilets:position",
"description": "Layer 'Toilets' shows toilets:position=squat with a fixed text, namely 'There are only squat toilets here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "squat"
},
{
"key": "toilets:position",
"description": "Layer 'Toilets' shows toilets:position=seated;urinal with a fixed text, namely 'Both seated toilets and urinals are available here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "seated;urinal"
},
{
"key": "changing_table",
"description": "Layer 'Toilets' shows changing_table=yes with a fixed text, namely 'A changing table is available' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "yes"
},
{
"key": "changing_table",
"description": "Layer 'Toilets' shows changing_table=no with a fixed text, namely 'No changing table is available' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "no"
},
{
"key": "changing_table:location",
"description": "Layer 'Toilets' shows and asks freeform values for key 'changing_table:location' (in the MapComplete.osm.be theme 'Open Toilet Map')"
},
{
"key": "changing_table:location",
"description": "Layer 'Toilets' shows changing_table:location=female_toilet with a fixed text, namely 'The changing table is in the toilet for women. ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "female_toilet"
},
{
"key": "changing_table:location",
"description": "Layer 'Toilets' shows changing_table:location=male_toilet with a fixed text, namely 'The changing table is in the toilet for men. ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "male_toilet"
},
{
"key": "changing_table:location",
"description": "Layer 'Toilets' shows changing_table:location=wheelchair_toilet with a fixed text, namely 'The changing table is in the toilet for wheelchair users. ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "wheelchair_toilet"
},
{
"key": "changing_table:location",
"description": "Layer 'Toilets' shows changing_table:location=dedicated_room with a fixed text, namely 'The changing table is in a dedicated room. ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')",
"value": "dedicated_room"
}
]
}

View file

@ -1,170 +1,170 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Trees",
"description": "Map all the trees",
"project_url": "https://mapcomplete.osm.be/trees",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/trees/logo.svg",
"contact_name": "Pieter Vander Vennet, Midgard",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "natural",
"description": "The MapComplete theme Trees has a layer Tree showing features with this tag",
"value": "tree"
"data_format": 1,
"project": {
"name": "MapComplete Trees",
"description": "Map all the trees",
"project_url": "https://mapcomplete.osm.be/trees",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/trees/logo.svg",
"contact_name": "Pieter Vander Vennet, Midgard",
"contact_email": "pietervdvn@posteo.net"
},
{
"key": "image",
"description": "The layer 'Tree 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 'Tree 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 'Tree 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 'Tree 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": "height",
"description": "Layer 'Tree' shows height~^^[0-9.]+$$ with a fixed text, namely 'Height: {height}&nbsp;m' (in the MapComplete.osm.be theme 'Trees')"
},
{
"key": "leaf_type",
"description": "Layer 'Tree' shows leaf_type=broadleaved with a fixed text, namely '<img src=\"./assets/themes/trees/broadleaved.svg\" style=\"width:1.5em;height:1.5em\" alt=\"\"/> Broadleaved' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "broadleaved"
},
{
"key": "leaf_type",
"description": "Layer 'Tree' shows leaf_type=needleleaved with a fixed text, namely '<img src=\"./assets/themes/trees/needleleaved.svg\" style=\"width:1.5em;height:1.5em\" alt=\"\"/> Needleleaved' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "needleleaved"
},
{
"key": "leaf_type",
"description": "Layer 'Tree' shows leaf_type=leafless with a fixed text, namely '<img src=\"./assets/themes/trees/leafless.svg\" style=\"width:1.5em;height:1.5em\" alt=\"\"/> Permanently leafless' (in the MapComplete.osm.be theme 'Trees')",
"value": "leafless"
},
{
"key": "denotation",
"description": "Layer 'Tree' shows denotation=landmark with a fixed text, namely 'The tree is remarkable due to its size or prominent location. It is useful for navigation.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "landmark"
},
{
"key": "denotation",
"description": "Layer 'Tree' shows denotation=natural_monument with a fixed text, namely 'The tree is a natural monument, e.g. because it is especially old, or of a valuable species.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "natural_monument"
},
{
"key": "denotation",
"description": "Layer 'Tree' shows denotation=agricultural with a fixed text, namely 'The tree is used for agricultural purposes, e.g. in an orchard.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "agricultural"
},
{
"key": "denotation",
"description": "Layer 'Tree' shows denotation=park with a fixed text, namely 'The tree is in a park or similar (cemetery, school grounds, …).' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "park"
},
{
"key": "denotation",
"description": "Layer 'Tree' shows denotation=garden with a fixed text, namely 'The tree is a residential garden.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "garden"
},
{
"key": "denotation",
"description": "Layer 'Tree' shows denotation=avenue with a fixed text, namely 'This is a tree along an avenue.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "avenue"
},
{
"key": "denotation",
"description": "Layer 'Tree' shows denotation=urban with a fixed text, namely 'The tree is an urban area.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "urban"
},
{
"key": "denotation",
"description": "Layer 'Tree' shows denotation=none with a fixed text, namely 'The tree is outside of an urban area.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "none"
},
{
"key": "leaf_cycle",
"description": "Layer 'Tree' shows leaf_cycle=deciduous with a fixed text, namely 'Deciduous: the tree loses its leaves for some time of the year.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "deciduous"
},
{
"key": "leaf_cycle",
"description": "Layer 'Tree' shows leaf_cycle=evergreen with a fixed text, namely 'Evergreen.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "evergreen"
},
{
"key": "name",
"description": "Layer 'Tree' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Trees')"
},
{
"key": "name",
"description": "Layer 'Tree' shows name=&noname=yes with a fixed text, namely 'The tree does not have a name.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees') Picking this answer will delete the key name.",
"value": ""
},
{
"key": "noname",
"description": "Layer 'Tree' shows name=&noname=yes with a fixed text, namely 'The tree does not have a name.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "yes"
},
{
"key": "heritage",
"description": "Layer 'Tree' shows heritage=4&heritage:operator=OnroerendErfgoed with a fixed text, namely '<img src=\"./assets/layers/tree_node/Onroerend_Erfgoed_logo_without_text.svg\" style=\"width:0.85em;height:1em;vertical-align:middle\" alt=\"\"/> Registered as heritage by <i>Onroerend Erfgoed</i> Flanders' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "4"
},
{
"key": "heritage:operator",
"description": "Layer 'Tree' shows heritage=4&heritage:operator=OnroerendErfgoed with a fixed text, namely '<img src=\"./assets/layers/tree_node/Onroerend_Erfgoed_logo_without_text.svg\" style=\"width:0.85em;height:1em;vertical-align:middle\" alt=\"\"/> Registered as heritage by <i>Onroerend Erfgoed</i> Flanders' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "OnroerendErfgoed"
},
{
"key": "heritage",
"description": "Layer 'Tree' shows heritage=4&heritage:operator=aatl with a fixed text, namely 'Registered as heritage by <i>Direction du Patrimoine culturel</i> Brussels' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "4"
},
{
"key": "heritage:operator",
"description": "Layer 'Tree' shows heritage=4&heritage:operator=aatl with a fixed text, namely 'Registered as heritage by <i>Direction du Patrimoine culturel</i> Brussels' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "aatl"
},
{
"key": "heritage",
"description": "Layer 'Tree' shows heritage=yes&heritage:operator= with a fixed text, namely 'Registered as heritage by a different organisation' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "yes"
},
{
"key": "heritage:operator",
"description": "Layer 'Tree' shows heritage=yes&heritage:operator= with a fixed text, namely 'Registered as heritage by a different organisation' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees') Picking this answer will delete the key heritage:operator.",
"value": ""
},
{
"key": "heritage",
"description": "Layer 'Tree' shows heritage=no&heritage:operator= with a fixed text, namely 'Not registered as heritage' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "no"
},
{
"key": "heritage:operator",
"description": "Layer 'Tree' shows heritage=no&heritage:operator= with a fixed text, namely 'Not registered as heritage' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees') Picking this answer will delete the key heritage:operator.",
"value": ""
},
{
"key": "heritage",
"description": "Layer 'Tree' shows heritage~^..*$ with a fixed text, namely 'Registered as heritage by a different organisation' (in the MapComplete.osm.be theme 'Trees')"
},
{
"key": "ref:OnroerendErfgoed",
"description": "Layer 'Tree' shows and asks freeform values for key 'ref:OnroerendErfgoed' (in the MapComplete.osm.be theme 'Trees')"
},
{
"key": "wikidata",
"description": "Layer 'Tree' shows and asks freeform values for key 'wikidata' (in the MapComplete.osm.be theme 'Trees')"
}
]
"tags": [
{
"key": "natural",
"description": "The MapComplete theme Trees has a layer Tree showing features with this tag",
"value": "tree"
},
{
"key": "image",
"description": "The layer 'Tree 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 'Tree 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 'Tree 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 'Tree 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": "height",
"description": "Layer 'Tree' shows height~^^[0-9.]+$$ with a fixed text, namely 'Height: {height}&nbsp;m' (in the MapComplete.osm.be theme 'Trees')"
},
{
"key": "leaf_type",
"description": "Layer 'Tree' shows leaf_type=broadleaved with a fixed text, namely '<img src=\"./assets/themes/trees/broadleaved.svg\" style=\"width:1.5em;height:1.5em\" alt=\"\"/> Broadleaved' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "broadleaved"
},
{
"key": "leaf_type",
"description": "Layer 'Tree' shows leaf_type=needleleaved with a fixed text, namely '<img src=\"./assets/themes/trees/needleleaved.svg\" style=\"width:1.5em;height:1.5em\" alt=\"\"/> Needleleaved' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "needleleaved"
},
{
"key": "leaf_type",
"description": "Layer 'Tree' shows leaf_type=leafless with a fixed text, namely '<img src=\"./assets/themes/trees/leafless.svg\" style=\"width:1.5em;height:1.5em\" alt=\"\"/> Permanently leafless' (in the MapComplete.osm.be theme 'Trees')",
"value": "leafless"
},
{
"key": "denotation",
"description": "Layer 'Tree' shows denotation=landmark with a fixed text, namely 'The tree is remarkable due to its size or prominent location. It is useful for navigation.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "landmark"
},
{
"key": "denotation",
"description": "Layer 'Tree' shows denotation=natural_monument with a fixed text, namely 'The tree is a natural monument, e.g. because it is especially old, or of a valuable species.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "natural_monument"
},
{
"key": "denotation",
"description": "Layer 'Tree' shows denotation=agricultural with a fixed text, namely 'The tree is used for agricultural purposes, e.g. in an orchard.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "agricultural"
},
{
"key": "denotation",
"description": "Layer 'Tree' shows denotation=park with a fixed text, namely 'The tree is in a park or similar (cemetery, school grounds, …).' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "park"
},
{
"key": "denotation",
"description": "Layer 'Tree' shows denotation=garden with a fixed text, namely 'The tree is a residential garden.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "garden"
},
{
"key": "denotation",
"description": "Layer 'Tree' shows denotation=avenue with a fixed text, namely 'This is a tree along an avenue.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "avenue"
},
{
"key": "denotation",
"description": "Layer 'Tree' shows denotation=urban with a fixed text, namely 'The tree is an urban area.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "urban"
},
{
"key": "denotation",
"description": "Layer 'Tree' shows denotation=none with a fixed text, namely 'The tree is outside of an urban area.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "none"
},
{
"key": "leaf_cycle",
"description": "Layer 'Tree' shows leaf_cycle=deciduous with a fixed text, namely 'Deciduous: the tree loses its leaves for some time of the year.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "deciduous"
},
{
"key": "leaf_cycle",
"description": "Layer 'Tree' shows leaf_cycle=evergreen with a fixed text, namely 'Evergreen.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "evergreen"
},
{
"key": "name",
"description": "Layer 'Tree' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Trees')"
},
{
"key": "name",
"description": "Layer 'Tree' shows name=&noname=yes with a fixed text, namely 'The tree does not have a name.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees') Picking this answer will delete the key name.",
"value": ""
},
{
"key": "noname",
"description": "Layer 'Tree' shows name=&noname=yes with a fixed text, namely 'The tree does not have a name.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "yes"
},
{
"key": "heritage",
"description": "Layer 'Tree' shows heritage=4&heritage:operator=OnroerendErfgoed with a fixed text, namely '<img src=\"./assets/layers/tree_node/Onroerend_Erfgoed_logo_without_text.svg\" style=\"width:0.85em;height:1em;vertical-align:middle\" alt=\"\"/> Registered as heritage by <i>Onroerend Erfgoed</i> Flanders' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "4"
},
{
"key": "heritage:operator",
"description": "Layer 'Tree' shows heritage=4&heritage:operator=OnroerendErfgoed with a fixed text, namely '<img src=\"./assets/layers/tree_node/Onroerend_Erfgoed_logo_without_text.svg\" style=\"width:0.85em;height:1em;vertical-align:middle\" alt=\"\"/> Registered as heritage by <i>Onroerend Erfgoed</i> Flanders' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "OnroerendErfgoed"
},
{
"key": "heritage",
"description": "Layer 'Tree' shows heritage=4&heritage:operator=aatl with a fixed text, namely 'Registered as heritage by <i>Direction du Patrimoine culturel</i> Brussels' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "4"
},
{
"key": "heritage:operator",
"description": "Layer 'Tree' shows heritage=4&heritage:operator=aatl with a fixed text, namely 'Registered as heritage by <i>Direction du Patrimoine culturel</i> Brussels' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "aatl"
},
{
"key": "heritage",
"description": "Layer 'Tree' shows heritage=yes&heritage:operator= with a fixed text, namely 'Registered as heritage by a different organisation' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "yes"
},
{
"key": "heritage:operator",
"description": "Layer 'Tree' shows heritage=yes&heritage:operator= with a fixed text, namely 'Registered as heritage by a different organisation' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees') Picking this answer will delete the key heritage:operator.",
"value": ""
},
{
"key": "heritage",
"description": "Layer 'Tree' shows heritage=no&heritage:operator= with a fixed text, namely 'Not registered as heritage' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees')",
"value": "no"
},
{
"key": "heritage:operator",
"description": "Layer 'Tree' shows heritage=no&heritage:operator= with a fixed text, namely 'Not registered as heritage' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Trees') Picking this answer will delete the key heritage:operator.",
"value": ""
},
{
"key": "heritage",
"description": "Layer 'Tree' shows heritage~^..*$ with a fixed text, namely 'Registered as heritage by a different organisation' (in the MapComplete.osm.be theme 'Trees')"
},
{
"key": "ref:OnroerendErfgoed",
"description": "Layer 'Tree' shows and asks freeform values for key 'ref:OnroerendErfgoed' (in the MapComplete.osm.be theme 'Trees')"
},
{
"key": "wikidata",
"description": "Layer 'Tree' shows and asks freeform values for key 'wikidata' (in the MapComplete.osm.be theme 'Trees')"
}
]
}

View file

@ -1,19 +1,19 @@
{
"data_format": 1,
"project": {
"name": "MapComplete Waste Basket",
"description": "A map with waste baskets",
"project_url": "https://mapcomplete.osm.be/waste_basket",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/waste_basket/waste_basket.svg",
"contact_name": "Pieter Vander Vennet, ",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "amenity",
"description": "The MapComplete theme Waste Basket has a layer Waste Basket showing features with this tag",
"value": "waste_basket"
}
]
"data_format": 1,
"project": {
"name": "MapComplete Waste Basket",
"description": "A map with waste baskets",
"project_url": "https://mapcomplete.osm.be/waste_basket",
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
"icon_url": "https://mapcomplete.osm.be/assets/themes/waste_basket/waste_basket.svg",
"contact_name": "Pieter Vander Vennet, ",
"contact_email": "pietervdvn@posteo.net"
},
"tags": [
{
"key": "amenity",
"description": "The MapComplete theme Waste Basket has a layer Waste Basket showing features with this tag",
"value": "waste_basket"
}
]
}

View file

@ -1,48 +1,59 @@
Tags format
Tags format
=============
When creating the `json` file describing your layer or theme, you'll have to add a few tags to describe what you want. This document gives an overview of what every expression means and how it behaves in edge cases.
When creating the `json` file describing your layer or theme, you'll have to add a few tags to describe what you want.
This document gives an overview of what every expression means and how it behaves in edge cases.
Strict equality
---------------
Strict equality is denoted by `key=value`. This key matches __only if__ the keypair is present exactly as stated.
**Only normal tags (eventually in an `and`) can be used in places where they are uploaded**. Normal tags are used in the `mappings` of a [TagRendering] (unless `hideInAnswer` is specified), they are used in `addExtraTags` of [Freeform] and are used in the `tags`-list of a preset.
**Only normal tags (eventually in an `and`) can be used in places where they are uploaded**. Normal tags are used in
the `mappings` of a [TagRendering] (unless `hideInAnswer` is specified), they are used in `addExtraTags` of [Freeform]
and are used in the `tags`-list of a preset.
If a different kind of tag specification is given, your theme will fail to parse.
### If key is not present
If you want to check if a key is not present, use `key=` (pronounce as *key is empty*). A tag collection will match this if `key` is missing or if `key` is a literal empty value.
If you want to check if a key is not present, use `key=` (pronounce as *key is empty*). A tag collection will match this
if `key` is missing or if `key` is a literal empty value.
### Removing a key
If a key should be deleted in the OpenStreetMap-database, specify `key=` as well. This can be used e.g. to remove a fixme or value from another mapping if another field is filled out.
If a key should be deleted in the OpenStreetMap-database, specify `key=` as well. This can be used e.g. to remove a
fixme or value from another mapping if another field is filled out.
Strict not equals
-----------------
To check if a key does _not_ equal a certain value, use `key!=value`. This is converted behind the scenes to `key!~^value$`
To check if a key does _not_ equal a certain value, use `key!=value`. This is converted behind the scenes
to `key!~^value$`
### If key is present
This implies that, to check if a key is present, `key!=` can be used. This will only match if the key is present and not empty.
This implies that, to check if a key is present, `key!=` can be used. This will only match if the key is present and not
empty.
Number comparison
-----------------
If the value of a tag is a number (e.g. `key=42`), one can use a filter `key<=42`, `key>=35`, `key>40` or `key<50` to match this, e.g. in conditions for renderings.
These tags cannot be used to generate an answer nor can they be used to request data upstream from overpass.
If the value of a tag is a number (e.g. `key=42`), one can use a filter `key<=42`, `key>=35`, `key>40` or `key<50` to
match this, e.g. in conditions for renderings. These tags cannot be used to generate an answer nor can they be used to
request data upstream from overpass.
Note that the value coming from OSM will first be stripped by removing all non-numeric characters. For example, `length=42 meter` will be interpreted as `length=42` and will thus match `length<=42` and `length>=42`.
In special circumstances (e.g. `surface_area=42 m2` or `length=100 feet`), this will result in erronous values (`surface=422` or if a length in meters is compared to).
However, this can be partially alleviated by using 'Units' to rewrite to a default format.
Note that the value coming from OSM will first be stripped by removing all non-numeric characters. For
example, `length=42 meter` will be interpreted as `length=42` and will thus match `length<=42` and `length>=42`. In
special circumstances (e.g. `surface_area=42 m2` or `length=100 feet`), this will result in erronous
values (`surface=422` or if a length in meters is compared to). However, this can be partially alleviated by using '
Units' to rewrite to a default format.
Regex equals
------------
A tag can also be tested against a regex with `key~regex`. Note that this regex __must match__ the entire value. If the value is allowed to appear anywhere as substring, use `key~.*regex.*`
A tag can also be tested against a regex with `key~regex`. Note that this regex __must match__ the entire value. If the
value is allowed to appear anywhere as substring, use `key~.*regex.*`
Equivalently, `key!~regex` can be used if you _don't_ want to match the regex in order to appear.
@ -52,16 +63,18 @@ Using other tags as variables
**This is an advanced feature - use with caution**
Some tags are automatically set or calculated - see [CalculatedTags](CalculatedTags.md) for an entire overview.
If one wants to apply such a value as tag, use a substituting-tag such, for example`survey:date:={_date:now}`. Note that the separator between key and value here is `:=`.
The text between `{` and `}` is interpreted as a key, and the respective value is substituted into the string.
Some tags are automatically set or calculated - see [CalculatedTags](CalculatedTags.md) for an entire overview. If one
wants to apply such a value as tag, use a substituting-tag such, for example`survey:date:={_date:now}`. Note that the
separator between key and value here is `:=`. The text between `{` and `}` is interpreted as a key, and the respective
value is substituted into the string.
One can also append, e.g. `key:={some_key} fixed text {some_other_key}`.
An assigning tag _cannot_ be used to query OpenStreetMap/Overpass.
If using a key or variable which might not be defined, add a condition in the mapping to hide the option.
This is because, if `some_other_key` is not defined, one might actually upload the literal text `key={some_other_key}` to OSM - which we do not want.
If using a key or variable which might not be defined, add a condition in the mapping to hide the option. This is
because, if `some_other_key` is not defined, one might actually upload the literal text `key={some_other_key}` to OSM -
which we do not want.
To mitigate this, use:

View file

@ -1,26 +1,23 @@
Talk at State of the Map
========================
Talk at State of the Map
========================
I'm planning to do a talk/video on MapComplete on _State of the Map 2021_. This document outlines the structure of the
talk and serves as my speaker notes.
I'm planning to do a talk/video on MapComplete on _State of the Map 2021_. This document outlines the structure of the talk and serves as my speaker notes.
Overview
--------
Overview
--------
1. What is MapComplete? Three slides
2. Already one year old!
a. Where and how did it start? "This project isn't going anywhere"
(buurtnatuur, cyclofix, Antwerpen, Natuurpunt, Oost-Vlaanderen?, Toerisme Vlaanderen?)
b. Where are we now? Some cool statistics
3. The vision
a. Your granny can use it
a. pragmatism - somewhat working today is better then something perfect tomorrow
a. It's a trap! Cool thematic map (as iframe on website) -> the OSM rabbit hole -> easy start -> more features when mapping more -> oh, I can make a theme too!
b. The pareto frontier of 'easy to use' vs 'number of features'
c. The thematic approach (+ disabling/enabling features per theme/view)
1. What is MapComplete? Three slides
2. Already one year old!
a. Where and how did it start? "This project isn't going anywhere"
(buurtnatuur, cyclofix, Antwerpen, Natuurpunt, Oost-Vlaanderen?, Toerisme Vlaanderen?)
b. Where are we now? Some cool statistics
3. The vision a. Your granny can use it a. pragmatism - somewhat working today is better then something perfect tomorrow
a. It's a trap! Cool thematic map (as iframe on website) -> the OSM rabbit hole -> easy start -> more features when
mapping more -> oh, I can make a theme too!
b. The pareto frontier of 'easy to use' vs 'number of features' c. The thematic approach (+ disabling/enabling
features per theme/view)
4. The future
a. paid projects? Microgrant for a better theme creator?
b. user contributed themes (see you next talk!)
5. OpenStreetMap is Cool!
4. The future a. paid projects? Microgrant for a better theme creator? b. user contributed themes (see you next talk!)
5. OpenStreetMap is Cool!

View file

@ -216,12 +216,6 @@ function createGraph(
}
class Histogram<K> {
total(): number {
let total = 0
Array.from(this.counts.values()).forEach(i => total = total + i)
return total
}
public counts: Map<K, number> = new Map<K, number>()
private sortAtEnd: K[] = []
@ -230,6 +224,11 @@ class Histogram<K> {
keys?.forEach(key => self.bump(key))
}
total(): number {
let total = 0
Array.from(this.counts.values()).forEach(i => total = total + i)
return total
}
public bump(key: K, increase = 1) {
if (this.counts.has(key)) {
@ -525,7 +524,7 @@ function createGraphs(allFeatures: ChangeSetData[], appliedFilterDescription: st
.asPie({
name: "Changesets per host" + appliedFilterDescription
}).render()
new Histogram<string>(allFeatures.map(f => f.properties.metadata.theme))
.createOthersCategory("< 25 changesets", 25)
.addCountToName()
@ -618,7 +617,7 @@ const geojson = {
})
}
writeFileSync("centerpoints.geojson",JSON.stringify(geojson, undefined, 2) )
writeFileSync("centerpoints.geojson", JSON.stringify(geojson, undefined, 2))
createGraphs(allFeatures, "")

View file

@ -1,4 +1,3 @@
URL-parameters and URL-hash
============================
@ -9,8 +8,8 @@ What is a URL parameter?
URL-parameters are extra parts of the URL used to set the state.
For example, if the url is `https://mapcomplete.osm.be/cyclofix?lat=51.0&lon=4.3&z=5&test=true#node/1234`,
the URL-parameters are stated in the part between the `?` and the `#`. There are multiple, all separated by `&`, namely:
For example, if the url is `https://mapcomplete.osm.be/cyclofix?lat=51.0&lon=4.3&z=5&test=true#node/1234`, the
URL-parameters are stated in the part between the `?` and the `#`. There are multiple, all separated by `&`, namely:
- The url-parameter `lat` is `51.0` in this instance
- The url-parameter `lon` is `4.3` in this instance
@ -19,141 +18,147 @@ the URL-parameters are stated in the part between the `?` and the `#`. There are
Finally, the URL-hash is the part after the `#`. It is `node/1234` in this case.
language
language
----------
The language to display mapcomplete in. Will be ignored in case a logged-in-user did set their language before. If the specified language does not exist, it will default to the first language in the theme.
The language to display mapcomplete in. Will be ignored in case a logged-in-user did set their language before. If the
specified language does not exist, it will default to the first language in the theme.
download-control-toggle
download-control-toggle
-------------------------
Whether or not the download panel is shown The default value is _false_
Whether or not the download panel is shown The default value is _false_
filter-toggle
filter-toggle
---------------
Whether or not the filter view is shown The default value is _false_
Whether or not the filter view is shown The default value is _false_
tab
tab
-----
The tab that is shown in the welcome-message. 0 = the explanation of the theme,1 = OSM-credits, 2 = sharescreen, 3 = more themes, 4 = about mapcomplete (user must be logged in and have >50 changesets) The default value is _0_
The tab that is shown in the welcome-message. 0 = the explanation of the theme,1 = OSM-credits, 2 = sharescreen, 3 =
more themes, 4 = about mapcomplete (user must be logged in and have >50 changesets) The default value is _0_
z
z
---
The initial/current zoom level The default value is _0_
The initial/current zoom level The default value is _0_
lat
lat
-----
The initial/current latitude The default value is _0_
The initial/current latitude The default value is _0_
lon
lon
-----
The initial/current longitude of the app The default value is _0_
The initial/current longitude of the app The default value is _0_
fs-userbadge
fs-userbadge
--------------
Disables/Enables the user information pill (userbadge) at the top left. Disabling this disables logging in and thus disables editing all together, effectively putting MapComplete into read-only mode. The default value is _true_
Disables/Enables the user information pill (userbadge) at the top left. Disabling this disables logging in and thus
disables editing all together, effectively putting MapComplete into read-only mode. The default value is _true_
fs-search
fs-search
-----------
Disables/Enables the search bar The default value is _true_
Disables/Enables the search bar The default value is _true_
fs-background
fs-background
---------------
Disables/Enables the background layer control The default value is _true_
Disables/Enables the background layer control The default value is _true_
fs-filter
fs-filter
-----------
Disables/Enables the filter The default value is _true_
Disables/Enables the filter The default value is _true_
fs-add-new
fs-add-new
------------
Disables/Enables the 'add new feature'-popup. (A theme without presets might not have it in the first place) The default value is _true_
Disables/Enables the 'add new feature'-popup. (A theme without presets might not have it in the first place) The default
value is _true_
fs-welcome-message
fs-welcome-message
--------------------
Disables/enables the help menu or welcome message The default value is _true_
Disables/enables the help menu or welcome message The default value is _true_
fs-iframe
fs-iframe
-----------
Disables/Enables the iframe-popup The default value is _false_
Disables/Enables the iframe-popup The default value is _false_
fs-more-quests
fs-more-quests
----------------
Disables/Enables the 'More Quests'-tab in the welcome message The default value is _true_
Disables/Enables the 'More Quests'-tab in the welcome message The default value is _true_
fs-share-screen
fs-share-screen
-----------------
Disables/Enables the 'Share-screen'-tab in the welcome message The default value is _true_
Disables/Enables the 'Share-screen'-tab in the welcome message The default value is _true_
fs-geolocation
fs-geolocation
----------------
Disables/Enables the geolocation button The default value is _true_
Disables/Enables the geolocation button The default value is _true_
fs-all-questions
fs-all-questions
------------------
Always show all questions The default value is _false_
Always show all questions The default value is _false_
fs-export
fs-export
-----------
Enable the export as GeoJSON and CSV button The default value is _false_
Enable the export as GeoJSON and CSV button The default value is _false_
fs-pdf
fs-pdf
--------
Enable the PDF download button The default value is _false_
Enable the PDF download button The default value is _false_
test
test
------
If true, 'dryrun' mode is activated. The app will behave as normal, except that changes to OSM will be printed onto the console instead of actually uploaded to osm.org The default value is _false_
If true, 'dryrun' mode is activated. The app will behave as normal, except that changes to OSM will be printed onto the
console instead of actually uploaded to osm.org The default value is _false_
debug
debug
-------
If true, shows some extra debugging help such as all the available tags on every object The default value is _false_
If true, shows some extra debugging help such as all the available tags on every object The default value is _false_
overpassUrl
-------------
Point mapcomplete to a different overpass-instance. Example: https://overpass-api.de/api/interpreter The default value is _https://overpass.kumi.de/api/interpreter_
Point mapcomplete to a different overpass-instance. Example: https://overpass-api.de/api/interpreter The default value
is _https://overpass.kumi.de/api/interpreter_
overpassTimeout
@ -161,31 +166,32 @@ overpassTimeout
Set a different timeout (in seconds) for queries in overpass The default value is _60_
fake-user
fake-user
-----------
If true, 'dryrun' mode is activated and a fake user account is loaded The default value is _false_
If true, 'dryrun' mode is activated and a fake user account is loaded The default value is _false_
backend
backend
---------
The OSM backend to use - can be used to redirect mapcomplete to the testing backend when using 'osm-test' The default value is _osm_
The OSM backend to use - can be used to redirect mapcomplete to the testing backend when using 'osm-test' The default
value is _osm_
custom-css
custom-css
------------
If specified, the custom css from the given link will be loaded additionaly The default value is __
If specified, the custom css from the given link will be loaded additionaly The default value is __
background
background
------------
The id of the background layer to start with The default value is _osm_
The id of the background layer to start with The default value is _osm_
layer-<layer-id>
layer-<layer-id>
------------------
Wether or not the layer with id <layer-id> is shown The default value is _true_ Generated from QueryParameters
Wether or not the layer with id <layer-id> is shown The default value is _true_ Generated from QueryParameters

View file

@ -3,6 +3,8 @@ What is MapComplete?
MapComplete is a website where people can see a map of Points of Interest (POI) on a specific subject or theme.
If the visitor is logged in with their OpenStreetMap account, information about a selected POI can be enriched by answering questions in the respective popups; this data is sent back directly to OpenStreetMap.
If the visitor is logged in with their OpenStreetMap account, information about a selected POI can be enriched by
answering questions in the respective popups; this data is sent back directly to OpenStreetMap.
While there are some predefined themes available, it is also possible to create your own theme. Have a look on [the OpenStreetMap-wiki](https://wiki.openstreetmap.org/wiki/MapComplete) for a list of (un)official themes.
While there are some predefined themes available, it is also possible to create your own theme. Have a look
on [the OpenStreetMap-wiki](https://wiki.openstreetmap.org/wiki/MapComplete) for a list of (un)official themes.

View file

@ -4,7 +4,6 @@ import Svg from "../../Svg";
import Img from "../../UI/Base/Img";
import {LocalStorageSource} from "../Web/LocalStorageSource";
import {VariableUiElement} from "../../UI/Base/VariableUIElement";
import BaseUIElement from "../../UI/BaseUIElement";
import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig";
import {QueryParameters} from "../Web/QueryParameters";
@ -161,16 +160,16 @@ export default class GeoLocationHandler extends VariableUiElement {
} else {
lastClick.setData(new Date())
}
}else{
} else {
lastClick.setData(new Date())
}
}
self.init(true, true);
});
const latLonGiven = QueryParameters.wasInitialized("lat") && QueryParameters.wasInitialized("lon")
this.init(false, !latLonGiven);
isLocked.addCallbackAndRunD(isLocked => {
@ -180,7 +179,7 @@ export default class GeoLocationHandler extends VariableUiElement {
leafletMap.data?.dragging?.enable()
}
})
this._currentGPSLocation.addCallback((location) => {
self._previousLocationGrant.setData("granted");

View file

@ -6,7 +6,7 @@ import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig";
export default class InstalledThemes {
public installedThemes: UIEventSource<{ layout: LayoutConfig; definition: string }[]>;
constructor(osmConnection: OsmConnection) {
this.installedThemes = osmConnection.preferencesHandler.preferences.map<{ layout: LayoutConfig, definition: string }[]>(allPreferences => {
const installedThemes: { layout: LayoutConfig, definition: string }[] = [];
@ -25,10 +25,10 @@ export default class InstalledThemes {
}
try {
let layoutJson;
try{
try {
layoutJson = JSON.parse(atob(customLayout.data))
}catch(e){
layoutJson = JSON.parse( Utils.UnMinify(LZString.decompressFromBase64(customLayout.data)))
} catch (e) {
layoutJson = JSON.parse(Utils.UnMinify(LZString.decompressFromBase64(customLayout.data)))
}
const layout = new LayoutConfig(layoutJson, false);
installedThemes.push({
@ -43,7 +43,7 @@ export default class InstalledThemes {
}
InstalledThemes.DeleteInvalid(osmConnection, invalidThemes);
return installedThemes;
});

View file

@ -7,13 +7,13 @@ import Loc from "../../Models/Loc";
* Sets the current background layer to a layer that is actually available
*/
export default class LayerResetter {
constructor( currentBackgroundLayer: UIEventSource<BaseLayer>,
location: UIEventSource<Loc>,
availableLayers: UIEventSource<BaseLayer[]>,
defaultLayerId: UIEventSource<string> = undefined) {
defaultLayerId = defaultLayerId ?? new UIEventSource<string>(AvailableBaseLayers.osmCarto.id);
constructor(currentBackgroundLayer: UIEventSource<BaseLayer>,
location: UIEventSource<Loc>,
availableLayers: UIEventSource<BaseLayer[]>,
defaultLayerId: UIEventSource<string> = undefined) {
defaultLayerId = defaultLayerId ?? new UIEventSource<string>(AvailableBaseLayers.osmCarto.id);
// Change the baselayer back to OSM if we go out of the current range of the layer
availableLayers.addCallbackAndRun(availableLayers => {
let defaultLayer = undefined;
@ -28,7 +28,7 @@ export default class LayerResetter {
if (availableLayer.min_zoom > location.data.zoom) {
break;
}
if(availableLayer.id === defaultLayerId.data){
if (availableLayer.id === defaultLayerId.data) {
defaultLayer = availableLayer;
}
return; // All good - the current layer still works!
@ -38,7 +38,7 @@ export default class LayerResetter {
console.log("AvailableBaseLayers-actor: detected that the current bounds aren't sufficient anymore - reverting to OSM standard")
currentBackgroundLayer.setData(defaultLayer ?? AvailableBaseLayers.osmCarto);
});
}
}

View file

@ -13,7 +13,7 @@ import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig";
export default class OverpassFeatureSource implements FeatureSource {
public readonly name = "OverpassFeatureSource"
/**
* The last loaded features of the geojson
*/
@ -147,7 +147,7 @@ export default class OverpassFeatureSource implements FeatureSource {
}
const bounds = this._leafletMap.data?.getBounds();
if(bounds === undefined){
if (bounds === undefined) {
return;
}

View file

@ -54,7 +54,7 @@ export default class PendingChangesUploader {
function onunload(e) {
if(changes.pendingChanges.data.length == 0){
if (changes.pendingChanges.data.length == 0) {
return;
}
changes.flushChanges("onbeforeunload - probably closing or something similar");

View file

@ -3,6 +3,7 @@ Actors
An **actor** is a module which converts one UIEventSource into another while performing logic.
Typically, it will only expose the constructor taking some UIEventSources (and configuration) and a few fields which are UIEVentSources.
Typically, it will only expose the constructor taking some UIEventSources (and configuration) and a few fields which are
UIEVentSources.
An actor should _never_ have a dependency on 'State' and should _never_ import it

View file

@ -9,11 +9,10 @@ import OsmApiFeatureSource from "../FeatureSource/OsmApiFeatureSource";
* Makes sure the hash shows the selected element and vice-versa.
*/
export default class SelectedFeatureHandler {
private static readonly _no_trigger_on = ["welcome", "copyright", "layers", "new"]
private readonly _featureSource: FeatureSource;
private readonly _hash: UIEventSource<string>;
private readonly _selectedFeature: UIEventSource<any>;
private static readonly _no_trigger_on = ["welcome", "copyright", "layers", "new"]
private readonly _osmApiSource: OsmApiFeatureSource;
constructor(hash: UIEventSource<string>,

View file

@ -1,7 +1,5 @@
import * as L from "leaflet";
import Svg from "../../Svg";
import {UIEventSource} from "../UIEventSource";
import Img from "../../UI/Base/Img";
import ScrollableFullScreen from "../../UI/Base/ScrollableFullScreen";
import AddNewMarker from "../../UI/BigComponents/AddNewMarker";
import FilteredLayer from "../../Models/FilteredLayer";
@ -32,28 +30,28 @@ export default class StrayClickHandler {
})
lastClickLocation.addCallback(function (lastClick) {
if (self._lastMarker !== undefined) {
leafletMap.data?.removeLayer(self._lastMarker);
}
if(lastClick === undefined){
if (lastClick === undefined) {
return;
}
selectedElement.setData(undefined);
const clickCoor : [number, number] = [lastClick.lat, lastClick.lon]
const clickCoor: [number, number] = [lastClick.lat, lastClick.lon]
self._lastMarker = L.marker(clickCoor, {
icon: L.divIcon({
html: new AddNewMarker(filteredLayers).ConstructElement(),
iconSize: [50, 50],
iconAnchor: [25, 50],
popupAnchor: [0, -45]
})
})
});
const popup = L.popup({
autoPan: true,
autoPanPaddingTopLeft: [15,15],
autoPanPaddingTopLeft: [15, 15],
closeOnEscapeKey: true,
autoClose: true
}).setContent("<div id='strayclick' style='height: 65vh'></div>");
@ -61,13 +59,13 @@ export default class StrayClickHandler {
self._lastMarker.bindPopup(popup);
self._lastMarker.on("click", () => {
if(leafletMap.data.getZoom() < Constants.userJourney.minZoomLevelToAddNewPoints){
if (leafletMap.data.getZoom() < Constants.userJourney.minZoomLevelToAddNewPoints) {
self._lastMarker.closePopup()
leafletMap.data.flyTo(clickCoor, Constants.userJourney.minZoomLevelToAddNewPoints)
return;
}
uiToShow.AttachTo("strayclick")
uiToShow.Activate();
});

View file

@ -7,7 +7,7 @@ import Combine from "../../UI/Base/Combine";
import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig";
class TitleElement extends UIEventSource<string> {
private readonly _layoutToUse: UIEventSource<LayoutConfig>;
private readonly _selectedFeature: UIEventSource<any>;
private readonly _allElementsStorage: ElementStorage;
@ -16,17 +16,17 @@ class TitleElement extends UIEventSource<string> {
selectedFeature: UIEventSource<any>,
allElementsStorage: ElementStorage) {
super("MapComplete");
this._layoutToUse = layoutToUse;
this._selectedFeature = selectedFeature;
this._allElementsStorage = allElementsStorage;
this.syncWith(
this._selectedFeature.map(
selected => {
const defaultTitle = Translations.WT(this._layoutToUse.data?.title)?.txt ??"MapComplete"
const defaultTitle = Translations.WT(this._layoutToUse.data?.title)?.txt ?? "MapComplete"
if(selected === undefined){
if (selected === undefined) {
return defaultTitle
}
@ -49,10 +49,9 @@ class TitleElement extends UIEventSource<string> {
}
, [Locale.language, layoutToUse]
)
)
}
}

View file

@ -5,8 +5,8 @@ import {UIEventSource} from "./UIEventSource";
export class ElementStorage {
private _elements = new Map<string, UIEventSource<any>>();
public ContainingFeatures = new Map<string, any>();
private _elements = new Map<string, UIEventSource<any>>();
constructor() {
@ -25,16 +25,16 @@ export class ElementStorage {
addOrGetElement(feature: any): UIEventSource<any> {
const elementId = feature.properties.id;
const newProperties = feature.properties;
const es = this.addOrGetById(elementId, newProperties)
// At last, we overwrite the tag of the new feature to use the tags in the already existing event source
feature.properties = es.data
if(!this.ContainingFeatures.has(elementId)){
if (!this.ContainingFeatures.has(elementId)) {
this.ContainingFeatures.set(elementId, feature);
}
return es;
}
@ -69,7 +69,7 @@ export class ElementStorage {
const debug_msg = []
let somethingChanged = false;
for (const k in newProperties) {
if(!newProperties.hasOwnProperty(k)){
if (!newProperties.hasOwnProperty(k)) {
continue;
}
const v = newProperties[k];

View file

@ -14,13 +14,13 @@ export default class FeatureDuplicatorPerLayer implements FeatureSource {
public readonly name;
constructor(layers: UIEventSource<FilteredLayer[]>, upstream: FeatureSource) {
this.name = "FeatureDuplicator of "+upstream.name;
this.name = "FeatureDuplicator of " + upstream.name;
this.features = upstream.features.map(features => {
const newFeatures: { feature: any, freshness: Date }[] = [];
if(features === undefined){
if (features === undefined) {
return newFeatures;
}
for (const f of features) {
if (f.feature._matching_layer_id) {
// Already matched previously
@ -29,7 +29,7 @@ export default class FeatureDuplicatorPerLayer implements FeatureSource {
continue;
}
let foundALayer = false;
for (const layer of layers.data) {
if (layer.layerDef.source.osmTags.matchesProperties(f.feature.properties)) {
@ -43,7 +43,7 @@ export default class FeatureDuplicatorPerLayer implements FeatureSource {
id: f.feature.id,
type: f.feature.type,
properties: f.feature.properties,
_matching_layer_id : layer.layerDef.id
_matching_layer_id: layer.layerDef.id
}
newFeatures.push({feature: newFeature, freshness: f.freshness});
} else {

View file

@ -24,8 +24,8 @@ export class FeatureSourceUtils {
options = Utils.setDefaults(options, defaults);
// Select all features, ignore the freshness and other data
let featureList: any[] = featurePipeline.features.data.map((feature) =>
JSON.parse(JSON.stringify((feature.feature)))); // Make a deep copy!
let featureList: any[] = featurePipeline.features.data.map((feature) =>
JSON.parse(JSON.stringify((feature.feature)))); // Make a deep copy!
if (!options.metadata) {
for (let i = 0; i < featureList.length; i++) {
@ -39,7 +39,7 @@ export class FeatureSourceUtils {
}
return {type: "FeatureCollection", features: featureList}
}

View file

@ -57,12 +57,12 @@ export default class FeatureSourceMerger implements FeatureSource {
}
}
}
if(!somethingChanged){
if (!somethingChanged) {
// We don't bother triggering an update
return;
}
const newList = [];
all.forEach((value, key) => {
newList.push(value)

View file

@ -79,8 +79,8 @@ export default class FilteringFeatureSource implements FeatureSource {
if (result !== "yes") {
return false;
}
}
}
const tagsFilter = layer.appliedFilters.data;
if (tagsFilter) {
if (!tagsFilter.matchesProperties(f.feature.properties)) {
@ -118,7 +118,7 @@ export default class FilteringFeatureSource implements FeatureSource {
if (l.zoom < layer.layerDef.minzoom) {
continue;
}
if (!layer.isDisplayed.data) {
continue;
}

View file

@ -13,10 +13,10 @@ export default class GeoJsonSource implements FeatureSource {
public readonly features: UIEventSource<{ feature: any; freshness: Date }[]>;
public readonly name;
public readonly isOsmCache: boolean
private onFail: ((errorMsg: any, url: string) => void) = undefined;
private readonly layerId: string;
private readonly seenids: Set<string> = new Set<string>()
public readonly isOsmCache: boolean
private constructor(locationControl: UIEventSource<Loc>,
flayer: { isDisplayed: UIEventSource<boolean>, layerDef: LayerConfig },

View file

@ -12,23 +12,23 @@ export default class LocalStorageSaver implements FeatureSource {
public readonly features: UIEventSource<{ feature: any; freshness: Date }[]>;
public readonly name = "LocalStorageSaver";
constructor(source: FeatureSource, layout: UIEventSource<LayoutConfig>) {
this.features = source.features;
this.features.addCallbackAndRunD(features => {
const now = new Date().getTime()
features = features.filter(f => layout.data.cacheTimeout > Math.abs(now - f.freshness.getTime())/1000)
if(features.length == 0){
features = features.filter(f => layout.data.cacheTimeout > Math.abs(now - f.freshness.getTime()) / 1000)
if (features.length == 0) {
return;
}
try {
const key = LocalStorageSaver.storageKey+layout.data.id
const key = LocalStorageSaver.storageKey + layout.data.id
localStorage.setItem(key, JSON.stringify(features));
console.log("Saved ",features.length, "elements to",key)
console.log("Saved ", features.length, "elements to", key)
} catch (e) {
console.warn("Could not save the features to local storage:", e)
}

View file

@ -16,14 +16,14 @@ export default class LocalStorageSource implements FeatureSource {
if (fromStorage == null) {
return;
}
const loaded : { feature: any; freshness: Date | string }[]=
const loaded: { feature: any; freshness: Date | string }[] =
JSON.parse(fromStorage);
const parsed : { feature: any; freshness: Date }[]= loaded.map(ff => ({
const parsed: { feature: any; freshness: Date }[] = loaded.map(ff => ({
feature: ff.feature,
freshness : typeof ff.freshness == "string" ? new Date(ff.freshness) : ff.freshness
freshness: typeof ff.freshness == "string" ? new Date(ff.freshness) : ff.freshness
}))
this.features.setData(parsed);
console.log("Loaded ", loaded.length, " features from localstorage as cache")
} catch (e) {

View file

@ -19,10 +19,10 @@ export default class MetaTaggingFeatureSource implements FeatureSource {
const self = this;
this.name = "MetaTagging of " + source.name
if(allFeaturesSource === undefined){
if (allFeaturesSource === undefined) {
throw ("UIEVentSource is undefined")
}
function update() {
const featuresFreshness = source.features.data
if (featuresFreshness === undefined) {

View file

@ -8,17 +8,17 @@ export default class RememberingSource implements FeatureSource {
public readonly features: UIEventSource<{ feature: any, freshness: Date }[]>;
public readonly name;
constructor(source: FeatureSource) {
const self = this;
this.name = "RememberingSource of "+source.name;
this.name = "RememberingSource of " + source.name;
const empty = [];
this.features = source.features.map(features => {
const oldFeatures = self.features?.data ?? empty;
if (features === undefined) {
return oldFeatures;
}
// Then new ids
const ids = new Set<string>(features.map(f => f.feature.properties.id + f.feature.geometry.type + f.feature._matching_layer_id));
// the old data

View file

@ -185,6 +185,60 @@ export class GeoOperations {
return turf.length(feature) * 1000
}
/**
* Generates the closest point on a way from a given point
* @param way The road on which you want to find a point
* @param point Point defined as [lon, lat]
*/
public static nearestPoint(way, point: [number, number]) {
return turf.nearestPointOnLine(way, point, {units: "kilometers"});
}
public static toCSV(features: any[]): string {
const headerValuesSeen = new Set<string>();
const headerValuesOrdered: string[] = []
function addH(key) {
if (!headerValuesSeen.has(key)) {
headerValuesSeen.add(key)
headerValuesOrdered.push(key)
}
}
addH("_lat")
addH("_lon")
const lines: string[] = []
for (const feature of features) {
const properties = feature.properties;
for (const key in properties) {
if (!properties.hasOwnProperty(key)) {
continue;
}
addH(key)
}
}
headerValuesOrdered.sort()
for (const feature of features) {
const properties = feature.properties;
let line = ""
for (const key of headerValuesOrdered) {
const value = properties[key]
if (value === undefined) {
line += ","
} else {
line += JSON.stringify(value) + ","
}
}
lines.push(line)
}
return headerValuesOrdered.map(v => JSON.stringify(v)).join(",") + "\n" + lines.join("\n")
}
/**
* Calculates the intersection between two features.
* Returns the length if intersecting a linestring and a (multi)polygon (in meters), returns a surface area (in m²) if intersecting two (multi)polygons
@ -277,60 +331,6 @@ export class GeoOperations {
return undefined;
}
/**
* Generates the closest point on a way from a given point
* @param way The road on which you want to find a point
* @param point Point defined as [lon, lat]
*/
public static nearestPoint(way, point: [number, number]) {
return turf.nearestPointOnLine(way, point, {units: "kilometers"});
}
public static toCSV(features: any[]): string {
const headerValuesSeen = new Set<string>();
const headerValuesOrdered: string[] = []
function addH(key) {
if (!headerValuesSeen.has(key)) {
headerValuesSeen.add(key)
headerValuesOrdered.push(key)
}
}
addH("_lat")
addH("_lon")
const lines: string[] = []
for (const feature of features) {
const properties = feature.properties;
for (const key in properties) {
if (!properties.hasOwnProperty(key)) {
continue;
}
addH(key)
}
}
headerValuesOrdered.sort()
for (const feature of features) {
const properties = feature.properties;
let line = ""
for (const key of headerValuesOrdered) {
const value = properties[key]
if (value === undefined) {
line += ","
} else {
line += JSON.stringify(value) + ","
}
}
lines.push(line)
}
return headerValuesOrdered.map(v => JSON.stringify(v)).join(",") + "\n" + lines.join("\n")
}
}
@ -364,7 +364,7 @@ export class BBox {
static get(feature) {
if (feature.bbox?.overlapsWith === undefined) {
const turfBbox: number[] = turf.bbox(feature)
feature.bbox = new BBox([[turfBbox[0], turfBbox[1]],[turfBbox[2], turfBbox[3]]]);
feature.bbox = new BBox([[turfBbox[0], turfBbox[1]], [turfBbox[2], turfBbox[3]]]);
}
return feature.bbox;

View file

@ -2,8 +2,8 @@ import {Mapillary} from "./Mapillary";
import {Wikimedia} from "./Wikimedia";
import {Imgur} from "./Imgur";
export default class AllImageProviders{
export default class AllImageProviders {
public static ImageAttributionSource = [Imgur.singleton, Mapillary.singleton, Wikimedia.singleton]
}

View file

@ -18,12 +18,13 @@ export default abstract class ImageAttributionSource {
}
public abstract SourceIcon(backlinkSource?: string) : BaseUIElement;
protected abstract DownloadAttribution(url: string): UIEventSource<LicenseInfo>;
public abstract SourceIcon(backlinkSource?: string): BaseUIElement;
/*Converts a value to a URL. Can return null if not applicable*/
public PrepareUrl(value: string): string{
public PrepareUrl(value: string): string {
return value;
}
protected abstract DownloadAttribution(url: string): UIEventSource<LicenseInfo>;
}

View file

@ -6,8 +6,8 @@ import {UIEventSource} from "../UIEventSource";
import BaseUIElement from "../../UI/BaseUIElement";
export class Imgur extends ImageAttributionSource {
public static readonly singleton = new Imgur();
public static readonly singleton = new Imgur();
private constructor() {
super();

View file

@ -1,4 +1,3 @@
import $ from "jquery"
import {LicenseInfo} from "./Wikimedia";
import ImageAttributionSource from "./ImageAttributionSource";
import BaseUIElement from "../../UI/BaseUIElement";

View file

@ -77,7 +77,7 @@ export class Wikimedia extends ImageAttributionSource {
static GetWikiData(id: number, handleWikidata: ((Wikidata) => void)) {
const url = "https://www.wikidata.org/wiki/Special:EntityData/Q" + id + ".json";
Utils.downloadJson(url).then (response => {
Utils.downloadJson(url).then(response => {
const entity = response.entities["Q" + id];
const commons = entity.sitelinks.commonswiki;
const wd = new Wikidata();
@ -139,10 +139,10 @@ export class Wikimedia extends ImageAttributionSource {
"titles=" + filename +
"&format=json&origin=*";
Utils.downloadJson(url).then(
data =>{
data => {
const licenseInfo = new LicenseInfo();
const license = (data.query.pages[-1].imageinfo ?? [])[0]?.extmetadata;
if(license === undefined){
if (license === undefined) {
console.error("This file has no usable metedata or license attached... Please fix the license info file yourself!")
source.setData(null)
return;
@ -156,10 +156,10 @@ export class Wikimedia extends ImageAttributionSource {
licenseInfo.licenseShortName = license.LicenseShortName?.value;
licenseInfo.credit = license.Credit?.value;
licenseInfo.description = license.ImageDescription?.value;
source.setData(licenseInfo);
source.setData(licenseInfo);
}
)
return source;
}

View file

@ -18,6 +18,9 @@ interface Params {
export default class MetaTagging {
private static errorPrintCount = 0;
private static readonly stopErrorOutputAt = 10;
/**
* An actor which adds metatags on every feature in the given object
* The features are a list of geojson-features, with a "properties"-field and geometry
@ -86,9 +89,6 @@ export default class MetaTagging {
}
private static errorPrintCount = 0;
private static readonly stopErrorOutputAt = 10;
private static createRetaggingFunc(layer: LayerConfig):
((params: Params, feature: any) => void) {
const calculatedTags: [string, string][] = layer.calculatedTags;
@ -111,7 +111,7 @@ export default class MetaTagging {
const f = (featuresPerLayer, feature: any) => {
try {
let result = func(feature);
if(result instanceof UIEventSource){
if (result instanceof UIEventSource) {
result.addCallbackAndRunD(d => {
if (typeof d !== "string") {
// Make sure it is a string!
@ -121,7 +121,7 @@ export default class MetaTagging {
})
result = result.data
}
if (result === undefined || result === "") {
return;
}

View file

@ -8,11 +8,10 @@ import {GeoOperations} from "../../GeoOperations";
export default class CreateNewNodeAction extends OsmChangeAction {
public newElementId: string = undefined
private readonly _basicTags: Tag[];
private readonly _lat: number;
private readonly _lon: number;
public newElementId: string = undefined
private readonly _snapOnto: OsmWay;
private readonly _reusePointDistance: number;
@ -21,7 +20,7 @@ export default class CreateNewNodeAction extends OsmChangeAction {
this._basicTags = basicTags;
this._lat = lat;
this._lon = lon;
if(lat === undefined || lon === undefined){
if (lat === undefined || lon === undefined) {
throw "Lat or lon are undefined!"
}
this._snapOnto = options?.snapOnto;
@ -82,20 +81,20 @@ export default class CreateNewNodeAction extends OsmChangeAction {
id: reusedPointId
}]
}
const locations = [...this._snapOnto.coordinates]
locations.forEach(coor => coor.reverse())
console.log("Locations are: ", locations)
const ids = [...this._snapOnto.nodes]
locations.splice(index + 1, 0, [this._lon, this._lat])
ids.splice(index + 1, 0, id)
// Allright, we have to insert a new point in the way
return [
newPointChange,
{
type:"way",
type: "way",
id: this._snapOnto.id,
changes: {
locations: locations,

View file

@ -30,7 +30,7 @@ export default class DeleteAction {
* Does actually delete the feature; returns the event source 'this.isDeleted'
* If deletion is not allowed, triggers the callback instead
*/
public DoDelete(reason: string, onNotAllowed : () => void): void {
public DoDelete(reason: string, onNotAllowed: () => void): void {
const isDeleted = this.isDeleted
const self = this;
let deletionStarted = false;
@ -40,23 +40,21 @@ export default class DeleteAction {
// Already deleted...
return;
}
if(canBeDeleted.canBeDeleted === false){
if (canBeDeleted.canBeDeleted === false) {
// We aren't allowed to delete
deletionStarted = true;
onNotAllowed();
isDeleted.setData(true);
return;
}
if (!canBeDeleted) {
// We are not allowed to delete (yet), this might change in the future though
return;
}
deletionStarted = true;
OsmObject.DownloadObject(self._id).addCallbackAndRun(obj => {
if (obj === undefined) {
@ -207,7 +205,7 @@ export default class DeleteAction {
canBeDeleted: false,
reason: t.partOfOthers
})
}else{
} else {
// alright, this point can be safely deleted!
state.setData({
canBeDeleted: true,
@ -215,7 +213,6 @@ export default class DeleteAction {
})
}
}
)

View file

@ -1,12 +1,12 @@
/**
* The logic to handle relations after a way within
* The logic to handle relations after a way within
*/
import OsmChangeAction from "./OsmChangeAction";
import {Changes} from "../Changes";
import {ChangeDescription} from "./ChangeDescription";
import {OsmRelation, OsmWay} from "../OsmObject";
import {OsmRelation} from "../OsmObject";
export default class RelationSplitlHandler extends OsmChangeAction{
export default class RelationSplitlHandler extends OsmChangeAction {
constructor(partOf: OsmRelation[], newWayIds: number[], originalNodes: number[]) {
super()

View file

@ -23,18 +23,18 @@ export class Changes {
public readonly pendingChanges = LocalStorageSource.GetParsed<ChangeDescription[]>("pending-changes", [])
private readonly isUploading = new UIEventSource(false);
private readonly previouslyCreated : OsmObject[] = []
private readonly previouslyCreated: OsmObject[] = []
constructor() {
}
private static createChangesetFor(csId: string,
allChanges: {
modifiedObjects: OsmObject[],
newObjects: OsmObject[],
deletedObjects: OsmObject[]
}): string {
allChanges: {
modifiedObjects: OsmObject[],
newObjects: OsmObject[],
deletedObjects: OsmObject[]
}): string {
const changedElements = allChanges.modifiedObjects ?? []
const newElements = allChanges.newObjects ?? []
@ -70,6 +70,88 @@ export class Changes {
.map(c => c.type + "/" + c.id))
}
/**
* Returns a new ID and updates the value for the next ID
*/
public getNewID() {
return Changes._nextId--;
}
/**
* Uploads all the pending changes in one go.
* Triggered by the 'PendingChangeUploader'-actor in Actors
*/
public flushChanges(flushreason: string = undefined) {
if (this.pendingChanges.data.length === 0) {
return;
}
if (this.isUploading.data) {
console.log("Is already uploading... Abort")
return;
}
this.isUploading.setData(true)
console.log("Beginning upload... " + flushreason ?? "");
// At last, we build the changeset and upload
const self = this;
const pending = self.pendingChanges.data;
const neededIds = Changes.GetNeededIds(pending)
console.log("Needed ids", neededIds)
OsmObject.DownloadAll(neededIds, true).addCallbackAndRunD(osmObjects => {
console.log("Got the fresh objects!", osmObjects, "pending: ", pending)
try {
const changes: {
newObjects: OsmObject[],
modifiedObjects: OsmObject[]
deletedObjects: OsmObject[]
} = self.CreateChangesetObjects(pending, osmObjects)
if (changes.newObjects.length + changes.deletedObjects.length + changes.modifiedObjects.length === 0) {
console.log("No changes to be made")
self.pendingChanges.setData([])
self.isUploading.setData(false)
return true; // Unregister the callback
}
State.state.osmConnection.UploadChangeset(
State.state.layoutToUse.data,
State.state.allElements,
(csId) => Changes.createChangesetFor(csId, changes),
() => {
console.log("Upload successfull!")
self.pendingChanges.setData([]);
self.isUploading.setData(false)
},
() => {
console.log("Upload failed - trying again later")
return self.isUploading.setData(false);
} // Failed - mark to try again
)
} catch (e) {
console.error("Could not handle changes - probably an old, pending changeset in localstorage with an invalid format; erasing those", e)
self.pendingChanges.setData([])
self.isUploading.setData(false)
}
return true;
});
}
public applyAction(action: OsmChangeAction) {
const changes = action.Perform(this)
console.log("Received changes:", changes)
this.pendingChanges.data.push(...changes);
this.pendingChanges.ping();
}
private CreateChangesetObjects(changes: ChangeDescription[], downloadedOsmObjects: OsmObject[]): {
newObjects: OsmObject[],
modifiedObjects: OsmObject[]
@ -85,7 +167,7 @@ export class Changes {
}
for (const o of this.previouslyCreated) {
objects.set(o.type + "/" + o.id, o)
objects.set(o.type + "/" + o.id, o)
states.set(o.type + "/" + o.id, "unchanged")
}
@ -93,8 +175,8 @@ export class Changes {
for (const change of changes) {
const id = change.type + "/" + change.id
if (!objects.has(id)) {
if(change.id >= 0){
throw "Did not get an object that should be known: "+id
if (change.id >= 0) {
throw "Did not get an object that should be known: " + id
}
// This is a new object that should be created
states.set(id, "created")
@ -189,7 +271,7 @@ export class Changes {
break;
}
}
if (changed && state === "unchanged") {
@ -203,7 +285,7 @@ export class Changes {
modifiedObjects: [],
deletedObjects: []
}
objects.forEach((v, id) => {
const state = states.get(id)
@ -221,86 +303,4 @@ export class Changes {
return result
}
/**
* Returns a new ID and updates the value for the next ID
*/
public getNewID() {
return Changes._nextId--;
}
/**
* Uploads all the pending changes in one go.
* Triggered by the 'PendingChangeUploader'-actor in Actors
*/
public flushChanges(flushreason: string = undefined) {
if (this.pendingChanges.data.length === 0) {
return;
}
if (this.isUploading.data) {
console.log("Is already uploading... Abort")
return;
}
this.isUploading.setData(true)
console.log("Beginning upload... "+flushreason ?? "");
// At last, we build the changeset and upload
const self = this;
const pending = self.pendingChanges.data;
const neededIds = Changes.GetNeededIds(pending)
console.log("Needed ids", neededIds)
OsmObject.DownloadAll(neededIds, true).addCallbackAndRunD(osmObjects => {
console.log("Got the fresh objects!", osmObjects, "pending: ", pending)
try{
const changes: {
newObjects: OsmObject[],
modifiedObjects: OsmObject[]
deletedObjects: OsmObject[]
} = self.CreateChangesetObjects(pending, osmObjects)
if (changes.newObjects.length + changes.deletedObjects.length + changes.modifiedObjects.length === 0) {
console.log("No changes to be made")
self.pendingChanges.setData([])
self.isUploading.setData(false)
return true; // Unregister the callback
}
State.state.osmConnection.UploadChangeset(
State.state.layoutToUse.data,
State.state.allElements,
(csId) => Changes.createChangesetFor(csId, changes),
() => {
console.log("Upload successfull!")
self.pendingChanges.setData([]);
self.isUploading.setData(false)
},
() => {
console.log("Upload failed - trying again later")
return self.isUploading.setData(false);
} // Failed - mark to try again
)
}catch(e){
console.error("Could not handle changes - probably an old, pending changeset in localstorage with an invalid format; erasing those", e)
self.pendingChanges.setData([])
self.isUploading.setData(false)
}
return true;
});
}
public applyAction(action: OsmChangeAction) {
const changes = action.Perform(this)
console.log("Received changes:", changes)
this.pendingChanges.data.push(...changes);
this.pendingChanges.ping();
}
}

View file

@ -258,7 +258,7 @@ export class ChangesetHandler {
}, function (err, response) {
if (response === undefined) {
console.log("err", err);
if(options.onFail){
if (options.onFail) {
options.onFail()
}
return;

View file

@ -15,7 +15,7 @@ export interface Relation {
export default class ExtractRelations {
public static RegisterRelations(overpassJson: any) : void{
public static RegisterRelations(overpassJson: any): void {
const memberships = ExtractRelations.BuildMembershipTable(ExtractRelations.GetRelationElements(overpassJson))
State.state.knownRelations.setData(memberships)
}

View file

@ -6,12 +6,14 @@ export class Geocoding {
private static readonly host = "https://nominatim.openstreetmap.org/search?";
static Search(query: string,
handleResult: ((places: { display_name: string, lat: number, lon: number, boundingbox: number[],
osm_type: string, osm_id: string}[]) => void),
handleResult: ((places: {
display_name: string, lat: number, lon: number, boundingbox: number[],
osm_type: string, osm_id: string
}[]) => void),
onFail: (() => void)) {
const b = State.state.leafletMap.data.getBounds();
const url = Geocoding.host + "format=json&limit=1&viewbox=" +
`${b.getEast()},${b.getNorth()},${b.getWest()},${b.getSouth()}`+
`${b.getEast()},${b.getNorth()},${b.getWest()},${b.getSouth()}` +
"&accept-language=nl&q=" + query;
Utils.downloadJson(
url)

View file

@ -22,7 +22,7 @@ export default class UserDetails {
public dryRun: boolean;
home: { lon: number; lat: number };
public backend: string;
constructor(backend: string) {
this.backend = backend;
}
@ -47,10 +47,10 @@ export class OsmConnection {
public auth;
public userDetails: UIEventSource<UserDetails>;
public isLoggedIn: UIEventSource<boolean>
private fakeUser: boolean;
_dryRun: boolean;
public preferencesHandler: OsmPreferences;
public changesetHandler: ChangesetHandler;
private fakeUser: boolean;
private _onLoggedIn: ((userDetails: UserDetails) => void)[] = [];
private readonly _iframeMode: Boolean | boolean;
private readonly _singlePage: boolean;
@ -59,8 +59,9 @@ export class OsmConnection {
oauth_secret: string,
url: string
};
private isChecking = false;
constructor(dryRun: boolean,
constructor(dryRun: boolean,
fakeUser: boolean,
oauth_token: UIEventSource<string>,
// Used to keep multiple changesets open and to write to the correct changeset
@ -77,17 +78,17 @@ export class OsmConnection {
this.userDetails = new UIEventSource<UserDetails>(new UserDetails(this._oauth_config.url), "userDetails");
this.userDetails.data.dryRun = dryRun || fakeUser;
if(fakeUser){
if (fakeUser) {
const ud = this.userDetails.data;
ud.csCount = 5678
ud.loggedIn= true;
ud.loggedIn = true;
ud.unreadMessages = 0
ud.name = "Fake user"
ud.totalMessages = 42;
}
const self =this;
const self = this;
this.isLoggedIn = this.userDetails.map(user => user.loggedIn).addCallback(isLoggedIn => {
if(self.userDetails.data.loggedIn == false && isLoggedIn == true){
if (self.userDetails.data.loggedIn == false && isLoggedIn == true) {
// We have an inconsistency: the userdetails say we _didn't_ log in, but this actor says we do
// This means someone attempted to toggle this; so we attempt to login!
self.AttemptLogin()
@ -150,7 +151,7 @@ export class OsmConnection {
}
public AttemptLogin() {
if(this.fakeUser){
if (this.fakeUser) {
console.log("AttemptLogin called, but ignored as fakeUser is set")
return;
}
@ -191,7 +192,7 @@ export class OsmConnection {
data.loggedIn = true;
console.log("Login completed, userinfo is ", userInfo);
data.name = userInfo.getAttribute('display_name');
data.uid= Number(userInfo.getAttribute("id"))
data.uid = Number(userInfo.getAttribute("id"))
data.csCount = userInfo.getElementsByTagName("changesets")[0].getAttribute("count");
data.img = undefined;
@ -249,20 +250,19 @@ export class OsmConnection {
});
}
private isChecking = false;
private CheckForMessagesContinuously(){
const self =this;
if(this.isChecking){
private CheckForMessagesContinuously() {
const self = this;
if (this.isChecking) {
return;
}
this.isChecking = true;
UIEventSource.Chronic(5 * 60 * 1000).addCallback(_ => {
if (self.isLoggedIn .data) {
console.log("Checking for messages")
self.AttemptLogin();
}
if (self.isLoggedIn.data) {
console.log("Checking for messages")
self.AttemptLogin();
}
});
}

View file

@ -52,7 +52,7 @@ export abstract class OsmObject {
const splitted = id.split("/");
const type = splitted[0];
const idN = Number(splitted[1]);
if(idN <0){
if (idN < 0) {
return;
}
@ -438,7 +438,7 @@ export class OsmWay extends OsmObject {
for (const nodeId of element.nodes) {
const node = nodeDict.get(nodeId)
if(node === undefined){
if (node === undefined) {
console.error("Error: node ", nodeId, "not found in ", nodeDict)
// This is probably part of a relation which hasn't been fully downloaded
continue;
@ -498,7 +498,7 @@ export class OsmRelation extends OsmObject {
let tags = this.TagsXML();
let cs = ""
if(changesetId !== undefined){
if (changesetId !== undefined) {
cs = `changeset="${changesetId}"`
}
return ` <relation id="${this.id}" ${cs} ${this.VersionXML()}>

View file

@ -29,7 +29,7 @@ export class OsmPreferences {
return this.longPreferences[prefix + key];
}
const source = new UIEventSource<string>(undefined, "long-osm-preference:"+prefix+key);
const source = new UIEventSource<string>(undefined, "long-osm-preference:" + prefix + key);
this.longPreferences[prefix + key] = source;
const allStartWith = prefix + key + "-combined";
@ -107,7 +107,7 @@ export class OsmPreferences {
if (this.userDetails.data.loggedIn && this.preferences.data[key] === undefined) {
this.UpdatePreferences();
}
const pref = new UIEventSource<string>(this.preferences.data[key],"osm-preference:"+key);
const pref = new UIEventSource<string>(this.preferences.data[key], "osm-preference:" + key);
pref.addCallback((v) => {
this.SetPreference(key, v);
});

View file

@ -15,7 +15,7 @@ export class Overpass {
private readonly _timeout: UIEventSource<number>;
private readonly _extraScripts: string[];
private _includeMeta: boolean;
constructor(filter: TagsFilter, extraScripts: string[],
interpreterUrl: UIEventSource<string>,
timeout: UIEventSource<number>,
@ -42,7 +42,7 @@ export class Overpass {
onFail("Runtime error (timeout)")
return;
}
ExtractRelations.RegisterRelations(json)
// @ts-ignore

View file

@ -12,12 +12,9 @@ export default class AspectedRouting {
this.program = JSON.parse(JSON.stringify(program))
delete this.program.name
delete this.program.description
delete this.program.unit
delete this.program.unit
}
public evaluate(properties){
return AspectedRouting.interpret(this.program, properties)
}
/**
* Interprets the given Aspected-routing program for the given properties
*/
@ -191,4 +188,8 @@ export default class AspectedRouting {
return result;
}
public evaluate(properties) {
return AspectedRouting.interpret(this.program, properties)
}
}

View file

@ -96,7 +96,7 @@ export default class SimpleMetaTagger {
const value = feature.properties[key]
const [, denomination] = unit.findDenomination(value)
let canonical = denomination?.canonicalValue(value) ?? undefined;
if(canonical === value){
if (canonical === value) {
break;
}
console.log("Rewritten ", key, ` from '${value}' into '${canonical}'`)
@ -110,7 +110,7 @@ export default class SimpleMetaTagger {
}
}
if(rewritten){
if (rewritten) {
State.state.allElements.getEventSourceById(feature.id).ping();
}
})

View file

@ -7,18 +7,6 @@ export class And extends TagsFilter {
super();
this.and = and
}
normalize(){
const ands = []
for (const c of this.and) {
if(c instanceof And){
ands.push(...c.and)
}else{
ands.push(c)
}
}
return new And(ands)
}
private static combine(filter: string, choices: string[]): string[] {
const values = [];
@ -28,6 +16,18 @@ export class And extends TagsFilter {
return values;
}
normalize() {
const ands = []
for (const c of this.and) {
if (c instanceof And) {
ands.push(...c.and)
} else {
ands.push(c)
}
}
return new And(ands)
}
matchesProperties(tags: any): boolean {
for (const tagsFilter of this.and) {
if (!tagsFilter.matchesProperties(tags)) {

View file

@ -4,19 +4,19 @@ export default class ComparingTag implements TagsFilter {
private readonly _key: string;
private readonly _predicate: (value: string) => boolean;
private readonly _representation: string;
constructor(key: string, predicate : (value:string | undefined) => boolean, representation: string = "") {
constructor(key: string, predicate: (value: string | undefined) => boolean, representation: string = "") {
this._key = key;
this._predicate = predicate;
this._representation = representation;
}
asChange(properties: any): { k: string; v: string }[] {
throw "A comparable tag can not be used to be uploaded to OSM"
}
asHumanString(linkToWiki: boolean, shorten: boolean, properties: any) {
return this._key+this._representation
return this._key + this._representation
}
asOverpass(): string[] {
@ -38,5 +38,5 @@ export default class ComparingTag implements TagsFilter {
usedKeys(): string[] {
return [this._key];
}
}

View file

@ -16,7 +16,7 @@ export class RegexTag extends TagsFilter {
}
private static doesMatch(fromTag: string, possibleRegex: string | RegExp): boolean {
if(fromTag === undefined){
if (fromTag === undefined) {
return;
}
if (typeof possibleRegex === "string") {
@ -45,7 +45,7 @@ export class RegexTag extends TagsFilter {
matchesProperties(tags: any): boolean {
for (const key in tags) {
if(key === undefined){
if (key === undefined) {
continue;
}
if (RegexTag.doesMatch(key, this.key)) {
@ -86,14 +86,14 @@ export class RegexTag extends TagsFilter {
}
asChange(properties: any): { k: string; v: string }[] {
if(this.invert){
if (this.invert) {
return []
}
if (typeof this.key === "string") {
if( typeof this.value === "string"){
if (typeof this.value === "string") {
return [{k: this.key, v: this.value}]
}
if(this.value.toString() != "/^..*$/"){
if (this.value.toString() != "/^..*$/") {
console.warn("Regex value in tag; using wildcard:", this.key, this.value)
}
return [{k: this.key, v: undefined}]

View file

@ -24,19 +24,19 @@ export class Tag extends TagsFilter {
matchesProperties(properties: any): boolean {
for (const propertiesKey in properties) {
if(!properties.hasOwnProperty(propertiesKey)){
if (!properties.hasOwnProperty(propertiesKey)) {
continue
}
if (this.key === propertiesKey) {
const value = properties[propertiesKey];
if(value === undefined){
if (value === undefined) {
continue
}
return value === this.value;
}
}
// The tag was not found
if (this.value === "") {
// and it shouldn't be found!
return true;
@ -52,6 +52,7 @@ export class Tag extends TagsFilter {
}
return [`["${this.key}"="${this.value}"]`];
}
asHumanString(linkToWiki?: boolean, shorten?: boolean) {
let v = this.value;
if (shorten) {
@ -84,6 +85,6 @@ export class Tag extends TagsFilter {
}
asChange(properties: any): { k: string; v: string }[] {
return [{k: this.key, v: this.value}];
return [{k: this.key, v: this.value}];
}
}

View file

@ -10,6 +10,15 @@ import {AndOrTagConfigJson} from "../../Models/ThemeConfig/Json/TagConfigJson";
import {isRegExp} from "util";
export class TagUtils {
private static comparators
: [string, (a: number, b: number) => boolean][]
= [
["<=", (a, b) => a <= b],
[">=", (a, b) => a >= b],
["<", (a, b) => a < b],
[">", (a, b) => a > b],
]
static ApplyTemplate(template: string, tags: any): string {
for (const k in tags) {
while (template.indexOf("{" + k + "}") >= 0) {
@ -75,21 +84,21 @@ export class TagUtils {
keyValues[tagsFilter.key].push(...tagsFilter.value.split(";"));
continue;
}
if(allowRegex && tagsFilter instanceof RegexTag) {
if (allowRegex && tagsFilter instanceof RegexTag) {
const key = tagsFilter.key
if(isRegExp(key)) {
if (isRegExp(key)) {
console.error("Invalid type to flatten the multiAnswer: key is a regex too", tagsFilter);
throw "Invalid type to FlattenMultiAnswer"
}
const keystr = <string>key
if (keyValues[keystr] === undefined) {
keyValues[keystr ] = [];
keyValues[keystr] = [];
}
keyValues[keystr].push(tagsFilter);
continue;
}
console.error("Invalid type to flatten the multiAnswer", tagsFilter);
throw "Invalid type to FlattenMultiAnswer"
@ -138,13 +147,13 @@ export class TagUtils {
const actualValue = properties[splitKey].split(";");
for (const neededValue of neededValues) {
if(neededValue instanceof RegexTag) {
if(!neededValue.matchesProperties(properties)) {
if (neededValue instanceof RegexTag) {
if (!neededValue.matchesProperties(properties)) {
return false
}
continue
}
}
if (actualValue.indexOf(neededValue) < 0) {
return false;
}
@ -170,15 +179,6 @@ export class TagUtils {
}
}
private static comparators
: [string, (a: number, b: number) => boolean][]
= [
["<=", (a, b) => a <= b],
[">=", (a, b) => a >= b],
["<", (a, b) => a < b],
[">", (a, b) => a > b],
]
private static TagUnsafe(json: AndOrTagConfigJson | string, context: string = ""): TagsFilter {
if (json === undefined) {

View file

@ -11,13 +11,13 @@ export abstract class TagsFilter {
abstract asHumanString(linkToWiki: boolean, shorten: boolean, properties: any);
abstract usedKeys(): string[];
/**
* Converts the tagsFilter into a list of key-values that should be uploaded to OSM.
* Throws an error if not applicable.
*
*
* Note: properties are the already existing tags-object. It is only used in the substituting tag
*/
abstract asChange(properties:any): {k: string, v:string}[]
abstract asChange(properties: any): { k: string, v: string }[]
}

View file

@ -184,7 +184,7 @@ export class UIEventSource<T> {
addCallbackAndRunD(callback: (data: T) => void) {
this.addCallbackAndRun(data => {
if (data !== undefined && data !== null) {
return callback(data)
return callback(data)
}
})
}
@ -194,9 +194,9 @@ export class UIEventSourceTools {
private static readonly _download_cache = new Map<string, UIEventSource<any>>()
public static downloadJsonCached(url: string): UIEventSource<any>{
public static downloadJsonCached(url: string): UIEventSource<any> {
const cached = UIEventSourceTools._download_cache.get(url)
if(cached !== undefined){
if (cached !== undefined) {
return cached;
}
const src = new UIEventSource<any>(undefined)

View file

@ -48,7 +48,7 @@ export default class Hash {
}
hash.setData(newValue)
}
window.addEventListener('popstate', _ => {
let newValue = window.location.hash.substr(1);
if (newValue === "") {

View file

@ -24,7 +24,7 @@ export default class LiveQueryHandler {
const source = new UIEventSource({});
LiveQueryHandler[url] = source;
console.log("Fetching live data from a third-party (unknown) API:",url)
console.log("Fetching live data from a third-party (unknown) API:", url)
Utils.downloadJson(url).then(data => {
for (const shorthandDescription of shorthandsSet) {

View file

@ -4,19 +4,19 @@ import {UIEventSource} from "../UIEventSource";
* UIEventsource-wrapper around localStorage
*/
export class LocalStorageSource {
static GetParsed<T>(key: string, defaultValue : T) : UIEventSource<T>{
static GetParsed<T>(key: string, defaultValue: T): UIEventSource<T> {
return LocalStorageSource.Get(key).map(
str => {
if(str === undefined){
if (str === undefined) {
return defaultValue
}
try{
try {
return JSON.parse(str)
}catch{
} catch {
return defaultValue
}
}, [],
}, [],
value => JSON.stringify(value)
)
}
@ -24,17 +24,17 @@ export class LocalStorageSource {
static Get(key: string, defaultValue: string = undefined): UIEventSource<string> {
try {
const saved = localStorage.getItem(key);
const source = new UIEventSource<string>(saved ?? defaultValue, "localstorage:"+key);
const source = new UIEventSource<string>(saved ?? defaultValue, "localstorage:" + key);
source.addCallback((data) => {
try{
try {
localStorage.setItem(key, data);
}catch(e){
} catch (e) {
// Probably exceeded the quota with this item!
// Lets nuke everything
localStorage.clear()
}
});
return source;
} catch (e) {

View file

@ -69,6 +69,10 @@ export class QueryParameters {
return docs.join("\n\n");
}
public static wasInitialized(key: string): boolean {
return QueryParameters._wasInitialized.has(key)
}
private static addOrder(key) {
if (this.order.indexOf(key) < 0) {
this.order.push(key)
@ -104,10 +108,6 @@ export class QueryParameters {
console.log(QueryParameters.GenerateQueryParameterDocs())
}
}
public static wasInitialized(key: string) : boolean{
return QueryParameters._wasInitialized.has(key)
}
private static Serialize() {
const parts = []

View file

@ -8,5 +8,5 @@ export default interface BaseLayer {
min_zoom: number;
feature: any,
isBest?: boolean,
category?: "map" | "osmbasedmap" | "photo" | "historicphoto" | string
category?: "map" | "osmbasedmap" | "photo" | "historicphoto" | string
}

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