diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile deleted file mode 100644 index fcc5f3644b..0000000000 --- a/.devcontainer/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.187.0/containers/typescript-node/.devcontainer/base.Dockerfile - -# [Choice] Node.js version: 16, 14, 12 -ARG VARIANT="16-buster" -FROM mcr.microsoft.com/vscode/devcontainers/typescript-node:0-${VARIANT} - -# [Optional] Uncomment this section to install additional OS packages. -# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ -# && apt-get -y install --no-install-recommends - -# [Optional] Uncomment if you want to install an additional version of node using nvm -# ARG EXTRA_NODE_VERSION=10 -# RUN su node -c "source /usr/local/share/nvm/nvm.sh && nvm install ${EXTRA_NODE_VERSION}" - -# [Optional] Uncomment if you want to install more global node packages -# RUN su node -c "npm install -g " diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index 8347a4fae8..0000000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,25 +0,0 @@ -// 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" - } - }, - // 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" -} diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 8e0cc69297..0000000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.json merge=json diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 5852705867..8745114960 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -13,6 +13,5 @@ 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 \ No newline at end of file +- [ ] 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 diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 0b81e39b44..0000000000 --- a/.prettierrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "trailingComma": "es5", - "tabWidth": 4, - "semi": true, - "singleQuote": false -} diff --git a/AllTranslationAssets.ts b/AllTranslationAssets.ts deleted file mode 100644 index 6ef387f0fa..0000000000 --- a/AllTranslationAssets.ts +++ /dev/null @@ -1,6 +0,0 @@ -import CompiledTranslations from "./assets/generated/CompiledTranslations"; - -export default class AllTranslationAssets { - - public static t = CompiledTranslations.t; -} \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 783dfbe5ea..d514b13b08 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,17 +5,19 @@ Hi! Thanks for checking out how to contribute to MapComplete! There are multiple ways to contribute: -- Translating MapComplete to your own language can be done on [this website](https://hosted.weblate.org/projects/mapcomplete/) +- Translating MapComplete to your own language can be done + on [this website](https://hosted.weblate.org/projects/mapcomplete/) - If you encounter a bug, the [issue tracker](https://github.com/pietervdvn/MapComplete/issues) is the place to be - If you want to improve a theme, create a new theme, spot a typo in the repo... the best way is to open a pull request. -People who stick around and contribute in a meaningful way, _might_ be granted write access to the repository. This is done on a purely subjective basis, e.g. after a few pull requests and if you are a member of the OSM community. +People who stick around and contribute in a meaningful way, _might_ be granted write access to the repository. This is +done on a purely subjective basis, e.g. after a few pull requests and if you are a member of the OSM community. Rights of contributors ----------------------- -If you have write access to the repository, you can make a fork of an already existing branch and push this new branch to -github. This means that this branch will be _automatically built_ and be **deployed** +If you have write access to the repository, you can make a fork of an already existing branch and push this new branch +to github. This means that this branch will be _automatically built_ and be **deployed** to `https://pietervdvn.github.io/mc/`. You can see the deploy process on [Github Actions](https://github.com/pietervdvn/MapComplete/actions). Don't worry about pushing too much. These deploys are free and totally automatic. They might fail if something is wrong, but this will hinder no-one. @@ -30,9 +32,9 @@ As a non-admin contributor, you can _not_ make changes to the `master` nor to th soon as master is changed, this is built and deployed on `mapcomplete.osm.be`, which a lot of people use. An error there will cause a lot of grieve. -A push on `develop` is automatically deployed to [pietervdvn.github.io/mc/develop] which is used by quite some contributors. -However, people using this version should know that this is a testing ground for new features and might contain a bug every now -and then. +A push on `develop` is automatically deployed to [pietervdvn.github.io/mc/develop] which is used by quite some +contributors. However, people using this version should know that this is a testing ground for new features and might +contain a bug every now and then. In other words, to get your theme deployed on the main instances, you'll still have to create a pull request. The maintainers will then doublecheck and pull it in. diff --git a/Customizations/AllKnownLayouts.ts b/Customizations/AllKnownLayouts.ts index 4303c6309f..2b3ce5c651 100644 --- a/Customizations/AllKnownLayouts.ts +++ b/Customizations/AllKnownLayouts.ts @@ -12,28 +12,10 @@ import Link from "../UI/Base/Link"; import {LayoutConfigJson} from "../Models/ThemeConfig/Json/LayoutConfigJson"; export class AllKnownLayouts { - // Must be below the list... - private static sharedLayers: Map = AllKnownLayouts.getSharedLayers(); - - private static getSharedLayers(): Map { - const sharedLayers = new Map(); - for (const layer of known_themes.layers) { - try { - // @ts-ignore - const parsed = new LayerConfig(layer, "shared_layers") - sharedLayers.set(layer.id, parsed); - } catch (e) { - if (!Utils.runningFromConsole) { - console.error("CRITICAL: Could not parse a layer configuration!", layer.id, " due to", e) - } - } - } - - return sharedLayers; - } - public static allKnownLayouts: Map = AllKnownLayouts.AllLayouts(); public static layoutsList: LayoutConfig[] = AllKnownLayouts.GenerateOrderedList(AllKnownLayouts.allKnownLayouts); + // Must be below the list... + private static sharedLayers: Map = AllKnownLayouts.getSharedLayers(); public static AllPublicLayers() { const allLayers: LayerConfig[] = [] @@ -54,8 +36,7 @@ export class AllKnownLayouts { } return allLayers } - - + public static GenOverviewsForSingleLayer(callback: (layer: LayerConfig, element: BaseUIElement) => void): void { const allLayers: LayerConfig[] = Array.from(AllKnownLayouts.sharedLayers.values()) .filter(layer => Constants.priviliged_layers.indexOf(layer.id) < 0) @@ -82,12 +63,12 @@ export class AllKnownLayouts { // Determine the cross-dependencies - const layerIsNeededBy : Map = new Map() + const layerIsNeededBy: Map = new Map() for (const layer of allLayers) { for (const dep of DependencyCalculator.getLayerDependencies(layer)) { const dependency = dep.neededLayer - if(!layerIsNeededBy.has(dependency)){ + if (!layerIsNeededBy.has(dependency)) { layerIsNeededBy.set(dependency, []) } layerIsNeededBy.get(dependency).push(layer.id) @@ -97,7 +78,7 @@ export class AllKnownLayouts { } allLayers.forEach((layer) => { - const element = layer.GenerateDocumentation(themesPerLayer.get(layer.id),layerIsNeededBy,DependencyCalculator.getLayerDependencies(layer)) + const element = layer.GenerateDocumentation(themesPerLayer.get(layer.id), layerIsNeededBy, DependencyCalculator.getLayerDependencies(layer)) callback(layer, element) }) } @@ -131,22 +112,21 @@ export class AllKnownLayouts { // Determine the cross-dependencies - const layerIsNeededBy : Map = new Map() + const layerIsNeededBy: Map = new Map() for (const layer of allLayers) { for (const dep of DependencyCalculator.getLayerDependencies(layer)) { const dependency = dep.neededLayer - if(!layerIsNeededBy.has(dependency)){ + if (!layerIsNeededBy.has(dependency)) { layerIsNeededBy.set(dependency, []) } layerIsNeededBy.get(dependency).push(layer.id) } - - + + } - - - + + return new Combine([ new Title("Special and other useful layers", 1), "MapComplete has a few data layers available in the theme which have special properties through builtin-hooks. Furthermore, there are some normal layers (which are built from normal Theme-config files) but are so general that they get a mention here.", @@ -154,15 +134,32 @@ export class AllKnownLayouts { new List(Constants.priviliged_layers.map(id => "[" + id + "](#" + id + ")")), ...Constants.priviliged_layers .map(id => AllKnownLayouts.sharedLayers.get(id)) - .map((l) => l.GenerateDocumentation(themesPerLayer.get(l.id), layerIsNeededBy, DependencyCalculator.getLayerDependencies(l),Constants.added_by_default.indexOf(l.id) >= 0, Constants.no_include.indexOf(l.id) < 0)), + .map((l) => l.GenerateDocumentation(themesPerLayer.get(l.id), layerIsNeededBy, DependencyCalculator.getLayerDependencies(l), Constants.added_by_default.indexOf(l.id) >= 0, Constants.no_include.indexOf(l.id) < 0)), new Title("Normal layers", 1), "The following layers are included in MapComplete:", - new List(Array.from(AllKnownLayouts.sharedLayers.keys()).map(id => new Link(id, "./Layers/"+id+".md"))) + new List(Array.from(AllKnownLayouts.sharedLayers.keys()).map(id => new Link(id, "./Layers/" + id + ".md"))) ]) } + private static getSharedLayers(): Map { + const sharedLayers = new Map(); + for (const layer of known_themes.layers) { + try { + // @ts-ignore + const parsed = new LayerConfig(layer, "shared_layers") + sharedLayers.set(layer.id, parsed); + } catch (e) { + if (!Utils.runningFromConsole) { + console.error("CRITICAL: Could not parse a layer configuration!", layer.id, " due to", e) + } + } + } + + return sharedLayers; + } + private static GenerateOrderedList(allKnownLayouts: Map): LayoutConfig[] { const list = [] allKnownLayouts.forEach((layout) => { @@ -174,20 +171,20 @@ export class AllKnownLayouts { private static AllLayouts(): Map { const dict: Map = new Map(); for (const layoutConfigJson of known_themes.themes) { - const layout = new LayoutConfig( layoutConfigJson, true) - dict.set(layout.id, layout) - for (let i = 0; i < layout.layers.length; i++) { - let layer = layout.layers[i]; - if (typeof (layer) === "string") { - layer = AllKnownLayouts.sharedLayers.get(layer); - layout.layers[i] = layer - if (layer === undefined) { - console.log("Defined layers are ", AllKnownLayouts.sharedLayers.keys()) - throw `Layer ${layer} was not found or defined - probably a type was made` - } - } - - } + const layout = new LayoutConfig( layoutConfigJson, true) + dict.set(layout.id, layout) + for (let i = 0; i < layout.layers.length; i++) { + let layer = layout.layers[i]; + if (typeof (layer) === "string") { + layer = AllKnownLayouts.sharedLayers.get(layer); + layout.layers[i] = layer + if (layer === undefined) { + console.log("Defined layers are ", AllKnownLayouts.sharedLayers.keys()) + throw `Layer ${layer} was not found or defined - probably a type was made` + } + } + + } } return dict; } diff --git a/Customizations/SharedTagRenderings.ts b/Customizations/SharedTagRenderings.ts index ad0aa83e2a..3f0288748f 100644 --- a/Customizations/SharedTagRenderings.ts +++ b/Customizations/SharedTagRenderings.ts @@ -3,6 +3,11 @@ import * as icons from "../assets/tagRenderings/icons.json"; import {Utils} from "../Utils"; import TagRenderingConfig from "../Models/ThemeConfig/TagRenderingConfig"; import {TagRenderingConfigJson} from "../Models/ThemeConfig/Json/TagRenderingConfigJson"; +import BaseUIElement from "../UI/BaseUIElement"; +import Combine from "../UI/Base/Combine"; +import Title from "../UI/Base/Title"; +import {FixedUiElement} from "../UI/Base/FixedUiElement"; +import List from "../UI/Base/List"; export default class SharedTagRenderings { @@ -31,19 +36,73 @@ export default class SharedTagRenderings { if (!iconsOnly) { for (const key in questions) { + if (key === "id") { + continue + } dict.set(key, questions[key]) } } for (const key in icons) { + if (key === "id") { + continue + } dict.set(key, icons[key]) } dict.forEach((value, key) => { + if (key === "id") { + return + } value.id = value.id ?? key; + if(value["builtin"] !== undefined){ + if(value["override"] == undefined){ + throw "HUH? Why whould you want to reuse a builtin if one doesn't override? In questions.json/"+key + } + if(typeof value["builtin"] !== "string"){ + return; + } + // This is a really funny situation: we extend another tagRendering! + const parent = Utils.Clone(dict.get(value["builtin"])) + delete parent.id + Utils.Merge(value["override"], parent) + delete value["builtin"] + delete value["override"] + for (const pkey in parent) { + value[pkey] = parent[pkey] + } + } }) + return dict; } + public static HelpText(): BaseUIElement { + return new Combine([ + new Combine([ + + new Title("Builtin questions",1), + + "The following items can be easily reused in your layers" + ]).SetClass("flex flex-col"), + + ... Array.from( SharedTagRenderings.SharedTagRendering.keys()).map(key => { + const tr = SharedTagRenderings.SharedTagRendering.get(key) + let mappings: BaseUIElement = undefined + if(tr.mappings?.length > 0){ + mappings = new List(tr.mappings.map(m => m.then.textFor("en"))) + } + return new Combine([ + new Title(key), + tr.render?.textFor("en"), + tr.question?.textFor("en") ?? new FixedUiElement("Read-only tagrendering").SetClass("font-bold"), + mappings + ]).SetClass("flex flex-col") + + }) + + ]).SetClass("flex flex-col") + } + } diff --git a/Docs/Architecture.md b/Docs/Architecture.md index 60cbec7f08..69a08018f7 100644 --- a/Docs/Architecture.md +++ b/Docs/Architecture.md @@ -12,7 +12,7 @@ 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 +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. @@ -23,19 +23,21 @@ Most (but not all) objects in MapComplete get all the state they need as a param 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 +a [`UIEventSource`](../Logic/UIEventSource.ts). A `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) +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, +with the new value applied. Note that `map` will also absorb some changes, e.g. `const someEventSource : UIEventSource = ... ; 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 a `UIEventSource` is responsible of responding to changes of this object. This is especially +true for UI-components. -UI --``` +UI +-- +```typescript export default class MyComponent { @@ -47,21 +49,21 @@ 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. +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. There are some basic elements, such as: -- FixedUIElement which shows a fixed, unchangeble element -- Img to show an image -- Combine which wrap everything given (strings and other elements) in a div -- List +- `FixedUIElement` which shows a fixed, unchangeble element +- `Img` to show an image +- `Combine` which wraps everything given (strings and other elements) in a div +- `List` -There is one special component: the VariableUIElement -The variableUIElement takes a `UIEventSource` and will dynamicaly show whatever the UIEventSource contains at the moment. +There is one special component: the `VariableUIElement` +The `VariableUIElement` takes a `UIEventSource` and will dynamicaly show whatever the `UIEventSource` contains at the moment. For example: -``` +```typescript const src : UIEventSource = ... // E.g. user input, data that will be updated... new VariableUIElement(src) .AttachTo('some-id') // attach it to the html @@ -78,9 +80,9 @@ To add a translation: 2. Find a correct spot for your translation in the tree 3. run `npm run generate:translations` 4. `import Translations` -5. Translations.t..Clone() is the UIElement offering your translation +5. `Translations.t..Clone()` is the `UIElement` offering your translation -### Input elements` +### Input elements Input elements are a special kind of BaseElement and which offer a piece of a form to the user, e.g. a TextField, a Radio button, a dropdown, ... @@ -92,16 +94,16 @@ There are some components which offer useful functionality: - The `subtleButton` which is a friendly, big button -- The Toggle: `const t = new Toggle( componentA, componentB, source)` is a UIEventSource which shows `componentA` as long as `source` contains `true` and will show `componentB` otherwise. +- The Toggle: `const t = new Toggle( componentA, componentB, source)` is a `UIEventSource` which shows `componentA` as long as `source` contains `true` and will show `componentB` otherwise. ### Styling Styling is done as much as possible with [TailwindCSS](https://tailwindcss.com/). It contains a ton of utility classes, each of them containing a few rules. -For exmaple: ` someBaseUIElement.SetClass("flex flex-col border border-black rounded-full")` will set the component to be a flex object, as column, with a black border and pill-shaped. +For example: ` someBaseUIElement.SetClass("flex flex-col border border-black rounded-full")` will set the component to be a flex object, as column, with a black border and pill-shaped. -If tailwind is not enough, `baseUiElement.SetStyle("background: red; someOtherCssRule: abc;")` +If Tailwind is not enough, use `baseUiElement.SetStyle("background: red; someOtherCssRule: abc;")`. ### An example @@ -116,7 +118,7 @@ In the case of different hours, input hours should be too. This can be constructed as following: -``` +```typescript // We construct the dropdown element with values and labelshttps://tailwindcss.com/ const isOpened = new Dropdown(Translations.t.is_this_shop_opened_during_holidays, @@ -145,7 +147,7 @@ If you make a specialized class to offer a certain functionality, you can organi 1. Create a new class: -``` +```typescript export default class MyComponent { @@ -160,7 +162,7 @@ export default class MyComponent { 2. Construct the needed UI in the constructor -``` +```typescript export default class MyComponent { @@ -180,10 +182,10 @@ 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: +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: -``` +```typescript export default class MyComponent extends Combine { @@ -203,17 +205,17 @@ Assets ### Themes -Theme and layer configuration files go into /assets/layers and assets/themes +Theme and layer configuration files go into `assets/layers` and `assets/themes`. ### Images -Other files (mostly images that are part of the core of mapcomplete) go into 'assets/svg' and are usable with `Svg.image_file_ui()`. Run `npm run generate:images` if you added a new image +Other files (mostly images that are part of the core of MapComplete) go into `assets/svg` and are usable with `Svg.image_file_ui()`. Run `npm run generate:images` if you added a new image. Logic ----- -The last part is the business logic of the application, found in 'Logic'. Actors are small objects which react to UIEventSources to update other eventSources. +The last part is the business logic of the application, found in 'Logic'. Actors are small objects which react to `UIEventSources` to update other eventSources. -State.state is a big singleton object containing a lot of the state of the entire application. That one is a bit a mess +`State.state` is a big singleton object containing a lot of the state of the entire application. That one is a bit of a mess. diff --git a/Docs/BuiltinIndex.md b/Docs/BuiltinIndex.md new file mode 100644 index 0000000000..8f4aa3e00e --- /dev/null +++ b/Docs/BuiltinIndex.md @@ -0,0 +1,332 @@ + + + Index of builtin TagRendering +=============================== + + + +## Table of contents + +1. [Index of builtin TagRendering](#index-of-builtin-tagrendering) + - [Existing builtin tagrenderings](#existing-builtin-tagrenderings) + + [images](#images) + + [website](#website) + + [phone](#phone) + + [email](#email) + + [opening_hours](#opening_hours) + + [description](#description) + + [payment-options](#payment-options) + + [payment-options-advanced](#payment-options-advanced) + + [level](#level) + + [bike_cleaning.bike_cleaning-service:bicycle:cleaning:charge](#bike_cleaningbike_cleaning-service:bicycle:cleaning:charge) + + [wheelchair-access](#wheelchair-access) + + [service:electricity](#serviceelectricity) + + [dog-access](#dog-access) + + [all_tags](#all_tags) + + [questions](#questions) + + [reviews](#reviews) + + [export_as_gpx](#export_as_gpx) + + [minimap](#minimap) + + [wikipedia](#wikipedia) + + + + + + Existing builtin tagrenderings +-------------------------------- + + + + + +### images + + + + + + - ambulancestation + - artwork + - bench + - bench_at_pt + - bicycle_library + - bicycle_tube_vending_machine + - bike_cafe + - bike_cleaning + - bike_parking + - bike_repair_station + - bike_shop + - bike_themed_object + - binocular + - birdhide + - cafe_pub + - charging_station + - defibrillator + - drinking_water + - entrance + - extinguisher + - fire_station + - food + - ghost_bike + - grass_in_parks + - hydrant + - information_board + - map + - nature_reserve + - observation_tower + - parking + - picnic_table + - play_forest + - playground + - public_bookcase + - shops + - slow_roads + - sport_pitch + - surveillance_camera + - toilet + - trail + - tree_node + - viewpoint + - village_green + - watermill + + + + +### website + + + + + + - bicycle_library + - bicycle_rental + - bike_themed_object + - cafe_pub + - food + - observation_tower + + + + +### phone + + + + + + - bicycle_library + - bicycle_rental + - bike_themed_object + - cafe_pub + - food + + + + +### email + + + + + + - bicycle_library + - bicycle_rental + - bike_themed_object + - cafe_pub + - food + + + + +### opening_hours + + + + + + - bicycle_library + - bicycle_rental + - bike_themed_object + - cafe_pub + - food + + + + +### description + + + + + + - bicycle_library + - bike_shop + - bike_themed_object + - toilet + + + + +### payment-options + + + + + + - bicycle_rental + - cafe_pub + - food + - observation_tower + - shops + - toilet + + + + +### payment-options-advanced + + + + + + - bicycle_rental + - charging_station + + + + +### level + + + + + + - bike_repair_station + - charging_station + - toilet + + + + +### bike_cleaning.bike_cleaning-service:bicycle:cleaning:charge + + + + + + - bike_shop + + + + +### wheelchair-access + + + + + + - cafe_pub + - defibrillator + - food + - observation_tower + + + + +### service:electricity + + + + + + - cafe_pub + - food + + + + +### dog-access + + + + + + - cafe_pub + - food + + + + +### all_tags + + + + + + - cluster_style + + + + +### questions + + + + + + - etymology + - play_forest + - playground + - shops + - sport_pitch + + + + +### reviews + + + + + + - food + - shops + + + + +### export_as_gpx + + + + + + - gps_track + + + + +### minimap + + + + + + - gps_track + + + + +### wikipedia + + + + + + - nature_reserve + - observation_tower + + +This document is autogenerated from [assets/layers/*.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/*.json) \ No newline at end of file diff --git a/Docs/BuiltinLayers.md b/Docs/BuiltinLayers.md index 4ba48b9464..2b581b69de 100644 --- a/Docs/BuiltinLayers.md +++ b/Docs/BuiltinLayers.md @@ -36,6 +36,10 @@ + [comment](#comment) + [report-contributor](#report-contributor) + [report-note](#report-note) +1. [import_candidate](#import_candidate) + - [Basic tags for this layer](#basic-tags-for-this-layer) + - [Supported attributes](#supported-attributes) + + [all_tags](#all_tags) 1. [conflation](#conflation) - [Basic tags for this layer](#basic-tags-for-this-layer) - [Supported attributes](#supported-attributes) @@ -72,6 +76,7 @@ MapComplete has a few data layers available in the theme which have special prop - [gps_track](#gps_track) - [type_node](#type_node) - [note](#note) + - [import_candidate](#import_candidate) - [conflation](#conflation) - [left_right_style](#left_right_style) - [split_point](#split_point) @@ -86,7 +91,7 @@ MapComplete has a few data layers available in the theme which have special prop - + Meta layer showing the current location of the user. Add this to your theme and override the icon to change the appearance of the current location. The object will always have `id=gps` and will have _all_ the properties included in the [`Coordinates`-object](https://developer.mozilla.org/en-US/docs/Web/API/GeolocationCoordinates) returned by the browser. @@ -175,7 +180,7 @@ Elements must have the all of following tags to be shown on this layer: - + Meta layer showing the home location of the user. The home location can be set in the [profile settings](https://www.openstreetmap.org/profile/edit) of OpenStreetMap. @@ -354,7 +359,7 @@ This layer shows notes on OpenStreetMap. Having this layer in your theme will tr - - This layer is loaded from an external source, namely `https://api.openstreetmap.org/api/0.6/notes.json?closed=7&bbox={x_min},{y_min},{x_max},{y_max}` + - This layer is loaded from an external source, namely `https://api.openstreetmap.org/api/0.6/notes.json?limit=10000&closed=7&bbox={x_min},{y_min},{x_max},{y_max}` [Go to the source code](../assets/layers/note/note.json) @@ -432,12 +437,64 @@ _This tagrendering has no question and is thus read-only_ + import_candidate +================== + + + + + +Layer used in the importHelper + + + + + + + - Not visible in the layer selection by default. If you want to make this layer toggable, override `name` + + +[Go to the source code](../assets/layers/import_candidate/import_candidate.json) + + + + Basic tags for this layer +--------------------------- + + + +Elements must have the all of following tags to be shown on this layer: + + + + + + + + + Supported attributes +---------------------- + + + + + +### all_tags + + + +_This tagrendering has no question and is thus read-only_ + + + + + conflation ============ - + If the import-button moves OSM points, the imported way points or conflates, a preview is shown. This layer defines how this preview is rendered. This layer cannot be included in a theme. @@ -521,7 +578,7 @@ Elements must have the all of following tags to be shown on this layer: - + Layer rendering the little scissors for the minimap in the 'splitRoadWizard' @@ -660,6 +717,7 @@ The following layers are included in MapComplete: - [bench](./Layers/bench.md) - [bench_at_pt](./Layers/bench_at_pt.md) - [bicycle_library](./Layers/bicycle_library.md) + - [bicycle_rental](./Layers/bicycle_rental.md) - [bicycle_tube_vending_machine](./Layers/bicycle_tube_vending_machine.md) - [bike_cafe](./Layers/bike_cafe.md) - [bike_cleaning](./Layers/bike_cleaning.md) @@ -692,6 +750,7 @@ The following layers are included in MapComplete: - [grass_in_parks](./Layers/grass_in_parks.md) - [home_location](./Layers/home_location.md) - [hydrant](./Layers/hydrant.md) + - [import_candidate](./Layers/import_candidate.md) - [information_board](./Layers/information_board.md) - [left_right_style](./Layers/left_right_style.md) - [map](./Layers/map.md) @@ -725,4 +784,4 @@ The following layers are included in MapComplete: - [watermill](./Layers/watermill.md) -This document is autogenerated from AllKnownLayers.ts \ No newline at end of file +This document is autogenerated from [Customizations/AllKnownLayouts.ts](https://github.com/pietervdvn/MapComplete/blob/develop/Customizations/AllKnownLayouts.ts) \ No newline at end of file diff --git a/Docs/BuiltinQuestions.md b/Docs/BuiltinQuestions.md new file mode 100644 index 0000000000..6f705ff281 --- /dev/null +++ b/Docs/BuiltinQuestions.md @@ -0,0 +1,381 @@ + + + Builtin questions +=================== + + + +The following items can be easily reused in your layers + +## Table of contents + +1. [Builtin questions](#builtin-questions) + + [questions](#questions) + + [images](#images) + + [export_as_gpx](#export_as_gpx) + + [wikipedia](#wikipedia) + + [reviews](#reviews) + + [minimap](#minimap) + + [phone](#phone) + + [osmlink](#osmlink) + + [wikipedialink](#wikipedialink) + + [email](#email) + + [website](#website) + + [wheelchair-access](#wheelchair-access) + + [dog-access](#dog-access) + + [description](#description) + + [opening_hours](#opening_hours) + + [service:electricity](#serviceelectricity) + + [payment-options](#payment-options) + + [payment-options-advanced](#payment-options-advanced) + + [last_edit](#last_edit) + + [all_tags](#all_tags) + + [level](#level) + + [default](#default) + + [defaults](#defaults) + + [isOpen](#isopen) + + [phonelink](#phonelink) + + [emaillink](#emaillink) + + [sharelink](#sharelink) + + + + + +### questions + + + +Read-only tagrendering + + + +### images + + + +{image_carousel()}{image_upload()} + +Read-only tagrendering + + + +### export_as_gpx + + + +{export_as_gpx()} + +Read-only tagrendering + + + +### wikipedia + + + +{wikipedia():max-height:25rem} + +What is the corresponding Wikidata entity? + + + + - No Wikipedia page has been linked yet + + + + +### reviews + + + +{reviews()} + +Read-only tagrendering + + + +### minimap + + + +{minimap(18, id): width:100%; height:8rem; border-radius:2rem; overflow: hidden; pointer-events: none;} + +Read-only tagrendering + + + +### phone + + + +{phone} + +What is the phone number of {name}? + + + + - {contact:phone} + + + + +### osmlink + + + + + +Read-only tagrendering + + + + - + - + + + + +### wikipedialink + + + +WP + +Read-only tagrendering + + + + - WD + + + + +### email + + + +{email} + +What is the email address of {name}? + + + + - {contact:email} + + + + +### website + + + +{website} + +What is the website of {name}? + + + + - {contact:website} + + + + +### wheelchair-access + + + +Is this place accessible with a wheelchair? + + + + - This place is specially adapted for wheelchair users + - This place is easily reachable with a wheelchair + - It is possible to reach this place in a wheelchair, but it is not easy + - This place is not reachable with a wheelchair + + + + +### dog-access + + + +Are dogs allowed in this business? + + + + - Dogs are allowed + - Dogs are not allowed + - Dogs are allowed, but they have to be leashed + - Dogs are allowed and can run around freely + + + + +### description + + + +{description} + +Is there still something relevant you couldn't give in the previous questions? Add it here.
Don't repeat already stated facts + + + +### opening_hours + + + +

Opening hours

{opening_hours_table(opening_hours)} + +What are the opening hours of {name}? + + + +### service:electricity + + + +Does this amenity have electrical outlets, available to customers when they are inside? + + + + - There are plenty of domestic sockets available to customers seated indoors, where they can charge their electronics + - There are a few domestic sockets available to customers seated indoors, where they can charge their electronics + - There are no sockets available indoors to customers, but charging might be possible if the staff is asked + - There are a no domestic sockets available to customers seated indoors + + + + +### payment-options + + + +Which methods of payment are accepted here? + + + + - Cash is accepted here + - Payment cards are accepted here + + + + +### payment-options-advanced + + + +Which methods of payment are accepted here? + + + + - Cash is accepted here + - Payment cards are accepted here + - Payment is done using a dedicated app + - Payment is done using a membership card + + + + +### last_edit + + + + + +Read-only tagrendering + + + +### all_tags + + + +{all_tags()} + +Read-only tagrendering + + + +### level + + + +Located on the {level}th floor + +On what level is this feature located? + + + + - Located underground + - Located on the ground floor + - Located on the ground floor + - Located on the first floor + - Located on the first basement level + + + + +### default + + + +Read-only tagrendering + + + +### defaults + + + +Read-only tagrendering + + + +### isOpen + + + +Read-only tagrendering + + + + - clock:#0f0;ring:#0f0 + - circle:#f00;clock:#fff + - clock:#ff0;ring:#ff0 + - circle:#f0f;clock:#fff + + + + +### phonelink + + + + + +Read-only tagrendering + + + +### emaillink + + + + + +Read-only tagrendering + + + +### sharelink + + + +{share_link()} + +Read-only tagrendering + +This document is autogenerated from [Customizations/SharedTagRenderings.ts](https://github.com/pietervdvn/MapComplete/blob/develop/Customizations/SharedTagRenderings.ts), [assets/tagRenderings/questions.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/tagRenderings/questions.json) \ No newline at end of file diff --git a/Docs/CalculatedTags.md b/Docs/CalculatedTags.md index e767db34fc..7bafe75625 100644 --- a/Docs/CalculatedTags.md +++ b/Docs/CalculatedTags.md @@ -292,4 +292,4 @@ For example: `_part_of_walking_routes=feat.memberships().map(r => r.relation.tag 0. key -This document is autogenerated from SimpleMetaTagger, ExtraFunction \ No newline at end of file +This document is autogenerated from [Logic/SimpleMetaTagger.ts](https://github.com/pietervdvn/MapComplete/blob/develop/Logic/SimpleMetaTagger.ts), [Logic/ExtraFunctions.ts](https://github.com/pietervdvn/MapComplete/blob/develop/Logic/ExtraFunctions.ts) \ No newline at end of file diff --git a/Docs/Development_deployment.md b/Docs/Development_deployment.md index 4dea0b8809..9a083b3a05 100644 --- a/Docs/Development_deployment.md +++ b/Docs/Development_deployment.md @@ -106,7 +106,8 @@ Try removing `node_modules`, `package-lock.json` and `.cache` Misc setup ---------- -~~The json-git-merger is used to quickly merge translation files, [documentation here](https://github.com/jonatanpedersen/git-json-merge#single-project--directory).~~ +~~The json-git-merger is used to quickly merge translation +files, [documentation here](https://github.com/jonatanpedersen/git-json-merge#single-project--directory).~~ This merge driver is broken and would sometimes drop new questions or duplicate them... Not a good idea! Overview of package.json-scripts diff --git a/Docs/ImporteerHandleiding.nl.md b/Docs/ImporteerHandleiding.nl.md index 2af7d61373..6c28fc217d 100644 --- a/Docs/ImporteerHandleiding.nl.md +++ b/Docs/ImporteerHandleiding.nl.md @@ -9,20 +9,20 @@ Om een dataset te importeren, zijn er enkele stappen die doorlopen moeten worden 3. Community inlichten en Importeren voorbereiden 4. Importeren! - - ## 0. Geschikte data - -Is de data die je wenst te importeren geschikt voor OpenStreetMap? Is ze dus verifieerbaar ter plaatse door een andere contributor? Is ze ietwat permantent? +Is de data die je wenst te importeren geschikt voor OpenStreetMap? Is ze dus verifieerbaar ter plaatse door een andere +contributor? Is ze ietwat permantent? ## 1. Licentie nakijken +Voordat we een dataset in OpenStreetMap kunnen toevoegen, moeten we nagaan of dit wel mag van de oorspronkelijke maker +van de dataset. -Voordat we een dataset in OpenStreetMap kunnen toevoegen, moeten we nagaan of dit wel mag van de oorspronkelijke maker van de dataset. - -Is er een licentievermelding bij de databron? Kijk deze dan na of er toestemming is voor hergebruik (ook commercieel) en redistributie. -Indien er een attributie voor de dataset moet zijn, dan kan de bronvermelding in de changeset (als source) aangeduid worden en/of kan de auteur vermeld worden op [deze wikipagina]. **Vraag na of deze bronvermelding voldoende is** +Is er een licentievermelding bij de databron? Kijk deze dan na of er toestemming is voor hergebruik (ook commercieel) en +redistributie. Indien er een attributie voor de dataset moet zijn, dan kan de bronvermelding in de changeset (als +source) aangeduid worden en/of kan de auteur vermeld worden op [deze wikipagina]. **Vraag na of deze bronvermelding +voldoende is** ## 2. Importeermethode bepalen @@ -35,37 +35,42 @@ De volgende vraag is hoe deze data geimporteerd zal worden. Ook hier moeten vers ### Wie importeert? +Een ervaren contributor vergelijkt de bestaande OSM-data met de aangeleverde dataset. Duplicaten worden gefiltered en +geupdate. Dit is vooral geschikt voor kleinere dataset (maximaal enkele honderd feaures), maar is sneller (want minder +coordinatie is nodig). -Een ervaren contributor vergelijkt de bestaande OSM-data met de aangeleverde dataset. Duplicaten worden gefiltered en geupdate. -Dit is vooral geschikt voor kleinere dataset (maximaal enkele honderd feaures), maar is sneller (want minder coordinatie is nodig). - -Indien een grotere dataset geimporteerd dient te worden, is dit vaak niet meer haalbaar door één enkele persoon. -Als dit het geval is, zal men contributors moeten zoeken om mee te helpen importeren. -Dit kan heel passief (de data online plaatsen en de community er attent op maken dat deze bestaat, in de hoop dat er iemand dit oppikt), -tot actief een groep vrijwilligers zoeken. -Ten slotte kan men hier ook een betaalde kracht voor inhuren - een GIS-expert binnen de organisatie, een jobstudent of een OpenStreetMap-expert die men betaald +Indien een grotere dataset geimporteerd dient te worden, is dit vaak niet meer haalbaar door één enkele persoon. Als dit +het geval is, zal men contributors moeten zoeken om mee te helpen importeren. Dit kan heel passief (de data online +plaatsen en de community er attent op maken dat deze bestaat, in de hoop dat er iemand dit oppikt), tot actief een groep +vrijwilligers zoeken. Ten slotte kan men hier ook een betaalde kracht voor inhuren - een GIS-expert binnen de +organisatie, een jobstudent of een OpenStreetMap-expert die men betaald ### Is een survey nodig? -Indien de dataset oud is of veel fouten bevat, is het wellicht wenslijk om ter plaatse te gaan kijken. Dit hangt sterk af van dataset tot dataset, of men de data op luchtfoto's kan afleiden, via mapillary of OpenStreetCam de situatie ter plaatse kan zien, ... +Indien de dataset oud is of veel fouten bevat, is het wellicht wenslijk om ter plaatse te gaan kijken. Dit hangt sterk +af van dataset tot dataset, of men de data op luchtfoto's kan afleiden, via mapillary of OpenStreetCam de situatie ter +plaatse kan zien, ... -Vaak helpt het om terreinkennis te hebben, om de import voor te bereiden door alle data te overlopen, toe te voegen waar men zeker van is en enkel de twijfelgevallen over te houden voor import. +Vaak helpt het om terreinkennis te hebben, om de import voor te bereiden door alle data te overlopen, toe te voegen waar +men zeker van is en enkel de twijfelgevallen over te houden voor import. ### Welke tools worden ingezet? Indien er één ervaren gebruiker de import doet, zal die wellicht JOSM (of zijn favoriete editor gebruiken). -Voor extreem grote imports (meer dan 1000 objecten) zal men wellicht ook coordineren via een tasking manager (om werkgebieden per contributor af te bakenen). +Voor extreem grote imports (meer dan 1000 objecten) zal men wellicht ook coordineren via een tasking manager (om +werkgebieden per contributor af te bakenen). -Voor een import waar survey wenselijk is (ihb indien er verschillende contributors betrokken zijn), kan MapComplete ingezet worden waar de na te zien data ingeladen wordt. -MapComplete kan: +Voor een import waar survey wenselijk is (ihb indien er verschillende contributors betrokken zijn), kan MapComplete +ingezet worden waar de na te zien data ingeladen wordt. MapComplete kan: -- tegelijk een laag van OpenStreetMap én de te importeren data tonen . +- tegelijk een laag van OpenStreetMap én de te importeren data tonen . - de te importeren objecten verbergen indien er een OpenStreetMap-object dichtbij is - aanbieden om het te importeren object toe te voegen indien dit object ontbreekt (*) - aanbieden om gegevens van het te importeren object over te zetten op een naburig, soortgelijk object (*) -(*) Opties 3 en 4 vereisen een degelijke voorbereiding van de te importeren dataset en zijn niet altijd mogelijk of niet altijd de moeite +(*) Opties 3 en 4 vereisen een degelijke voorbereiding van de te importeren dataset en zijn niet altijd mogelijk of niet +altijd de moeite Op de screenshot hieronder is een voorbeeld te zien van het importeren van een dataset van Brugse defibrillatoren. @@ -76,35 +81,40 @@ Op de screenshot hieronder is een voorbeeld te zien van het importeren van een d ![Voorbeeld van importeren](AED-import.nl.png) -Een geavanceerder voorbeeld van een import is het UK-address-importproject. -Hierbij wordt met een dataset van vermoedelijke adressen gewerkt. -Indien er geen gebouw met adres dit vermoedelijke adres omsluit, wordt er gevraagd om dit adres toe te voegen. Door het adres via deze popup toe te voegen, wordt er meteen een INSPIRE-referentie meegegeven. +Een geavanceerder voorbeeld van een import is het UK-address-importproject. Hierbij wordt met een dataset van +vermoedelijke adressen gewerkt. Indien er geen gebouw met adres dit vermoedelijke adres omsluit, wordt er gevraagd om +dit adres toe te voegen. Door het adres via deze popup toe te voegen, wordt er meteen een INSPIRE-referentie meegegeven. ![](uk_address_import.png) - - ### Tagging bepalen en filteren voor duplicaten Ten slotte moet de data ook nog 'vertaald' worden naar het correct OpenStreetMap-formaat. -De softwareprogramma's ook overweg kunnen met het dataformaat. **Geojson** is een veilige keuze, want dit open formaat wordt door veel editors ondersteund. Met QGIS kunnen shapefiles omgezet worden in geojson. Een geojson kan ook als extra laag in MapComplete geladen worden. +De softwareprogramma's ook overweg kunnen met het dataformaat. **Geojson** is een veilige keuze, want dit open formaat +wordt door veel editors ondersteund. Met QGIS kunnen shapefiles omgezet worden in geojson. Een geojson kan ook als extra +laag in MapComplete geladen worden. -Daarnaast moeten de attributen van de data omgezet moeten worden naar de OpenStreetMap-attributen - raadpleeg de wiki voor de correcte tags. -Dit kan bijvoorbeeld met QGIS of met JOSM gedaan worden. +Daarnaast moeten de attributen van de data omgezet moeten worden naar de OpenStreetMap-attributen - raadpleeg de wiki +voor de correcte tags. Dit kan bijvoorbeeld met QGIS of met JOSM gedaan worden. -Ten slotte moet men ook voorkomen dat er duplicaten ontstaan: twee objecten in OpenStreetMap die beiden hetzelfde voorwerp voorstellen. +Ten slotte moet men ook voorkomen dat er duplicaten ontstaan: twee objecten in OpenStreetMap die beiden hetzelfde +voorwerp voorstellen. ## 3. Community inlichten en importeren voorbereiden -Indien er een grote import gaat gebeuren, dient de community hiervan ingelicht te worden. Door dit in de community te bespreken, worden fouten voorkomen. Ook helpt dit om medecontributors warm te maken en niet-betrokken contributors geen verassingen te bezorgen. +Indien er een grote import gaat gebeuren, dient de community hiervan ingelicht te worden. Door dit in de community te +bespreken, worden fouten voorkomen. Ook helpt dit om medecontributors warm te maken en niet-betrokken contributors geen +verassingen te bezorgen. -Voor een import die enkel in Belgie plaatsvindt, volstaat een email naar talk@osm.be ; voor een globale import moet men ook best naar import@openstreetmap.org sturen. +Voor een import die enkel in Belgie plaatsvindt, volstaat een email naar talk@osm.be ; voor een globale import moet men +ook best naar import@openstreetmap.org sturen. Voor kleinere datasets is dit slechts een formaliteit - zeker indien de data gedubbelcheckt gaat worden. -Ondertussen kan de import voorbereid worden door op kleine schaal te importeren (bv. een beperkt gebied of een beperkt aantal punten). -Indien er een MapComplete-thema wordt opgezet, kan dit ook al getest worden en naar de community gestuurd worden. +Ondertussen kan de import voorbereid worden door op kleine schaal te importeren (bv. een beperkt gebied of een beperkt +aantal punten). Indien er een MapComplete-thema wordt opgezet, kan dit ook al getest worden en naar de community +gestuurd worden. ## 4. Importeren! diff --git a/Docs/Layers/address.md b/Docs/Layers/address.md index 213b8ffc97..5aef945343 100644 --- a/Docs/Layers/address.md +++ b/Docs/Layers/address.md @@ -41,7 +41,7 @@ Elements must have the all of following tags to be shown on this layer: - - addr:housenumber~^..*$|addr:street~^..*$|ref:inspireid~^..*$ + - addr:housenumber~^..*$|addr:street~^..*$ @@ -112,4 +112,4 @@ This is rendered with `Fixme description{fixme}` - **No fixme - write something here to explain complicated cases** corresponds with -This document is autogenerated from assets/layers/address/address.json \ No newline at end of file +This document is autogenerated from [assets/layers/address/address.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/address/address.json) \ No newline at end of file diff --git a/Docs/Layers/all_streets.md b/Docs/Layers/all_streets.md index 893d98a6c8..b71a3a4e4f 100644 --- a/Docs/Layers/all_streets.md +++ b/Docs/Layers/all_streets.md @@ -1,92 +1,62 @@ - - - all_streets +all_streets ============= - - - - - - - ## Table of contents 1. [all_streets](#all_streets) - * [Themes using this layer](#themes-using-this-layer) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + * [Themes using this layer](#themes-using-this-layer) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [lit](#lit) +- Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` +#### Themes using this layer - - - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - - - - -#### Themes using this layer - - - - - - - [cyclestreets](https://mapcomplete.osm.be/cyclestreets) - - [street_lighting](https://mapcomplete.osm.be/street_lighting) - +- [cyclestreets](https://mapcomplete.osm.be/cyclestreets) +- [street_lighting](https://mapcomplete.osm.be/street_lighting) [Go to the source code](../assets/layers/all_streets/all_streets.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- highway!~^$ +- service!~^driveway$ +- highway!~^platform$ - - - highway!~^$ - - service!~^driveway$ - - highway!~^platform$ - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/lit#values) [lit](https://wiki.openstreetmap.org/wiki/Key:lit) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:lit%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:lit%3Dno) [24/7](https://wiki.openstreetmap.org/wiki/Tag:lit%3D24/7) - - - -### lit - - +### lit The question is **Is this street lit?** - - - - - - **This street is lit** corresponds with lit=yes - - **This street is not lit** corresponds with lit=no - - **This street is lit at night** corresponds with lit=sunset-sunrise_This option cannot be chosen as answer_ - - **This street is lit 24/7** corresponds with lit=24/7 - +- **This street is lit** corresponds with lit + =yes +- **This street is not lit** corresponds with + lit=no +- **This street is lit at night** corresponds + with lit + =sunset-sunrise_This option + cannot be chosen as answer_ +- **This street is lit 24/7** corresponds with + lit=24/7 This document is autogenerated from assets/layers/all_streets/all_streets.json \ No newline at end of file diff --git a/Docs/Layers/ambulancestation.md b/Docs/Layers/ambulancestation.md index 721a0f7b6c..6c30c2a29b 100644 --- a/Docs/Layers/ambulancestation.md +++ b/Docs/Layers/ambulancestation.md @@ -41,6 +41,7 @@ An ambulance station is an area for storage of ambulance vehicles, medical equip - [hailhydrant](https://mapcomplete.osm.be/hailhydrant) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/ambulancestation/ambulancestation.json) @@ -157,4 +158,4 @@ _This tagrendering has no question and is thus read-only_ -This document is autogenerated from assets/layers/ambulancestation/ambulancestation.json \ No newline at end of file +This document is autogenerated from [assets/layers/ambulancestation/ambulancestation.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/ambulancestation/ambulancestation.json) \ No newline at end of file diff --git a/Docs/Layers/artwork.md b/Docs/Layers/artwork.md index 5846931e81..53cec1ee06 100644 --- a/Docs/Layers/artwork.md +++ b/Docs/Layers/artwork.md @@ -40,6 +40,7 @@ Diverse pieces of artwork - [artwork](https://mapcomplete.osm.be/artwork) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/artwork/artwork.json) @@ -147,4 +148,4 @@ The question is **Which Wikidata-entry corresponds with this artwork?** This rendering asks information about the property [wikidata](https://wiki.openstreetmap.org/wiki/Key:wikidata) This is rendered with `Corresponds with {wikidata}` -This document is autogenerated from assets/layers/artwork/artwork.json \ No newline at end of file +This document is autogenerated from [assets/layers/artwork/artwork.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/artwork/artwork.json) \ No newline at end of file diff --git a/Docs/Layers/assen.md b/Docs/Layers/assen.md index 763f714c5c..4e2f170d04 100644 --- a/Docs/Layers/assen.md +++ b/Docs/Layers/assen.md @@ -1,61 +1,38 @@ - - - assen +assen ======= - - - - - - - ## Table of contents 1. [assen](#assen) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [all_tags](#all_tags) - - - - - This layer is loaded from an external source, namely `https://robinlinde.github.io/tiles/assen_street_lighting/{z}/{x}/{y}.json` - - This layer will automatically load [street_lamps](./street_lamps.md) into the layout as it depends on it: A calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _closest_osm_street_lamp) - +- This layer is loaded from an external source, namely `https://robinlinde.github.io/tiles/assen_street_lighting/{z}/{x}/{y}.json` +- This layer will automatically load [street_lamps](./street_lamps.md) into the layout as it depends on it: A + calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _ + closest_osm_street_lamp) [Go to the source code](../assets/layers/assen/assen.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- Lichtmastnummer~^..*$ - - - Lichtmastnummer~^..*$ - - - - - Supported attributes +Supported attributes ---------------------- - - - - -### all_tags - - +### all_tags _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/assen/assen.json \ No newline at end of file diff --git a/Docs/Layers/barrier.md b/Docs/Layers/barrier.md index aff864247d..ef35a9f65a 100644 --- a/Docs/Layers/barrier.md +++ b/Docs/Layers/barrier.md @@ -44,6 +44,7 @@ Obstacles while cycling, such as bollards and cycle barriers - [cycle_infra](https://mapcomplete.osm.be/cycle_infra) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/barrier/barrier.json) @@ -198,4 +199,4 @@ The question is **How much overlap do the barriers have?** This rendering asks information about the property [overlap](https://wiki.openstreetmap.org/wiki/Key:overlap) This is rendered with `Overlap: {overlap} m` -This document is autogenerated from assets/layers/barrier/barrier.json \ No newline at end of file +This document is autogenerated from [assets/layers/barrier/barrier.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/barrier/barrier.json) \ No newline at end of file diff --git a/Docs/Layers/bench.md b/Docs/Layers/bench.md index fbd91ec9d3..0c046ccaae 100644 --- a/Docs/Layers/bench.md +++ b/Docs/Layers/bench.md @@ -42,6 +42,8 @@ A bench is a wooden, metal, stone, ... surface where a human can sit. This layer - [benches](https://mapcomplete.osm.be/benches) + - [nature](https://mapcomplete.osm.be/nature) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/bench/bench.json) @@ -189,4 +191,4 @@ This is rendered with `This bench was last surveyed on {survey:date}` - **Surveyed today!** corresponds with survey:date= -This document is autogenerated from assets/layers/bench/bench.json \ No newline at end of file +This document is autogenerated from [assets/layers/bench/bench.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/bench/bench.json) \ No newline at end of file diff --git a/Docs/Layers/bench_at_pt.md b/Docs/Layers/bench_at_pt.md index 4653d1311c..3f30919b34 100644 --- a/Docs/Layers/bench_at_pt.md +++ b/Docs/Layers/bench_at_pt.md @@ -38,6 +38,7 @@ A layer showing all public-transport-stops which do have a bench - [benches](https://mapcomplete.osm.be/benches) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/bench_at_pt/bench_at_pt.json) @@ -111,4 +112,4 @@ The question is **What kind of bench is this?** - **There is no bench here** corresponds with bench=no -This document is autogenerated from assets/layers/bench_at_pt/bench_at_pt.json \ No newline at end of file +This document is autogenerated from [assets/layers/bench_at_pt/bench_at_pt.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/bench_at_pt/bench_at_pt.json) \ No newline at end of file diff --git a/Docs/Layers/bicycle_library.md b/Docs/Layers/bicycle_library.md index 778bd3d45d..02acba67bc 100644 --- a/Docs/Layers/bicycle_library.md +++ b/Docs/Layers/bicycle_library.md @@ -5,7 +5,7 @@ - + A facility where bicycles can be lent for longer period of times @@ -45,6 +45,7 @@ A facility where bicycles can be lent for longer period of times - [bicyclelib](https://mapcomplete.osm.be/bicyclelib) - [cyclofix](https://mapcomplete.osm.be/cyclofix) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/bicycle_library/bicycle_library.json) @@ -211,4 +212,4 @@ The question is **Is there still something relevant you couldn't give in the pre This rendering asks information about the property [description](https://wiki.openstreetmap.org/wiki/Key:description) This is rendered with `{description}` -This document is autogenerated from assets/layers/bicycle_library/bicycle_library.json \ No newline at end of file +This document is autogenerated from [assets/layers/bicycle_library/bicycle_library.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/bicycle_library/bicycle_library.json) \ No newline at end of file diff --git a/Docs/Layers/bicycle_rental.md b/Docs/Layers/bicycle_rental.md new file mode 100644 index 0000000000..331bc53cd6 --- /dev/null +++ b/Docs/Layers/bicycle_rental.md @@ -0,0 +1,362 @@ + + + bicycle_rental +================ + + + + + +Bicycle rental stations + + + + +## Table of contents + +1. [bicycle_rental](#bicycle_rental) + * [Themes using this layer](#themes-using-this-layer) + - [Basic tags for this layer](#basic-tags-for-this-layer) + - [Supported attributes](#supported-attributes) + + [bicycle_rental_type](#bicycle_rental_type) + + [website](#website) + + [email](#email) + + [phone](#phone) + + [opening_hours](#opening_hours) + + [payment-options](#payment-options) + + [payment-options-advanced](#payment-options-advanced) + + [bicycle-types](#bicycle-types) + + [rental-capacity-bicycle-type](#rental-capacity-bicycle-type) + + [questions](#questions) + + [rental-capacity-bicycle-type](#rental-capacity-bicycle-type) + + [questions](#questions) + + [rental-capacity-bicycle-type](#rental-capacity-bicycle-type) + + [questions](#questions) + + [rental-capacity-bicycle-type](#rental-capacity-bicycle-type) + + [questions](#questions) + + [rental-capacity-bicycle-type](#rental-capacity-bicycle-type) + + [questions](#questions) + + [rental-capacity-bicycle-type](#rental-capacity-bicycle-type) + + [questions](#questions) + + + + + + + + + + +#### Themes using this layer + + + + + + - [bicycle_rental](https://mapcomplete.osm.be/bicycle_rental) + - [personal](https://mapcomplete.osm.be/personal) + + +[Go to the source code](../assets/layers/bicycle_rental/bicycle_rental.json) + + + + Basic tags for this layer +--------------------------- + + + +Elements must have the all of following tags to be shown on this layer: + + + + - amenity=bicycle_rental|bicycle_rental~^..*$|service:bicycle:rental=yes|rental~^.*bicycle.*$ + + + + + Supported attributes +---------------------- + + + +**Warning** This quick overview is incomplete + + + +attribute | type | values which are supported by this layer +----------- | ------ | ------------------------------------------ +[](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | +[](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | +[](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | +[](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | +[](https://taginfo.openstreetmap.org/keys/rental#values) [rental](https://wiki.openstreetmap.org/wiki/Key:rental) | [string](../SpecialInputElements.md#string) | [city_bike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dcity_bike) [ebike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Debike) [bmx](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dbmx) [mtb](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dmtb) [kid_bike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dkid_bike) +[](https://taginfo.openstreetmap.org/keys/capacity:city_bike#values) [capacity:city_bike](https://wiki.openstreetmap.org/wiki/Key:capacity:city_bike) | [pnat](../SpecialInputElements.md#pnat) | +[](https://taginfo.openstreetmap.org/keys/capacity:ebike#values) [capacity:ebike](https://wiki.openstreetmap.org/wiki/Key:capacity:ebike) | [pnat](../SpecialInputElements.md#pnat) | +[](https://taginfo.openstreetmap.org/keys/capacity:kid_bike#values) [capacity:kid_bike](https://wiki.openstreetmap.org/wiki/Key:capacity:kid_bike) | [pnat](../SpecialInputElements.md#pnat) | +[](https://taginfo.openstreetmap.org/keys/capacity:bmx#values) [capacity:bmx](https://wiki.openstreetmap.org/wiki/Key:capacity:bmx) | [pnat](../SpecialInputElements.md#pnat) | +[](https://taginfo.openstreetmap.org/keys/capacity:mtb#values) [capacity:mtb](https://wiki.openstreetmap.org/wiki/Key:capacity:mtb) | [pnat](../SpecialInputElements.md#pnat) | +[](https://taginfo.openstreetmap.org/keys/capacity:bicycle_pannier#values) [capacity:bicycle_pannier](https://wiki.openstreetmap.org/wiki/Key:capacity:bicycle_pannier) | [pnat](../SpecialInputElements.md#pnat) | + + + + +### bicycle_rental_type + + + +The question is **What kind of bicycle rental is this?** + + + + + + - **This is a shop whose main focus is bicycle rental** corresponds with shop=bicycle_rental&bicycle_rental=shop + - **This is a rental buisiness which rents out various objects and/or vehicles. It rents out bicycles too, but this is not the main focus** corresponds with shop=rental_This option cannot be chosen as answer_ + - **This is a shop which sells or repairs bicycles, but also rents out bicycles** corresponds with service:bicycle:rental=yes&shop=bicycle + - **This is an automated docking station, where a bicycle is mechanically locked into a structure** corresponds with bicycle_rental=docking_station + - **A machine is present which dispenses and accepts keys, eventually after authentication and/or payment. The bicycles are parked nearby** corresponds with bicycle_rental=key_dispensing_machine + - **This is a dropoff point: a designated bicycle parking for this cycle rental** corresponds with bicycle_rental=dropoff_point + + + + +### website + + + +The question is **What is the website of {name}?** + +This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) +This is rendered with `{website}` + + + + - **{contact:website}** corresponds with contact:website~^..*$_This option cannot be chosen as answer_ + + + + +### email + + + +The question is **What is the email address of {name}?** + +This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email) +This is rendered with `{email}` + + + + - **{contact:email}** corresponds with contact:email~^..*$_This option cannot be chosen as answer_ + + + + +### phone + + + +The question is **What is the phone number of {name}?** + +This rendering asks information about the property [phone](https://wiki.openstreetmap.org/wiki/Key:phone) +This is rendered with `{phone}` + + + + - **{contact:phone}** corresponds with contact:phone~^..*$_This option cannot be chosen as answer_ + + + + +### opening_hours + + + +The question is **What are the opening hours of {name}?** + +This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) +This is rendered with `

Opening hours

{opening_hours_table(opening_hours)}` + + + +### payment-options + + + +The question is **Which methods of payment are accepted here?** + + + + + + - **Cash is accepted here** corresponds with payment:cash=yesUnselecting this answer will add payment:cash=no + - **Payment cards are accepted here** corresponds with payment:cards=yesUnselecting this answer will add payment:cards=no + + + + +### payment-options-advanced + + + +The question is **Which methods of payment are accepted here?** + + + + + + - **Cash is accepted here** corresponds with payment:cash=yesUnselecting this answer will add payment:cash=no + - **Payment cards are accepted here** corresponds with payment:cards=yesUnselecting this answer will add payment:cards=no + - **Payment is done using a dedicated app** corresponds with payment:app=yesUnselecting this answer will add payment:app=no + - **Payment is done using a membership card** corresponds with payment:membership_card=yesUnselecting this answer will add payment:membership_card=no + + + + +### bicycle-types + + + +The question is **What kind of bicycles and accessories are rented here?** + +This rendering asks information about the property [rental](https://wiki.openstreetmap.org/wiki/Key:rental) +This is rendered with `{rental} is rented here` + + + + - **Normal city bikes can be rented here** corresponds with rental=city_bike + - **Electrical bikes can be rented here** corresponds with rental=ebike + - **BMX bikes can be rented here** corresponds with rental=bmx + - **Mountainbikes can be rented here** corresponds with rental=mtb + - **Bikes for childs can be rented here** corresponds with rental=kid_bike + + + + +### rental-capacity-bicycle-type + + + +The question is **How much city bikes can be rented here? ** + +This rendering asks information about the property [capacity:city_bike](https://wiki.openstreetmap.org/wiki/Key:capacity:city_bike) +This is rendered with `{capacity:city_bike} city bikes can be rented here` + + + +### questions + + + +_This tagrendering has no question and is thus read-only_ + + + + + +### rental-capacity-bicycle-type + + + +The question is **How much electrical bikes can be rented here? ** + +This rendering asks information about the property [capacity:ebike](https://wiki.openstreetmap.org/wiki/Key:capacity:ebike) +This is rendered with `{capacity:ebike} electrical bikes can be rented here` + + + +### questions + + + +_This tagrendering has no question and is thus read-only_ + + + + + +### rental-capacity-bicycle-type + + + +The question is **How much bikes for children can be rented here? ** + +This rendering asks information about the property [capacity:kid_bike](https://wiki.openstreetmap.org/wiki/Key:capacity:kid_bike) +This is rendered with `{capacity:kid_bike} bikes for children can be rented here` + + + +### questions + + + +_This tagrendering has no question and is thus read-only_ + + + + + +### rental-capacity-bicycle-type + + + +The question is **How much BMX bikes can be rented here? ** + +This rendering asks information about the property [capacity:bmx](https://wiki.openstreetmap.org/wiki/Key:capacity:bmx) +This is rendered with `{capacity:bmx} BMX bikes can be rented here` + + + +### questions + + + +_This tagrendering has no question and is thus read-only_ + + + + + +### rental-capacity-bicycle-type + + + +The question is **How much mountainbike can be rented here? ** + +This rendering asks information about the property [capacity:mtb](https://wiki.openstreetmap.org/wiki/Key:capacity:mtb) +This is rendered with `{capacity:mtb} mountainbike can be rented here` + + + +### questions + + + +_This tagrendering has no question and is thus read-only_ + + + + + +### rental-capacity-bicycle-type + + + +The question is **How much bicycle panniers can be rented here? ** + +This rendering asks information about the property [capacity:bicycle_pannier](https://wiki.openstreetmap.org/wiki/Key:capacity:bicycle_pannier) +This is rendered with `{capacity:bicycle_pannier} bicycle panniers can be rented here` + + + +### questions + + + +_This tagrendering has no question and is thus read-only_ + + + +This document is autogenerated from [assets/layers/bicycle_rental/bicycle_rental.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/bicycle_rental/bicycle_rental.json) \ No newline at end of file diff --git a/Docs/Layers/bicycle_tube_vending_machine.md b/Docs/Layers/bicycle_tube_vending_machine.md index b39d9bcc6c..c98d9e5379 100644 --- a/Docs/Layers/bicycle_tube_vending_machine.md +++ b/Docs/Layers/bicycle_tube_vending_machine.md @@ -5,7 +5,7 @@ - + A layer showing vending machines for bicycle tubes (either purpose-built bicycle tube vending machines or classical vending machines with bicycle tubes and optionally additional bicycle related objects such as lights, gloves, locks, ...) @@ -42,6 +42,7 @@ A layer showing vending machines for bicycle tubes (either purpose-built bicycle - [cyclofix](https://mapcomplete.osm.be/cyclofix) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/bicycle_tube_vending_machine/bicycle_tube_vending_machine.json) @@ -189,4 +190,4 @@ The question is **Are other bicycle bicycle accessories sold here?** - **Bicycle locks are sold here** corresponds with vending:bicycle_lock=yesUnselecting this answer will add vending:bicycle_lock=no -This document is autogenerated from assets/layers/bicycle_tube_vending_machine/bicycle_tube_vending_machine.json \ No newline at end of file +This document is autogenerated from [assets/layers/bicycle_tube_vending_machine/bicycle_tube_vending_machine.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/bicycle_tube_vending_machine/bicycle_tube_vending_machine.json) \ No newline at end of file diff --git a/Docs/Layers/bike_cafe.md b/Docs/Layers/bike_cafe.md index a7fd7d4e2c..6c89510785 100644 --- a/Docs/Layers/bike_cafe.md +++ b/Docs/Layers/bike_cafe.md @@ -5,7 +5,7 @@ - + A bike café is a café geared towards cyclists, for example with services such as a pump, with lots of bicycle-related decoration, ... @@ -44,6 +44,7 @@ A bike café is a café geared towards cyclists, for example with services such - [cyclofix](https://mapcomplete.osm.be/cyclofix) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/bike_cafe/bike_cafe.json) @@ -60,7 +61,7 @@ Elements must have the all of following tags to be shown on this layer: - amenity=pub|amenity=bar|amenity=cafe|amenity=restaurant - - pub=cycling|pub=bicycle|theme=cycling|theme=bicycle|^service:bicycle:.*$~~^..*$ + - pub=cycling|pub=bicycle|theme=cycling|theme=bicycle|service:bicycle:.*~^..*$ @@ -199,4 +200,4 @@ The question is **When it this bike café opened?** This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) This is rendered with `{opening_hours_table(opening_hours)}` -This document is autogenerated from assets/layers/bike_cafe/bike_cafe.json \ No newline at end of file +This document is autogenerated from [assets/layers/bike_cafe/bike_cafe.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/bike_cafe/bike_cafe.json) \ No newline at end of file diff --git a/Docs/Layers/bike_cleaning.md b/Docs/Layers/bike_cleaning.md index 0450d9a100..01334ddd00 100644 --- a/Docs/Layers/bike_cleaning.md +++ b/Docs/Layers/bike_cleaning.md @@ -38,6 +38,7 @@ A layer showing facilities where one can clean their bike - [cyclofix](https://mapcomplete.osm.be/cyclofix) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/bike_cleaning/bike_cleaning.json) @@ -53,7 +54,7 @@ Elements must have the all of following tags to be shown on this layer: - - service:bicycle:cleaning=yes|service:bicycle:cleaning=diy|amenity=bicycle_wash + - service:bicycle:cleaning=yes|service:bicycle:cleaning=diy|amenity=bicycle_wash|amenity=bike_wash @@ -98,7 +99,7 @@ This is rendered with `Using the cleaning service costs {service:bicycle:cleanin - **The cleaning service is free to use** corresponds with service:bicycle:cleaning:fee=no&service:bicycle:cleaning:charge= - **Free to use** corresponds with service:bicycle:cleaning:fee=no_This option cannot be chosen as answer_ - - **The cleaning service has a fee, but the amount is not known** corresponds with service:bicycle:cleaning:fee=yes + - **The cleaning service has a fee, but the amount is not known** corresponds with service:bicycle:cleaning:fee=yes&service:bicycle:cleaning:charge=_This option cannot be chosen as answer_ @@ -119,4 +120,4 @@ This is rendered with `Using the cleaning service costs {charge}` - **The cleaning service has a fee** corresponds with fee=yes -This document is autogenerated from assets/layers/bike_cleaning/bike_cleaning.json \ No newline at end of file +This document is autogenerated from [assets/layers/bike_cleaning/bike_cleaning.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/bike_cleaning/bike_cleaning.json) \ No newline at end of file diff --git a/Docs/Layers/bike_parking.md b/Docs/Layers/bike_parking.md index 169b202471..cdfd4dfba9 100644 --- a/Docs/Layers/bike_parking.md +++ b/Docs/Layers/bike_parking.md @@ -5,7 +5,7 @@ - + A layer showing where you can park your bike @@ -43,6 +43,7 @@ A layer showing where you can park your bike - [cyclofix](https://mapcomplete.osm.be/cyclofix) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/bike_parking/bike_parking.json) @@ -208,4 +209,4 @@ The question is **How many cargo bicycles fit in this bicycle parking?** This rendering asks information about the property [capacity:cargo_bike](https://wiki.openstreetmap.org/wiki/Key:capacity:cargo_bike) This is rendered with `This parking fits {capacity:cargo_bike} cargo bikes` -This document is autogenerated from assets/layers/bike_parking/bike_parking.json \ No newline at end of file +This document is autogenerated from [assets/layers/bike_parking/bike_parking.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/bike_parking/bike_parking.json) \ No newline at end of file diff --git a/Docs/Layers/bike_repair_station.md b/Docs/Layers/bike_repair_station.md index 65df6f1487..a4c7b10cfe 100644 --- a/Docs/Layers/bike_repair_station.md +++ b/Docs/Layers/bike_repair_station.md @@ -5,7 +5,7 @@ - + A layer showing bicycle pumps and bicycle repair tool stands @@ -20,13 +20,14 @@ A layer showing bicycle pumps and bicycle repair tool stands - [Supported attributes](#supported-attributes) + [images](#images) + [bike_repair_station-available-services](#bike_repair_station-available-services) + + [Operational status](#operational-status) + + [bike_repair_station-opening_hours](#bike_repair_station-opening_hours) + + [access](#access) + [bike_repair_station-operator](#bike_repair_station-operator) + [bike_repair_station-email](#bike_repair_station-email) + [bike_repair_station-phone](#bike_repair_station-phone) - + [bike_repair_station-opening_hours](#bike_repair_station-opening_hours) + [bike_repair_station-bike-chain-tool](#bike_repair_station-bike-chain-tool) + [bike_repair_station-bike-stand](#bike_repair_station-bike-stand) - + [Operational status](#operational-status) + [Email maintainer](#email-maintainer) + [bike_repair_station-valves](#bike_repair_station-valves) + [bike_repair_station-electrical_pump](#bike_repair_station-electrical_pump) @@ -49,6 +50,7 @@ A layer showing bicycle pumps and bicycle repair tool stands - [cyclofix](https://mapcomplete.osm.be/cyclofix) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/bike_repair_station/bike_repair_station.json) @@ -81,17 +83,18 @@ Elements must have the all of following tags to be shown on this layer: attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/service:bicycle:tools#values) [service:bicycle:tools](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:tools) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:tools%3Dno) [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:tools%3Dyes) [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:tools%3Dyes) -[](https://taginfo.openstreetmap.org/keys/operator#values) [operator](https://wiki.openstreetmap.org/wiki/Key:operator) | [string](../SpecialInputElements.md#string) | [De Fietsambassade Gent](https://wiki.openstreetmap.org/wiki/Tag:operator%3DDe Fietsambassade Gent) +[](https://taginfo.openstreetmap.org/keys/service:bicycle:pump:operational_status#values) [service:bicycle:pump:operational_status](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:pump:operational_status) | Multiple choice | [broken](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump:operational_status%3Dbroken) [operational](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump:operational_status%3Doperational) +[](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [24/7](https://wiki.openstreetmap.org/wiki/Tag:opening_hours%3D24/7) +[](https://taginfo.openstreetmap.org/keys/access#values) [access](https://wiki.openstreetmap.org/wiki/Key:access) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:access%3Dyes) [customers](https://wiki.openstreetmap.org/wiki/Tag:access%3Dcustomers) [private](https://wiki.openstreetmap.org/wiki/Tag:access%3Dprivate) +[](https://taginfo.openstreetmap.org/keys/operator#values) [operator](https://wiki.openstreetmap.org/wiki/Key:operator) | [string](../SpecialInputElements.md#string) | [](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | [](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | -[](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [24/7](https://wiki.openstreetmap.org/wiki/Tag:opening_hours%3D24/7) [](https://taginfo.openstreetmap.org/keys/service:bicycle:chain_tool#values) [service:bicycle:chain_tool](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:chain_tool) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:chain_tool%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:chain_tool%3Dno) [](https://taginfo.openstreetmap.org/keys/service:bicycle:stand#values) [service:bicycle:stand](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:stand) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:stand%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:stand%3Dno) -[](https://taginfo.openstreetmap.org/keys/service:bicycle:pump:operational_status#values) [service:bicycle:pump:operational_status](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:pump:operational_status) | Multiple choice | [broken](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump:operational_status%3Dbroken) [](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump:operational_status%3D) [](https://taginfo.openstreetmap.org/keys/valves#values) [valves](https://wiki.openstreetmap.org/wiki/Key:valves) | [string](../SpecialInputElements.md#string) | [sclaverand](https://wiki.openstreetmap.org/wiki/Tag:valves%3Dsclaverand) [dunlop](https://wiki.openstreetmap.org/wiki/Tag:valves%3Ddunlop) [schrader](https://wiki.openstreetmap.org/wiki/Tag:valves%3Dschrader) [](https://taginfo.openstreetmap.org/keys/manual#values) [manual](https://wiki.openstreetmap.org/wiki/Key:manual) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:manual%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:manual%3Dno) [](https://taginfo.openstreetmap.org/keys/manometer#values) [manometer](https://wiki.openstreetmap.org/wiki/Key:manometer) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:manometer%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:manometer%3Dno) [broken](https://wiki.openstreetmap.org/wiki/Tag:manometer%3Dbroken) -[](https://taginfo.openstreetmap.org/keys/level#values) [level](https://wiki.openstreetmap.org/wiki/Key:level) | [float](../SpecialInputElements.md#float) | [0](https://wiki.openstreetmap.org/wiki/Tag:level%3D0) [1](https://wiki.openstreetmap.org/wiki/Tag:level%3D1) +[](https://taginfo.openstreetmap.org/keys/level#values) [level](https://wiki.openstreetmap.org/wiki/Key:level) | [float](../SpecialInputElements.md#float) | [0](https://wiki.openstreetmap.org/wiki/Tag:level%3D0) [1](https://wiki.openstreetmap.org/wiki/Tag:level%3D1) [-1](https://wiki.openstreetmap.org/wiki/Tag:level%3D-1) @@ -110,7 +113,7 @@ _This tagrendering has no question and is thus read-only_ -The question is **Which services are available at this bike station?** +The question is **Which services are available at this location?** @@ -123,6 +126,57 @@ The question is **Which services are available at this bike station?** +### Operational status + + + +The question is **Is the bike pump still operational?** + + + + + + - **The bike pump is broken** corresponds with service:bicycle:pump:operational_status=broken + - **The bike pump is operational** corresponds with service:bicycle:pump:operational_status=operational + + + + +### bike_repair_station-opening_hours + + + +The question is **When is this bicycle repair point open?** + +This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) +This is rendered with `{opening_hours_table()}` + + + + - **Always open** corresponds with opening_hours=24/7 + + + + +### access + + + +The question is **Who is allowed to use this repair station?** + + + + + + - **Publicly accessible** corresponds with access=yes + - **Publicly accessible** corresponds with access=public_This option cannot be chosen as answer_ + - **Only for customers** corresponds with access=customers + - **Not accessible to the general public** corresponds with access=private + - **Not accessible to the general public** corresponds with access=no_This option cannot be chosen as answer_ + + + + ### bike_repair_station-operator @@ -134,11 +188,6 @@ This is rendered with `Maintained by {operator}` - - **De Fietsambassade Gent** corresponds with operator=De Fietsambassade Gent - - - - ### bike_repair_station-email @@ -161,23 +210,6 @@ This is rendered with `{phone}` -### bike_repair_station-opening_hours - - - -The question is **When is this bicycle repair point open?** - -This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) -This is rendered with `{opening_hours_table()}` - - - - - **Always open** corresponds with opening_hours=24/7 - - **Always open** corresponds with _This option cannot be chosen as answer_ - - - - ### bike_repair_station-bike-chain-tool @@ -210,22 +242,6 @@ The question is **Does this bike station have a hook to hang your bike on or a s -### Operational status - - - -The question is **Is the bike pump still operational?** - - - - - - - **The bike pump is broken** corresponds with service:bicycle:pump:operational_status=broken - - **The bike pump is operational** corresponds with - - - - ### Email maintainer @@ -302,6 +318,7 @@ This is rendered with `Located on the {level}th floor` - **Located on the ground floor** corresponds with level=0 - **Located on the ground floor** corresponds with _This option cannot be chosen as answer_ - **Located on the first floor** corresponds with level=1 + - **Located on the first basement level** corresponds with level=-1 -This document is autogenerated from assets/layers/bike_repair_station/bike_repair_station.json \ No newline at end of file +This document is autogenerated from [assets/layers/bike_repair_station/bike_repair_station.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/bike_repair_station/bike_repair_station.json) \ No newline at end of file diff --git a/Docs/Layers/bike_shop.md b/Docs/Layers/bike_shop.md index 5cc92326f7..6e9f82eb01 100644 --- a/Docs/Layers/bike_shop.md +++ b/Docs/Layers/bike_shop.md @@ -5,7 +5,7 @@ - + A shop specifically selling bicycles or related items @@ -52,6 +52,7 @@ A shop specifically selling bicycles or related items - [cyclofix](https://mapcomplete.osm.be/cyclofix) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/bike_shop/bike_shop.json) @@ -330,7 +331,7 @@ This is rendered with `Using the cleaning service costs {service:bicycle:cleanin - **The cleaning service is free to use** corresponds with service:bicycle:cleaning:fee=no&service:bicycle:cleaning:charge= - **Free to use** corresponds with service:bicycle:cleaning:fee=no_This option cannot be chosen as answer_ - - **The cleaning service has a fee, but the amount is not known** corresponds with service:bicycle:cleaning:fee=yes + - **The cleaning service has a fee, but the amount is not known** corresponds with service:bicycle:cleaning:fee=yes&service:bicycle:cleaning:charge=_This option cannot be chosen as answer_ -This document is autogenerated from assets/layers/bike_shop/bike_shop.json \ No newline at end of file +This document is autogenerated from [assets/layers/bike_shop/bike_shop.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/bike_shop/bike_shop.json) \ No newline at end of file diff --git a/Docs/Layers/bike_themed_object.md b/Docs/Layers/bike_themed_object.md index 150c95317c..51c33082ef 100644 --- a/Docs/Layers/bike_themed_object.md +++ b/Docs/Layers/bike_themed_object.md @@ -41,6 +41,7 @@ A layer with bike-themed objects but who don't match any other layer - [cyclofix](https://mapcomplete.osm.be/cyclofix) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/bike_themed_object/bike_themed_object.json) @@ -159,4 +160,4 @@ The question is **What are the opening hours of {name}?** This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) This is rendered with `

Opening hours

{opening_hours_table(opening_hours)}` -This document is autogenerated from assets/layers/bike_themed_object/bike_themed_object.json \ No newline at end of file +This document is autogenerated from [assets/layers/bike_themed_object/bike_themed_object.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/bike_themed_object/bike_themed_object.json) \ No newline at end of file diff --git a/Docs/Layers/binocular.md b/Docs/Layers/binocular.md index b852f25975..2b5c60c354 100644 --- a/Docs/Layers/binocular.md +++ b/Docs/Layers/binocular.md @@ -5,7 +5,7 @@ - + Binoculas @@ -38,6 +38,7 @@ Binoculas - [binoculars](https://mapcomplete.osm.be/binoculars) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/binocular/binocular.json) @@ -110,4 +111,4 @@ The question is **When looking through this binocular, in what direction does on This rendering asks information about the property [direction](https://wiki.openstreetmap.org/wiki/Key:direction) This is rendered with `Looks towards {direction}°` -This document is autogenerated from assets/layers/binocular/binocular.json \ No newline at end of file +This document is autogenerated from [assets/layers/binocular/binocular.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/binocular/binocular.json) \ No newline at end of file diff --git a/Docs/Layers/birdhide.md b/Docs/Layers/birdhide.md index bb001465c2..435735d519 100644 --- a/Docs/Layers/birdhide.md +++ b/Docs/Layers/birdhide.md @@ -39,6 +39,7 @@ Een vogelkijkhut - [nature](https://mapcomplete.osm.be/nature) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/birdhide/birdhide.json) @@ -138,4 +139,4 @@ This is rendered with `Beheer door {operator}` - **Beheer door het Agentschap Natuur en Bos ** corresponds with operator=Agentschap Natuur en Bos -This document is autogenerated from assets/layers/birdhide/birdhide.json \ No newline at end of file +This document is autogenerated from [assets/layers/birdhide/birdhide.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/birdhide/birdhide.json) \ No newline at end of file diff --git a/Docs/Layers/brugge.md b/Docs/Layers/brugge.md index b1b51ad053..fdddb6acd6 100644 --- a/Docs/Layers/brugge.md +++ b/Docs/Layers/brugge.md @@ -1,20 +1,12 @@ - - - brugge +brugge ======== - - - - - - - ## Table of contents 1. [brugge](#brugge) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [status](#status) + [has closeby](#has-closeby) + [openbaar](#openbaar) @@ -22,104 +14,60 @@ + [oh](#oh) - - - - - This layer is loaded from an external source, namely `https://raw.githubusercontent.com/pietervdvn/pietervdvn.github.io/master/aeds_brugge.json` - - This layer will automatically load [defibrillator](./defibrillator.md) into the layout as it depends on it: A calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _closest_osm_aed) - +- This layer is loaded from an external source, namely `https://raw.githubusercontent.com/pietervdvn/pietervdvn.github.io/master/aeds_brugge.json` +- This layer will automatically load [defibrillator](./defibrillator.md) into the layout as it depends on it: A + calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _closest_osm_aed) [Go to the source code](../assets/layers/brugge/brugge.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- Brugs volgnummer~^..*$ - - - Brugs volgnummer~^..*$ - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/status#values) [status](https://wiki.openstreetmap.org/wiki/Key:status) | Multiple choice | [oud](https://wiki.openstreetmap.org/wiki/Tag:status%3Doud) -[](https://taginfo.openstreetmap.org/keys/Lokaal AED#values) [Lokaal AED](https://wiki.openstreetmap.org/wiki/Key:Lokaal AED) | Multiple choice | - - - - -### status - +[](https://taginfo.openstreetmap.org/keys/Lokaal AED#values) [Lokaal AED](https://wiki.openstreetmap.org/wiki/Key:Lokaal AED) | Multiple choice | +### status _This tagrendering has no question and is thus read-only_ +- **
Dit datapunt is verouderd
** corresponds + with status + =oud - - - - - **
Dit datapunt is verouderd
** corresponds with status=oud - - - - -### has closeby - - +### has closeby _This tagrendering has no question and is thus read-only_ - - - - -### openbaar - - +### openbaar _This tagrendering has no question and is thus read-only_ +- **Bevindt zich in een openbaar gebouw: {Openbare AED Gebouw} in lokaal {Lokaal AED}** corresponds with + Lokaal AED~^..*$ - - - - - **Bevindt zich in een openbaar gebouw: {Openbare AED Gebouw} in lokaal {Lokaal AED}** corresponds with Lokaal AED~^..*$ - - - - -### addr - - +### addr _This tagrendering has no question and is thus read-only_ - - - - -### oh - - +### oh _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/brugge/brugge.json \ No newline at end of file diff --git a/Docs/Layers/cafe_pub.md b/Docs/Layers/cafe_pub.md index 9c68c706f2..3ef0649d22 100644 --- a/Docs/Layers/cafe_pub.md +++ b/Docs/Layers/cafe_pub.md @@ -5,7 +5,7 @@ - + A layer showing cafés and pubs where one can gather around a drink. The layer asks for some relevant questions @@ -46,6 +46,7 @@ A layer showing cafés and pubs where one can gather around a drink. The layer a - [cafes_and_pubs](https://mapcomplete.osm.be/cafes_and_pubs) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/cafe_pub/cafe_pub.json) @@ -257,4 +258,4 @@ The question is **Are dogs allowed in this business?** - **Dogs are allowed and can run around freely** corresponds with dog=unleashed -This document is autogenerated from assets/layers/cafe_pub/cafe_pub.json \ No newline at end of file +This document is autogenerated from [assets/layers/cafe_pub/cafe_pub.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/cafe_pub/cafe_pub.json) \ No newline at end of file diff --git a/Docs/Layers/caravansites.md b/Docs/Layers/caravansites.md index b65d3b4985..a46f676c71 100644 --- a/Docs/Layers/caravansites.md +++ b/Docs/Layers/caravansites.md @@ -1,6 +1,4 @@ - - - caravansites +caravansites ============== @@ -9,15 +7,13 @@ camper sites - - - ## Table of contents 1. [caravansites](#caravansites) - * [Themes using this layer](#themes-using-this-layer) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + * [Themes using this layer](#themes-using-this-layer) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [images](#images) + [caravansites-name](#caravansites-name) + [caravansites-fee](#caravansites-fee) @@ -33,249 +29,168 @@ camper sites + [questions](#questions) + [reviews](#reviews) +#### Themes using this layer - - - - - - - - -#### Themes using this layer - - - - - - - [campersite](https://mapcomplete.osm.be/campersite) - +- [campersite](https://mapcomplete.osm.be/campersite) [Go to the source code](../assets/layers/caravansites/caravansites.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- tourism + =caravan_site +- permanent_camping!~^only$ - - - tourism=caravan_site - - permanent_camping!~^only$ - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ -[](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | [](https://taginfo.openstreetmap.org/keys/fee#values) [fee](https://wiki.openstreetmap.org/wiki/Key:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:fee%3Dno) -[](https://taginfo.openstreetmap.org/keys/charge#values) [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/charge#values) [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [string](../SpecialInputElements.md#string) | [](https://taginfo.openstreetmap.org/keys/sanitary_dump_station#values) [sanitary_dump_station](https://wiki.openstreetmap.org/wiki/Key:sanitary_dump_station) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:sanitary_dump_station%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:sanitary_dump_station%3Dno) -[](https://taginfo.openstreetmap.org/keys/capacity#values) [capacity](https://wiki.openstreetmap.org/wiki/Key:capacity) | [pnat](../SpecialInputElements.md#pnat) | +[](https://taginfo.openstreetmap.org/keys/capacity#values) [capacity](https://wiki.openstreetmap.org/wiki/Key:capacity) | [pnat](../SpecialInputElements.md#pnat) | [](https://taginfo.openstreetmap.org/keys/internet_access#values) [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [](https://taginfo.openstreetmap.org/keys/internet_access:fee#values) [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [](https://taginfo.openstreetmap.org/keys/toilets#values) [toilets](https://wiki.openstreetmap.org/wiki/Key:toilets) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets%3Dno) -[](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | +[](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | [](https://taginfo.openstreetmap.org/keys/permanent_camping#values) [permanent_camping](https://wiki.openstreetmap.org/wiki/Key:permanent_camping) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:permanent_camping%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:permanent_camping%3Dno) [only](https://wiki.openstreetmap.org/wiki/Tag:permanent_camping%3Donly) -[](https://taginfo.openstreetmap.org/keys/description#values) [description](https://wiki.openstreetmap.org/wiki/Key:description) | [text](../SpecialInputElements.md#text) | - - - - -### images - +[](https://taginfo.openstreetmap.org/keys/description#values) [description](https://wiki.openstreetmap.org/wiki/Key:description) | [text](../SpecialInputElements.md#text) | +### images _This tagrendering has no question and is thus read-only_ - - - - -### caravansites-name - - +### caravansites-name The question is **What is this place called?** -This rendering asks information about the property [name](https://wiki.openstreetmap.org/wiki/Key:name) +This rendering asks information about the property [name](https://wiki.openstreetmap.org/wiki/Key:name) This is rendered with `This place is called {name}` - - -### caravansites-fee - - +### caravansites-fee The question is **Does this place charge a fee?** +- **You need to pay for use** corresponds with + fee=yes +- **Can be used for free** corresponds with + fee=no +- **Can be used for free** corresponds with + fee=no_This option cannot be chosen + as answer_ - - - - - **You need to pay for use** corresponds with fee=yes - - **Can be used for free** corresponds with fee=no - - **Can be used for free** corresponds with fee=no_This option cannot be chosen as answer_ - - - - -### caravansites-charge - - +### caravansites-charge The question is **How much does this place charge?** -This rendering asks information about the property [charge](https://wiki.openstreetmap.org/wiki/Key:charge) +This rendering asks information about the property [charge](https://wiki.openstreetmap.org/wiki/Key:charge) This is rendered with `This place charges {charge}` - - -### caravansites-sanitary-dump - - +### caravansites-sanitary-dump The question is **Does this place have a sanitary dump station?** +- **This place has a sanitary dump station** corresponds + with sanitary_dump_station + =yes +- **This place does not have a sanitary dump station** corresponds + with sanitary_dump_station + =no - - - - - **This place has a sanitary dump station** corresponds with sanitary_dump_station=yes - - **This place does not have a sanitary dump station** corresponds with sanitary_dump_station=no - - - - -### caravansites-capacity - - +### caravansites-capacity The question is **How many campers can stay here? (skip if there is no obvious number of spaces or allowed vehicles)** -This rendering asks information about the property [capacity](https://wiki.openstreetmap.org/wiki/Key:capacity) +This rendering asks information about the property [capacity](https://wiki.openstreetmap.org/wiki/Key:capacity) This is rendered with `{capacity} campers can use this place at the same time` - - -### caravansites-internet - - +### caravansites-internet The question is **Does this place provide internet access?** +- **There is internet access** corresponds + with internet_access + =yes +- **There is internet access** corresponds + with internet_access + =wifi + |internet_access + =wlan_This option cannot + be chosen as answer_ +- **There is no internet access** corresponds + with internet_access + =no - - - - - **There is internet access** corresponds with internet_access=yes - - **There is internet access** corresponds with internet_access=wifi|internet_access=wlan_This option cannot be chosen as answer_ - - **There is no internet access** corresponds with internet_access=no - - - - -### caravansites-internet-fee - - +### caravansites-internet-fee The question is **Do you have to pay for the internet access?** +- **You need to pay extra for internet access** corresponds + with internet_access:fee + =yes +- **You do not need to pay extra for internet access** corresponds + with internet_access:fee + =no - - - - - **You need to pay extra for internet access** corresponds with internet_access:fee=yes - - **You do not need to pay extra for internet access** corresponds with internet_access:fee=no - - - - -### caravansites-toilets - - +### caravansites-toilets The question is **Does this place have toilets?** +- **This place has toilets** corresponds with + toilets=yes +- **This place does not have toilets** corresponds + with toilets + =no - - - - - **This place has toilets** corresponds with toilets=yes - - **This place does not have toilets** corresponds with toilets=no - - - - -### caravansites-website - - +### caravansites-website The question is **Does this place have a website?** -This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) +This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) This is rendered with `Official website: {website}` - - -### caravansites-long-term - - +### caravansites-long-term The question is **Does this place offer spots for long term rental?** +- **Yes, there are some spots for long term rental, but you can also stay on a daily basis** corresponds + with permanent_camping + =yes +- **No, there are no permanent guests here** corresponds + with permanent_camping + =no +- **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)** corresponds with + permanent_camping= + only +### caravansites-description +The question is **Would you like to add a general description of this place? (Do not repeat information previously asked +or shown above. Please keep it objective - opinions go into the reviews)** - - - **Yes, there are some spots for long term rental, but you can also stay on a daily basis** corresponds with permanent_camping=yes - - **No, there are no permanent guests here** corresponds with permanent_camping=no - - **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)** corresponds with permanent_camping=only - - - - -### caravansites-description - - - -The question is **Would you like to add a general description of this place? (Do not repeat information previously asked or shown above. Please keep it objective - opinions go into the reviews)** - -This rendering asks information about the property [description](https://wiki.openstreetmap.org/wiki/Key:description) +This rendering asks information about the property [description](https://wiki.openstreetmap.org/wiki/Key:description) This is rendered with `More details about this place: {description}` - - -### questions - - +### questions _This tagrendering has no question and is thus read-only_ - - - - -### reviews - - +### reviews _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/caravansites/caravansites.json \ No newline at end of file diff --git a/Docs/Layers/charging_station.md b/Docs/Layers/charging_station.md index e3fc9f80c1..15ee8f3c3b 100644 --- a/Docs/Layers/charging_station.md +++ b/Docs/Layers/charging_station.md @@ -5,7 +5,7 @@ - + A charging station @@ -90,7 +90,7 @@ A charging station + [OH](#oh) + [fee](#fee) + [charge](#charge) - + [payment-options](#payment-options) + + [payment-options-advanced](#payment-options-advanced) + [Authentication](#authentication) + [Auth phone](#auth-phone) + [maxstay](#maxstay) @@ -122,6 +122,7 @@ A charging station - [charging_stations](https://mapcomplete.osm.be/charging_stations) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/charging_station/charging_station.json) @@ -229,7 +230,7 @@ attribute | type | values which are supported by this layer [](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | [](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | [](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | -[](https://taginfo.openstreetmap.org/keys/level#values) [level](https://wiki.openstreetmap.org/wiki/Key:level) | [float](../SpecialInputElements.md#float) | [0](https://wiki.openstreetmap.org/wiki/Tag:level%3D0) [1](https://wiki.openstreetmap.org/wiki/Tag:level%3D1) +[](https://taginfo.openstreetmap.org/keys/level#values) [level](https://wiki.openstreetmap.org/wiki/Key:level) | [float](../SpecialInputElements.md#float) | [0](https://wiki.openstreetmap.org/wiki/Tag:level%3D0) [1](https://wiki.openstreetmap.org/wiki/Tag:level%3D1) [-1](https://wiki.openstreetmap.org/wiki/Tag:level%3D-1) [](https://taginfo.openstreetmap.org/keys/ref#values) [ref](https://wiki.openstreetmap.org/wiki/Key:ref) | [string](../SpecialInputElements.md#string) | [](https://taginfo.openstreetmap.org/keys/planned:amenity#values) [planned:amenity](https://wiki.openstreetmap.org/wiki/Key:planned:amenity) | Multiple choice | [](https://wiki.openstreetmap.org/wiki/Tag:planned:amenity%3D) [](https://wiki.openstreetmap.org/wiki/Tag:planned:amenity%3D) [charging_station](https://wiki.openstreetmap.org/wiki/Tag:planned:amenity%3Dcharging_station) [](https://wiki.openstreetmap.org/wiki/Tag:planned:amenity%3D) [](https://wiki.openstreetmap.org/wiki/Tag:planned:amenity%3D) [](https://taginfo.openstreetmap.org/keys/parking:fee#values) [parking:fee](https://wiki.openstreetmap.org/wiki/Key:parking:fee) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:parking:fee%3Dno) [yes](https://wiki.openstreetmap.org/wiki/Tag:parking:fee%3Dyes) @@ -1365,7 +1366,7 @@ This is rendered with `Using this charging station costs {charge}` -### payment-options +### payment-options-advanced @@ -1377,6 +1378,8 @@ The question is **Which methods of payment are accepted here?** - **Cash is accepted here** corresponds with payment:cash=yesUnselecting this answer will add payment:cash=no - **Payment cards are accepted here** corresponds with payment:cards=yesUnselecting this answer will add payment:cards=no + - **Payment is done using a dedicated app** corresponds with payment:app=yesUnselecting this answer will add payment:app=no + - **Payment is done using a membership card** corresponds with payment:membership_card=yesUnselecting this answer will add payment:membership_card=no @@ -1517,6 +1520,7 @@ This is rendered with `Located on the {level}th floor` - **Located on the ground floor** corresponds with level=0 - **Located on the ground floor** corresponds with _This option cannot be chosen as answer_ - **Located on the first floor** corresponds with level=1 + - **Located on the first basement level** corresponds with level=-1 @@ -1585,4 +1589,4 @@ _This tagrendering has no question and is thus read-only_ -This document is autogenerated from assets/layers/charging_station/charging_station.json \ No newline at end of file +This document is autogenerated from [assets/layers/charging_station/charging_station.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/charging_station/charging_station.json) \ No newline at end of file diff --git a/Docs/Layers/climbing.md b/Docs/Layers/climbing.md index 8c340b70b1..3a77e5d9bb 100644 --- a/Docs/Layers/climbing.md +++ b/Docs/Layers/climbing.md @@ -1,6 +1,4 @@ - - - climbing +climbing ========== @@ -9,15 +7,13 @@ A climbing opportunity - - - ## Table of contents 1. [climbing](#climbing) - * [Themes using this layer](#themes-using-this-layer) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + * [Themes using this layer](#themes-using-this-layer) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [images](#images) + [questions](#questions) + [minimap](#minimap) @@ -30,178 +26,106 @@ A climbing opportunity + [reviews](#reviews) +- This layer will automatically load [climbing_route](./climbing_route.md) into the layout as it depends on it: A + calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _ + contained_climbing_routes_properties) +#### Themes using this layer - - - This layer will automatically load [climbing_route](./climbing_route.md) into the layout as it depends on it: A calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _contained_climbing_routes_properties) - - - - -#### Themes using this layer - - - - - - - [climbing](https://mapcomplete.osm.be/climbing) - +- [climbing](https://mapcomplete.osm.be/climbing) [Go to the source code](../assets/layers/climbing/climbing.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- sport + =climbing +- climbing!~^route$ +- leisure!~^sports_centre$ +- climbing!~^route_top$ +- climbing!~^route_bottom$ - - - sport=climbing - - climbing!~^route$ - - leisure!~^sports_centre$ - - climbing!~^route_top$ - - climbing!~^route_bottom$ - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:name%3D) [](https://taginfo.openstreetmap.org/keys/climbing#values) [climbing](https://wiki.openstreetmap.org/wiki/Key:climbing) | Multiple choice | [boulder](https://wiki.openstreetmap.org/wiki/Tag:climbing%3Dboulder) [crag](https://wiki.openstreetmap.org/wiki/Tag:climbing%3Dcrag) [area](https://wiki.openstreetmap.org/wiki/Tag:climbing%3Darea) [](https://taginfo.openstreetmap.org/keys/rock#values) [rock](https://wiki.openstreetmap.org/wiki/Key:rock) | [string](../SpecialInputElements.md#string) | [limestone](https://wiki.openstreetmap.org/wiki/Tag:rock%3Dlimestone) - - - -### images - - +### images _This tagrendering has no question and is thus read-only_ - - - - -### questions - - +### questions _This tagrendering has no question and is thus read-only_ - - - - -### minimap - - +### minimap _This tagrendering has no question and is thus read-only_ - - - - -### Contained routes length hist - - +### Contained routes length hist _This tagrendering has no question and is thus read-only_ - - - - -### Contained routes hist - - +### Contained routes hist _This tagrendering has no question and is thus read-only_ - - - - -### Contained_climbing_routes - - +### Contained_climbing_routes _This tagrendering has no question and is thus read-only_ - - - - -### name - - +### name The question is **What is the name of this climbing opportunity?** -This rendering asks information about the property [name](https://wiki.openstreetmap.org/wiki/Key:name) +This rendering asks information about the property [name](https://wiki.openstreetmap.org/wiki/Key:name) This is rendered with `{name}` +- **This climbing opportunity doesn't have a name** corresponds + with noname + =yes - - - **This climbing opportunity doesn't have a name** corresponds with noname=yes - - - - -### Type - - +### Type The question is **What kind of climbing opportunity is this?** +- **A climbing boulder - a single rock or cliff with one or a few climbing routes which can be climbed safely without + rope** corresponds with climbing + =boulder +- **A climbing crag - a single rock or cliff with at least a few climbing routes** corresponds + with climbing + =crag +- **A climbing area with one or more climbing crags and/or boulders** corresponds + with climbing + =area - - - - - **A climbing boulder - a single rock or cliff with one or a few climbing routes which can be climbed safely without rope** corresponds with climbing=boulder - - **A climbing crag - a single rock or cliff with at least a few climbing routes** corresponds with climbing=crag - - **A climbing area with one or more climbing crags and/or boulders** corresponds with climbing=area - - - - -### Rock type (crag/rock/cliff only) - - +### Rock type (crag/rock/cliff only) The question is **What is the rock type here?** -This rendering asks information about the property [rock](https://wiki.openstreetmap.org/wiki/Key:rock) +This rendering asks information about the property [rock](https://wiki.openstreetmap.org/wiki/Key:rock) This is rendered with `The rock type is {rock}` +- **Limestone** corresponds with rock + =limestone - - - **Limestone** corresponds with rock=limestone - - - - -### reviews - - +### reviews _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/climbing/climbing.json \ No newline at end of file diff --git a/Docs/Layers/climbing_club.md b/Docs/Layers/climbing_club.md index 26f51fc517..562cb6137f 100644 --- a/Docs/Layers/climbing_club.md +++ b/Docs/Layers/climbing_club.md @@ -1,6 +1,4 @@ - - - climbing_club +climbing_club =============== @@ -9,15 +7,13 @@ A climbing club or organisations - - - ## Table of contents 1. [climbing_club](#climbing_club) - * [Themes using this layer](#themes-using-this-layer) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + * [Themes using this layer](#themes-using-this-layer) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [climbing_club-name](#climbing_club-name) + [minimap](#minimap) + [website](#website) @@ -25,138 +21,89 @@ A climbing club or organisations + [phone](#phone) + [opening_hours](#opening_hours) +#### Themes using this layer - - - - - - - - -#### Themes using this layer - - - - - - - [climbing](https://mapcomplete.osm.be/climbing) - +- [climbing](https://mapcomplete.osm.be/climbing) [Go to the source code](../assets/layers/climbing_club/climbing_club.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- club + =climbing + |sport + =climbing&office~^..*$|club~ + ^..*$ - - - club=climbing|sport=climbing&office~^..*$|club~^..*$ - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ -[](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | -[](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | -[](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | -[](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | -[](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | - - - - -### climbing_club-name - +[](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | +[](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | +[](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | +[](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | +### climbing_club-name The question is **What is the name of this climbing club or NGO?** -This rendering asks information about the property [name](https://wiki.openstreetmap.org/wiki/Key:name) +This rendering asks information about the property [name](https://wiki.openstreetmap.org/wiki/Key:name) This is rendered with `{name}` - - -### minimap - - +### minimap _This tagrendering has no question and is thus read-only_ - - - - -### website - - +### website The question is **What is the website of {name}?** -This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) +This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) This is rendered with `{website}` +- **{contact:website}** corresponds with contact:website~^..*$_This + option cannot be chosen as answer_ - - - **{contact:website}** corresponds with contact:website~^..*$_This option cannot be chosen as answer_ - - - - -### email - - +### email The question is **What is the email address of {name}?** -This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email) +This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email) This is rendered with `{email}` +- **{contact:email}** corresponds with contact:email~^..*$_This + option cannot be chosen as answer_ - - - **{contact:email}** corresponds with contact:email~^..*$_This option cannot be chosen as answer_ - - - - -### phone - - +### phone The question is **What is the phone number of {name}?** -This rendering asks information about the property [phone](https://wiki.openstreetmap.org/wiki/Key:phone) +This rendering asks information about the property [phone](https://wiki.openstreetmap.org/wiki/Key:phone) This is rendered with `{phone}` +- **{contact:phone}** corresponds with contact:phone~^..*$_This option cannot be + chosen as answer_ - - - **{contact:phone}** corresponds with contact:phone~^..*$_This option cannot be chosen as answer_ - - - - -### opening_hours - - +### opening_hours The question is **What are the opening hours of {name}?** -This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) -This is rendered with `

Opening hours

{opening_hours_table(opening_hours)}` +This rendering asks information about the +property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) +This is rendered with `

Opening hours

{opening_hours_table(opening_hours)}` This document is autogenerated from assets/layers/climbing_club/climbing_club.json \ No newline at end of file diff --git a/Docs/Layers/climbing_gym.md b/Docs/Layers/climbing_gym.md index 0e712e3075..14a8611191 100644 --- a/Docs/Layers/climbing_gym.md +++ b/Docs/Layers/climbing_gym.md @@ -1,6 +1,4 @@ - - - climbing_gym +climbing_gym ============== @@ -9,15 +7,13 @@ A climbing gym - - - ## Table of contents 1. [climbing_gym](#climbing_gym) - * [Themes using this layer](#themes-using-this-layer) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + * [Themes using this layer](#themes-using-this-layer) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [images](#images) + [questions](#questions) + [minimap](#minimap) @@ -28,169 +24,100 @@ A climbing gym + [opening_hours](#opening_hours) + [reviews](#reviews) +#### Themes using this layer - - - - - - - - -#### Themes using this layer - - - - - - - [climbing](https://mapcomplete.osm.be/climbing) - +- [climbing](https://mapcomplete.osm.be/climbing) [Go to the source code](../assets/layers/climbing_gym/climbing_gym.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- sport + =climbing +- leisure + =sports_centre - - - sport=climbing - - leisure=sports_centre - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ -[](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | -[](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | -[](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | -[](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | -[](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | - - - - -### images - +[](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | +[](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | +[](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | +[](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | +### images _This tagrendering has no question and is thus read-only_ - - - - -### questions - - +### questions _This tagrendering has no question and is thus read-only_ - - - - -### minimap - - +### minimap _This tagrendering has no question and is thus read-only_ - - - - -### name - - +### name The question is **What is the name of this climbing gym?** -This rendering asks information about the property [name](https://wiki.openstreetmap.org/wiki/Key:name) +This rendering asks information about the property [name](https://wiki.openstreetmap.org/wiki/Key:name) This is rendered with `{name}` - - -### website - - +### website The question is **What is the website of {name}?** -This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) +This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) This is rendered with `{website}` +- **{contact:website}** corresponds with contact:website~^..*$_This + option cannot be chosen as answer_ - - - **{contact:website}** corresponds with contact:website~^..*$_This option cannot be chosen as answer_ - - - - -### phone - - +### phone The question is **What is the phone number of {name}?** -This rendering asks information about the property [phone](https://wiki.openstreetmap.org/wiki/Key:phone) +This rendering asks information about the property [phone](https://wiki.openstreetmap.org/wiki/Key:phone) This is rendered with `{phone}` +- **{contact:phone}** corresponds with contact:phone~^..*$_This option cannot be + chosen as answer_ - - - **{contact:phone}** corresponds with contact:phone~^..*$_This option cannot be chosen as answer_ - - - - -### email - - +### email The question is **What is the email address of {name}?** -This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email) +This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email) This is rendered with `{email}` +- **{contact:email}** corresponds with contact:email~^..*$_This + option cannot be chosen as answer_ - - - **{contact:email}** corresponds with contact:email~^..*$_This option cannot be chosen as answer_ - - - - -### opening_hours - - +### opening_hours The question is **What are the opening hours of {name}?** -This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) +This rendering asks information about the +property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) This is rendered with `

Opening hours

{opening_hours_table(opening_hours)}` - - -### reviews - - +### reviews _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/climbing_gym/climbing_gym.json \ No newline at end of file diff --git a/Docs/Layers/climbing_route.md b/Docs/Layers/climbing_route.md index 2360020ead..c60b3159ca 100644 --- a/Docs/Layers/climbing_route.md +++ b/Docs/Layers/climbing_route.md @@ -1,21 +1,17 @@ - - - climbing_route +climbing_route ================ - - - ## Table of contents 1. [climbing_route](#climbing_route) - * [Themes using this layer](#themes-using-this-layer) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + * [Themes using this layer](#themes-using-this-layer) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [images](#images) + [questions](#questions) + [minimap](#minimap) @@ -28,175 +24,116 @@ + [reviews](#reviews) +- This layer is needed as dependency for layer [climbing](#climbing) +#### Themes using this layer - - - This layer is needed as dependency for layer [climbing](#climbing) - - - - -#### Themes using this layer - - - - - - - [climbing](https://mapcomplete.osm.be/climbing) - +- [climbing](https://mapcomplete.osm.be/climbing) [Go to the source code](../assets/layers/climbing_route/climbing_route.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- climbing + =route - - - climbing=route - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:name%3D) -[](https://taginfo.openstreetmap.org/keys/climbing:length#values) [climbing:length](https://wiki.openstreetmap.org/wiki/Key:climbing:length) | [pnat](../SpecialInputElements.md#pnat) | -[](https://taginfo.openstreetmap.org/keys/climbing:grade:french#values) [climbing:grade:french](https://wiki.openstreetmap.org/wiki/Key:climbing:grade:french) | [string](../SpecialInputElements.md#string) | -[](https://taginfo.openstreetmap.org/keys/climbing:bolts#values) [climbing:bolts](https://wiki.openstreetmap.org/wiki/Key:climbing:bolts) | [pnat](../SpecialInputElements.md#pnat) | -[](https://taginfo.openstreetmap.org/keys/description#values) [description](https://wiki.openstreetmap.org/wiki/Key:description) | [string](../SpecialInputElements.md#string) | -[](https://taginfo.openstreetmap.org/keys/_embedding_features_with_rock:rock#values) [_embedding_features_with_rock:rock](https://wiki.openstreetmap.org/wiki/Key:_embedding_features_with_rock:rock) | [string](../SpecialInputElements.md#string) | - - - - -### images - +[](https://taginfo.openstreetmap.org/keys/climbing:length#values) [climbing:length](https://wiki.openstreetmap.org/wiki/Key:climbing:length) | [pnat](../SpecialInputElements.md#pnat) | +[](https://taginfo.openstreetmap.org/keys/climbing:grade:french#values) [climbing:grade:french](https://wiki.openstreetmap.org/wiki/Key:climbing:grade:french) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/climbing:bolts#values) [climbing:bolts](https://wiki.openstreetmap.org/wiki/Key:climbing:bolts) | [pnat](../SpecialInputElements.md#pnat) | +[](https://taginfo.openstreetmap.org/keys/description#values) [description](https://wiki.openstreetmap.org/wiki/Key:description) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/_embedding_features_with_rock:rock#values) [_embedding_features_with_rock:rock](https://wiki.openstreetmap.org/wiki/Key:_embedding_features_with_rock:rock) | [string](../SpecialInputElements.md#string) | +### images _This tagrendering has no question and is thus read-only_ - - - - -### questions - - +### questions _This tagrendering has no question and is thus read-only_ - - - - -### minimap - - +### minimap _This tagrendering has no question and is thus read-only_ - - - - -### Name - - +### Name The question is **What is the name of this climbing route?** -This rendering asks information about the property [name](https://wiki.openstreetmap.org/wiki/Key:name) +This rendering asks information about the property [name](https://wiki.openstreetmap.org/wiki/Key:name) This is rendered with `{name}` +- **This climbing route doesn't have a name** corresponds + with noname + =yes - - - **This climbing route doesn't have a name** corresponds with noname=yes - - - - -### Length - - +### Length The question is **How long is this climbing route (in meters)?** -This rendering asks information about the property [climbing:length](https://wiki.openstreetmap.org/wiki/Key:climbing:length) +This rendering asks information about the +property [climbing:length](https://wiki.openstreetmap.org/wiki/Key:climbing:length) This is rendered with `This route is {canonical(climbing:length)} long` - - -### Difficulty - - +### Difficulty The question is **What is the difficulty of this climbing route according to the french/belgian system?** -This rendering asks information about the property [climbing:grade:french](https://wiki.openstreetmap.org/wiki/Key:climbing:grade:french) +This rendering asks information about the +property [climbing:grade:french](https://wiki.openstreetmap.org/wiki/Key:climbing:grade:french) This is rendered with `The difficulty is {climbing:grade:french} according to the french/belgian system` - - -### Bolts - - +### Bolts The question is **How much bolts does this route have before reaching the moulinette?** -This rendering asks information about the property [climbing:bolts](https://wiki.openstreetmap.org/wiki/Key:climbing:bolts) +This rendering asks information about the +property [climbing:bolts](https://wiki.openstreetmap.org/wiki/Key:climbing:bolts) This is rendered with `This route has {climbing:bolts} bolts` +- **This route is not bolted** corresponds + with climbing:bolted + =no_This option cannot be + chosen as answer_ +- **This route is not bolted** corresponds + with climbing:bolted + =no&climbing: + bolts= - - - **This route is not bolted** corresponds with climbing:bolted=no_This option cannot be chosen as answer_ - - **This route is not bolted** corresponds with climbing:bolted=no&climbing:bolts= - - - - -### Description - - +### Description The question is **Is there other relevant info?** -This rendering asks information about the property [description](https://wiki.openstreetmap.org/wiki/Key:description) +This rendering asks information about the property [description](https://wiki.openstreetmap.org/wiki/Key:description) This is rendered with `

Description


{description}` - - -### Rock type - - +### Rock type _This tagrendering has no question and is thus read-only_ -This rendering asks information about the property [_embedding_features_with_rock:rock](https://wiki.openstreetmap.org/wiki/Key:_embedding_features_with_rock:rock) -This is rendered with `The rock type is {_embedding_features_with_rock:rock} as stated on the surrounding crag` - - - -### reviews - +This rendering asks information about the +property [_embedding_features_with_rock:rock](https://wiki.openstreetmap.org/wiki/Key:_embedding_features_with_rock:rock) +This is rendered +with `The rock type is {_embedding_features_with_rock:rock} as stated on the surrounding crag` +### reviews _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/climbing_route/climbing_route.json \ No newline at end of file diff --git a/Docs/Layers/cluster_style.md b/Docs/Layers/cluster_style.md index 17c201b1a3..70a927b764 100644 --- a/Docs/Layers/cluster_style.md +++ b/Docs/Layers/cluster_style.md @@ -59,4 +59,4 @@ _This tagrendering has no question and is thus read-only_ -This document is autogenerated from assets/layers/cluster_style/cluster_style.json \ No newline at end of file +This document is autogenerated from [assets/layers/cluster_style/cluster_style.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/cluster_style/cluster_style.json) \ No newline at end of file diff --git a/Docs/Layers/conflation.md b/Docs/Layers/conflation.md index 3d9b2dbe53..d5f0480cdc 100644 --- a/Docs/Layers/conflation.md +++ b/Docs/Layers/conflation.md @@ -1,51 +1,39 @@ - - - conflation +conflation ============ -If the import-button moves OSM points, the imported way points or conflates, a preview is shown. This layer defines how this preview is rendered. This layer cannot be included in a theme. - - - +If the import-button moves OSM points, the imported way points or conflates, a preview is shown. This layer defines how +this preview is rendered. This layer cannot be included in a theme. ## Table of contents 1. [conflation](#conflation) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) - - - - - - +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) [Go to the source code](../assets/layers/conflation/conflation.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- move + =yes + |newpoint + =yes - - - move=yes|newpoint=yes - - - - - Supported attributes +Supported attributes ---------------------- - + This document is autogenerated from assets/layers/conflation/conflation.json \ No newline at end of file diff --git a/Docs/Layers/crab_address.md b/Docs/Layers/crab_address.md index 1d49396611..3aab2477e0 100644 --- a/Docs/Layers/crab_address.md +++ b/Docs/Layers/crab_address.md @@ -59,4 +59,4 @@ _This tagrendering has no question and is thus read-only_ -This document is autogenerated from assets/layers/crab_address/crab_address.json \ No newline at end of file +This document is autogenerated from [assets/layers/crab_address/crab_address.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/crab_address/crab_address.json) \ No newline at end of file diff --git a/Docs/Layers/crossings.md b/Docs/Layers/crossings.md index 5f2c84b301..d9b325098d 100644 --- a/Docs/Layers/crossings.md +++ b/Docs/Layers/crossings.md @@ -44,6 +44,7 @@ Crossings for pedestrians and cyclists - [cycle_infra](https://mapcomplete.osm.be/cycle_infra) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/crossings/crossings.json) @@ -218,4 +219,4 @@ The question is **Can a cyclist go straight on when the light is red?** - **A cyclist can not go straight on if the light is red** corresponds with red_turn:straight:bicycle=no -This document is autogenerated from assets/layers/crossings/crossings.json \ No newline at end of file +This document is autogenerated from [assets/layers/crossings/crossings.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/crossings/crossings.json) \ No newline at end of file diff --git a/Docs/Layers/current_view.md b/Docs/Layers/current_view.md index 7d763b88a0..2425feeca5 100644 --- a/Docs/Layers/current_view.md +++ b/Docs/Layers/current_view.md @@ -1,55 +1,44 @@ - - - current_view +current_view ============== -A meta-layer which contains one single feature, namely the BBOX of the current map view. This can be used to trigger special actions. If a popup is defined for this layer, this popup will be accessible via an extra button on screen. +A meta-layer which contains one single feature, namely the BBOX of the current map view. This can be used to trigger +special actions. If a popup is defined for this layer, this popup will be accessible via an extra button on screen. The icon on the button is the default icon of the layer, but can be customized by detecting 'button=yes'. - - - ## Table of contents 1. [current_view](#current_view) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) - - - - - This layer is not visible by default and must be enabled in the filter by the user. - - Not visible in the layer selection by default. If you want to make this layer toggable, override `name` - - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - +- This layer is not visible by default and must be enabled in the filter by the user. +- Not visible in the layer selection by default. If you want to make this layer toggable, override `name` +- Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` [Go to the source code](../assets/layers/current_view/current_view.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- current_view + =yes - - - current_view=yes - - - - - Supported attributes +Supported attributes ---------------------- - + This document is autogenerated from assets/layers/current_view/current_view.json \ No newline at end of file diff --git a/Docs/Layers/cycle_highways.md b/Docs/Layers/cycle_highways.md index 2fcf498d7a..f190ce448b 100644 --- a/Docs/Layers/cycle_highways.md +++ b/Docs/Layers/cycle_highways.md @@ -1,20 +1,12 @@ - - - cycle_highways +cycle_highways ================ - - - - - - - ## Table of contents 1. [cycle_highways](#cycle_highways) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [cycle_highways-name](#cycle_highways-name) + [cycle_highways-ref](#cycle_highways-ref) + [cycle_highways-state](#cycle_highways-state) @@ -23,123 +15,93 @@ + [all_tags](#all_tags) - - - - - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - +- Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` [Go to the source code](../assets/layers/cycle_highways/cycle_highways.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- cycle_network + =BE-VLG: + cycle_highway - - - cycle_network=BE-VLG:cycle_highway - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ -[](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | -[](https://taginfo.openstreetmap.org/keys/ref#values) [ref](https://wiki.openstreetmap.org/wiki/Key:ref) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/ref#values) [ref](https://wiki.openstreetmap.org/wiki/Key:ref) | [string](../SpecialInputElements.md#string) | [](https://taginfo.openstreetmap.org/keys/state#values) [state](https://wiki.openstreetmap.org/wiki/Key:state) | [string](../SpecialInputElements.md#string) | [proposed](https://wiki.openstreetmap.org/wiki/Tag:state%3Dproposed) [proposed](https://wiki.openstreetmap.org/wiki/Tag:state%3Dproposed) [proposed](https://wiki.openstreetmap.org/wiki/Tag:state%3Dproposed) [temporary](https://wiki.openstreetmap.org/wiki/Tag:state%3Dtemporary) [](https://wiki.openstreetmap.org/wiki/Tag:state%3D) -[](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | - - - - -### cycle_highways-name - +[](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | +### cycle_highways-name The question is **What is the name of this cycle highway?** -This rendering asks information about the property [name](https://wiki.openstreetmap.org/wiki/Key:name) +This rendering asks information about the property [name](https://wiki.openstreetmap.org/wiki/Key:name) This is rendered with `The name is {name}` - - -### cycle_highways-ref - - +### cycle_highways-ref The question is **What is the reference number of this cycle highway?** -This rendering asks information about the property [ref](https://wiki.openstreetmap.org/wiki/Key:ref) +This rendering asks information about the property [ref](https://wiki.openstreetmap.org/wiki/Key:ref) This is rendered with `Referentienummer is {ref}` - - -### cycle_highways-state - - +### cycle_highways-state The question is **What is the state of this link?** -This rendering asks information about the property [state](https://wiki.openstreetmap.org/wiki/Key:state) +This rendering asks information about the property [state](https://wiki.openstreetmap.org/wiki/Key:state) This is rendered with `The current state of this link is {state}` +- **This is a proposed route which can be cycled** corresponds + with state + =proposed +- **This is a proposed route which has missing links (thus: some parts don't even have a building permit yet)** + corresponds with state + =proposed + &note:state + =has_highway_no +- **This is a proposed route which has some links which are under construction** corresponds + with state + =proposed + &note:state + = + has_highway_under_construction +- **This is a temporary deviation** corresponds + with state + =temporary +- **This link is operational and signposted** corresponds with - - - **This is a proposed route which can be cycled** corresponds with state=proposed - - **This is a proposed route which has missing links (thus: some parts don't even have a building permit yet)** corresponds with state=proposed&note:state=has_highway_no - - **This is a proposed route which has some links which are under construction** corresponds with state=proposed&note:state=has_highway_under_construction - - **This is a temporary deviation** corresponds with state=temporary - - **This link is operational and signposted** corresponds with - - - - -### cycle-highway-length - - +### cycle-highway-length _This tagrendering has no question and is thus read-only_ - - - - -### website - - +### website The question is **What is the website of {name}?** -This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) +This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) This is rendered with `{website}` +- **{contact:website}** corresponds with contact:website~^..*$_This + option cannot be chosen as answer_ - - - **{contact:website}** corresponds with contact:website~^..*$_This option cannot be chosen as answer_ - - - - -### all_tags - - +### all_tags _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/cycle_highways/cycle_highways.json \ No newline at end of file diff --git a/Docs/Layers/cycleways_and_roads.md b/Docs/Layers/cycleways_and_roads.md index e41b979acf..2a57455ee1 100644 --- a/Docs/Layers/cycleways_and_roads.md +++ b/Docs/Layers/cycleways_and_roads.md @@ -54,6 +54,7 @@ All infrastructure that someone can cycle over, accompanied with questions about - [cycle_infra](https://mapcomplete.osm.be/cycle_infra) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/cycleways_and_roads/cycleways_and_roads.json) @@ -414,4 +415,4 @@ The question is **How is this cycleway separated from the road?** - **This cycleway is separated by a kerb** corresponds with separation=kerb -This document is autogenerated from assets/layers/cycleways_and_roads/cycleways_and_roads.json \ No newline at end of file +This document is autogenerated from [assets/layers/cycleways_and_roads/cycleways_and_roads.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/cycleways_and_roads/cycleways_and_roads.json) \ No newline at end of file diff --git a/Docs/Layers/defibrillator.md b/Docs/Layers/defibrillator.md index f0f1951e49..636e014338 100644 --- a/Docs/Layers/defibrillator.md +++ b/Docs/Layers/defibrillator.md @@ -51,6 +51,7 @@ A layer showing defibrillators which can be used in case of emergency. This cont - [aed](https://mapcomplete.osm.be/aed) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/defibrillator/defibrillator.json) @@ -318,4 +319,4 @@ The question is **Is there something wrong with how this is mapped, that you wer This rendering asks information about the property [fixme](https://wiki.openstreetmap.org/wiki/Key:fixme) This is rendered with `Extra information for OpenStreetMap experts: {fixme}` -This document is autogenerated from assets/layers/defibrillator/defibrillator.json \ No newline at end of file +This document is autogenerated from [assets/layers/defibrillator/defibrillator.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/defibrillator/defibrillator.json) \ No newline at end of file diff --git a/Docs/Layers/direction.md b/Docs/Layers/direction.md index aab14e5ea8..ed30a70653 100644 --- a/Docs/Layers/direction.md +++ b/Docs/Layers/direction.md @@ -5,7 +5,7 @@ - + This layer visualizes directions @@ -34,6 +34,7 @@ This layer visualizes directions + - [personal](https://mapcomplete.osm.be/personal) - [surveillance](https://mapcomplete.osm.be/surveillance) @@ -60,4 +61,4 @@ Elements must have the all of following tags to be shown on this layer: -This document is autogenerated from assets/layers/direction/direction.json \ No newline at end of file +This document is autogenerated from [assets/layers/direction/direction.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/direction/direction.json) \ No newline at end of file diff --git a/Docs/Layers/drinking_water.md b/Docs/Layers/drinking_water.md index 37c4186a83..209b55bcab 100644 --- a/Docs/Layers/drinking_water.md +++ b/Docs/Layers/drinking_water.md @@ -5,7 +5,7 @@ - + A layer showing drinking water fountains @@ -42,6 +42,7 @@ A layer showing drinking water fountains - [cyclofix](https://mapcomplete.osm.be/cyclofix) - [drinking_water](https://mapcomplete.osm.be/drinking_water) - [nature](https://mapcomplete.osm.be/nature) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/drinking_water/drinking_water.json) @@ -133,4 +134,4 @@ _This tagrendering has no question and is thus read-only_ -This document is autogenerated from assets/layers/drinking_water/drinking_water.json \ No newline at end of file +This document is autogenerated from [assets/layers/drinking_water/drinking_water.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/drinking_water/drinking_water.json) \ No newline at end of file diff --git a/Docs/Layers/dumpstations.md b/Docs/Layers/dumpstations.md index 9b00170d6c..5b4414abef 100644 --- a/Docs/Layers/dumpstations.md +++ b/Docs/Layers/dumpstations.md @@ -1,6 +1,4 @@ - - - dumpstations +dumpstations ============== @@ -9,15 +7,13 @@ Sanitary dump stations - - - ## Table of contents 1. [dumpstations](#dumpstations) - * [Themes using this layer](#themes-using-this-layer) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + * [Themes using this layer](#themes-using-this-layer) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [images](#images) + [dumpstations-fee](#dumpstations-fee) + [dumpstations-charge](#dumpstations-charge) @@ -27,175 +23,123 @@ Sanitary dump stations + [dumpstations-access](#dumpstations-access) + [dumpstations-network](#dumpstations-network) +#### Themes using this layer - - - - - - - - -#### Themes using this layer - - - - - - - [campersite](https://mapcomplete.osm.be/campersite) - +- [campersite](https://mapcomplete.osm.be/campersite) [Go to the source code](../assets/layers/dumpstations/dumpstations.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- amenity + = + sanitary_dump_station +- vehicle!~^no$ - - - amenity=sanitary_dump_station - - vehicle!~^no$ - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/fee#values) [fee](https://wiki.openstreetmap.org/wiki/Key:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:fee%3Dno) -[](https://taginfo.openstreetmap.org/keys/charge#values) [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/charge#values) [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [string](../SpecialInputElements.md#string) | [](https://taginfo.openstreetmap.org/keys/water_point#values) [water_point](https://wiki.openstreetmap.org/wiki/Key:water_point) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:water_point%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:water_point%3Dno) [](https://taginfo.openstreetmap.org/keys/sanitary_dump_station:grey_water#values) [sanitary_dump_station:grey_water](https://wiki.openstreetmap.org/wiki/Key:sanitary_dump_station:grey_water) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:sanitary_dump_station:grey_water%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:sanitary_dump_station:grey_water%3Dno) [](https://taginfo.openstreetmap.org/keys/sanitary_dump_station:chemical_toilet#values) [sanitary_dump_station:chemical_toilet](https://wiki.openstreetmap.org/wiki/Key:sanitary_dump_station:chemical_toilet) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:sanitary_dump_station:chemical_toilet%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:sanitary_dump_station:chemical_toilet%3Dno) [](https://taginfo.openstreetmap.org/keys/access#values) [access](https://wiki.openstreetmap.org/wiki/Key:access) | Multiple choice | [network](https://wiki.openstreetmap.org/wiki/Tag:access%3Dnetwork) [customers](https://wiki.openstreetmap.org/wiki/Tag:access%3Dcustomers) [yes](https://wiki.openstreetmap.org/wiki/Tag:access%3Dyes) -[](https://taginfo.openstreetmap.org/keys/network#values) [network](https://wiki.openstreetmap.org/wiki/Key:network) | [string](../SpecialInputElements.md#string) | - - - - -### images - +[](https://taginfo.openstreetmap.org/keys/network#values) [network](https://wiki.openstreetmap.org/wiki/Key:network) | [string](../SpecialInputElements.md#string) | +### images _This tagrendering has no question and is thus read-only_ - - - - -### dumpstations-fee - - +### dumpstations-fee The question is **Does this place charge a fee?** +- **You need to pay for use** corresponds with + fee=yes +- **Can be used for free** corresponds with + fee=no - - - - - **You need to pay for use** corresponds with fee=yes - - **Can be used for free** corresponds with fee=no - - - - -### dumpstations-charge - - +### dumpstations-charge The question is **How much does this place charge?** -This rendering asks information about the property [charge](https://wiki.openstreetmap.org/wiki/Key:charge) +This rendering asks information about the property [charge](https://wiki.openstreetmap.org/wiki/Key:charge) This is rendered with `This place charges {charge}` - - -### dumpstations-waterpoint - - +### dumpstations-waterpoint The question is **Does this place have a water point?** +- **This place has a water point** corresponds + with water_point + =yes +- **This place does not have a water point** corresponds + with water_point + =no - - - - - **This place has a water point** corresponds with water_point=yes - - **This place does not have a water point** corresponds with water_point=no - - - - -### dumpstations-grey-water - - +### dumpstations-grey-water The question is **Can you dispose of grey water here?** +- **You can dispose of grey water here** corresponds + with + sanitary_dump_station:grey_water + =yes +- **You cannot dispose of gray water here** corresponds + with + sanitary_dump_station:grey_water + =no - - - - - **You can dispose of grey water here** corresponds with sanitary_dump_station:grey_water=yes - - **You cannot dispose of gray water here** corresponds with sanitary_dump_station:grey_water=no - - - - -### dumpstations-chemical-waste - - +### dumpstations-chemical-waste The question is **Can you dispose of chemical toilet waste here?** +- **You can dispose of chemical toilet waste here** corresponds + with + sanitary_dump_station:chemical_toilet + =yes +- **You cannot dispose of chemical toilet waste here** corresponds + with + sanitary_dump_station:chemical_toilet + =no - - - - - **You can dispose of chemical toilet waste here** corresponds with sanitary_dump_station:chemical_toilet=yes - - **You cannot dispose of chemical toilet waste here** corresponds with sanitary_dump_station:chemical_toilet=no - - - - -### dumpstations-access - - +### dumpstations-access The question is **Who can use this dump station?** +- **You need a network key/code to use this** corresponds + with access + =network +- **You need to be a customer of camping/campersite to use this place** corresponds + with access + =customers +- **Anyone can use this dump station** corresponds + with access + =public_This option cannot be + chosen as answer_ +- **Anyone can use this dump station** corresponds + with access + =yes - - - - - **You need a network key/code to use this** corresponds with access=network - - **You need to be a customer of camping/campersite to use this place** corresponds with access=customers - - **Anyone can use this dump station** corresponds with access=public_This option cannot be chosen as answer_ - - **Anyone can use this dump station** corresponds with access=yes - - - - -### dumpstations-network - - +### dumpstations-network The question is **What network is this place a part of? (skip if none)** -This rendering asks information about the property [network](https://wiki.openstreetmap.org/wiki/Key:network) -This is rendered with `This station is part of network {network}` +This rendering asks information about the property [network](https://wiki.openstreetmap.org/wiki/Key:network) +This is rendered with `This station is part of network {network}` This document is autogenerated from assets/layers/dumpstations/dumpstations.json \ No newline at end of file diff --git a/Docs/Layers/entrance.md b/Docs/Layers/entrance.md index 994d06b1cf..16ac93aecd 100644 --- a/Docs/Layers/entrance.md +++ b/Docs/Layers/entrance.md @@ -5,7 +5,7 @@ - + A layer showing entrances and offering capabilities to survey some advanced data which is important for e.g. wheelchair users (but also bicycle users, people who want to deliver, ...) @@ -41,6 +41,7 @@ A layer showing entrances and offering capabilities to survey some advanced data - [entrances](https://mapcomplete.osm.be/entrances) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/entrance/entrance.json) @@ -165,4 +166,4 @@ The question is **What is the width of this door/entrance?** This rendering asks information about the property [width](https://wiki.openstreetmap.org/wiki/Key:width) This is rendered with `This door has a width of {canonical(width)} meter` -This document is autogenerated from assets/layers/entrance/entrance.json \ No newline at end of file +This document is autogenerated from [assets/layers/entrance/entrance.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/entrance/entrance.json) \ No newline at end of file diff --git a/Docs/Layers/etymology.md b/Docs/Layers/etymology.md index eef65ab51c..5b3d8a81a8 100644 --- a/Docs/Layers/etymology.md +++ b/Docs/Layers/etymology.md @@ -5,7 +5,7 @@ - + All objects which have an etymology known @@ -44,6 +44,7 @@ All objects which have an etymology known - [etymology](https://mapcomplete.osm.be/etymology) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/etymology/etymology.json) @@ -176,4 +177,4 @@ _This tagrendering has no question and is thus read-only_ -This document is autogenerated from assets/layers/etymology/etymology.json \ No newline at end of file +This document is autogenerated from [assets/layers/etymology/etymology.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/etymology/etymology.json) \ No newline at end of file diff --git a/Docs/Layers/extinguisher.md b/Docs/Layers/extinguisher.md index 3e99046540..a65711d6b3 100644 --- a/Docs/Layers/extinguisher.md +++ b/Docs/Layers/extinguisher.md @@ -37,6 +37,7 @@ Map layer to show fire hydrants. - [hailhydrant](https://mapcomplete.osm.be/hailhydrant) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/extinguisher/extinguisher.json) @@ -98,4 +99,4 @@ _This tagrendering has no question and is thus read-only_ -This document is autogenerated from assets/layers/extinguisher/extinguisher.json \ No newline at end of file +This document is autogenerated from [assets/layers/extinguisher/extinguisher.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/extinguisher/extinguisher.json) \ No newline at end of file diff --git a/Docs/Layers/facadegardens.md b/Docs/Layers/facadegardens.md index 47817dacf8..e29139bfa4 100644 --- a/Docs/Layers/facadegardens.md +++ b/Docs/Layers/facadegardens.md @@ -1,6 +1,4 @@ - - - facadegardens +facadegardens =============== @@ -9,15 +7,13 @@ Facade gardens - - - ## Table of contents 1. [facadegardens](#facadegardens) - * [Themes using this layer](#themes-using-this-layer) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + * [Themes using this layer](#themes-using-this-layer) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [images](#images) + [facadegardens-direction](#facadegardens-direction) + [facadegardens-sunshine](#facadegardens-sunshine) @@ -27,171 +23,116 @@ Facade gardens + [facadegardens-plants](#facadegardens-plants) + [facadegardens-description](#facadegardens-description) +#### Themes using this layer - - - - - - - - -#### Themes using this layer - - - - - - - [facadegardens](https://mapcomplete.osm.be/facadegardens) - +- [facadegardens](https://mapcomplete.osm.be/facadegardens) [Go to the source code](../assets/layers/facadegardens/facadegardens.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- leisure + =garden +- garden:type + =facade_garden - - - leisure=garden - - garden:type=facade_garden - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ -[](https://taginfo.openstreetmap.org/keys/direction#values) [direction](https://wiki.openstreetmap.org/wiki/Key:direction) | [direction](../SpecialInputElements.md#direction) | +[](https://taginfo.openstreetmap.org/keys/direction#values) [direction](https://wiki.openstreetmap.org/wiki/Key:direction) | [direction](../SpecialInputElements.md#direction) | [](https://taginfo.openstreetmap.org/keys/direct_sunlight#values) [direct_sunlight](https://wiki.openstreetmap.org/wiki/Key:direct_sunlight) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:direct_sunlight%3Dyes) [partial](https://wiki.openstreetmap.org/wiki/Tag:direct_sunlight%3Dpartial) [no](https://wiki.openstreetmap.org/wiki/Tag:direct_sunlight%3Dno) [](https://taginfo.openstreetmap.org/keys/rain_barrel#values) [rain_barrel](https://wiki.openstreetmap.org/wiki/Key:rain_barrel) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:rain_barrel%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:rain_barrel%3Dno) -[](https://taginfo.openstreetmap.org/keys/start_date#values) [start_date](https://wiki.openstreetmap.org/wiki/Key:start_date) | [text](../SpecialInputElements.md#text) | +[](https://taginfo.openstreetmap.org/keys/start_date#values) [start_date](https://wiki.openstreetmap.org/wiki/Key:start_date) | [text](../SpecialInputElements.md#text) | [](https://taginfo.openstreetmap.org/keys/edible#values) [edible](https://wiki.openstreetmap.org/wiki/Key:edible) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:edible%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:edible%3Dno) [](https://taginfo.openstreetmap.org/keys/plant#values) [plant](https://wiki.openstreetmap.org/wiki/Key:plant) | Multiple choice | [vine](https://wiki.openstreetmap.org/wiki/Tag:plant%3Dvine) [flower](https://wiki.openstreetmap.org/wiki/Tag:plant%3Dflower) [shrub](https://wiki.openstreetmap.org/wiki/Tag:plant%3Dshrub) [groundcover](https://wiki.openstreetmap.org/wiki/Tag:plant%3Dgroundcover) -[](https://taginfo.openstreetmap.org/keys/description#values) [description](https://wiki.openstreetmap.org/wiki/Key:description) | [text](../SpecialInputElements.md#text) | - - - - -### images - +[](https://taginfo.openstreetmap.org/keys/description#values) [description](https://wiki.openstreetmap.org/wiki/Key:description) | [text](../SpecialInputElements.md#text) | +### images _This tagrendering has no question and is thus read-only_ - - - - -### facadegardens-direction - - +### facadegardens-direction The question is **What is the orientation of the garden?** -This rendering asks information about the property [direction](https://wiki.openstreetmap.org/wiki/Key:direction) +This rendering asks information about the property [direction](https://wiki.openstreetmap.org/wiki/Key:direction) This is rendered with `Orientation: {direction} (where 0=N and 90=O)` - - -### facadegardens-sunshine - - +### facadegardens-sunshine The question is **Is the garden shaded or sunny?** +- **The garden is in full sun** corresponds + with direct_sunlight + =yes +- **The garden is in partial shade** corresponds + with direct_sunlight + =partial +- **The garden is in the shade** corresponds + with direct_sunlight + =no - - - - - **The garden is in full sun** corresponds with direct_sunlight=yes - - **The garden is in partial shade** corresponds with direct_sunlight=partial - - **The garden is in the shade** corresponds with direct_sunlight=no - - - - -### facadegardens-rainbarrel - - +### facadegardens-rainbarrel The question is **Is there a water barrel installed for the garden?** +- **There is a rain barrel** corresponds + with rain_barrel + =yes +- **There is no rain barrel** corresponds + with rain_barrel + =no - - - - - **There is a rain barrel** corresponds with rain_barrel=yes - - **There is no rain barrel** corresponds with rain_barrel=no - - - - -### facadegardens-start_date - - +### facadegardens-start_date The question is **When was the garden constructed? (a year is sufficient)** -This rendering asks information about the property [start_date](https://wiki.openstreetmap.org/wiki/Key:start_date) +This rendering asks information about the property [start_date](https://wiki.openstreetmap.org/wiki/Key:start_date) This is rendered with `Construction date of the garden: {start_date}` - - -### facadegardens-edible - - +### facadegardens-edible The question is **Are there any edible plants?** +- **There are edible plants** corresponds with + edible=yes +- **There are no edible plants** corresponds + with edible + =no - - - - - **There are edible plants** corresponds with edible=yes - - **There are no edible plants** corresponds with edible=no - - - - -### facadegardens-plants - - +### facadegardens-plants The question is **What kinds of plants grow here?** +- **There are vines** corresponds with plant + =vine +- **There are flowering plants** corresponds + with plant + =flower +- **There are shrubs** corresponds with + plant=shrub +- **There are groundcovering plants** corresponds + with plant + =groundcover - - - - - **There are vines** corresponds with plant=vine - - **There are flowering plants** corresponds with plant=flower - - **There are shrubs** corresponds with plant=shrub - - **There are groundcovering plants** corresponds with plant=groundcover - - - - -### facadegardens-description - - +### facadegardens-description The question is **Extra describing info about the garden (if needed and not yet described above)** -This rendering asks information about the property [description](https://wiki.openstreetmap.org/wiki/Key:description) -This is rendered with `More details: {description}` +This rendering asks information about the property [description](https://wiki.openstreetmap.org/wiki/Key:description) +This is rendered with `More details: {description}` This document is autogenerated from assets/layers/facadegardens/facadegardens.json \ No newline at end of file diff --git a/Docs/Layers/fietsstraat.md b/Docs/Layers/fietsstraat.md index 4d78584c11..327223b219 100644 --- a/Docs/Layers/fietsstraat.md +++ b/Docs/Layers/fietsstraat.md @@ -1,6 +1,4 @@ - - - fietsstraat +fietsstraat ============= @@ -9,66 +7,38 @@ A cyclestreet is a street where motorized traffic is not allowed to overtake a cyclist - - - ## Table of contents 1. [fietsstraat](#fietsstraat) - * [Themes using this layer](#themes-using-this-layer) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + * [Themes using this layer](#themes-using-this-layer) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [images](#images) +#### Themes using this layer - - - - - - - - -#### Themes using this layer - - - - - - - [cyclestreets](https://mapcomplete.osm.be/cyclestreets) - +- [cyclestreets](https://mapcomplete.osm.be/cyclestreets) [Go to the source code](../assets/layers/fietsstraat/fietsstraat.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- cyclestreet + =yes - - - cyclestreet=yes - - - - - Supported attributes +Supported attributes ---------------------- - - - - -### images - - +### images _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/fietsstraat/fietsstraat.json \ No newline at end of file diff --git a/Docs/Layers/fire_station.md b/Docs/Layers/fire_station.md index 1484e65ce0..c597a9659d 100644 --- a/Docs/Layers/fire_station.md +++ b/Docs/Layers/fire_station.md @@ -41,6 +41,7 @@ Map layer to show fire stations. - [hailhydrant](https://mapcomplete.osm.be/hailhydrant) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/fire_station/fire_station.json) @@ -157,4 +158,4 @@ _This tagrendering has no question and is thus read-only_ -This document is autogenerated from assets/layers/fire_station/fire_station.json \ No newline at end of file +This document is autogenerated from [assets/layers/fire_station/fire_station.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/fire_station/fire_station.json) \ No newline at end of file diff --git a/Docs/Layers/food.md b/Docs/Layers/food.md index 2b117e68ea..66bd8be800 100644 --- a/Docs/Layers/food.md +++ b/Docs/Layers/food.md @@ -5,7 +5,7 @@ - + A layer showing restaurants and fast-food amenities (with a special rendering for friteries) @@ -57,6 +57,7 @@ A layer showing restaurants and fast-food amenities (with a special rendering fo - [food](https://mapcomplete.osm.be/food) - [fritures](https://mapcomplete.osm.be/fritures) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/food/food.json) @@ -452,4 +453,4 @@ _This tagrendering has no question and is thus read-only_ -This document is autogenerated from assets/layers/food/food.json \ No newline at end of file +This document is autogenerated from [assets/layers/food/food.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/food/food.json) \ No newline at end of file diff --git a/Docs/Layers/forest.md b/Docs/Layers/forest.md index d92f53c27e..6688ee8c4a 100644 --- a/Docs/Layers/forest.md +++ b/Docs/Layers/forest.md @@ -1,6 +1,4 @@ - - - forest +forest ======== @@ -9,55 +7,44 @@ Een bos is een verzameling bomen, al dan niet als productiehout. - - - ## Table of contents 1. [forest](#forest) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [images](#images) - - - - - This layer will automatically load [parks](./parks.md) into the layout as it depends on it: A calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _overlapWithUpperLayers) - - This layer will automatically load [nature_reserve_buurtnatuur](./nature_reserve_buurtnatuur.md) into the layout as it depends on it: A calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _overlapWithUpperLayers) - +- This layer will automatically load [parks](./parks.md) into the layout as it depends on it: A calculated tag loads + features from this layer (calculatedTag[0] which calculates the value for _overlapWithUpperLayers) +- This layer will automatically load [nature_reserve_buurtnatuur](./nature_reserve_buurtnatuur.md) into the layout as + it depends on it: A calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _ + overlapWithUpperLayers) [Go to the source code](../assets/layers/forest/forest.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- landuse + =forest + |natural + =wood + |natural + =scrub - - - landuse=forest|natural=wood|natural=scrub - - - - - Supported attributes +Supported attributes ---------------------- - - - - -### images - - +### images _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/forest/forest.json \ No newline at end of file diff --git a/Docs/Layers/fruitboom.md b/Docs/Layers/fruitboom.md index 0317e6f8ec..e1ded5c7c3 100644 --- a/Docs/Layers/fruitboom.md +++ b/Docs/Layers/fruitboom.md @@ -1,6 +1,4 @@ - - - fruitboom +fruitboom =========== @@ -9,103 +7,71 @@ Een boom - - - ## Table of contents 1. [fruitboom](#fruitboom) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [fruitboom-species:nl](#fruitboom-speciesnl) + [fruitboom-taxon](#fruitboom-taxon) + [fruitboom-description](#fruitboom-description) + [fruitboom-ref](#fruitboom-ref) - - - - - - - [Go to the source code](../assets/layers/fruitboom/fruitboom.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- natural + =tree - - - natural=tree - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ -[](https://taginfo.openstreetmap.org/keys/species:nl#values) [species:nl](https://wiki.openstreetmap.org/wiki/Key:species:nl) | [string](../SpecialInputElements.md#string) | -[](https://taginfo.openstreetmap.org/keys/taxon#values) [taxon](https://wiki.openstreetmap.org/wiki/Key:taxon) | [string](../SpecialInputElements.md#string) | -[](https://taginfo.openstreetmap.org/keys/description#values) [description](https://wiki.openstreetmap.org/wiki/Key:description) | [string](../SpecialInputElements.md#string) | -[](https://taginfo.openstreetmap.org/keys/ref#values) [ref](https://wiki.openstreetmap.org/wiki/Key:ref) | [string](../SpecialInputElements.md#string) | - - - - -### fruitboom-species:nl - +[](https://taginfo.openstreetmap.org/keys/species:nl#values) [species:nl](https://wiki.openstreetmap.org/wiki/Key:species:nl) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/taxon#values) [taxon](https://wiki.openstreetmap.org/wiki/Key:taxon) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/description#values) [description](https://wiki.openstreetmap.org/wiki/Key:description) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/ref#values) [ref](https://wiki.openstreetmap.org/wiki/Key:ref) | [string](../SpecialInputElements.md#string) | +### fruitboom-species:nl The question is **Wat is de soort van deze boom (in het Nederlands)?** -This rendering asks information about the property [species:nl](https://wiki.openstreetmap.org/wiki/Key:species:nl) +This rendering asks information about the property [species:nl](https://wiki.openstreetmap.org/wiki/Key:species:nl) This is rendered with `De soort is {species:nl}` - - -### fruitboom-taxon - - +### fruitboom-taxon The question is **Wat is het taxon (ras) van deze boom?** -This rendering asks information about the property [taxon](https://wiki.openstreetmap.org/wiki/Key:taxon) +This rendering asks information about the property [taxon](https://wiki.openstreetmap.org/wiki/Key:taxon) This is rendered with `Het ras (taxon) van deze boom is {taxon}` - - -### fruitboom-description - - +### fruitboom-description The question is **Welke beschrijving past bij deze boom?** -This rendering asks information about the property [description](https://wiki.openstreetmap.org/wiki/Key:description) +This rendering asks information about the property [description](https://wiki.openstreetmap.org/wiki/Key:description) This is rendered with `Beschrijving: {description}` - - -### fruitboom-ref - - +### fruitboom-ref The question is **Is er een refernetienummer?** -This rendering asks information about the property [ref](https://wiki.openstreetmap.org/wiki/Key:ref) -This is rendered with `Referentienummer: {ref}` +This rendering asks information about the property [ref](https://wiki.openstreetmap.org/wiki/Key:ref) +This is rendered with `Referentienummer: {ref}` This document is autogenerated from assets/layers/fruitboom/fruitboom.json \ No newline at end of file diff --git a/Docs/Layers/generic_osm_object.md b/Docs/Layers/generic_osm_object.md index 7c7b1b99c8..eccc852941 100644 --- a/Docs/Layers/generic_osm_object.md +++ b/Docs/Layers/generic_osm_object.md @@ -1,68 +1,45 @@ - - - generic_osm_object +generic_osm_object ==================== - - - - - - - ## Table of contents 1. [generic_osm_object](#generic_osm_object) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [all_tags](#all_tags) - - - - - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - - This layer is needed as dependency for layer [grb](#grb) - +- Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` +- This layer is needed as dependency for layer [grb](#grb) [Go to the source code](../assets/layers/generic_osm_object/generic_osm_object.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- id~^..*$ +- +- +- +- type!~^boundary$ +- +- |level + =0 +- layer + =0| - - - id~^..*$ - - - - - - - - type!~^boundary$ - - - - |level=0 - - layer=0| - - - - - Supported attributes +Supported attributes ---------------------- - - - - -### all_tags - - +### all_tags _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/generic_osm_object/generic_osm_object.json \ No newline at end of file diff --git a/Docs/Layers/ghost_bike.md b/Docs/Layers/ghost_bike.md index 20f519d06b..8fd4efa3cf 100644 --- a/Docs/Layers/ghost_bike.md +++ b/Docs/Layers/ghost_bike.md @@ -41,6 +41,7 @@ A layer showing memorials for cyclists, killed in road accidents - [ghostbikes](https://mapcomplete.osm.be/ghostbikes) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/ghost_bike/ghost_bike.json) @@ -147,4 +148,4 @@ The question is **When was this Ghost bike installed?** This rendering asks information about the property [start_date](https://wiki.openstreetmap.org/wiki/Key:start_date) This is rendered with `Placed on {start_date}` -This document is autogenerated from assets/layers/ghost_bike/ghost_bike.json \ No newline at end of file +This document is autogenerated from [assets/layers/ghost_bike/ghost_bike.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/ghost_bike/ghost_bike.json) \ No newline at end of file diff --git a/Docs/Layers/gps_location.md b/Docs/Layers/gps_location.md index f2ade0f75a..2e196b1b84 100644 --- a/Docs/Layers/gps_location.md +++ b/Docs/Layers/gps_location.md @@ -1,52 +1,44 @@ - - - gps_location +gps_location ============== -Meta layer showing the current location of the user. Add this to your theme and override the icon to change the appearance of the current location. The object will always have `id=gps` and will have _all_ the properties included in the [`Coordinates`-object](https://developer.mozilla.org/en-US/docs/Web/API/GeolocationCoordinates) returned by the browser. - - - +Meta layer showing the current location of the user. Add this to your theme and override the icon to change the +appearance of the current location. The object will always have `id=gps` and will have _all_ the properties included in +the [`Coordinates`-object](https://developer.mozilla.org/en-US/docs/Web/API/GeolocationCoordinates) returned by the +browser. ## Table of contents 1. [gps_location](#gps_location) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) - - - - - This layer cannot be toggled in the filter view. If you import this layer in your theme, override `title` to make this toggleable. - - Not visible in the layer selection by default. If you want to make this layer toggable, override `name` - +- This layer cannot be toggled in the filter view. If you import this layer in your theme, override `title` to make this + toggleable. +- Not visible in the layer selection by default. If you want to make this layer toggable, override `name` [Go to the source code](../assets/layers/gps_location/gps_location.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- id + =gps - - - id=gps - - - - - Supported attributes +Supported attributes ---------------------- - + This document is autogenerated from assets/layers/gps_location/gps_location.json \ No newline at end of file diff --git a/Docs/Layers/gps_location_history.md b/Docs/Layers/gps_location_history.md index c7548953b4..cdfe7f6103 100644 --- a/Docs/Layers/gps_location_history.md +++ b/Docs/Layers/gps_location_history.md @@ -1,53 +1,43 @@ - - - gps_location_history +gps_location_history ====================== -Meta layer which contains the previous locations of the user as single points. This is mainly for technical reasons, e.g. to keep match the distance to the modified object - - - +Meta layer which contains the previous locations of the user as single points. This is mainly for technical reasons, +e.g. to keep match the distance to the modified object ## Table of contents 1. [gps_location_history](#gps_location_history) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) - - - - - This layer cannot be toggled in the filter view. If you import this layer in your theme, override `title` to make this toggleable. - - Not visible in the layer selection by default. If you want to make this layer toggable, override `name` - - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - +- This layer cannot be toggled in the filter view. If you import this layer in your theme, override `title` to make this + toggleable. +- Not visible in the layer selection by default. If you want to make this layer toggable, override `name` +- Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` [Go to the source code](../assets/layers/gps_location_history/gps_location_history.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- user:location + =yes - - - user:location=yes - - - - - Supported attributes +Supported attributes ---------------------- - + This document is autogenerated from assets/layers/gps_location_history/gps_location_history.json \ No newline at end of file diff --git a/Docs/Layers/gps_track.md b/Docs/Layers/gps_track.md index 47d4523c18..d10ccff474 100644 --- a/Docs/Layers/gps_track.md +++ b/Docs/Layers/gps_track.md @@ -1,96 +1,59 @@ - - - gps_track +gps_track =========== -Meta layer showing the previous locations of the user as single line. Add this to your theme and override the icon to change the appearance of the current location. - - - +Meta layer showing the previous locations of the user as single line. Add this to your theme and override the icon to +change the appearance of the current location. ## Table of contents 1. [gps_track](#gps_track) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [Privacy notice](#privacy-notice) + [export_as_gpx](#export_as_gpx) + [minimap](#minimap) + [delete](#delete) - - - - - This layer is not visible by default and must be enabled in the filter by the user. - - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - +- This layer is not visible by default and must be enabled in the filter by the user. +- Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` [Go to the source code](../assets/layers/gps_track/gps_track.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- id + =location_track - - - id=location_track - - - - - Supported attributes +Supported attributes ---------------------- - - - - -### Privacy notice - - +### Privacy notice _This tagrendering has no question and is thus read-only_ - - - - -### export_as_gpx - - +### export_as_gpx _This tagrendering has no question and is thus read-only_ - - - - -### minimap - - +### minimap _This tagrendering has no question and is thus read-only_ - - - - -### delete - - +### delete _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/gps_track/gps_track.json \ No newline at end of file diff --git a/Docs/Layers/grass_in_parks.md b/Docs/Layers/grass_in_parks.md index 19e05058c4..eb1d266f5d 100644 --- a/Docs/Layers/grass_in_parks.md +++ b/Docs/Layers/grass_in_parks.md @@ -81,4 +81,4 @@ _This tagrendering has no question and is thus read-only_ -This document is autogenerated from assets/layers/grass_in_parks/grass_in_parks.json \ No newline at end of file +This document is autogenerated from [assets/layers/grass_in_parks/grass_in_parks.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/grass_in_parks/grass_in_parks.json) \ No newline at end of file diff --git a/Docs/Layers/grb.md b/Docs/Layers/grb.md index 53031f2b45..6e339fdf10 100644 --- a/Docs/Layers/grb.md +++ b/Docs/Layers/grb.md @@ -1,6 +1,4 @@ - - - grb +grb ===== @@ -9,14 +7,12 @@ Geometry which comes from GRB with tools to import them - - - ## Table of contents 1. [grb](#grb) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [Import-button](#import-button) + [Building info](#building-info) + [overlapping building address](#overlapping-building-address) @@ -26,122 +22,77 @@ Geometry which comes from GRB with tools to import them + [apply-building-type](#apply-building-type) - - - - - This layer is loaded from an external source, namely `https://betadata.grbosm.site/grb?bbox={x_min},{y_min},{x_max},{y_max}` - - This layer will automatically load [osm-buildings](./osm-buildings.md) into the layout as it depends on it: a tagrendering needs this layer (Import-button) - - This layer will automatically load [type_node](./type_node.md) into the layout as it depends on it: a tagrendering needs this layer (Import-button) - - This layer will automatically load [osm-buildings](./osm-buildings.md) into the layout as it depends on it: A calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _overlaps_with_buildings) - - This layer will automatically load [generic_osm_object](./generic_osm_object.md) into the layout as it depends on it: A calculated tag loads features from this layer (calculatedTag[18] which calculates the value for _intersects_with_other_features) - +- This layer is loaded from an external source, namely `https://betadata.grbosm.site/grb?bbox={x_min},{y_min},{x_max},{y_max}` +- This layer will automatically load [osm-buildings](./osm-buildings.md) into the layout as it depends on it: a + tagrendering needs this layer (Import-button) +- This layer will automatically load [type_node](./type_node.md) into the layout as it depends on it: a tagrendering + needs this layer (Import-button) +- This layer will automatically load [osm-buildings](./osm-buildings.md) into the layout as it depends on it: A + calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _ + overlaps_with_buildings) +- This layer will automatically load [generic_osm_object](./generic_osm_object.md) into the layout as it depends on + it: A calculated tag loads features from this layer (calculatedTag[18] which calculates the value for _ + intersects_with_other_features) [Go to the source code](../assets/layers/grb/grb.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- HUISNR~^..*$ +- man_made!~^mast$ - - - HUISNR~^..*$ - - man_made!~^mast$ - - - - - Supported attributes +Supported attributes ---------------------- - - - - -### Import-button - - +### Import-button _This tagrendering has no question and is thus read-only_ +- **{conflate_button(osm-buildings,building=$_target_building_type; source:geometry:date=$_grb_date; source:geometry: + ref=$_grb_ref; addr:street=$addr:street; addr:housenumber=$addr:housenumber, Replace the geometry in OpenStreetMap and + add the address,,_osm_obj:id)}** corresponds with _overlap_percentage>50&_reverse_overlap_percentage>50&_ + overlaps_with!~^$&addr:street~^..*$&addr:housenumber~^..*$&addr:street!=&addr:housenumber!= +- **{conflate_button(osm-buildings,building=$_target_building_type; source:geometry:date=$_grb_date; source:geometry: + ref=$_grb_ref, Replace the geometry in OpenStreetMap,,_osm_obj:id)}** corresponds with _overlap_percentage>50&_ + reverse_overlap_percentage>50&_overlaps_with!~^$ - - - - - **{conflate_button(osm-buildings,building=$_target_building_type; source:geometry:date=$_grb_date; source:geometry:ref=$_grb_ref; addr:street=$addr:street; addr:housenumber=$addr:housenumber, Replace the geometry in OpenStreetMap and add the address,,_osm_obj:id)}** corresponds with _overlap_percentage>50&_reverse_overlap_percentage>50&_overlaps_with!~^$&addr:street~^..*$&addr:housenumber~^..*$&addr:street!=&addr:housenumber!= - - **{conflate_button(osm-buildings,building=$_target_building_type; source:geometry:date=$_grb_date; source:geometry:ref=$_grb_ref, Replace the geometry in OpenStreetMap,,_osm_obj:id)}** corresponds with _overlap_percentage>50&_reverse_overlap_percentage>50&_overlaps_with!~^$ - - - - -### Building info - - +### Building info _This tagrendering has no question and is thus read-only_ - - - - -### overlapping building address - - +### overlapping building address _This tagrendering has no question and is thus read-only_ +- **The overlapping openstreetmap-building has address {_osm_obj:addr:street} {_osm_obj:addr:housenumber}** corresponds + with _osm_obj:addr:street~^..*$&_osm_obj:addr:housenumber~^..*$ +- **The overlapping building only has a street known: {_osm_obj:addr:street}** corresponds with _osm_obj:addr:street~ + ^..*$ +- **The overlapping building only has a housenumber known: {_osm_obj:addr:housenumber}** corresponds with _osm_obj:addr: + housenumber~^..*$ +- **No overlapping OpenStreetMap-building found** corresponds with - - - - - **The overlapping openstreetmap-building has address {_osm_obj:addr:street} {_osm_obj:addr:housenumber}** corresponds with _osm_obj:addr:street~^..*$&_osm_obj:addr:housenumber~^..*$ - - **The overlapping building only has a street known: {_osm_obj:addr:street}** corresponds with _osm_obj:addr:street~^..*$ - - **The overlapping building only has a housenumber known: {_osm_obj:addr:housenumber}** corresponds with _osm_obj:addr:housenumber~^..*$ - - **No overlapping OpenStreetMap-building found** corresponds with - - - - -### grb_address_diff - - +### grb_address_diff _This tagrendering has no question and is thus read-only_ - - - - -### overlapping building type - - +### overlapping building type _This tagrendering has no question and is thus read-only_ - - - - -### apply-id - - +### apply-id _This tagrendering has no question and is thus read-only_ - - - - -### apply-building-type - - +### apply-building-type _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/grb/grb.json \ No newline at end of file diff --git a/Docs/Layers/hackerspaces.md b/Docs/Layers/hackerspaces.md index c45cc1c3e2..cfc1dd152d 100644 --- a/Docs/Layers/hackerspaces.md +++ b/Docs/Layers/hackerspaces.md @@ -1,6 +1,4 @@ - - - hackerspaces +hackerspaces ============== @@ -9,15 +7,13 @@ Hackerspace - - - ## Table of contents 1. [hackerspaces](#hackerspaces) - * [Themes using this layer](#themes-using-this-layer) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + * [Themes using this layer](#themes-using-this-layer) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [is_makerspace](#is_makerspace) + [hackerspaces-name](#hackerspaces-name) + [website](#website) @@ -28,198 +24,133 @@ Hackerspace + [hs-club-mate](#hs-club-mate) + [hackerspaces-start_date](#hackerspaces-start_date) +#### Themes using this layer - - - - - - - - -#### Themes using this layer - - - - - - - [hackerspaces](https://mapcomplete.osm.be/hackerspaces) - +- [hackerspaces](https://mapcomplete.osm.be/hackerspaces) [Go to the source code](../assets/layers/hackerspaces/hackerspaces.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- leisure + =hackerspace - - - leisure=hackerspace - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/hackerspace#values) [hackerspace](https://wiki.openstreetmap.org/wiki/Key:hackerspace) | Multiple choice | [makerspace](https://wiki.openstreetmap.org/wiki/Tag:hackerspace%3Dmakerspace) [](https://wiki.openstreetmap.org/wiki/Tag:hackerspace%3D) -[](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | -[](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | -[](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | -[](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | +[](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | +[](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | +[](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | [](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [24/7](https://wiki.openstreetmap.org/wiki/Tag:opening_hours%3D24/7) [](https://taginfo.openstreetmap.org/keys/wheelchair#values) [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [designated](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated) [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno) [](https://taginfo.openstreetmap.org/keys/drink:club-mate#values) [drink:club-mate](https://wiki.openstreetmap.org/wiki/Key:drink:club-mate) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:drink:club-mate%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:drink:club-mate%3Dno) -[](https://taginfo.openstreetmap.org/keys/start_date#values) [start_date](https://wiki.openstreetmap.org/wiki/Key:start_date) | [date](../SpecialInputElements.md#date) | - - - - -### is_makerspace - +[](https://taginfo.openstreetmap.org/keys/start_date#values) [start_date](https://wiki.openstreetmap.org/wiki/Key:start_date) | [date](../SpecialInputElements.md#date) | +### is_makerspace The question is **Is this a hackerspace or a makerspace?** +- **This is a makerspace** corresponds + with hackerspace + =makerspace +- **This is a traditional (software oriented) hackerspace** corresponds with - - - - - **This is a makerspace** corresponds with hackerspace=makerspace - - **This is a traditional (software oriented) hackerspace** corresponds with - - - - -### hackerspaces-name - - +### hackerspaces-name The question is **What is the name of this hackerspace?** -This rendering asks information about the property [name](https://wiki.openstreetmap.org/wiki/Key:name) +This rendering asks information about the property [name](https://wiki.openstreetmap.org/wiki/Key:name) This is rendered with `This hackerspace is named {name}` - - -### website - - +### website The question is **What is the website of {name}?** -This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) +This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) This is rendered with `{website}` +- **{contact:website}** corresponds with contact:website~^..*$_This + option cannot be chosen as answer_ - - - **{contact:website}** corresponds with contact:website~^..*$_This option cannot be chosen as answer_ - - - - -### email - - +### email The question is **What is the email address of {name}?** -This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email) +This rendering asks information about the property [email](https://wiki.openstreetmap.org/wiki/Key:email) This is rendered with `{email}` +- **{contact:email}** corresponds with contact:email~^..*$_This + option cannot be chosen as answer_ - - - **{contact:email}** corresponds with contact:email~^..*$_This option cannot be chosen as answer_ - - - - -### phone - - +### phone The question is **What is the phone number of {name}?** -This rendering asks information about the property [phone](https://wiki.openstreetmap.org/wiki/Key:phone) +This rendering asks information about the property [phone](https://wiki.openstreetmap.org/wiki/Key:phone) This is rendered with `{phone}` +- **{contact:phone}** corresponds with contact:phone~^..*$_This option cannot be + chosen as answer_ - - - **{contact:phone}** corresponds with contact:phone~^..*$_This option cannot be chosen as answer_ - - - - -### hackerspaces-opening_hours - - +### hackerspaces-opening_hours The question is **When is this hackerspace opened?** -This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) +This rendering asks information about the +property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) This is rendered with `{opening_hours_table()}` +- **Opened 24/7** corresponds with + opening_hours=24/7 - - - **Opened 24/7** corresponds with opening_hours=24/7 - - - - -### wheelchair-access - - +### wheelchair-access The question is **Is this place accessible with a wheelchair?** +- **This place is specially adapted for wheelchair users** corresponds + with wheelchair + =designated +- **This place is easily reachable with a wheelchair** corresponds + with wheelchair + =yes +- **It is possible to reach this place in a wheelchair, but it is not easy** corresponds + with wheelchair + =limited +- **This place is not reachable with a wheelchair** corresponds + with wheelchair + =no - - - - - **This place is specially adapted for wheelchair users** corresponds with wheelchair=designated - - **This place is easily reachable with a wheelchair** corresponds with wheelchair=yes - - **It is possible to reach this place in a wheelchair, but it is not easy** corresponds with wheelchair=limited - - **This place is not reachable with a wheelchair** corresponds with wheelchair=no - - - - -### hs-club-mate - - +### hs-club-mate The question is **Does this hackerspace serve Club Mate?** +- **This hackerspace serves club mate** corresponds + with drink:club-mate + =yes +- **This hackerspace does not serve club mate** corresponds + with drink:club-mate + =no - - - - - **This hackerspace serves club mate** corresponds with drink:club-mate=yes - - **This hackerspace does not serve club mate** corresponds with drink:club-mate=no - - - - -### hackerspaces-start_date - - +### hackerspaces-start_date The question is **When was this hackerspace founded?** -This rendering asks information about the property [start_date](https://wiki.openstreetmap.org/wiki/Key:start_date) -This is rendered with `This hackerspace was founded at {start_date}` +This rendering asks information about the property [start_date](https://wiki.openstreetmap.org/wiki/Key:start_date) +This is rendered with `This hackerspace was founded at {start_date}` This document is autogenerated from assets/layers/hackerspaces/hackerspaces.json \ No newline at end of file diff --git a/Docs/Layers/home_location.md b/Docs/Layers/home_location.md index fc957cbd46..c8b3734a2b 100644 --- a/Docs/Layers/home_location.md +++ b/Docs/Layers/home_location.md @@ -1,52 +1,42 @@ - - - home_location +home_location =============== -Meta layer showing the home location of the user. The home location can be set in the [profile settings](https://www.openstreetmap.org/profile/edit) of OpenStreetMap. - - - +Meta layer showing the home location of the user. The home location can be set in +the [profile settings](https://www.openstreetmap.org/profile/edit) of OpenStreetMap. ## Table of contents 1. [home_location](#home_location) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) - - - - - This layer cannot be toggled in the filter view. If you import this layer in your theme, override `title` to make this toggleable. - - Not visible in the layer selection by default. If you want to make this layer toggable, override `name` - +- This layer cannot be toggled in the filter view. If you import this layer in your theme, override `title` to make this + toggleable. +- Not visible in the layer selection by default. If you want to make this layer toggable, override `name` [Go to the source code](../assets/layers/home_location/home_location.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- user:home + =yes - - - user:home=yes - - - - - Supported attributes +Supported attributes ---------------------- - + This document is autogenerated from assets/layers/home_location/home_location.json \ No newline at end of file diff --git a/Docs/Layers/hydrant.md b/Docs/Layers/hydrant.md index 4f9f96b843..7135b312df 100644 --- a/Docs/Layers/hydrant.md +++ b/Docs/Layers/hydrant.md @@ -39,6 +39,7 @@ Map layer to show fire hydrants. - [hailhydrant](https://mapcomplete.osm.be/hailhydrant) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/hydrant/hydrant.json) @@ -140,4 +141,4 @@ _This tagrendering has no question and is thus read-only_ -This document is autogenerated from assets/layers/hydrant/hydrant.json \ No newline at end of file +This document is autogenerated from [assets/layers/hydrant/hydrant.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/hydrant/hydrant.json) \ No newline at end of file diff --git a/Docs/Layers/information_board.md b/Docs/Layers/information_board.md index d40ce7b3fd..2c3105f07f 100644 --- a/Docs/Layers/information_board.md +++ b/Docs/Layers/information_board.md @@ -36,6 +36,7 @@ A layer showing touristical, road side information boards (e.g. giving informati - [nature](https://mapcomplete.osm.be/nature) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/information_board/information_board.json) @@ -71,4 +72,4 @@ _This tagrendering has no question and is thus read-only_ -This document is autogenerated from assets/layers/information_board/information_board.json \ No newline at end of file +This document is autogenerated from [assets/layers/information_board/information_board.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/information_board/information_board.json) \ No newline at end of file diff --git a/Docs/Layers/left_right_style.md b/Docs/Layers/left_right_style.md index 82dc38ec5e..471b5c9f65 100644 --- a/Docs/Layers/left_right_style.md +++ b/Docs/Layers/left_right_style.md @@ -1,53 +1,45 @@ - - - left_right_style +left_right_style ================== -Special meta-style which will show one single line, either on the left or on the right depending on the id. This is used in the small popups with left_right roads. Cannot be included in a theme - - - +Special meta-style which will show one single line, either on the left or on the right depending on the id. This is used +in the small popups with left_right roads. Cannot be included in a theme ## Table of contents 1. [left_right_style](#left_right_style) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) - - - - - This layer cannot be toggled in the filter view. If you import this layer in your theme, override `title` to make this toggleable. - - Not visible in the layer selection by default. If you want to make this layer toggable, override `name` - - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - +- This layer cannot be toggled in the filter view. If you import this layer in your theme, override `title` to make this + toggleable. +- Not visible in the layer selection by default. If you want to make this layer toggable, override `name` +- Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` [Go to the source code](../assets/layers/left_right_style/left_right_style.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- id + =left + |id + =right - - - id=left|id=right - - - - - Supported attributes +Supported attributes ---------------------- - + This document is autogenerated from assets/layers/left_right_style/left_right_style.json \ No newline at end of file diff --git a/Docs/Layers/lit_streets.md b/Docs/Layers/lit_streets.md index c9b6198a0c..158f4e997d 100644 --- a/Docs/Layers/lit_streets.md +++ b/Docs/Layers/lit_streets.md @@ -1,92 +1,62 @@ - - - lit_streets +lit_streets ============= - - - - - - - ## Table of contents 1. [lit_streets](#lit_streets) - * [Themes using this layer](#themes-using-this-layer) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + * [Themes using this layer](#themes-using-this-layer) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [lit](#lit) +- Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` +#### Themes using this layer - - - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - - - - -#### Themes using this layer - - - - - - - [street_lighting](https://mapcomplete.osm.be/street_lighting) - +- [street_lighting](https://mapcomplete.osm.be/street_lighting) [Go to the source code](../assets/layers/lit_streets/lit_streets.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- highway!~^$ +- lit!~^no$ +- lit!~^$ +- service!~^driveway$ - - - highway!~^$ - - lit!~^no$ - - lit!~^$ - - service!~^driveway$ - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/lit#values) [lit](https://wiki.openstreetmap.org/wiki/Key:lit) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:lit%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:lit%3Dno) [24/7](https://wiki.openstreetmap.org/wiki/Tag:lit%3D24/7) - - - -### lit - - +### lit The question is **Is this street lit?** - - - - - - **This street is lit** corresponds with lit=yes - - **This street is not lit** corresponds with lit=no - - **This street is lit at night** corresponds with lit=sunset-sunrise_This option cannot be chosen as answer_ - - **This street is lit 24/7** corresponds with lit=24/7 - +- **This street is lit** corresponds with lit + =yes +- **This street is not lit** corresponds with + lit=no +- **This street is lit at night** corresponds + with lit + =sunset-sunrise_This option + cannot be chosen as answer_ +- **This street is lit 24/7** corresponds with + lit=24/7 This document is autogenerated from assets/layers/lit_streets/lit_streets.json \ No newline at end of file diff --git a/Docs/Layers/map.md b/Docs/Layers/map.md index 7d81873f76..7d0568481c 100644 --- a/Docs/Layers/map.md +++ b/Docs/Layers/map.md @@ -39,6 +39,7 @@ A map, meant for tourists which is permanently installed in the public space - [maps](https://mapcomplete.osm.be/maps) - [nature](https://mapcomplete.osm.be/nature) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/map/map.json) @@ -119,4 +120,4 @@ The question is **Is the OpenStreetMap-attribution given?** - **There is no attribution at all** corresponds with map_source:attribution=no_This option cannot be chosen as answer_ -This document is autogenerated from assets/layers/map/map.json \ No newline at end of file +This document is autogenerated from [assets/layers/map/map.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/map/map.json) \ No newline at end of file diff --git a/Docs/Layers/matchpoint.md b/Docs/Layers/matchpoint.md index e348b4148a..5fd22c6ca5 100644 --- a/Docs/Layers/matchpoint.md +++ b/Docs/Layers/matchpoint.md @@ -1,6 +1,4 @@ - - - matchpoint +matchpoint ============ @@ -9,28 +7,23 @@ The default rendering for a locationInput which snaps onto another object - - - ## Table of contents 1. [matchpoint](#matchpoint) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) - - - - - This layer cannot be toggled in the filter view. If you import this layer in your theme, override `title` to make this toggleable. - - Not visible in the layer selection by default. If you want to make this layer toggable, override `name` - +- This layer cannot be toggled in the filter view. If you import this layer in your theme, override `title` to make this + toggleable. +- Not visible in the layer selection by default. If you want to make this layer toggable, override `name` [Go to the source code](../assets/layers/matchpoint/matchpoint.json) - Basic tags for this layer +Basic tags for this layer --------------------------- @@ -44,9 +37,9 @@ Elements must have the all of following tags to be shown on this layer: - Supported attributes +Supported attributes ---------------------- - + This document is autogenerated from assets/layers/matchpoint/matchpoint.json \ No newline at end of file diff --git a/Docs/Layers/maybe_climbing.md b/Docs/Layers/maybe_climbing.md index e624240e92..f3940462bc 100644 --- a/Docs/Layers/maybe_climbing.md +++ b/Docs/Layers/maybe_climbing.md @@ -1,6 +1,4 @@ - - - maybe_climbing +maybe_climbing ================ @@ -9,96 +7,67 @@ A climbing opportunity? - - - ## Table of contents 1. [maybe_climbing](#maybe_climbing) - * [Themes using this layer](#themes-using-this-layer) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + * [Themes using this layer](#themes-using-this-layer) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [minimap](#minimap) + [climbing-opportunity-name](#climbing-opportunity-name) + [climbing-possible](#climbing-possible) +#### Themes using this layer - - - - - - - - -#### Themes using this layer - - - - - - - [climbing](https://mapcomplete.osm.be/climbing) - +- [climbing](https://mapcomplete.osm.be/climbing) [Go to the source code](../assets/layers/maybe_climbing/maybe_climbing.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- leisure + =sports_centre + |barrier + =wall + |barrier + =retaining_wall + |natural + =cliff + |natural + =rock + |natural + =stone +- - - - leisure=sports_centre|barrier=wall|barrier=retaining_wall|natural=cliff|natural=rock|natural=stone - - - - - - - Supported attributes +Supported attributes ---------------------- - - - - -### minimap - - +### minimap _This tagrendering has no question and is thus read-only_ - - - - -### climbing-opportunity-name - - +### climbing-opportunity-name _This tagrendering has no question and is thus read-only_ - - - - -### climbing-possible - - +### climbing-possible The question is **Is climbing possible here?** - - - - - - **Climbing is not possible here** corresponds with sport!~^climbing$_This option cannot be chosen as answer_ - - **Climbing is possible here** corresponds with sport=climbing - - **Climbing is not possible here** corresponds with climbing=no - +- **Climbing is not possible here** corresponds with sport!~^climbing$_This option cannot be chosen as answer_ +- **Climbing is possible here** corresponds + with sport + =climbing +- **Climbing is not possible here** corresponds + with climbing + =no This document is autogenerated from assets/layers/maybe_climbing/maybe_climbing.json \ No newline at end of file diff --git a/Docs/Layers/named_streets.md b/Docs/Layers/named_streets.md index bbbb93ba21..5f5faba576 100644 --- a/Docs/Layers/named_streets.md +++ b/Docs/Layers/named_streets.md @@ -54,4 +54,4 @@ Elements must have the all of following tags to be shown on this layer: -This document is autogenerated from assets/layers/named_streets/named_streets.json \ No newline at end of file +This document is autogenerated from [assets/layers/named_streets/named_streets.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/named_streets/named_streets.json) \ No newline at end of file diff --git a/Docs/Layers/nature_reserve.md b/Docs/Layers/nature_reserve.md index b984c43ac5..1a4dae8dbd 100644 --- a/Docs/Layers/nature_reserve.md +++ b/Docs/Layers/nature_reserve.md @@ -49,6 +49,7 @@ Een natuurgebied is een gebied waar actief ruimte gemaakt word voor de natuur. T - [nature](https://mapcomplete.osm.be/nature) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/nature_reserve/nature_reserve.json) @@ -91,7 +92,6 @@ attribute | type | values which are supported by this layer [](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | [](https://taginfo.openstreetmap.org/keys/description#values) [description](https://wiki.openstreetmap.org/wiki/Key:description) | [string](../SpecialInputElements.md#string) | [](https://taginfo.openstreetmap.org/keys/description:0#values) [description:0](https://wiki.openstreetmap.org/wiki/Key:description:0) | [string](../SpecialInputElements.md#string) | -[](https://taginfo.openstreetmap.org/keys/_surface:ha#values) [_surface:ha](https://wiki.openstreetmap.org/wiki/Key:_surface:ha) | Multiple choice | [0](https://wiki.openstreetmap.org/wiki/Tag:_surface:ha%3D0) [](https://taginfo.openstreetmap.org/keys/wikidata#values) [wikidata](https://wiki.openstreetmap.org/wiki/Key:wikidata) | [wikidata](../SpecialInputElements.md#wikidata) | @@ -139,9 +139,9 @@ This is rendered with `Beheer door {operator}` - - **Dit gebied wordt beheerd door Natuurpunt** corresponds with operator=Natuurpunt - - **Dit gebied wordt beheerd door {operator}** corresponds with operator~^(n|N)atuurpunt.*$_This option cannot be chosen as answer_ - - **Dit gebied wordt beheerd door het Agentschap Natuur en Bos** corresponds with operator=Agentschap Natuur en Bos + - **Dit gebied wordt beheerd door Natuurpunt** corresponds with operator=Natuurpunt + - **Dit gebied wordt beheerd door {operator}** corresponds with operator~^(n|N)atuurpunt.*$_This option cannot be chosen as answer_ + - **Dit gebied wordt beheerd door het Agentschap Natuur en Bos** corresponds with operator=Agentschap Natuur en Bos @@ -266,11 +266,6 @@ _This tagrendering has no question and is thus read-only_ - - **** corresponds with _surface:ha=0 - - - - ### wikipedia @@ -285,4 +280,4 @@ This is rendered with `{wikipedia():max-height:25rem}` - **No Wikipedia page has been linked yet** corresponds with _This option cannot be chosen as answer_ -This document is autogenerated from assets/layers/nature_reserve/nature_reserve.json \ No newline at end of file +This document is autogenerated from [assets/layers/nature_reserve/nature_reserve.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/nature_reserve/nature_reserve.json) \ No newline at end of file diff --git a/Docs/Layers/nature_reserve_buurtnatuur.md b/Docs/Layers/nature_reserve_buurtnatuur.md index da989bffde..3f2a9cf681 100644 --- a/Docs/Layers/nature_reserve_buurtnatuur.md +++ b/Docs/Layers/nature_reserve_buurtnatuur.md @@ -1,63 +1,46 @@ - - - nature_reserve_buurtnatuur +nature_reserve_buurtnatuur ============================ -Een natuurgebied is een gebied waar actief ruimte gemaakt word voor de natuur. Typisch zijn deze in beheer van Natuurpunt of het Agentschap Natuur en Bos of zijn deze erkend door de overheid. - - - +Een natuurgebied is een gebied waar actief ruimte gemaakt word voor de natuur. Typisch zijn deze in beheer van +Natuurpunt of het Agentschap Natuur en Bos of zijn deze erkend door de overheid. ## Table of contents 1. [nature_reserve_buurtnatuur](#nature_reserve_buurtnatuur) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [images](#images) - - - - - This layer is needed as dependency for layer [parks](#parks) - - This layer is needed as dependency for layer [forest](#forest) - +- This layer is needed as dependency for layer [parks](#parks) +- This layer is needed as dependency for layer [forest](#forest) [Go to the source code](../assets/layers/nature_reserve_buurtnatuur/nature_reserve_buurtnatuur.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- leisure + =nature_reserve + |boundary + =protected_area - - - leisure=nature_reserve|boundary=protected_area - - - - - Supported attributes +Supported attributes ---------------------- - - - - -### images - - +### images _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/nature_reserve_buurtnatuur/nature_reserve_buurtnatuur.json \ No newline at end of file diff --git a/Docs/Layers/node.md b/Docs/Layers/node.md index c2e4531410..a767e1f35e 100644 --- a/Docs/Layers/node.md +++ b/Docs/Layers/node.md @@ -1,99 +1,60 @@ - - - node +node ====== - - - - - - - ## Table of contents 1. [node](#node) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [node-survey:date](#node-surveydate) + [node-expected_rcn_route_relations](#node-expected_rcn_route_relations) + [images](#images) - - - - - - - [Go to the source code](../assets/layers/node/node.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- rcn_ref~^..*$ - - - rcn_ref~^..*$ - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/survey:date#values) [survey:date](https://wiki.openstreetmap.org/wiki/Key:survey:date) | [date](../SpecialInputElements.md#date) | [](https://wiki.openstreetmap.org/wiki/Tag:survey:date%3D) -[](https://taginfo.openstreetmap.org/keys/expected_rcn_route_relations#values) [expected_rcn_route_relations](https://wiki.openstreetmap.org/wiki/Key:expected_rcn_route_relations) | [int](../SpecialInputElements.md#int) | - - - - -### node-survey:date - +[](https://taginfo.openstreetmap.org/keys/expected_rcn_route_relations#values) [expected_rcn_route_relations](https://wiki.openstreetmap.org/wiki/Key:expected_rcn_route_relations) | [int](../SpecialInputElements.md#int) | +### node-survey:date The question is **When was this cycle node last surveyed?** -This rendering asks information about the property [survey:date](https://wiki.openstreetmap.org/wiki/Key:survey:date) +This rendering asks information about the property [survey:date](https://wiki.openstreetmap.org/wiki/Key:survey:date) This is rendered with `This cycle node was last surveyed on {survey:date}` +- **Surveyed today!** corresponds with survey:date= - - - **Surveyed today!** corresponds with survey:date= - - - - -### node-expected_rcn_route_relations - - +### node-expected_rcn_route_relations The question is **How many other cycle nodes does this node link to?** -This rendering asks information about the property [expected_rcn_route_relations](https://wiki.openstreetmap.org/wiki/Key:expected_rcn_route_relations) +This rendering asks information about the +property [expected_rcn_route_relations](https://wiki.openstreetmap.org/wiki/Key:expected_rcn_route_relations) This is rendered with `This node links to {expected_rcn_route_relations} other cycle nodes.` - - -### images - - +### images _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/node/node.json \ No newline at end of file diff --git a/Docs/Layers/node2node.md b/Docs/Layers/node2node.md index a0e2ea2a25..c8a7247525 100644 --- a/Docs/Layers/node2node.md +++ b/Docs/Layers/node2node.md @@ -1,88 +1,58 @@ - - - node2node +node2node =========== - - - - - - - ## Table of contents 1. [node2node](#node2node) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [node2node-survey:date](#node2node-surveydate) + [export_as_gpx](#export_as_gpx) - - - - - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - +- Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` [Go to the source code](../assets/layers/node2node/node2node.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- network + =rcn +- network:type + =node_network +- route + =bicycle - - - network=rcn - - network:type=node_network - - route=bicycle - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/survey:date#values) [survey:date](https://wiki.openstreetmap.org/wiki/Key:survey:date) | [date](../SpecialInputElements.md#date) | [](https://wiki.openstreetmap.org/wiki/Tag:survey:date%3D) - - - -### node2node-survey:date - - +### node2node-survey:date The question is **When was this node to node link last surveyed?** -This rendering asks information about the property [survey:date](https://wiki.openstreetmap.org/wiki/Key:survey:date) +This rendering asks information about the property [survey:date](https://wiki.openstreetmap.org/wiki/Key:survey:date) This is rendered with `This node to node link was last surveyed on {survey:date}` +- **Surveyed today!** corresponds with survey:date= - - - **Surveyed today!** corresponds with survey:date= - - - - -### export_as_gpx - - +### export_as_gpx _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/node2node/node2node.json \ No newline at end of file diff --git a/Docs/Layers/note_import.md b/Docs/Layers/note_import.md new file mode 100644 index 0000000000..e0662bc2bf --- /dev/null +++ b/Docs/Layers/note_import.md @@ -0,0 +1,129 @@ + + + note_import +============= + + + + + +Template for note note imports. + + + + +## Table of contents + +1. [note_import](#note_import) + - [Basic tags for this layer](#basic-tags-for-this-layer) + - [Supported attributes](#supported-attributes) + + [conversation](#conversation) + + [Intro](#intro) + + [import](#import) + + [close_note_](#close_note_) + + [close_note_mapped](#close_note_mapped) + + [comment](#comment) + + [add_image](#add_image) + + + + + + - This layer is loaded from an external source, namely `https://api.openstreetmap.org/api/0.6/notes.json?closed=0&bbox={x_min},{y_min},{x_max},{y_max}` + - This layer will automatically load [public_bookcase](./public_bookcase.md) into the layout as it depends on it: a tagrendering needs this layer (import) + + +[Go to the source code](../assets/layers/note_import/note_import.json) + + + + Basic tags for this layer +--------------------------- + + + +Elements must have the all of following tags to be shown on this layer: + + + + - id~^..*$ + + + + + Supported attributes +---------------------- + + + + + +### conversation + + + +_This tagrendering has no question and is thus read-only_ + + + + + +### Intro + + + +_This tagrendering has no question and is thus read-only_ + + + + + +### import + + + +_This tagrendering has no question and is thus read-only_ + + + + + +### close_note_ + + + +_This tagrendering has no question and is thus read-only_ + + + + + +### close_note_mapped + + + +_This tagrendering has no question and is thus read-only_ + + + + + +### comment + + + +_This tagrendering has no question and is thus read-only_ + + + + + +### add_image + + + +_This tagrendering has no question and is thus read-only_ + + + +This document is autogenerated from [assets/layers/note_import/note_import.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/note_import/note_import.json) \ No newline at end of file diff --git a/Docs/Layers/observation_tower.md b/Docs/Layers/observation_tower.md index 6812905d04..09b33e3cf9 100644 --- a/Docs/Layers/observation_tower.md +++ b/Docs/Layers/observation_tower.md @@ -5,7 +5,7 @@ - + Towers with a panoramic view @@ -21,10 +21,13 @@ Towers with a panoramic view + [images](#images) + [name](#name) + [Height](#height) - + [Operator](#operator) - + [website](#website) + + [access](#access) + [Fee](#fee) + [payment-options](#payment-options) + + [website](#website) + + [step_count](#step_count) + + [elevator](#elevator) + + [Operator](#operator) + [wheelchair-access](#wheelchair-access) + [wikipedia](#wikipedia) @@ -44,6 +47,7 @@ Towers with a panoramic view - [observation_towers](https://mapcomplete.osm.be/observation_towers) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/observation_tower/observation_tower.json) @@ -77,9 +81,12 @@ attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | [](https://taginfo.openstreetmap.org/keys/height#values) [height](https://wiki.openstreetmap.org/wiki/Key:height) | [pfloat](../SpecialInputElements.md#pfloat) | -[](https://taginfo.openstreetmap.org/keys/operator#values) [operator](https://wiki.openstreetmap.org/wiki/Key:operator) | [string](../SpecialInputElements.md#string) | -[](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | +[](https://taginfo.openstreetmap.org/keys/access#values) [access](https://wiki.openstreetmap.org/wiki/Key:access) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:access%3Dyes) [guided](https://wiki.openstreetmap.org/wiki/Tag:access%3Dguided) [](https://taginfo.openstreetmap.org/keys/charge#values) [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:charge%3D) +[](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | +[](https://taginfo.openstreetmap.org/keys/step_count#values) [step_count](https://wiki.openstreetmap.org/wiki/Key:step_count) | [pnat](../SpecialInputElements.md#pnat) | +[](https://taginfo.openstreetmap.org/keys/elevator#values) [elevator](https://wiki.openstreetmap.org/wiki/Key:elevator) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:elevator%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:elevator%3Dno) +[](https://taginfo.openstreetmap.org/keys/operator#values) [operator](https://wiki.openstreetmap.org/wiki/Key:operator) | [string](../SpecialInputElements.md#string) | [](https://taginfo.openstreetmap.org/keys/wheelchair#values) [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [designated](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Ddesignated) [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno) [](https://taginfo.openstreetmap.org/keys/wikidata#values) [wikidata](https://wiki.openstreetmap.org/wiki/Key:wikidata) | [wikidata](../SpecialInputElements.md#wikidata) | @@ -123,29 +130,18 @@ This is rendered with `This tower is {height} high` -### Operator +### access -The question is **Who maintains this tower?** - -This rendering asks information about the property [operator](https://wiki.openstreetmap.org/wiki/Key:operator) -This is rendered with `Maintained by {operator}` +The question is **Can this tower be visited?** -### website - -The question is **What is the website of {name}?** - -This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) -This is rendered with `{website}` - - - - - **{contact:website}** corresponds with contact:website~^..*$_This option cannot be chosen as answer_ + - **This tower is publicly accessible** corresponds with access=yes + - **This tower can only be visited with a guide** corresponds with access=guided @@ -182,6 +178,60 @@ The question is **Which methods of payment are accepted here?** +### website + + + +The question is **What is the website of {name}?** + +This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) +This is rendered with `{website}` + + + + - **{contact:website}** corresponds with contact:website~^..*$_This option cannot be chosen as answer_ + + + + +### step_count + + + +The question is **How much individual steps does one have to climb to reach the top of this tower?** + +This rendering asks information about the property [step_count](https://wiki.openstreetmap.org/wiki/Key:step_count) +This is rendered with `This tower has {step_count} steps to reach the top` + + + +### elevator + + + +The question is **Does this tower have an elevator?** + + + + + + - **This tower has an elevator which takes visitors to the top** corresponds with elevator=yes + - **This tower does not have an elevator** corresponds with elevator=no + + + + +### Operator + + + +The question is **Who maintains this tower?** + +This rendering asks information about the property [operator](https://wiki.openstreetmap.org/wiki/Key:operator) +This is rendered with `Maintained by {operator}` + + + ### wheelchair-access @@ -214,4 +264,4 @@ This is rendered with `{wikipedia():max-height:25rem}` - **No Wikipedia page has been linked yet** corresponds with _This option cannot be chosen as answer_ -This document is autogenerated from assets/layers/observation_tower/observation_tower.json \ No newline at end of file +This document is autogenerated from [assets/layers/observation_tower/observation_tower.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/observation_tower/observation_tower.json) \ No newline at end of file diff --git a/Docs/Layers/orchards.md b/Docs/Layers/orchards.md index c69a435252..e25d58bf1c 100644 --- a/Docs/Layers/orchards.md +++ b/Docs/Layers/orchards.md @@ -1,60 +1,37 @@ - - - orchards +orchards ========== - - - ## Table of contents 1. [orchards](#orchards) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [images](#images) - - - - - - - [Go to the source code](../assets/layers/orchards/orchards.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- landuse + =orchard - - - landuse=orchard - - - - - Supported attributes +Supported attributes ---------------------- - - - - -### images - - +### images _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/orchards/orchards.json \ No newline at end of file diff --git a/Docs/Layers/osm-buildings-fixme.md b/Docs/Layers/osm-buildings-fixme.md index 2acd195e14..e9f6d27065 100644 --- a/Docs/Layers/osm-buildings-fixme.md +++ b/Docs/Layers/osm-buildings-fixme.md @@ -1,20 +1,12 @@ - - - osm-buildings-fixme +osm-buildings-fixme ===================== - - - - - - - ## Table of contents 1. [osm-buildings-fixme](#osm-buildings-fixme) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [building type](#building-type) + [grb-housenumber](#grb-housenumber) + [grb-unit](#grb-unit) @@ -24,166 +16,128 @@ + [fix_verdieping](#fix_verdieping) + [all_tags](#all_tags) - - - - - - - [Go to the source code](../assets/layers/osm-buildings-fixme/osm-buildings-fixme.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- building~^..*$ +- fixme~^..*$ - - - building~^..*$ - - fixme~^..*$ - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/building#values) [building](https://wiki.openstreetmap.org/wiki/Key:building) | [string](../SpecialInputElements.md#string) | [house](https://wiki.openstreetmap.org/wiki/Tag:building%3Dhouse) [detached](https://wiki.openstreetmap.org/wiki/Tag:building%3Ddetached) [semidetached_house](https://wiki.openstreetmap.org/wiki/Tag:building%3Dsemidetached_house) [apartments](https://wiki.openstreetmap.org/wiki/Tag:building%3Dapartments) [office](https://wiki.openstreetmap.org/wiki/Tag:building%3Doffice) [apartments](https://wiki.openstreetmap.org/wiki/Tag:building%3Dapartments) [shed](https://wiki.openstreetmap.org/wiki/Tag:building%3Dshed) [garage](https://wiki.openstreetmap.org/wiki/Tag:building%3Dgarage) [garages](https://wiki.openstreetmap.org/wiki/Tag:building%3Dgarages) [yes](https://wiki.openstreetmap.org/wiki/Tag:building%3Dyes) [](https://taginfo.openstreetmap.org/keys/addr:housenumber#values) [addr:housenumber](https://wiki.openstreetmap.org/wiki/Key:addr:housenumber) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:addr:housenumber%3D) [](https://wiki.openstreetmap.org/wiki/Tag:addr:housenumber%3D) [](https://wiki.openstreetmap.org/wiki/Tag:addr:housenumber%3D) [](https://taginfo.openstreetmap.org/keys/addr:unit#values) [addr:unit](https://wiki.openstreetmap.org/wiki/Key:addr:unit) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:addr:unit%3D) -[](https://taginfo.openstreetmap.org/keys/addr:street#values) [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/addr:street#values) [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | [string](../SpecialInputElements.md#string) | [](https://taginfo.openstreetmap.org/keys/fixme#values) [fixme](https://wiki.openstreetmap.org/wiki/Key:fixme) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:fixme%3D) -[](https://taginfo.openstreetmap.org/keys/building:min_level#values) [building:min_level](https://wiki.openstreetmap.org/wiki/Key:building:min_level) | [pnat](../SpecialInputElements.md#pnat) | - - - - -### building type - +[](https://taginfo.openstreetmap.org/keys/building:min_level#values) [building:min_level](https://wiki.openstreetmap.org/wiki/Key:building:min_level) | [pnat](../SpecialInputElements.md#pnat) | +### building type The question is **What kind of building is this?** -This rendering asks information about the property [building](https://wiki.openstreetmap.org/wiki/Key:building) +This rendering asks information about the property [building](https://wiki.openstreetmap.org/wiki/Key:building) This is rendered with `The building type is {building}` +- **A normal house** corresponds with + building=house +- **A house detached from other building** corresponds + with building + =detached +- **A house sharing only one wall with another house** corresponds + with building + = + semidetached_house +- **An apartment building - highrise for living** corresponds + with building + =apartments +- **An office building - highrise for work** corresponds + with building + =office +- **An apartment building** corresponds with + building=apartments +- **A small shed, e.g. in a garden** corresponds + with building + =shed +- **A single garage to park a car** corresponds + with building + =garage +- **A building containing only garages; typically they are all identical** corresponds + with building + =garages +- **A building - no specification** corresponds + with building + =yes - - - **A normal house** corresponds with building=house - - **A house detached from other building** corresponds with building=detached - - **A house sharing only one wall with another house** corresponds with building=semidetached_house - - **An apartment building - highrise for living** corresponds with building=apartments - - **An office building - highrise for work** corresponds with building=office - - **An apartment building** corresponds with building=apartments - - **A small shed, e.g. in a garden** corresponds with building=shed - - **A single garage to park a car** corresponds with building=garage - - **A building containing only garages; typically they are all identical** corresponds with building=garages - - **A building - no specification** corresponds with building=yes - - - - -### grb-housenumber - - +### grb-housenumber The question is **Wat is het huisnummer?** -This rendering asks information about the property [addr:housenumber](https://wiki.openstreetmap.org/wiki/Key:addr:housenumber) +This rendering asks information about the +property [addr:housenumber](https://wiki.openstreetmap.org/wiki/Key:addr:housenumber) This is rendered with `Het huisnummer is {addr:housenumber}` +- **Geen huisnummer** corresponds + with not:addr:housenumber + =yes +- **Het huisnummer is {_grbNumber}, wat overeenkomt met het GRB** corresponds with addr:housenumber= +- **Dit gebouw heeft geen nummer, net zoals in het GRB** corresponds + with not:addr:housenumber + =yes - - - **Geen huisnummer** corresponds with not:addr:housenumber=yes - - **Het huisnummer is {_grbNumber}, wat overeenkomt met het GRB** corresponds with addr:housenumber= - - **Dit gebouw heeft geen nummer, net zoals in het GRB** corresponds with not:addr:housenumber=yes - - - - -### grb-unit - - +### grb-unit The question is **Wat is de wooneenheid-aanduiding?** -This rendering asks information about the property [addr:unit](https://wiki.openstreetmap.org/wiki/Key:addr:unit) +This rendering asks information about the property [addr:unit](https://wiki.openstreetmap.org/wiki/Key:addr:unit) This is rendered with `De wooneenheid-aanduiding is {addr:unit} ` +- **Geen wooneenheid-nummer** corresponds with - - - **Geen wooneenheid-nummer** corresponds with - - - - -### grb-street - - +### grb-street The question is **Wat is de straat?** -This rendering asks information about the property [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) +This rendering asks information about the property [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) This is rendered with `De straat is {addr:street}` - - -### grb-fixme - - +### grb-fixme The question is **Wat zegt de fixme?** -This rendering asks information about the property [fixme](https://wiki.openstreetmap.org/wiki/Key:fixme) +This rendering asks information about the property [fixme](https://wiki.openstreetmap.org/wiki/Key:fixme) This is rendered with `De fixme is {fixme}` +- **Geen fixme** corresponds with - - - **Geen fixme** corresponds with - - - - -### grb-min-level - - +### grb-min-level The question is **Hoeveel verdiepingen ontbreken?** -This rendering asks information about the property [building:min_level](https://wiki.openstreetmap.org/wiki/Key:building:min_level) +This rendering asks information about the +property [building:min_level](https://wiki.openstreetmap.org/wiki/Key:building:min_level) This is rendered with `Dit gebouw begint maar op de {building:min_level} verdieping` - - -### fix_verdieping - - +### fix_verdieping _This tagrendering has no question and is thus read-only_ - - - - -### all_tags - - +### all_tags _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/osm-buildings-fixme/osm-buildings-fixme.json \ No newline at end of file diff --git a/Docs/Layers/osm-buildings.md b/Docs/Layers/osm-buildings.md index f5c8dcc726..f5562c9dc4 100644 --- a/Docs/Layers/osm-buildings.md +++ b/Docs/Layers/osm-buildings.md @@ -1,72 +1,51 @@ - - - osm-buildings +osm-buildings =============== - - - - - - - ## Table of contents 1. [osm-buildings](#osm-buildings) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [apply_streetname](#apply_streetname) - - - - - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - - This layer will automatically load [crab_address](./crab_address.md) into the layout as it depends on it: A calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _embedded_crab_addresses) - - This layer will automatically load [named_streets](./named_streets.md) into the layout as it depends on it: A calculated tag loads features from this layer (calculatedTag[3] which calculates the value for _nearby_street_names) - - This layer is needed as dependency for layer [grb](#grb) - - This layer is needed as dependency for layer [grb](#grb) - +- Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` +- This layer will automatically load [crab_address](./crab_address.md) into the layout as it depends on it: A + calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _ + embedded_crab_addresses) +- This layer will automatically load [named_streets](./named_streets.md) into the layout as it depends on it: A + calculated tag loads features from this layer (calculatedTag[3] which calculates the value for _nearby_street_names) +- This layer is needed as dependency for layer [grb](#grb) +- This layer is needed as dependency for layer [grb](#grb) [Go to the source code](../assets/layers/osm-buildings/osm-buildings.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- building~^..*$ +- addr:housenumber~^..*$ +- - - - building~^..*$ - - addr:housenumber~^..*$ - - - - - - - Supported attributes +Supported attributes ---------------------- - - - - -### apply_streetname - - +### apply_streetname _This tagrendering has no question and is thus read-only_ - - - - - - **No nearby street has the same name. The CRAB-name is {_name_to_apply}** corresponds with _spelling_is_correct=false - - **There are multiple streetnames applicable here** corresponds with _singular_import=false - +- **No nearby street has the same name. The CRAB-name is {_name_to_apply}** corresponds + with _spelling_is_correct + =false +- **There are multiple streetnames applicable here** corresponds + with _singular_import + =false This document is autogenerated from assets/layers/osm-buildings/osm-buildings.json \ No newline at end of file diff --git a/Docs/Layers/parking.md b/Docs/Layers/parking.md index 540c0687ec..dad8078172 100644 --- a/Docs/Layers/parking.md +++ b/Docs/Layers/parking.md @@ -36,6 +36,7 @@ A layer showing car parkings - [parkings](https://mapcomplete.osm.be/parkings) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/parking/parking.json) @@ -71,4 +72,4 @@ _This tagrendering has no question and is thus read-only_ -This document is autogenerated from assets/layers/parking/parking.json \ No newline at end of file +This document is autogenerated from [assets/layers/parking/parking.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/parking/parking.json) \ No newline at end of file diff --git a/Docs/Layers/parks.md b/Docs/Layers/parks.md index e131e804fc..800d653f08 100644 --- a/Docs/Layers/parks.md +++ b/Docs/Layers/parks.md @@ -1,63 +1,48 @@ - - - parks +parks ======= -Een park is een publiek toegankelijke, groene ruimte binnen de stad. Ze is typisch ingericht voor recreatief gebruik, met (verharde) wandelpaden, zitbanken, vuilnisbakken, een gezellig vijvertje, ... - - - +Een park is een publiek toegankelijke, groene ruimte binnen de stad. Ze is typisch ingericht voor recreatief gebruik, +met (verharde) wandelpaden, zitbanken, vuilnisbakken, een gezellig vijvertje, ... ## Table of contents 1. [parks](#parks) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [images](#images) - - - - - This layer will automatically load [nature_reserve_buurtnatuur](./nature_reserve_buurtnatuur.md) into the layout as it depends on it: A calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _overlapWithUpperLayers) - - This layer is needed as dependency for layer [forest](#forest) - +- This layer will automatically load [nature_reserve_buurtnatuur](./nature_reserve_buurtnatuur.md) into the layout as + it depends on it: A calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _ + overlapWithUpperLayers) +- This layer is needed as dependency for layer [forest](#forest) [Go to the source code](../assets/layers/parks/parks.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- leisure + =park + |landuse + =village_green - - - leisure=park|landuse=village_green - - - - - Supported attributes +Supported attributes ---------------------- - - - - -### images - - +### images _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/parks/parks.json \ No newline at end of file diff --git a/Docs/Layers/pedestrian_path.md b/Docs/Layers/pedestrian_path.md index d61c744af8..74ae60f8c3 100644 --- a/Docs/Layers/pedestrian_path.md +++ b/Docs/Layers/pedestrian_path.md @@ -35,6 +35,7 @@ Pedestrian footpaths, especially used for indoor navigation and snapping entranc - [entrances](https://mapcomplete.osm.be/entrances) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/pedestrian_path/pedestrian_path.json) @@ -60,4 +61,4 @@ Elements must have the all of following tags to be shown on this layer: -This document is autogenerated from assets/layers/pedestrian_path/pedestrian_path.json \ No newline at end of file +This document is autogenerated from [assets/layers/pedestrian_path/pedestrian_path.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/pedestrian_path/pedestrian_path.json) \ No newline at end of file diff --git a/Docs/Layers/picnic_table.md b/Docs/Layers/picnic_table.md index cb0e57962f..b48b7faad1 100644 --- a/Docs/Layers/picnic_table.md +++ b/Docs/Layers/picnic_table.md @@ -5,7 +5,7 @@ - + The layer showing picnic tables @@ -18,6 +18,7 @@ The layer showing picnic tables * [Themes using this layer](#themes-using-this-layer) - [Basic tags for this layer](#basic-tags-for-this-layer) - [Supported attributes](#supported-attributes) + + [images](#images) + [picnic_table-material](#picnic_table-material) @@ -36,6 +37,8 @@ The layer showing picnic tables - [benches](https://mapcomplete.osm.be/benches) + - [nature](https://mapcomplete.osm.be/nature) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/picnic_table/picnic_table.json) @@ -72,6 +75,16 @@ attribute | type | values which are supported by this layer +### images + + + +_This tagrendering has no question and is thus read-only_ + + + + + ### picnic_table-material @@ -87,4 +100,4 @@ This is rendered with `This picnic table is made of {material}` - **This is a concrete picnic table** corresponds with material=concrete -This document is autogenerated from assets/layers/picnic_table/picnic_table.json \ No newline at end of file +This document is autogenerated from [assets/layers/picnic_table/picnic_table.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/picnic_table/picnic_table.json) \ No newline at end of file diff --git a/Docs/Layers/play_forest.md b/Docs/Layers/play_forest.md index bde5ec6ff0..ca02c3e8ed 100644 --- a/Docs/Layers/play_forest.md +++ b/Docs/Layers/play_forest.md @@ -152,4 +152,4 @@ _This tagrendering has no question and is thus read-only_ -This document is autogenerated from assets/layers/play_forest/play_forest.json \ No newline at end of file +This document is autogenerated from [assets/layers/play_forest/play_forest.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/play_forest/play_forest.json) \ No newline at end of file diff --git a/Docs/Layers/playground.md b/Docs/Layers/playground.md index 8d1a099418..66a1a4b429 100644 --- a/Docs/Layers/playground.md +++ b/Docs/Layers/playground.md @@ -47,6 +47,7 @@ Playgrounds + - [personal](https://mapcomplete.osm.be/personal) - [playgrounds](https://mapcomplete.osm.be/playgrounds) @@ -85,7 +86,7 @@ attribute | type | values which are supported by this layer [](https://taginfo.openstreetmap.org/keys/min_age#values) [min_age](https://wiki.openstreetmap.org/wiki/Key:min_age) | [pnat](../SpecialInputElements.md#pnat) | [](https://taginfo.openstreetmap.org/keys/max_age#values) [max_age](https://wiki.openstreetmap.org/wiki/Key:max_age) | [pnat](../SpecialInputElements.md#pnat) | [](https://taginfo.openstreetmap.org/keys/operator#values) [operator](https://wiki.openstreetmap.org/wiki/Key:operator) | [string](../SpecialInputElements.md#string) | -[](https://taginfo.openstreetmap.org/keys/access#values) [access](https://wiki.openstreetmap.org/wiki/Key:access) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:access%3Dyes) [customers](https://wiki.openstreetmap.org/wiki/Tag:access%3Dcustomers) [students](https://wiki.openstreetmap.org/wiki/Tag:access%3Dstudents) [private](https://wiki.openstreetmap.org/wiki/Tag:access%3Dprivate) +[](https://taginfo.openstreetmap.org/keys/access#values) [access](https://wiki.openstreetmap.org/wiki/Key:access) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:access%3Dyes) [customers](https://wiki.openstreetmap.org/wiki/Tag:access%3Dcustomers) [private](https://wiki.openstreetmap.org/wiki/Tag:access%3Dprivate) [](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | [](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | [](https://taginfo.openstreetmap.org/keys/wheelchair#values) [wheelchair](https://wiki.openstreetmap.org/wiki/Key:wheelchair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dyes) [limited](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:wheelchair%3Dno) @@ -186,10 +187,9 @@ The question is **Is this playground accessible to the general public?** - - **Accessible to the general public** corresponds with _This option cannot be chosen as answer_ - **Accessible to the general public** corresponds with access=yes - **Only accessible for clients of the operating business** corresponds with access=customers - - **Only accessible to students of the school** corresponds with access=students + - **Only accessible to students of the school** corresponds with access=students_This option cannot be chosen as answer_ - **Not accessible** corresponds with access=private @@ -247,7 +247,6 @@ This is rendered with `{opening_hours_table(opening_hours)}` - **Accessible from sunrise till sunset** corresponds with opening_hours=sunrise-sunset - **Always accessible** corresponds with opening_hours=24/7 - - **Always accessible** corresponds with _This option cannot be chosen as answer_ @@ -270,4 +269,4 @@ _This tagrendering has no question and is thus read-only_ -This document is autogenerated from assets/layers/playground/playground.json \ No newline at end of file +This document is autogenerated from [assets/layers/playground/playground.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/playground/playground.json) \ No newline at end of file diff --git a/Docs/Layers/postal_code_boundary.md b/Docs/Layers/postal_code_boundary.md index 530fb88cfa..d5ec722a4c 100644 --- a/Docs/Layers/postal_code_boundary.md +++ b/Docs/Layers/postal_code_boundary.md @@ -1,60 +1,39 @@ - - - postal_code_boundary +postal_code_boundary ====================== - - - - - - - ## Table of contents 1. [postal_code_boundary](#postal_code_boundary) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [postal_code](#postal_code) - - - - - This layer is needed as dependency for layer [town_hall](#town_hall) - +- This layer is needed as dependency for layer [town_hall](#town_hall) [Go to the source code](../assets/layers/postal_code_boundary/postal_code_boundary.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- boundary + =postal_code + |bounary + =administrative + &postal_code~^..*$ - - - boundary=postal_code|bounary=administrative&postal_code~^..*$ - - - - - Supported attributes +Supported attributes ---------------------- - - - - -### postal_code - - +### postal_code _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/postal_code_boundary/postal_code_boundary.json \ No newline at end of file diff --git a/Docs/Layers/postboxes.md b/Docs/Layers/postboxes.md index b0b1324bf4..3edae41ea2 100644 --- a/Docs/Layers/postboxes.md +++ b/Docs/Layers/postboxes.md @@ -1,6 +1,4 @@ - - - postboxes +postboxes =========== @@ -9,77 +7,43 @@ The layer showing postboxes. - - - ## Table of contents 1. [postboxes](#postboxes) - * [Themes using this layer](#themes-using-this-layer) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + * [Themes using this layer](#themes-using-this-layer) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [images](#images) + [minimap](#minimap) +#### Themes using this layer - - - - - - - - -#### Themes using this layer - - - - - - - [postboxes](https://mapcomplete.osm.be/postboxes) - +- [postboxes](https://mapcomplete.osm.be/postboxes) [Go to the source code](../assets/layers/postboxes/postboxes.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- amenity + =post_box - - - amenity=post_box - - - - - Supported attributes +Supported attributes ---------------------- - - - - -### images - - +### images _This tagrendering has no question and is thus read-only_ - - - - -### minimap - - +### minimap _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/postboxes/postboxes.json \ No newline at end of file diff --git a/Docs/Layers/postoffices.md b/Docs/Layers/postoffices.md index ab0f619251..3bde0835ef 100644 --- a/Docs/Layers/postoffices.md +++ b/Docs/Layers/postoffices.md @@ -1,6 +1,4 @@ - - - postoffices +postoffices ============= @@ -9,103 +7,64 @@ A layer showing post offices. - - - ## Table of contents 1. [postoffices](#postoffices) - * [Themes using this layer](#themes-using-this-layer) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + * [Themes using this layer](#themes-using-this-layer) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [images](#images) + [minimap](#minimap) + [OH](#oh) +#### Themes using this layer - - - - - - - - -#### Themes using this layer - - - - - - - [postboxes](https://mapcomplete.osm.be/postboxes) - +- [postboxes](https://mapcomplete.osm.be/postboxes) [Go to the source code](../assets/layers/postoffices/postoffices.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- amenity + =post_office - - - amenity=post_office - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [24/7](https://wiki.openstreetmap.org/wiki/Tag:opening_hours%3D24/7) - - - -### images - - +### images _This tagrendering has no question and is thus read-only_ - - - - -### minimap - - +### minimap _This tagrendering has no question and is thus read-only_ - - - - -### OH - - +### OH The question is **What are the opening hours for this post office?** -This rendering asks information about the property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) +This rendering asks information about the +property [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) This is rendered with `Opening Hours: {opening_hours_table()}` - - - - **24/7 opened (including holidays)** corresponds with opening_hours=24/7 - +- **24/7 opened (including holidays)** corresponds + with opening_hours + =24/7 This document is autogenerated from assets/layers/postoffices/postoffices.json \ No newline at end of file diff --git a/Docs/Layers/public_bookcase.md b/Docs/Layers/public_bookcase.md index 6cb9d959d6..46a1a174df 100644 --- a/Docs/Layers/public_bookcase.md +++ b/Docs/Layers/public_bookcase.md @@ -19,7 +19,6 @@ A streetside cabinet with books, accessible to anyone - [Basic tags for this layer](#basic-tags-for-this-layer) - [Supported attributes](#supported-attributes) + [images](#images) - + [minimap](#minimap) + [public_bookcase-name](#public_bookcase-name) + [public_bookcase-capacity](#public_bookcase-capacity) + [bookcase-booktypes](#bookcase-booktypes) @@ -47,6 +46,7 @@ A streetside cabinet with books, accessible to anyone - [bookcases](https://mapcomplete.osm.be/bookcases) + - [personal](https://mapcomplete.osm.be/personal) [Go to the source code](../assets/layers/public_bookcase/public_bookcase.json) @@ -102,16 +102,6 @@ _This tagrendering has no question and is thus read-only_ -### minimap - - - -_This tagrendering has no question and is thus read-only_ - - - - - ### public_bookcase-name @@ -253,4 +243,4 @@ The question is **Is there a website with more information about this public boo This rendering asks information about the property [website](https://wiki.openstreetmap.org/wiki/Key:website) This is rendered with `More info on the website` -This document is autogenerated from assets/layers/public_bookcase/public_bookcase.json \ No newline at end of file +This document is autogenerated from [assets/layers/public_bookcase/public_bookcase.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/public_bookcase/public_bookcase.json) \ No newline at end of file diff --git a/Docs/Layers/raw_inspire_polygons.md b/Docs/Layers/raw_inspire_polygons.md index d4124edd23..c38230aa27 100644 --- a/Docs/Layers/raw_inspire_polygons.md +++ b/Docs/Layers/raw_inspire_polygons.md @@ -1,54 +1,39 @@ - - - raw_inspire_polygons +raw_inspire_polygons ====================== - - - - - - - ## Table of contents 1. [raw_inspire_polygons](#raw_inspire_polygons) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) - - - - - This layer cannot be toggled in the filter view. If you import this layer in your theme, override `title` to make this toggleable. - - Not visible in the layer selection by default. If you want to make this layer toggable, override `name` - - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - - This layer is loaded from an external source, namely `https://osm-uk-addresses.russss.dev/inspire/{z}/{x}/{y}.json` - - This layer will automatically load [address](./address.md) into the layout as it depends on it: A calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _has_address) - - This layer is needed as dependency for layer [to_import](#to_import) - +- This layer cannot be toggled in the filter view. If you import this layer in your theme, override `title` to make this + toggleable. +- Not visible in the layer selection by default. If you want to make this layer toggable, override `name` +- Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` +- This layer is loaded from an external source, namely `https://osm-uk-addresses.russss.dev/inspire/{z}/{x}/{y}.json` +- This layer will automatically load [address](./address.md) into the layout as it depends on it: A calculated tag + loads features from this layer (calculatedTag[0] which calculates the value for _has_address) +- This layer is needed as dependency for layer [to_import](#to_import) [Go to the source code](../assets/layers/raw_inspire_polygons/raw_inspire_polygons.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- inspireid~^..*$ - - - inspireid~^..*$ - - - - - Supported attributes +Supported attributes ---------------------- - + This document is autogenerated from assets/layers/raw_inspire_polygons/raw_inspire_polygons.json \ No newline at end of file diff --git a/Docs/Layers/service_ways.md b/Docs/Layers/service_ways.md index f05a2f385d..189b979416 100644 --- a/Docs/Layers/service_ways.md +++ b/Docs/Layers/service_ways.md @@ -1,6 +1,4 @@ - - - service_ways +service_ways ============== @@ -9,43 +7,33 @@ A seperate layer with service roads, as to remove them from the intersection testing - - - ## Table of contents 1. [service_ways](#service_ways) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) - - - - - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - +- Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` [Go to the source code](../assets/layers/service_ways/service_ways.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- highway + =service - - - highway=service - - - - - Supported attributes +Supported attributes ---------------------- - + This document is autogenerated from assets/layers/service_ways/service_ways.json \ No newline at end of file diff --git a/Docs/Layers/shadow.md b/Docs/Layers/shadow.md index 4ff88b4682..1cd41fafe1 100644 --- a/Docs/Layers/shadow.md +++ b/Docs/Layers/shadow.md @@ -1,52 +1,37 @@ - - - shadow +shadow ======== - - - - - - - ## Table of contents 1. [shadow](#shadow) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) - - - - - This layer cannot be toggled in the filter view. If you import this layer in your theme, override `title` to make this toggleable. - - Not visible in the layer selection by default. If you want to make this layer toggable, override `name` - - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - - This layer is loaded from an external source, namely `https://raw.githubusercontent.com/pietervdvn/MapComplete/master/assets/themes/speelplekken/shadow.geojson` - +- This layer cannot be toggled in the filter view. If you import this layer in your theme, override `title` to make this + toggleable. +- Not visible in the layer selection by default. If you want to make this layer toggable, override `name` +- Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` +- This layer is loaded from an external source, namely `https://raw.githubusercontent.com/pietervdvn/MapComplete/master/assets/themes/speelplekken/shadow.geojson` [Go to the source code](../assets/layers/shadow/shadow.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- shadow + =yes - - - shadow=yes - - - - - Supported attributes +Supported attributes ---------------------- - + This document is autogenerated from assets/layers/shadow/shadow.json \ No newline at end of file diff --git a/Docs/Layers/shops.md b/Docs/Layers/shops.md index d219205ba2..2dca5cf6f7 100644 --- a/Docs/Layers/shops.md +++ b/Docs/Layers/shops.md @@ -25,6 +25,7 @@ A shop + [shops-website](#shops-website) + [shops-email](#shops-email) + [shops-opening_hours](#shops-opening_hours) + + [payment-options](#payment-options) + [questions](#questions) + [reviews](#reviews) @@ -43,6 +44,7 @@ A shop + - [personal](https://mapcomplete.osm.be/personal) - [shops](https://mapcomplete.osm.be/shops) @@ -172,6 +174,22 @@ This is rendered with `{opening_hours_table(opening_hours)}` +### payment-options + + + +The question is **Which methods of payment are accepted here?** + + + + + + - **Cash is accepted here** corresponds with payment:cash=yesUnselecting this answer will add payment:cash=no + - **Payment cards are accepted here** corresponds with payment:cards=yesUnselecting this answer will add payment:cards=no + + + + ### questions @@ -190,4 +208,4 @@ _This tagrendering has no question and is thus read-only_ -This document is autogenerated from assets/layers/shops/shops.json \ No newline at end of file +This document is autogenerated from [assets/layers/shops/shops.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/shops/shops.json) \ No newline at end of file diff --git a/Docs/Layers/sidewalks.md b/Docs/Layers/sidewalks.md index 1b5690bd81..42a9de872c 100644 --- a/Docs/Layers/sidewalks.md +++ b/Docs/Layers/sidewalks.md @@ -1,6 +1,4 @@ - - - sidewalks +sidewalks =========== @@ -9,14 +7,12 @@ Layer showing sidewalks of highways - - - ## Table of contents 1. [sidewalks](#sidewalks) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [streetname](#streetname) + [left-sidewalk_minimap](#left-sidewalk_minimap) + [left-has_sidewalk](#left-has_sidewalk) @@ -27,150 +23,96 @@ Layer showing sidewalks of highways + [right-sidewalk_width](#right-sidewalk_width) + [questions](#questions) - - - - - - - [Go to the source code](../assets/layers/sidewalks/sidewalks.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- highway + =residential + |highway + =unclassified + |highway + =tertiary + |highway + =secondary - - - highway=residential|highway=unclassified|highway=tertiary|highway=secondary - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/sidewalk:left#values) [sidewalk:left](https://wiki.openstreetmap.org/wiki/Key:sidewalk:left) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:sidewalk:left%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:sidewalk:left%3Dno) -[](https://taginfo.openstreetmap.org/keys/sidewalk:left:width#values) [sidewalk:left:width](https://wiki.openstreetmap.org/wiki/Key:sidewalk:left:width) | [length](../SpecialInputElements.md#length) | +[](https://taginfo.openstreetmap.org/keys/sidewalk:left:width#values) [sidewalk:left:width](https://wiki.openstreetmap.org/wiki/Key:sidewalk:left:width) | [length](../SpecialInputElements.md#length) | [](https://taginfo.openstreetmap.org/keys/sidewalk:right#values) [sidewalk:right](https://wiki.openstreetmap.org/wiki/Key:sidewalk:right) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:sidewalk:right%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:sidewalk:right%3Dno) -[](https://taginfo.openstreetmap.org/keys/sidewalk:right:width#values) [sidewalk:right:width](https://wiki.openstreetmap.org/wiki/Key:sidewalk:right:width) | [length](../SpecialInputElements.md#length) | - - - - -### streetname - +[](https://taginfo.openstreetmap.org/keys/sidewalk:right:width#values) [sidewalk:right:width](https://wiki.openstreetmap.org/wiki/Key:sidewalk:right:width) | [length](../SpecialInputElements.md#length) | +### streetname _This tagrendering has no question and is thus read-only_ - - - - -### left-sidewalk_minimap - - +### left-sidewalk_minimap _This tagrendering has no question and is thus read-only_ - - - - -### left-has_sidewalk - - +### left-has_sidewalk The question is **Is there a sidewalk on this side of the road?** +- **Yes, there is a sidewalk on this side of the road** corresponds + with sidewalk:left + =yes +- **No, there is no seperated sidewalk to walk on** corresponds + with sidewalk:left + =no - - - - - **Yes, there is a sidewalk on this side of the road** corresponds with sidewalk:left=yes - - **No, there is no seperated sidewalk to walk on** corresponds with sidewalk:left=no - - - - -### left-sidewalk_width - - +### left-sidewalk_width The question is **What is the width of the sidewalk on this side of the road?** -This rendering asks information about the property [sidewalk:left:width](https://wiki.openstreetmap.org/wiki/Key:sidewalk:left:width) +This rendering asks information about the +property [sidewalk:left:width](https://wiki.openstreetmap.org/wiki/Key:sidewalk:left:width) This is rendered with `This sidewalk is {sidewalk:left:width}m wide` - - -### questions - - +### questions _This tagrendering has no question and is thus read-only_ - - - - -### right-sidewalk_minimap - - +### right-sidewalk_minimap _This tagrendering has no question and is thus read-only_ - - - - -### right-has_sidewalk - - +### right-has_sidewalk The question is **Is there a sidewalk on this side of the road?** +- **Yes, there is a sidewalk on this side of the road** corresponds + with sidewalk:right + =yes +- **No, there is no seperated sidewalk to walk on** corresponds + with sidewalk:right + =no - - - - - **Yes, there is a sidewalk on this side of the road** corresponds with sidewalk:right=yes - - **No, there is no seperated sidewalk to walk on** corresponds with sidewalk:right=no - - - - -### right-sidewalk_width - - +### right-sidewalk_width The question is **What is the width of the sidewalk on this side of the road?** -This rendering asks information about the property [sidewalk:right:width](https://wiki.openstreetmap.org/wiki/Key:sidewalk:right:width) +This rendering asks information about the +property [sidewalk:right:width](https://wiki.openstreetmap.org/wiki/Key:sidewalk:right:width) This is rendered with `This sidewalk is {sidewalk:right:width}m wide` - - -### questions - - +### questions _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/sidewalks/sidewalks.json \ No newline at end of file diff --git a/Docs/Layers/slow_roads.md b/Docs/Layers/slow_roads.md index 88948e17d1..4e9b636fb0 100644 --- a/Docs/Layers/slow_roads.md +++ b/Docs/Layers/slow_roads.md @@ -134,4 +134,4 @@ The question is **Is deze weg 's nachts verlicht?** - **Niet verlicht** corresponds with lit=no -This document is autogenerated from assets/layers/slow_roads/slow_roads.json \ No newline at end of file +This document is autogenerated from [assets/layers/slow_roads/slow_roads.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/slow_roads/slow_roads.json) \ No newline at end of file diff --git a/Docs/Layers/split_point.md b/Docs/Layers/split_point.md index e586d794ee..8164c272d8 100644 --- a/Docs/Layers/split_point.md +++ b/Docs/Layers/split_point.md @@ -1,6 +1,4 @@ - - - split_point +split_point ============= @@ -9,43 +7,30 @@ Layer rendering the little scissors for the minimap in the 'splitRoadWizard' - - - ## Table of contents 1. [split_point](#split_point) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) - - - - - - +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) [Go to the source code](../assets/layers/split_point/split_point.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- _split_point + =yes - - - _split_point=yes - - - - - Supported attributes +Supported attributes ---------------------- - + This document is autogenerated from assets/layers/split_point/split_point.json \ No newline at end of file diff --git a/Docs/Layers/sport_pitch.md b/Docs/Layers/sport_pitch.md index 24d94802e6..1d0cf8ce61 100644 --- a/Docs/Layers/sport_pitch.md +++ b/Docs/Layers/sport_pitch.md @@ -5,7 +5,7 @@ - + A sport pitch @@ -44,6 +44,7 @@ A sport pitch + - [personal](https://mapcomplete.osm.be/personal) - [sport_pitches](https://mapcomplete.osm.be/sport_pitches) @@ -231,4 +232,4 @@ _This tagrendering has no question and is thus read-only_ -This document is autogenerated from assets/layers/sport_pitch/sport_pitch.json \ No newline at end of file +This document is autogenerated from [assets/layers/sport_pitch/sport_pitch.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/sport_pitch/sport_pitch.json) \ No newline at end of file diff --git a/Docs/Layers/street_lamps.md b/Docs/Layers/street_lamps.md index 18e4426318..f7fde14bab 100644 --- a/Docs/Layers/street_lamps.md +++ b/Docs/Layers/street_lamps.md @@ -42,6 +42,7 @@ A layer showing street lights + - [personal](https://mapcomplete.osm.be/personal) - [street_lighting](https://mapcomplete.osm.be/street_lighting) @@ -222,4 +223,4 @@ The question is **Where does this lamp point to?** This rendering asks information about the property [light:direction](https://wiki.openstreetmap.org/wiki/Key:light:direction) This is rendered with `This lamp points towards {light:direction}` -This document is autogenerated from assets/layers/street_lamps/street_lamps.json \ No newline at end of file +This document is autogenerated from [assets/layers/street_lamps/street_lamps.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/street_lamps/street_lamps.json) \ No newline at end of file diff --git a/Docs/Layers/surveillance_camera.md b/Docs/Layers/surveillance_camera.md index 5067b7c944..f65048715f 100644 --- a/Docs/Layers/surveillance_camera.md +++ b/Docs/Layers/surveillance_camera.md @@ -43,6 +43,7 @@ This layer shows surveillance cameras and allows a contributor to update informa + - [personal](https://mapcomplete.osm.be/personal) - [surveillance](https://mapcomplete.osm.be/surveillance) @@ -224,4 +225,4 @@ This is rendered with `Mounting method: {camera:mount}` - **This camera is placed on the ceiling** corresponds with camera:mount=ceiling -This document is autogenerated from assets/layers/surveillance_camera/surveillance_camera.json \ No newline at end of file +This document is autogenerated from [assets/layers/surveillance_camera/surveillance_camera.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/surveillance_camera/surveillance_camera.json) \ No newline at end of file diff --git a/Docs/Layers/to_import.md b/Docs/Layers/to_import.md index e138d0c0d2..ca546e45ff 100644 --- a/Docs/Layers/to_import.md +++ b/Docs/Layers/to_import.md @@ -1,6 +1,4 @@ - - - to_import +to_import =========== @@ -9,94 +7,67 @@ Alamat - - - ## Table of contents 1. [to_import](#to_import) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [uk_addresses_explanation](#uk_addresses_explanation) + [uk_addresses_embedding_outline](#uk_addresses_embedding_outline) + [uk_addresses_import_button](#uk_addresses_import_button) - - - - - This layer is loaded from an external source, namely `https://osm-uk-addresses.russss.dev/addresses/{z}/{x}/{y}.json` - - This layer will automatically load [address](./address.md) into the layout as it depends on it: a tagrendering needs this layer (uk_addresses_import_button) - - This layer will automatically load [address](./address.md) into the layout as it depends on it: A calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _embedding_object) - - This layer will automatically load [raw_inspire_polygons](./raw_inspire_polygons.md) into the layout as it depends on it: A calculated tag loads features from this layer (calculatedTag[3] which calculates the value for _embedding_inspire_polygon_has_address) - +- This layer is loaded from an external source, namely `https://osm-uk-addresses.russss.dev/addresses/{z}/{x}/{y}.json` +- This layer will automatically load [address](./address.md) into the layout as it depends on it: a tagrendering + needs this layer (uk_addresses_import_button) +- This layer will automatically load [address](./address.md) into the layout as it depends on it: A calculated tag + loads features from this layer (calculatedTag[0] which calculates the value for _embedding_object) +- This layer will automatically load [raw_inspire_polygons](./raw_inspire_polygons.md) into the layout as it depends + on it: A calculated tag loads features from this layer (calculatedTag[3] which calculates the value for _ + embedding_inspire_polygon_has_address) [Go to the source code](../assets/layers/to_import/to_import.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- inspireid~^..*$ - - - inspireid~^..*$ - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/_embedding_object:id#values) [_embedding_object:id](https://wiki.openstreetmap.org/wiki/Key:_embedding_object:id) | Multiple choice | [true](https://wiki.openstreetmap.org/wiki/Tag:_embedding_object:id%3Dtrue) [false](https://wiki.openstreetmap.org/wiki/Tag:_embedding_object:id%3Dfalse) - - - -### uk_addresses_explanation - - +### uk_addresses_explanation _This tagrendering has no question and is thus read-only_ - - - - -### uk_addresses_embedding_outline - - +### uk_addresses_embedding_outline _This tagrendering has no question and is thus read-only_ +- **The INSPIRE-polygon containing this point has at least one address contained** corresponds + with _embedding_object:id + =true +- **The INSPIRE-polygon containing this point has no addresses contained** corresponds + with _embedding_object:id + =false - - - - - **The INSPIRE-polygon containing this point has at least one address contained** corresponds with _embedding_object:id=true - - **The INSPIRE-polygon containing this point has no addresses contained** corresponds with _embedding_object:id=false - - - - -### uk_addresses_import_button - - +### uk_addresses_import_button _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/to_import/to_import.json \ No newline at end of file diff --git a/Docs/Layers/toekomstige_fietsstraat.md b/Docs/Layers/toekomstige_fietsstraat.md index 5fd14bafb5..d411f8e986 100644 --- a/Docs/Layers/toekomstige_fietsstraat.md +++ b/Docs/Layers/toekomstige_fietsstraat.md @@ -1,6 +1,4 @@ - - - toekomstige_fietsstraat +toekomstige_fietsstraat ========================= @@ -9,66 +7,38 @@ This street will become a cyclestreet soon - - - ## Table of contents 1. [toekomstige_fietsstraat](#toekomstige_fietsstraat) - * [Themes using this layer](#themes-using-this-layer) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + * [Themes using this layer](#themes-using-this-layer) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [images](#images) +#### Themes using this layer - - - - - - - - -#### Themes using this layer - - - - - - - [cyclestreets](https://mapcomplete.osm.be/cyclestreets) - +- [cyclestreets](https://mapcomplete.osm.be/cyclestreets) [Go to the source code](../assets/layers/toekomstige_fietsstraat/toekomstige_fietsstraat.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- proposed:cyclestreet + =yes - - - proposed:cyclestreet=yes - - - - - Supported attributes +Supported attributes ---------------------- - - - - -### images - - +### images _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/toekomstige_fietsstraat/toekomstige_fietsstraat.json \ No newline at end of file diff --git a/Docs/Layers/toilet.md b/Docs/Layers/toilet.md index d8dc96068d..baa58efefd 100644 --- a/Docs/Layers/toilet.md +++ b/Docs/Layers/toilet.md @@ -48,6 +48,8 @@ A layer showing (public) toilets + - [nature](https://mapcomplete.osm.be/nature) + - [personal](https://mapcomplete.osm.be/personal) - [toilets](https://mapcomplete.osm.be/toilets) @@ -90,7 +92,7 @@ attribute | type | values which are supported by this layer [](https://taginfo.openstreetmap.org/keys/changing_table:location#values) [changing_table:location](https://wiki.openstreetmap.org/wiki/Key:changing_table:location) | [string](../SpecialInputElements.md#string) | [female_toilet](https://wiki.openstreetmap.org/wiki/Tag:changing_table:location%3Dfemale_toilet) [male_toilet](https://wiki.openstreetmap.org/wiki/Tag:changing_table:location%3Dmale_toilet) [wheelchair_toilet](https://wiki.openstreetmap.org/wiki/Tag:changing_table:location%3Dwheelchair_toilet) [dedicated_room](https://wiki.openstreetmap.org/wiki/Tag:changing_table:location%3Ddedicated_room) [](https://taginfo.openstreetmap.org/keys/toilets:handwashing#values) [toilets:handwashing](https://wiki.openstreetmap.org/wiki/Key:toilets:handwashing) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:handwashing%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:handwashing%3Dno) [](https://taginfo.openstreetmap.org/keys/toilets:paper_supplied#values) [toilets:paper_supplied](https://wiki.openstreetmap.org/wiki/Key:toilets:paper_supplied) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:toilets:paper_supplied%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:toilets:paper_supplied%3Dno) -[](https://taginfo.openstreetmap.org/keys/level#values) [level](https://wiki.openstreetmap.org/wiki/Key:level) | [float](../SpecialInputElements.md#float) | [0](https://wiki.openstreetmap.org/wiki/Tag:level%3D0) [1](https://wiki.openstreetmap.org/wiki/Tag:level%3D1) +[](https://taginfo.openstreetmap.org/keys/level#values) [level](https://wiki.openstreetmap.org/wiki/Key:level) | [float](../SpecialInputElements.md#float) | [0](https://wiki.openstreetmap.org/wiki/Tag:level%3D0) [1](https://wiki.openstreetmap.org/wiki/Tag:level%3D1) [-1](https://wiki.openstreetmap.org/wiki/Tag:level%3D-1) [](https://taginfo.openstreetmap.org/keys/description#values) [description](https://wiki.openstreetmap.org/wiki/Key:description) | [string](../SpecialInputElements.md#string) | @@ -301,6 +303,7 @@ This is rendered with `Located on the {level}th floor` - **Located on the ground floor** corresponds with level=0 - **Located on the ground floor** corresponds with _This option cannot be chosen as answer_ - **Located on the first floor** corresponds with level=1 + - **Located on the first basement level** corresponds with level=-1 @@ -314,4 +317,4 @@ The question is **Is there still something relevant you couldn't give in the pre This rendering asks information about the property [description](https://wiki.openstreetmap.org/wiki/Key:description) This is rendered with `{description}` -This document is autogenerated from assets/layers/toilet/toilet.json \ No newline at end of file +This document is autogenerated from [assets/layers/toilet/toilet.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/toilet/toilet.json) \ No newline at end of file diff --git a/Docs/Layers/town_hall.md b/Docs/Layers/town_hall.md index ca36b4926e..54230f32a6 100644 --- a/Docs/Layers/town_hall.md +++ b/Docs/Layers/town_hall.md @@ -1,49 +1,41 @@ - - - town_hall +town_hall =========== - - - ## Table of contents 1. [town_hall](#town_hall) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) - - - - - This layer will automatically load [postal_code_boundary](./postal_code_boundary.md) into the layout as it depends on it: A calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _postal_code_properties) - +- This layer will automatically load [postal_code_boundary](./postal_code_boundary.md) into the layout as it depends + on it: A calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _ + postal_code_properties) [Go to the source code](../assets/layers/town_hall/town_hall.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- amenity + =townhall + |building + =church - - - amenity=townhall|building=church - - - - - Supported attributes +Supported attributes ---------------------- - + This document is autogenerated from assets/layers/town_hall/town_hall.json \ No newline at end of file diff --git a/Docs/Layers/trail.md b/Docs/Layers/trail.md index a594dcbc7a..6cceb7ce4a 100644 --- a/Docs/Layers/trail.md +++ b/Docs/Layers/trail.md @@ -45,7 +45,7 @@ Elements must have the all of following tags to be shown on this layer: - - route=hiking|route=bycicle|route=horse + - route~^.*foot.*$|route~^.*hiking.*$|route~^.*bycicle.*$|route~^.*horse.*$ @@ -167,4 +167,4 @@ The question is **Is deze wandeltocht toegankelijk met de buggy?** - **deze wandeltocht is niet toegankelijk met de buggy** corresponds with pushchair=no -This document is autogenerated from assets/layers/trail/trail.json \ No newline at end of file +This document is autogenerated from [assets/layers/trail/trail.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/trail/trail.json) \ No newline at end of file diff --git a/Docs/Layers/tree_node.md b/Docs/Layers/tree_node.md index 3b9c2edf82..8f52172bd6 100644 --- a/Docs/Layers/tree_node.md +++ b/Docs/Layers/tree_node.md @@ -5,7 +5,7 @@ - + A layer showing trees @@ -43,6 +43,7 @@ A layer showing trees + - [personal](https://mapcomplete.osm.be/personal) - [trees](https://mapcomplete.osm.be/trees) @@ -107,7 +108,7 @@ _This tagrendering has no question and is thus read-only_ - - **Height: {height} m** corresponds with height~^^[0-9.]+$$ + - **Height: {height} m** corresponds with height~^[0-9.]+$ @@ -222,4 +223,4 @@ The question is **What is the Wikidata ID for this tree?** This rendering asks information about the property [wikidata](https://wiki.openstreetmap.org/wiki/Key:wikidata) This is rendered with ` Wikidata: {wikidata}` -This document is autogenerated from assets/layers/tree_node/tree_node.json \ No newline at end of file +This document is autogenerated from [assets/layers/tree_node/tree_node.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/tree_node/tree_node.json) \ No newline at end of file diff --git a/Docs/Layers/type_node.md b/Docs/Layers/type_node.md index 46d4029928..d584c121f5 100644 --- a/Docs/Layers/type_node.md +++ b/Docs/Layers/type_node.md @@ -1,52 +1,42 @@ - - - type_node +type_node =========== -This is a priviliged meta_layer which exports _every_ point in OSM. This only works if zoomed below the point that the full tile is loaded (and not loaded via Overpass). Note that this point will also contain a property `parent_ways` which contains all the ways this node is part of as a list. This is mainly used for extremely specialized themes, which do advanced conflations. Expert use only. - - - +This is a priviliged meta_layer which exports _every_ point in OSM. This only works if zoomed below the point that the +full tile is loaded (and not loaded via Overpass). Note that this point will also contain a property `parent_ways` which +contains all the ways this node is part of as a list. This is mainly used for extremely specialized themes, which do +advanced conflations. Expert use only. ## Table of contents 1. [type_node](#type_node) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) - - - - - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - - This layer is needed as dependency for layer [grb](#grb) - +- Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` +- This layer is needed as dependency for layer [grb](#grb) [Go to the source code](../assets/layers/type_node/type_node.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- id~^node\/.*$ - - - id~^node\/.*$ - - - - - Supported attributes +Supported attributes ---------------------- - + This document is autogenerated from assets/layers/type_node/type_node.json \ No newline at end of file diff --git a/Docs/Layers/viewpoint.md b/Docs/Layers/viewpoint.md index 8b2bcac359..95d3592b22 100644 --- a/Docs/Layers/viewpoint.md +++ b/Docs/Layers/viewpoint.md @@ -80,4 +80,4 @@ The question is **Do you want to add a description?** This rendering asks information about the property [description](https://wiki.openstreetmap.org/wiki/Key:description) This is rendered with `{description}` -This document is autogenerated from assets/layers/viewpoint/viewpoint.json \ No newline at end of file +This document is autogenerated from [assets/layers/viewpoint/viewpoint.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/viewpoint/viewpoint.json) \ No newline at end of file diff --git a/Docs/Layers/village_green.md b/Docs/Layers/village_green.md index fbc8ce8eee..2ac2c08c80 100644 --- a/Docs/Layers/village_green.md +++ b/Docs/Layers/village_green.md @@ -81,4 +81,4 @@ _This tagrendering has no question and is thus read-only_ -This document is autogenerated from assets/layers/village_green/village_green.json \ No newline at end of file +This document is autogenerated from [assets/layers/village_green/village_green.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/village_green/village_green.json) \ No newline at end of file diff --git a/Docs/Layers/visitor_information_centre.md b/Docs/Layers/visitor_information_centre.md index 06f61cf60a..c9235573ce 100644 --- a/Docs/Layers/visitor_information_centre.md +++ b/Docs/Layers/visitor_information_centre.md @@ -48,4 +48,4 @@ Elements must have the all of following tags to be shown on this layer: -This document is autogenerated from assets/layers/visitor_information_centre/visitor_information_centre.json \ No newline at end of file +This document is autogenerated from [assets/layers/visitor_information_centre/visitor_information_centre.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/visitor_information_centre/visitor_information_centre.json) \ No newline at end of file diff --git a/Docs/Layers/walking_routes.md b/Docs/Layers/walking_routes.md index 910fb7a8ae..81cf103077 100644 --- a/Docs/Layers/walking_routes.md +++ b/Docs/Layers/walking_routes.md @@ -1,6 +1,4 @@ - - - walking_routes +walking_routes ================ @@ -9,14 +7,12 @@ Walking routes by 'provincie Antwerpen' - - - ## Table of contents 1. [walking_routes](#walking_routes) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [walk-length](#walk-length) + [walk-type](#walk-type) + [walk-description](#walk-description) @@ -26,129 +22,90 @@ Walking routes by 'provincie Antwerpen' + [reviews](#reviews) - - - - - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - - This layer is loaded from an external source, namely `https://raw.githubusercontent.com/pietervdvn/MapComplete-data/main/speelplekken_cache/speelplekken_{layer}_{z}_{x}_{y}.geojson` - +- Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` +- This layer is loaded from an external source, namely `https://raw.githubusercontent.com/pietervdvn/MapComplete-data/main/speelplekken_cache/speelplekken_{layer}_{z}_{x}_{y}.geojson` [Go to the source code](../assets/layers/walking_routes/walking_routes.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- type + =route +- route + =foot +- operator~^[pP]rovincie Antwerpen$ - - - type=route - - route=foot - - operator~^[pP]rovincie Antwerpen$ - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/route#values) [route](https://wiki.openstreetmap.org/wiki/Key:route) | Multiple choice | [iwn](https://wiki.openstreetmap.org/wiki/Tag:route%3Diwn) [nwn](https://wiki.openstreetmap.org/wiki/Tag:route%3Dnwn) [rwn](https://wiki.openstreetmap.org/wiki/Tag:route%3Drwn) [lwn](https://wiki.openstreetmap.org/wiki/Tag:route%3Dlwn) -[](https://taginfo.openstreetmap.org/keys/description#values) [description](https://wiki.openstreetmap.org/wiki/Key:description) | [text](../SpecialInputElements.md#text) | -[](https://taginfo.openstreetmap.org/keys/operator#values) [operator](https://wiki.openstreetmap.org/wiki/Key:operator) | [string](../SpecialInputElements.md#string) | -[](https://taginfo.openstreetmap.org/keys/operator:email#values) [operator:email](https://wiki.openstreetmap.org/wiki/Key:operator:email) | [email](../SpecialInputElements.md#email) | - - - - -### walk-length - +[](https://taginfo.openstreetmap.org/keys/description#values) [description](https://wiki.openstreetmap.org/wiki/Key:description) | [text](../SpecialInputElements.md#text) | +[](https://taginfo.openstreetmap.org/keys/operator#values) [operator](https://wiki.openstreetmap.org/wiki/Key:operator) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/operator:email#values) [operator:email](https://wiki.openstreetmap.org/wiki/Key:operator:email) | [email](../SpecialInputElements.md#email) | +### walk-length _This tagrendering has no question and is thus read-only_ - - - - -### walk-type - - +### walk-type _This tagrendering has no question and is thus read-only_ +- **Dit is een internationale wandelroute** corresponds + with route + =iwn +- **Dit is een nationale wandelroute** corresponds + with route + =nwn +- **Dit is een regionale wandelroute** corresponds + with route + =rwn +- **Dit is een lokale wandelroute** corresponds + with route + =lwn - - - - - **Dit is een internationale wandelroute** corresponds with route=iwn - - **Dit is een nationale wandelroute** corresponds with route=nwn - - **Dit is een regionale wandelroute** corresponds with route=rwn - - **Dit is een lokale wandelroute** corresponds with route=lwn - - - - -### walk-description - - +### walk-description The question is **Geef een korte beschrijving van de wandeling (max 255 tekens)** -This rendering asks information about the property [description](https://wiki.openstreetmap.org/wiki/Key:description) +This rendering asks information about the property [description](https://wiki.openstreetmap.org/wiki/Key:description) This is rendered with `

Korte beschrijving:

{description}` - - -### walk-operator - - +### walk-operator The question is **Wie beheert deze wandeling en plaatst dus de signalisatiebordjes?** -This rendering asks information about the property [operator](https://wiki.openstreetmap.org/wiki/Key:operator) +This rendering asks information about the property [operator](https://wiki.openstreetmap.org/wiki/Key:operator) This is rendered with `Signalisatie geplaatst door {operator}` - - -### walk-operator-email - - +### walk-operator-email The question is **Naar wie kan men emailen bij problemen rond signalisatie?** -This rendering asks information about the property [operator:email](https://wiki.openstreetmap.org/wiki/Key:operator:email) -This is rendered with `Bij problemen met signalisatie kan men emailen naar {operator:email}` - - - -### questions - +This rendering asks information about the +property [operator:email](https://wiki.openstreetmap.org/wiki/Key:operator:email) +This is rendered +with `Bij problemen met signalisatie kan men emailen naar {operator:email}` +### questions _This tagrendering has no question and is thus read-only_ - - - - -### reviews - - +### reviews _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/walking_routes/walking_routes.json \ No newline at end of file diff --git a/Docs/Layers/walls_and_buildings.md b/Docs/Layers/walls_and_buildings.md index 8b9f9ec476..e2fd55c73f 100644 --- a/Docs/Layers/walls_and_buildings.md +++ b/Docs/Layers/walls_and_buildings.md @@ -41,6 +41,7 @@ Special builtin layer providing all walls and buildings. This layer is useful in - [aed](https://mapcomplete.osm.be/aed) - [entrances](https://mapcomplete.osm.be/entrances) + - [personal](https://mapcomplete.osm.be/personal) - [surveillance](https://mapcomplete.osm.be/surveillance) @@ -67,4 +68,4 @@ Elements must have the all of following tags to be shown on this layer: -This document is autogenerated from assets/layers/walls_and_buildings/walls_and_buildings.json \ No newline at end of file +This document is autogenerated from [assets/layers/walls_and_buildings/walls_and_buildings.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/walls_and_buildings/walls_and_buildings.json) \ No newline at end of file diff --git a/Docs/Layers/waste_basket.md b/Docs/Layers/waste_basket.md index efcb5e86fc..89cfb33c03 100644 --- a/Docs/Layers/waste_basket.md +++ b/Docs/Layers/waste_basket.md @@ -36,6 +36,7 @@ This is a public waste basket, thrash can, where you can throw away your thrash. + - [personal](https://mapcomplete.osm.be/personal) - [waste_basket](https://mapcomplete.osm.be/waste_basket) @@ -109,4 +110,4 @@ The question is **Does this waste basket have a dispenser for dog excrement bags - **This waste basket does not have a dispenser for (dog) excrement bags** corresponds with -This document is autogenerated from assets/layers/waste_basket/waste_basket.json \ No newline at end of file +This document is autogenerated from [assets/layers/waste_basket/waste_basket.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/waste_basket/waste_basket.json) \ No newline at end of file diff --git a/Docs/Layers/watermill.md b/Docs/Layers/watermill.md index a69c90700e..f857b212a9 100644 --- a/Docs/Layers/watermill.md +++ b/Docs/Layers/watermill.md @@ -109,4 +109,4 @@ This is rendered with `Beheer door {operator}` - **Dit gebied wordt beheerd door {operator}** corresponds with operator~^(n|N)atuurpunt.*$_This option cannot be chosen as answer_ -This document is autogenerated from assets/layers/watermill/watermill.json \ No newline at end of file +This document is autogenerated from [assets/layers/watermill/watermill.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/watermill/watermill.json) \ No newline at end of file diff --git a/Docs/Layers/windturbine.md b/Docs/Layers/windturbine.md index 4a9af8b3e4..f8873bf9ef 100644 --- a/Docs/Layers/windturbine.md +++ b/Docs/Layers/windturbine.md @@ -1,21 +1,17 @@ - - - windturbine +windturbine ============= - - - ## Table of contents 1. [windturbine](#windturbine) - * [Themes using this layer](#themes-using-this-layer) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + * [Themes using this layer](#themes-using-this-layer) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) + [turbine-output](#turbine-output) + [turbine-operator](#turbine-operator) + [turbine-height](#turbine-height) @@ -23,123 +19,78 @@ + [turbine-start-date](#turbine-start-date) + [images](#images) +#### Themes using this layer - - - - - - - - -#### Themes using this layer - - - - - - - [openwindpowermap](https://mapcomplete.osm.be/openwindpowermap) - +- [openwindpowermap](https://mapcomplete.osm.be/openwindpowermap) [Go to the source code](../assets/layers/windturbine/windturbine.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- generator:source + =wind - - - generator:source=wind - - - - - Supported attributes +Supported attributes ---------------------- **Warning** This quick overview is incomplete - - attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ -[](https://taginfo.openstreetmap.org/keys/generator:output:electricity#values) [generator:output:electricity](https://wiki.openstreetmap.org/wiki/Key:generator:output:electricity) | [pfloat](../SpecialInputElements.md#pfloat) | -[](https://taginfo.openstreetmap.org/keys/operator#values) [operator](https://wiki.openstreetmap.org/wiki/Key:operator) | [string](../SpecialInputElements.md#string) | -[](https://taginfo.openstreetmap.org/keys/height#values) [height](https://wiki.openstreetmap.org/wiki/Key:height) | [pfloat](../SpecialInputElements.md#pfloat) | -[](https://taginfo.openstreetmap.org/keys/rotor:diameter#values) [rotor:diameter](https://wiki.openstreetmap.org/wiki/Key:rotor:diameter) | [float](../SpecialInputElements.md#float) | -[](https://taginfo.openstreetmap.org/keys/start_date#values) [start_date](https://wiki.openstreetmap.org/wiki/Key:start_date) | [date](../SpecialInputElements.md#date) | - - - - -### turbine-output - +[](https://taginfo.openstreetmap.org/keys/generator:output:electricity#values) [generator:output:electricity](https://wiki.openstreetmap.org/wiki/Key:generator:output:electricity) | [pfloat](../SpecialInputElements.md#pfloat) | +[](https://taginfo.openstreetmap.org/keys/operator#values) [operator](https://wiki.openstreetmap.org/wiki/Key:operator) | [string](../SpecialInputElements.md#string) | +[](https://taginfo.openstreetmap.org/keys/height#values) [height](https://wiki.openstreetmap.org/wiki/Key:height) | [pfloat](../SpecialInputElements.md#pfloat) | +[](https://taginfo.openstreetmap.org/keys/rotor:diameter#values) [rotor:diameter](https://wiki.openstreetmap.org/wiki/Key:rotor:diameter) | [float](../SpecialInputElements.md#float) | +[](https://taginfo.openstreetmap.org/keys/start_date#values) [start_date](https://wiki.openstreetmap.org/wiki/Key:start_date) | [date](../SpecialInputElements.md#date) | +### turbine-output The question is **What is the power output of this wind turbine? (e.g. 2.3 MW)** -This rendering asks information about the property [generator:output:electricity](https://wiki.openstreetmap.org/wiki/Key:generator:output:electricity) +This rendering asks information about the +property [generator:output:electricity](https://wiki.openstreetmap.org/wiki/Key:generator:output:electricity) This is rendered with `The power output of this wind turbine is {generator:output:electricity}.` - - -### turbine-operator - - +### turbine-operator The question is **Who operates this wind turbine?** -This rendering asks information about the property [operator](https://wiki.openstreetmap.org/wiki/Key:operator) +This rendering asks information about the property [operator](https://wiki.openstreetmap.org/wiki/Key:operator) This is rendered with `This wind turbine is operated by {operator}.` - - -### turbine-height - - +### turbine-height The question is **What is the total height of this wind turbine (including rotor radius), in metres?** -This rendering asks information about the property [height](https://wiki.openstreetmap.org/wiki/Key:height) +This rendering asks information about the property [height](https://wiki.openstreetmap.org/wiki/Key:height) This is rendered with `The total height (including rotor radius) of this wind turbine is {height} metres.` - - -### turbine-diameter - - +### turbine-diameter The question is **What is the rotor diameter of this wind turbine, in metres?** -This rendering asks information about the property [rotor:diameter](https://wiki.openstreetmap.org/wiki/Key:rotor:diameter) +This rendering asks information about the +property [rotor:diameter](https://wiki.openstreetmap.org/wiki/Key:rotor:diameter) This is rendered with `The rotor diameter of this wind turbine is {rotor:diameter} metres.` - - -### turbine-start-date - - +### turbine-start-date The question is **When did this wind turbine go into operation?** -This rendering asks information about the property [start_date](https://wiki.openstreetmap.org/wiki/Key:start_date) +This rendering asks information about the property [start_date](https://wiki.openstreetmap.org/wiki/Key:start_date) This is rendered with `This wind turbine went into operation on/in {start_date}.` - - -### images - - +### images _This tagrendering has no question and is thus read-only_ - - This document is autogenerated from assets/layers/windturbine/windturbine.json \ No newline at end of file diff --git a/Docs/Layers/wrong_postal_code.md b/Docs/Layers/wrong_postal_code.md index a3d603d367..572aaedfb8 100644 --- a/Docs/Layers/wrong_postal_code.md +++ b/Docs/Layers/wrong_postal_code.md @@ -1,51 +1,34 @@ - - - wrong_postal_code +wrong_postal_code =================== - - - - - - - ## Table of contents 1. [wrong_postal_code](#wrong_postal_code) - - [Basic tags for this layer](#basic-tags-for-this-layer) - - [Supported attributes](#supported-attributes) + +- [Basic tags for this layer](#basic-tags-for-this-layer) +- [Supported attributes](#supported-attributes) - - - - - Not visible in the layer selection by default. If you want to make this layer toggable, override `name` - - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` - +- Not visible in the layer selection by default. If you want to make this layer toggable, override `name` +- Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` [Go to the source code](../assets/layers/wrong_postal_code/wrong_postal_code.json) - Basic tags for this layer +Basic tags for this layer --------------------------- Elements must have the all of following tags to be shown on this layer: +- boundary~^..*$ +- addr:postcode~^..*$ - - - boundary~^..*$ - - addr:postcode~^..*$ - - - - - Supported attributes +Supported attributes ---------------------- - + This document is autogenerated from assets/layers/wrong_postal_code/wrong_postal_code.json \ No newline at end of file diff --git a/Docs/Making_Your_Own_Theme.md b/Docs/Making_Your_Own_Theme.md index 37a81548b2..4baa5ff22e 100644 --- a/Docs/Making_Your_Own_Theme.md +++ b/Docs/Making_Your_Own_Theme.md @@ -112,16 +112,17 @@ A JSON-schema file is available in Docs/Schemas - use LayoutConfig.schema.json t 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](CalculatedTags.md) - ### TagRendering groups -A tagRendering can have a `group`-attribute, which acts as a tag. -All tagRenderings with the same group name will be rendered together, in the same order as they were defined. +A tagRendering can have a `group`-attribute, which acts as a tag. All tagRenderings with the same group name will be +rendered together, in the same order as they were defined. -For example, if the defined tagrenderings have groups `A A B A A B B B`, the group order is `A B` and first all tagrenderings from group A will be rendered (thus numbers 0, 1, 3 and 4) followed by the question box for this group. +For example, if the defined tagrenderings have groups `A A B A A B B B`, the group order is `A B` and first all +tagrenderings from group A will be rendered (thus numbers 0, 1, 3 and 4) followed by the question box for this group. Then, all the tagRenderings for group B will be shown, thus number 2, 5, 6 and 7, again followed by their questionbox. -Additionally, every tagrendering will receive a the groupname as class in the HTML, which can be used to hook up custom CSS. +Additionally, every tagrendering will receive a the groupname as class in the HTML, which can be used to hook up custom +CSS. If no group tag is given, the group is `` (empty string) @@ -133,7 +134,8 @@ To override this behaviour, one can add a tagrendering with id `questions` to mo To add a title to the questions, one can add a `render` and a condition. -To change the behaviour of the questionbox to show _all_ questions at once, one can use a helperArgs in the freeform field with option `showAllQuestions`. +To change the behaviour of the questionbox to show _all_ questions at once, one can use a helperArgs in the freeform +field with option `showAllQuestions`. For example, to show the questions on top, use: diff --git a/Docs/Misc/geolocation_button.gv.svg b/Docs/Misc/geolocation_button.gv.svg index 52384ae204..c7fa3ec857 100644 --- a/Docs/Misc/geolocation_button.gv.svg +++ b/Docs/Misc/geolocation_button.gv.svg @@ -1,330 +1,687 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Docs/Schemas/ExtraLinkConfigJson.schema.json b/Docs/Schemas/ExtraLinkConfigJson.schema.json new file mode 100644 index 0000000000..9d232d1f21 --- /dev/null +++ b/Docs/Schemas/ExtraLinkConfigJson.schema.json @@ -0,0 +1,66 @@ +{ + "type": "object", + "properties": { + "icon": { + "type": "string" + }, + "text": {}, + "href": { + "type": "string" + }, + "newTab": { + "type": "boolean" + }, + "requirements": { + "type": "array", + "items": { + "enum": [ + "iframe", + "no-iframe", + "no-welcome-message", + "welcome-message" + ], + "type": "string" + } + } + }, + "required": [ + "href" + ], + "definitions": { + "AndOrTagConfigJson": { + "type": "object", + "properties": { + "and": { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + } + }, + "or": { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + } + } + }, + "additionalProperties": false + } + }, + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false +} \ No newline at end of file diff --git a/Docs/Schemas/ExtraLinkConfigJsonJSC.ts b/Docs/Schemas/ExtraLinkConfigJsonJSC.ts new file mode 100644 index 0000000000..b3175e1c4a --- /dev/null +++ b/Docs/Schemas/ExtraLinkConfigJsonJSC.ts @@ -0,0 +1,64 @@ +export default { + "type": "object", + "properties": { + "icon": { + "type": "string" + }, + "text": {}, + "href": { + "type": "string" + }, + "newTab": { + "type": "boolean" + }, + "requirements": { + "type": "array", + "items": { + "enum": [ + "iframe", + "no-iframe", + "no-welcome-message", + "welcome-message" + ], + "type": "string" + } + } + }, + "required": [ + "href" + ], + "definitions": { + "AndOrTagConfigJson": { + "type": "object", + "properties": { + "and": { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + } + }, + "or": { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + } + } + } + } + }, + "$schema": "http://json-schema.org/draft-07/schema#" +} \ No newline at end of file diff --git a/Docs/Schemas/FilterConfigJson.schema.json b/Docs/Schemas/FilterConfigJson.schema.json index da7c9c8f06..ad6acfd29b 100644 --- a/Docs/Schemas/FilterConfigJson.schema.json +++ b/Docs/Schemas/FilterConfigJson.schema.json @@ -21,6 +21,26 @@ "type": "string" } ] + }, + "default": { + "type": "boolean" + }, + "fields": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name" + ] + } } }, "required": [ diff --git a/Docs/Schemas/FilterConfigJsonJSC.ts b/Docs/Schemas/FilterConfigJsonJSC.ts index b2f245b1b5..fc54409ec8 100644 --- a/Docs/Schemas/FilterConfigJsonJSC.ts +++ b/Docs/Schemas/FilterConfigJsonJSC.ts @@ -21,6 +21,26 @@ export default { "type": "string" } ] + }, + "default": { + "type": "boolean" + }, + "fields": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name" + ] + } } }, "required": [ diff --git a/Docs/Schemas/LayerConfigJson.schema.json b/Docs/Schemas/LayerConfigJson.schema.json index 4cff6d134a..52f9f1e695 100644 --- a/Docs/Schemas/LayerConfigJson.schema.json +++ b/Docs/Schemas/LayerConfigJson.schema.json @@ -13,7 +13,7 @@ "description": "A description for this layer.\nShown in the layer selections and in the personel theme" }, "source": { - "description": "This determines where the data for the layer is fetched.\nThere are some options:\n\n# Query OSM directly\nsource: {osmTags: \"key=value\"}\n will fetch all objects with given tags from OSM.\n Currently, this will create a query to overpass and fetch the data - in the future this might fetch from the OSM API\n\n# Query OSM Via the overpass API with a custom script\nsource: {overpassScript: \"\"} when you want to do special things. _This should be really rare_.\n This means that the data will be pulled from overpass with this script, and will ignore the osmTags for the query\n However, for the rest of the pipeline, the OsmTags will _still_ be used. This is important to enable layers etc...\n\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}\nSome API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true` in the source for this\n\nNote that both geojson-options might set a flag 'isOsmCache' indicating that the data originally comes from OSM too\n\n\nNOTE: the previous format was 'overpassTags: AndOrTagConfigJson | string', which is interpreted as a shorthand for source: {osmTags: \"key=value\"}\n While still supported, this is considered deprecated", + "description": "This determines where the data for the layer is fetched: from OSM or from an external geojson dataset.\n\nIf no 'geojson' is defined, data will be fetched from overpass and the OSM-API.\n\nEvery source _must_ define which tags _must_ be present in order to be picked up.", "anyOf": [ { "allOf": [ @@ -21,6 +21,7 @@ "type": "object", "properties": { "osmTags": { + "description": "Every source must set which tags have to be present in order to load the given layer.", "anyOf": [ { "$ref": "#/definitions/AndOrTagConfigJson" @@ -30,8 +31,9 @@ } ] }, - "overpassScript": { - "type": "string" + "maxCacheAge": { + "description": "The maximum amount of seconds that a tile is allowed to linger in the cache", + "type": "number" } }, "required": [ @@ -41,9 +43,8 @@ { "type": "object", "properties": { - "maxCacheAge": { - "description": "The maximum amount of seconds that a tile is allowed to linger in the cache", - "type": "number" + "overpassScript": { + "type": "string" } } } @@ -55,6 +56,7 @@ "type": "object", "properties": { "osmTags": { + "description": "Every source must set which tags have to be present in order to load the given layer.", "anyOf": [ { "$ref": "#/definitions/AndOrTagConfigJson" @@ -64,39 +66,49 @@ } ] }, - "geoJson": { - "type": "string" - }, - "geoJsonZoomLevel": { + "maxCacheAge": { + "description": "The maximum amount of seconds that a tile is allowed to linger in the cache", "type": "number" - }, - "isOsmCache": { - "type": "boolean" - }, - "mercatorCrs": { - "type": "boolean" } }, "required": [ - "geoJson", "osmTags" ] }, { "type": "object", "properties": { - "maxCacheAge": { - "description": "The maximum amount of seconds that a tile is allowed to linger in the cache", + "geoJson": { + "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}", + "type": "string" + }, + "geoJsonZoomLevel": { + "description": "To load a tiled geojson layer, set the zoomlevel of the tiles", "type": "number" + }, + "isOsmCache": { + "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache", + "type": "boolean" + }, + "mercatorCrs": { + "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true` in the source for this", + "type": "boolean" + }, + "idKey": { + "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'", + "type": "string" } - } + }, + "required": [ + "geoJson" + ] } ] } ] }, "calculatedTags": { - "description": "A list of extra tags to calculate, specified as \"keyToAssignTo=javascript-expression\".\nThere are a few extra functions available. Refer to Docs/CalculatedTags.md for more information\nThe functions will be run in order, e.g.\n[\n \"_max_overlap_m2=Math.max(...feat.overlapsWith(\"someOtherLayer\").map(o => o.overlap))\n \"_max_overlap_ratio=Number(feat._max_overlap_m2)/feat.area\n]", + "description": "A list of extra tags to calculate, specified as \"keyToAssignTo=javascript-expression\".\nThere are a few extra functions available. Refer to Docs/CalculatedTags.md for more information\nThe functions will be run in order, e.g.\n[\n \"_max_overlap_m2=Math.max(...feat.overlapsWith(\"someOtherLayer\").map(o => o.overlap))\n \"_max_overlap_ratio=Number(feat._max_overlap_m2)/feat.area\n]\n\nThe specified tags are evaluated lazily. E.g. if a calculated tag is only used in the popup (e.g. the number of nearby features),\nthe expensive calculation will only be performed then for that feature. This avoids clogging up the contributors PC when all features are loaded.\n\nIf a tag has to be evaluated strictly, use ':=' instead:\n\n[\n\"_some_key:=some_javascript_expression\"\n]", "type": "array", "items": { "type": "string" @@ -110,6 +122,10 @@ "description": "This tag rendering should either be 'yes' or 'no'. If 'no' is returned, then the feature will be hidden from view.\nThis is useful to hide certain features from view.\n\nImportant: hiding features does not work dynamically, but is only calculated when the data is first renders.\nThis implies that it is not possible to hide a feature after a tagging change\n\nThe default value is 'yes'", "$ref": "#/definitions/TagRenderingConfigJson" }, + "forceLoad": { + "description": "Advanced option - might be set by the theme compiler\n\nIf true, this data will _always_ be loaded, even if the theme is disabled", + "type": "boolean" + }, "minzoom": { "description": "The minimum needed zoomlevel required before loading of the data start\nDefault: 0", "type": "number" @@ -134,31 +150,55 @@ ] }, "titleIcons": { - "description": "Small icons shown next to the title.\nIf not specified, the OsmLink and wikipedia links will be used by default.\nUse an empty array to hide them.\nNote that \"defaults\" will insert all the default titleIcons", - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/TagRenderingConfigJson" - }, - { - "type": "string" + "description": "Small icons shown next to the title.\nIf not specified, the OsmLink and wikipedia links will be used by default.\nUse an empty array to hide them.\nNote that \"defaults\" will insert all the default titleIcons (which are added automatically)\n\nType: icon[]", + "anyOf": [ + { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/TagRenderingConfigJson" + }, + { + "type": "string" + } + ] } - ] - } + }, + { + "type": "array", + "items": [ + { + "type": "string", + "enum": [ + "defaults" + ] + } + ], + "minItems": 1, + "maxItems": 1 + } + ] }, "mapRendering": { - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/default_3" - }, - { - "$ref": "#/definitions/default_4" + "anyOf": [ + { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/default_4" + }, + { + "$ref": "#/definitions/default_5" + } + ] } - ] - } + }, + { + "type": "null" + } + ] }, "passAllFeatures": { "description": "If set, this layer will pass all the features it receives onto the next layer.\nThis is ideal for decoration, e.g. directionss on cameras", @@ -183,6 +223,13 @@ "description": { "description": "The _first sentence_ of the description is shown on the button of the `add` menu.\nThe full description is shown in the confirmation dialog.\n\n(The first sentence is until the first '.'-character in the description)" }, + "exampleImages": { + "description": "Example images, which show real-life pictures of what such a feature might look like\n\nType: image", + "type": "array", + "items": { + "type": "string" + } + }, "preciseInput": { "description": "If set, the user will prompted to confirm the location before actually adding the data.\nThis will be with a 'drag crosshair'-method.\n\nIf 'preferredBackgroundCategory' is set, the element will attempt to pick a background layer of that category.", "anyOf": [ @@ -266,25 +313,26 @@ "type": "object", "properties": { "rewrite": { - "type": "array", - "items": { - "type": "object", - "properties": { - "sourceString": { + "type": "object", + "properties": { + "sourceString": { + "type": "array", + "items": { "type": "string" - }, - "into": { - "type": "array", - "items": { - "type": "string" - } } }, - "required": [ - "into", - "sourceString" - ] - } + "into": { + "type": "array", + "items": { + "type": "array", + "items": {} + } + } + }, + "required": [ + "into", + "sourceString" + ] }, "renderings": { "type": "array", @@ -326,10 +374,25 @@ }, "filter": { "description": "All the extra questions for filtering", - "type": "array", - "items": { - "$ref": "#/definitions/default" - } + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/default_1" + } + }, + { + "type": "object", + "properties": { + "sameAs": { + "type": "string" + } + }, + "required": [ + "sameAs" + ] + } + ] }, "deletion": { "description": "This block defines under what circumstances the delete dialog is shown for objects of this layer.\nIf set, a dialog is shown to the user to (soft) delete the point.\nThe dialog is built to be user friendly and to prevent mistakes.\nIf deletion is not possible, the dialog will hide itself and show the reason of non-deletability instead.\n\nTo configure, the following values are possible:\n\n- false: never ever show the delete button\n- true: show the default delete button\n- undefined: use the mapcomplete default to show deletion or not. Currently, this is the same as 'false' but this will change in the future\n- or: a hash with options (see below)\n\n The delete dialog\n =================\n\n\n\n#### Hard deletion if enough experience\n\nA feature can only be deleted from OpenStreetMap by mapcomplete if:\n\n- It is a node\n- No ways or relations use the node\n- The logged-in user has enough experience OR the user is the only one to have edited the point previously\n- The logged-in user has no unread messages (or has a ton of experience)\n- The user did not select one of the 'non-delete-options' (see below)\n\nIn all other cases, a 'soft deletion' is used.\n\n#### Soft deletion\n\nA 'soft deletion' is when the point isn't deleted from OSM but retagged so that it'll won't how up in the mapcomplete theme anymore.\nThis makes it look like it was deleted, without doing damage. A fixme will be added to the point.\n\nNote that a soft deletion is _only_ possible if these tags are provided by the theme creator, as they'll be different for every theme\n\n#### No-delete options\n\nIn some cases, the contributor might want to delete something for the wrong reason (e.g. someone who wants to have a path removed \"because the path is on their private property\").\nHowever, the path exists in reality and should thus be on OSM - otherwise the next contributor will pass by and notice \"hey, there is a path missing here! Let me redraw it in OSM!)\n\nThe correct approach is to retag the feature in such a way that it is semantically correct *and* that it doesn't show up on the theme anymore.\nA no-delete option is offered as 'reason to delete it', but secretly retags.", @@ -346,7 +409,7 @@ "description": "Indicates if a point can be moved and configures the modalities.\n\nA feature can be moved by MapComplete if:\n\n- It is a point\n- The point is _not_ part of a way or a a relation.\n\nOff by default. Can be enabled by setting this flag or by configuring.", "anyOf": [ { - "$ref": "#/definitions/default_2" + "$ref": "#/definitions/default_3" }, { "type": "boolean" @@ -361,7 +424,7 @@ "description": "In some cases, a value is represented in a certain unit (such as meters for heigt/distance/..., km/h for speed, ...)\n\nSometimes, multiple denominations are possible (e.g. km/h vs mile/h; megawatt vs kilowatt vs gigawatt for power generators, ...)\n\nThis brings in some troubles, as there are multiple ways to write it (no denomitation, 'm' vs 'meter' 'metre', ...)\n\nNot only do we want to write consistent data to OSM, we also want to present this consistently to the user.\nThis is handled by defining units.\n\n# Rendering\n\nTo render a value with long (human) denomination, use {canonical(key)}\n\n# Usage\n\nFirst of all, you define which keys have units applied, for example:\n\n```\nunits: [\n appliesTo: [\"maxspeed\", \"maxspeed:hgv\", \"maxspeed:bus\"]\n applicableUnits: [\n ...\n ]\n]\n```\n\nApplicableUnits defines which is the canonical extension, how it is presented to the user, ...:\n\n```\napplicableUnits: [\n{\n canonicalDenomination: \"km/h\",\n alternativeDenomination: [\"km/u\", \"kmh\", \"kph\"]\n default: true,\n human: {\n en: \"kilometer/hour\",\n nl: \"kilometer/uur\"\n },\n humanShort: {\n en: \"km/h\",\n nl: \"km/u\"\n }\n},\n{\n canoncialDenomination: \"mph\",\n ... similar for miles an hour ...\n}\n]\n```\n\n\nIf this is defined, then every key which the denominations apply to (`maxspeed`, `maxspeed:hgv` and `maxspeed:bus`) will be rewritten at the metatagging stage:\nevery value will be parsed and the canonical extension will be added add presented to the other parts of the code.\n\nAlso, if a freeform text field is used, an extra dropdown with applicable denominations will be given", "type": "array", "items": { - "$ref": "#/definitions/default_1" + "$ref": "#/definitions/default_2" } } }, @@ -453,8 +516,15 @@ "description": "If 'group' is defined on many tagRenderings, these are grouped together when shown. The questions are grouped together as well.\nThe first tagRendering of a group will always be a sticky element.", "type": "string" }, + "labels": { + "description": "A list of labels. These are strings that are used for various purposes, e.g. to filter them away", + "type": "array", + "items": { + "type": "string" + } + }, "render": { - "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`" + "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`\ntype: rendered" }, "question": { "description": "If it turns out that this tagRendering doesn't match _any_ value, then we show this question.\nIf undefined, the question is never asked and this tagrendering is read-only" @@ -482,6 +552,9 @@ "description": "The type of the text-field, e.g. 'string', 'nat', 'float', 'date',...\nSee Docs/SpecialInputElements.md and UI/Input/ValidatedTextField.ts for supported values", "type": "string" }, + "placeholder": { + "description": "A (translated) text that is shown (as gray text) within the textfield" + }, "helperArgs": { "description": "Extra parameters to initialize the input helper arguments.\nFor semantics, see the 'SpecialInputElements.md'", "type": "array", @@ -529,7 +602,11 @@ ] }, "then": { - "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option" + "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option\ntype: rendered" + }, + "icon": { + "description": "An icon supporting this mapping; typically shown pretty small\nType: icon", + "type": "string" }, "hideInAnswer": { "description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}", @@ -573,7 +650,7 @@ }, "additionalProperties": false }, - "default_3": { + "default_4": { "description": "The PointRenderingConfig gives all details onto how to render a single point of a feature.\n\nThis can be used if:\n\n- The feature is a point\n- To render something at the centroid of an area, or at the start, end or projected centroid of a way", "type": "object", "properties": { @@ -581,17 +658,11 @@ "description": "All the locations that this point should be rendered at.\nUsing `location: [\"point\", \"centroid\"] will always render centerpoint", "type": "array", "items": { - "enum": [ - "centroid", - "end", - "point", - "start" - ], "type": "string" } }, "icon": { - "description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;`", + "description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;`\n\nType: icon", "anyOf": [ { "$ref": "#/definitions/TagRenderingConfigJson" @@ -618,6 +689,7 @@ ] }, "then": { + "description": "Badge to show\nType: icon", "anyOf": [ { "$ref": "#/definitions/TagRenderingConfigJson" @@ -673,7 +745,7 @@ ], "additionalProperties": false }, - "default_4": { + "default_5": { "description": "The LineRenderingConfig gives all details onto how to render a single line of a feature.\n\nThis can be used if:\n\n- The feature is a line\n- The feature is an area", "type": "object", "properties": { @@ -695,7 +767,10 @@ "$ref": "#/definitions/TagRenderingConfigJson" }, { - "type": "string" + "type": [ + "string", + "number" + ] } ] }, @@ -761,7 +836,7 @@ }, "additionalProperties": false }, - "default": { + "default_1": { "type": "object", "properties": { "id": { @@ -784,6 +859,26 @@ "type": "string" } ] + }, + "default": { + "type": "boolean" + }, + "fields": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name" + ] + } } }, "required": [ @@ -856,7 +951,7 @@ }, "additionalProperties": false }, - "default_2": { + "default_3": { "type": "object", "properties": { "enableImproveAccuracy": { @@ -870,7 +965,7 @@ }, "additionalProperties": false }, - "default_1": { + "default_2": { "type": "object", "properties": { "appliesToKey": { diff --git a/Docs/Schemas/LayerConfigJsonJSC.ts b/Docs/Schemas/LayerConfigJsonJSC.ts index fbe8661034..35dc011ac2 100644 --- a/Docs/Schemas/LayerConfigJsonJSC.ts +++ b/Docs/Schemas/LayerConfigJsonJSC.ts @@ -13,7 +13,7 @@ export default { "description": "A description for this layer.\nShown in the layer selections and in the personel theme" }, "source": { - "description": "This determines where the data for the layer is fetched.\nThere are some options:\n\n# Query OSM directly\nsource: {osmTags: \"key=value\"}\n will fetch all objects with given tags from OSM.\n Currently, this will create a query to overpass and fetch the data - in the future this might fetch from the OSM API\n\n# Query OSM Via the overpass API with a custom script\nsource: {overpassScript: \"\"} when you want to do special things. _This should be really rare_.\n This means that the data will be pulled from overpass with this script, and will ignore the osmTags for the query\n However, for the rest of the pipeline, the OsmTags will _still_ be used. This is important to enable layers etc...\n\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}\nSome API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true` in the source for this\n\nNote that both geojson-options might set a flag 'isOsmCache' indicating that the data originally comes from OSM too\n\n\nNOTE: the previous format was 'overpassTags: AndOrTagConfigJson | string', which is interpreted as a shorthand for source: {osmTags: \"key=value\"}\n While still supported, this is considered deprecated", + "description": "This determines where the data for the layer is fetched: from OSM or from an external geojson dataset.\n\nIf no 'geojson' is defined, data will be fetched from overpass and the OSM-API.\n\nEvery source _must_ define which tags _must_ be present in order to be picked up.", "anyOf": [ { "allOf": [ @@ -21,6 +21,7 @@ export default { "type": "object", "properties": { "osmTags": { + "description": "Every source must set which tags have to be present in order to load the given layer.", "anyOf": [ { "$ref": "#/definitions/AndOrTagConfigJson" @@ -30,8 +31,9 @@ export default { } ] }, - "overpassScript": { - "type": "string" + "maxCacheAge": { + "description": "The maximum amount of seconds that a tile is allowed to linger in the cache", + "type": "number" } }, "required": [ @@ -41,9 +43,8 @@ export default { { "type": "object", "properties": { - "maxCacheAge": { - "description": "The maximum amount of seconds that a tile is allowed to linger in the cache", - "type": "number" + "overpassScript": { + "type": "string" } } } @@ -55,6 +56,7 @@ export default { "type": "object", "properties": { "osmTags": { + "description": "Every source must set which tags have to be present in order to load the given layer.", "anyOf": [ { "$ref": "#/definitions/AndOrTagConfigJson" @@ -64,39 +66,49 @@ export default { } ] }, - "geoJson": { - "type": "string" - }, - "geoJsonZoomLevel": { + "maxCacheAge": { + "description": "The maximum amount of seconds that a tile is allowed to linger in the cache", "type": "number" - }, - "isOsmCache": { - "type": "boolean" - }, - "mercatorCrs": { - "type": "boolean" } }, "required": [ - "geoJson", "osmTags" ] }, { "type": "object", "properties": { - "maxCacheAge": { - "description": "The maximum amount of seconds that a tile is allowed to linger in the cache", + "geoJson": { + "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}", + "type": "string" + }, + "geoJsonZoomLevel": { + "description": "To load a tiled geojson layer, set the zoomlevel of the tiles", "type": "number" + }, + "isOsmCache": { + "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache", + "type": "boolean" + }, + "mercatorCrs": { + "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true` in the source for this", + "type": "boolean" + }, + "idKey": { + "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'", + "type": "string" } - } + }, + "required": [ + "geoJson" + ] } ] } ] }, "calculatedTags": { - "description": "A list of extra tags to calculate, specified as \"keyToAssignTo=javascript-expression\".\nThere are a few extra functions available. Refer to Docs/CalculatedTags.md for more information\nThe functions will be run in order, e.g.\n[\n \"_max_overlap_m2=Math.max(...feat.overlapsWith(\"someOtherLayer\").map(o => o.overlap))\n \"_max_overlap_ratio=Number(feat._max_overlap_m2)/feat.area\n]", + "description": "A list of extra tags to calculate, specified as \"keyToAssignTo=javascript-expression\".\nThere are a few extra functions available. Refer to Docs/CalculatedTags.md for more information\nThe functions will be run in order, e.g.\n[\n \"_max_overlap_m2=Math.max(...feat.overlapsWith(\"someOtherLayer\").map(o => o.overlap))\n \"_max_overlap_ratio=Number(feat._max_overlap_m2)/feat.area\n]\n\nThe specified tags are evaluated lazily. E.g. if a calculated tag is only used in the popup (e.g. the number of nearby features),\nthe expensive calculation will only be performed then for that feature. This avoids clogging up the contributors PC when all features are loaded.\n\nIf a tag has to be evaluated strictly, use ':=' instead:\n\n[\n\"_some_key:=some_javascript_expression\"\n]", "type": "array", "items": { "type": "string" @@ -110,6 +122,10 @@ export default { "description": "This tag rendering should either be 'yes' or 'no'. If 'no' is returned, then the feature will be hidden from view.\nThis is useful to hide certain features from view.\n\nImportant: hiding features does not work dynamically, but is only calculated when the data is first renders.\nThis implies that it is not possible to hide a feature after a tagging change\n\nThe default value is 'yes'", "$ref": "#/definitions/TagRenderingConfigJson" }, + "forceLoad": { + "description": "Advanced option - might be set by the theme compiler\n\nIf true, this data will _always_ be loaded, even if the theme is disabled", + "type": "boolean" + }, "minzoom": { "description": "The minimum needed zoomlevel required before loading of the data start\nDefault: 0", "type": "number" @@ -134,31 +150,55 @@ export default { ] }, "titleIcons": { - "description": "Small icons shown next to the title.\nIf not specified, the OsmLink and wikipedia links will be used by default.\nUse an empty array to hide them.\nNote that \"defaults\" will insert all the default titleIcons", - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/TagRenderingConfigJson" - }, - { - "type": "string" + "description": "Small icons shown next to the title.\nIf not specified, the OsmLink and wikipedia links will be used by default.\nUse an empty array to hide them.\nNote that \"defaults\" will insert all the default titleIcons (which are added automatically)\n\nType: icon[]", + "anyOf": [ + { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/TagRenderingConfigJson" + }, + { + "type": "string" + } + ] } - ] - } + }, + { + "type": "array", + "items": [ + { + "type": "string", + "enum": [ + "defaults" + ] + } + ], + "minItems": 1, + "maxItems": 1 + } + ] }, "mapRendering": { - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/default_3" - }, - { - "$ref": "#/definitions/default_4" + "anyOf": [ + { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/default_4" + }, + { + "$ref": "#/definitions/default_5" + } + ] } - ] - } + }, + { + "type": "null" + } + ] }, "passAllFeatures": { "description": "If set, this layer will pass all the features it receives onto the next layer.\nThis is ideal for decoration, e.g. directionss on cameras", @@ -183,6 +223,13 @@ export default { "description": { "description": "The _first sentence_ of the description is shown on the button of the `add` menu.\nThe full description is shown in the confirmation dialog.\n\n(The first sentence is until the first '.'-character in the description)" }, + "exampleImages": { + "description": "Example images, which show real-life pictures of what such a feature might look like\n\nType: image", + "type": "array", + "items": { + "type": "string" + } + }, "preciseInput": { "description": "If set, the user will prompted to confirm the location before actually adding the data.\nThis will be with a 'drag crosshair'-method.\n\nIf 'preferredBackgroundCategory' is set, the element will attempt to pick a background layer of that category.", "anyOf": [ @@ -266,25 +313,26 @@ export default { "type": "object", "properties": { "rewrite": { - "type": "array", - "items": { - "type": "object", - "properties": { - "sourceString": { + "type": "object", + "properties": { + "sourceString": { + "type": "array", + "items": { "type": "string" - }, - "into": { - "type": "array", - "items": { - "type": "string" - } } }, - "required": [ - "into", - "sourceString" - ] - } + "into": { + "type": "array", + "items": { + "type": "array", + "items": {} + } + } + }, + "required": [ + "into", + "sourceString" + ] }, "renderings": { "type": "array", @@ -326,10 +374,25 @@ export default { }, "filter": { "description": "All the extra questions for filtering", - "type": "array", - "items": { - "$ref": "#/definitions/default" - } + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/default_1" + } + }, + { + "type": "object", + "properties": { + "sameAs": { + "type": "string" + } + }, + "required": [ + "sameAs" + ] + } + ] }, "deletion": { "description": "This block defines under what circumstances the delete dialog is shown for objects of this layer.\nIf set, a dialog is shown to the user to (soft) delete the point.\nThe dialog is built to be user friendly and to prevent mistakes.\nIf deletion is not possible, the dialog will hide itself and show the reason of non-deletability instead.\n\nTo configure, the following values are possible:\n\n- false: never ever show the delete button\n- true: show the default delete button\n- undefined: use the mapcomplete default to show deletion or not. Currently, this is the same as 'false' but this will change in the future\n- or: a hash with options (see below)\n\n The delete dialog\n =================\n\n\n\n#### Hard deletion if enough experience\n\nA feature can only be deleted from OpenStreetMap by mapcomplete if:\n\n- It is a node\n- No ways or relations use the node\n- The logged-in user has enough experience OR the user is the only one to have edited the point previously\n- The logged-in user has no unread messages (or has a ton of experience)\n- The user did not select one of the 'non-delete-options' (see below)\n\nIn all other cases, a 'soft deletion' is used.\n\n#### Soft deletion\n\nA 'soft deletion' is when the point isn't deleted from OSM but retagged so that it'll won't how up in the mapcomplete theme anymore.\nThis makes it look like it was deleted, without doing damage. A fixme will be added to the point.\n\nNote that a soft deletion is _only_ possible if these tags are provided by the theme creator, as they'll be different for every theme\n\n#### No-delete options\n\nIn some cases, the contributor might want to delete something for the wrong reason (e.g. someone who wants to have a path removed \"because the path is on their private property\").\nHowever, the path exists in reality and should thus be on OSM - otherwise the next contributor will pass by and notice \"hey, there is a path missing here! Let me redraw it in OSM!)\n\nThe correct approach is to retag the feature in such a way that it is semantically correct *and* that it doesn't show up on the theme anymore.\nA no-delete option is offered as 'reason to delete it', but secretly retags.", @@ -346,7 +409,7 @@ export default { "description": "Indicates if a point can be moved and configures the modalities.\n\nA feature can be moved by MapComplete if:\n\n- It is a point\n- The point is _not_ part of a way or a a relation.\n\nOff by default. Can be enabled by setting this flag or by configuring.", "anyOf": [ { - "$ref": "#/definitions/default_2" + "$ref": "#/definitions/default_3" }, { "type": "boolean" @@ -361,7 +424,7 @@ export default { "description": "In some cases, a value is represented in a certain unit (such as meters for heigt/distance/..., km/h for speed, ...)\n\nSometimes, multiple denominations are possible (e.g. km/h vs mile/h; megawatt vs kilowatt vs gigawatt for power generators, ...)\n\nThis brings in some troubles, as there are multiple ways to write it (no denomitation, 'm' vs 'meter' 'metre', ...)\n\nNot only do we want to write consistent data to OSM, we also want to present this consistently to the user.\nThis is handled by defining units.\n\n# Rendering\n\nTo render a value with long (human) denomination, use {canonical(key)}\n\n# Usage\n\nFirst of all, you define which keys have units applied, for example:\n\n```\nunits: [\n appliesTo: [\"maxspeed\", \"maxspeed:hgv\", \"maxspeed:bus\"]\n applicableUnits: [\n ...\n ]\n]\n```\n\nApplicableUnits defines which is the canonical extension, how it is presented to the user, ...:\n\n```\napplicableUnits: [\n{\n canonicalDenomination: \"km/h\",\n alternativeDenomination: [\"km/u\", \"kmh\", \"kph\"]\n default: true,\n human: {\n en: \"kilometer/hour\",\n nl: \"kilometer/uur\"\n },\n humanShort: {\n en: \"km/h\",\n nl: \"km/u\"\n }\n},\n{\n canoncialDenomination: \"mph\",\n ... similar for miles an hour ...\n}\n]\n```\n\n\nIf this is defined, then every key which the denominations apply to (`maxspeed`, `maxspeed:hgv` and `maxspeed:bus`) will be rewritten at the metatagging stage:\nevery value will be parsed and the canonical extension will be added add presented to the other parts of the code.\n\nAlso, if a freeform text field is used, an extra dropdown with applicable denominations will be given", "type": "array", "items": { - "$ref": "#/definitions/default_1" + "$ref": "#/definitions/default_2" } } }, @@ -451,8 +514,15 @@ export default { "description": "If 'group' is defined on many tagRenderings, these are grouped together when shown. The questions are grouped together as well.\nThe first tagRendering of a group will always be a sticky element.", "type": "string" }, + "labels": { + "description": "A list of labels. These are strings that are used for various purposes, e.g. to filter them away", + "type": "array", + "items": { + "type": "string" + } + }, "render": { - "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`" + "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`\ntype: rendered" }, "question": { "description": "If it turns out that this tagRendering doesn't match _any_ value, then we show this question.\nIf undefined, the question is never asked and this tagrendering is read-only" @@ -480,6 +550,9 @@ export default { "description": "The type of the text-field, e.g. 'string', 'nat', 'float', 'date',...\nSee Docs/SpecialInputElements.md and UI/Input/ValidatedTextField.ts for supported values", "type": "string" }, + "placeholder": { + "description": "A (translated) text that is shown (as gray text) within the textfield" + }, "helperArgs": { "description": "Extra parameters to initialize the input helper arguments.\nFor semantics, see the 'SpecialInputElements.md'", "type": "array", @@ -527,7 +600,11 @@ export default { ] }, "then": { - "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option" + "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option\ntype: rendered" + }, + "icon": { + "description": "An icon supporting this mapping; typically shown pretty small\nType: icon", + "type": "string" }, "hideInAnswer": { "description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}", @@ -570,7 +647,7 @@ export default { } } }, - "default_3": { + "default_4": { "description": "The PointRenderingConfig gives all details onto how to render a single point of a feature.\n\nThis can be used if:\n\n- The feature is a point\n- To render something at the centroid of an area, or at the start, end or projected centroid of a way", "type": "object", "properties": { @@ -578,17 +655,11 @@ export default { "description": "All the locations that this point should be rendered at.\nUsing `location: [\"point\", \"centroid\"] will always render centerpoint", "type": "array", "items": { - "enum": [ - "centroid", - "end", - "point", - "start" - ], "type": "string" } }, "icon": { - "description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;`", + "description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;`\n\nType: icon", "anyOf": [ { "$ref": "#/definitions/TagRenderingConfigJson" @@ -615,6 +686,7 @@ export default { ] }, "then": { + "description": "Badge to show\nType: icon", "anyOf": [ { "$ref": "#/definitions/TagRenderingConfigJson" @@ -669,7 +741,7 @@ export default { "location" ] }, - "default_4": { + "default_5": { "description": "The LineRenderingConfig gives all details onto how to render a single line of a feature.\n\nThis can be used if:\n\n- The feature is a line\n- The feature is an area", "type": "object", "properties": { @@ -691,7 +763,10 @@ export default { "$ref": "#/definitions/TagRenderingConfigJson" }, { - "type": "string" + "type": [ + "string", + "number" + ] } ] }, @@ -756,7 +831,7 @@ export default { } } }, - "default": { + "default_1": { "type": "object", "properties": { "id": { @@ -779,6 +854,26 @@ export default { "type": "string" } ] + }, + "default": { + "type": "boolean" + }, + "fields": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name" + ] + } } }, "required": [ @@ -849,7 +944,7 @@ export default { } } }, - "default_2": { + "default_3": { "type": "object", "properties": { "enableImproveAccuracy": { @@ -862,7 +957,7 @@ export default { } } }, - "default_1": { + "default_2": { "type": "object", "properties": { "appliesToKey": { diff --git a/Docs/Schemas/LayoutConfigJson.schema.json b/Docs/Schemas/LayoutConfigJson.schema.json index 3587397d68..dcfda99189 100644 --- a/Docs/Schemas/LayoutConfigJson.schema.json +++ b/Docs/Schemas/LayoutConfigJson.schema.json @@ -11,36 +11,22 @@ "type": "string" }, "maintainer": { - "description": "Who does maintian this preset?", + "description": "Who does maintain this preset?", "type": "string" }, "version": { "description": "A version number, either semantically or by date.\nShould be sortable, where the higher value is the later version", "type": "string" }, - "language": { - "description": "The supported language(s).\nThis should be a two-letter, lowercase code which identifies the language, e.g. \"en\", \"nl\", ...\nIf the theme supports multiple languages, use a list: `[\"en\",\"nl\",\"fr\"]` to allow the user to pick any of them", - "anyOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "string" - } - ] - }, "mustHaveLanguage": { - "description": "Only used in 'generateLayerOverview': if present, every translation will be checked to make sure it is fully translated", + "description": "Only used in 'generateLayerOverview': if present, every translation will be checked to make sure it is fully translated.\n\nThis must be a list of two-letter, lowercase codes which identifies the language, e.g. \"en\", \"nl\", ...", "type": "array", "items": { "type": "string" } }, "title": { - "description": "The title, as shown in the welcome message and the more-screen" + "description": "The title, as shown in the welcome message and the more-screen." }, "shortDescription": { "description": "A short description, showed as social description and in the 'more theme'-buttons.\nNote that if this one is not defined, the first sentence of 'description' is used" @@ -52,11 +38,11 @@ "description": "A part of the description, shown under the login-button." }, "icon": { - "description": "The icon representing this theme.\nUsed as logo in the more-screen and (for official themes) as favicon, webmanifest logo, ...\nEither a URL or a base64 encoded value (which should include 'data:image/svg+xml;base64)", + "description": "The icon representing this theme.\nUsed as logo in the more-screen and (for official themes) as favicon, webmanifest logo, ...\nEither a URL or a base64 encoded value (which should include 'data:image/svg+xml;base64)\n\nType: icon", "type": "string" }, "socialImage": { - "description": "Link to a 'social image' which is included as og:image-tag on official themes.\nUseful to share the theme on social media.\nSee https://www.h3xed.com/web-and-internet/how-to-use-og-image-meta-tag-facebook-reddit for more information", + "description": "Link to a 'social image' which is included as og:image-tag on official themes.\nUseful to share the theme on social media.\nSee https://www.h3xed.com/web-and-internet/how-to-use-og-image-meta-tag-facebook-reddit for more information$\n\nType: image", "type": "string" }, "startZoom": { @@ -92,7 +78,7 @@ "description": "Define some (overlay) slippy map tilesources", "type": "array", "items": { - "$ref": "#/definitions/default_5" + "$ref": "#/definitions/default_6" } }, "layers": { @@ -119,7 +105,14 @@ } ] }, - "override": {} + "override": {}, + "hideTagRenderingsWithLabels": { + "description": "TagRenderings with any of these labels will be removed from the layer.\nNote that the 'id' and 'group' are considered labels too", + "type": "array", + "items": { + "type": "string" + } + } }, "required": [ "builtin", @@ -134,17 +127,27 @@ }, "clustering": { "description": "If defined, data will be clustered.\nDefaults to {maxZoom: 16, minNeeded: 500}", - "type": "object", - "properties": { - "maxZoom": { - "description": "All zoom levels above 'maxzoom' are not clustered anymore.\nDefaults to 18", - "type": "number" + "anyOf": [ + { + "type": "object", + "properties": { + "maxZoom": { + "description": "All zoom levels above 'maxzoom' are not clustered anymore.\nDefaults to 18", + "type": "number" + }, + "minNeededElements": { + "description": "The number of elements per tile needed to start clustering\nIf clustering is defined, defaults to 250", + "type": "number" + } + } }, - "minNeededElements": { - "description": "The number of elements per tile needed to start clustering\nIf clustering is defined, defaults to 25", - "type": "number" + { + "enum": [ + false + ], + "type": "boolean" } - } + ] }, "customCss": { "description": "The URL of a custom CSS stylesheet to modify the layout", @@ -155,7 +158,7 @@ "type": "boolean" }, "lockLocation": { - "description": "If set to true, the basemap will not scroll outside of the area visible on initial zoom.\nIf set to [[lat0, lon0], [lat1, lon1]], the map will not scroll outside of those bounds.\nOff by default, which will enable panning to the entire world", + "description": "If set to true, the basemap will not scroll outside of the area visible on initial zoom.\nIf set to [[lon, lat], [lon, lat]], the map will not scroll outside of those bounds.\nOff by default, which will enable panning to the entire world", "anyOf": [ { "type": "array", @@ -198,46 +201,59 @@ "type": "number" } } - }, - { - "type": "boolean" } ] }, + "extraLink": { + "description": "Adds an additional button on the top-left of the application.\nThis can link to an arbitrary location.\n\nNote that {lat},{lon},{zoom}, {language} and {theme} will be replaced\n\nDefault: {icon: \"./assets/svg/pop-out.svg\", href: 'https://mapcomplete.osm.be/{theme}.html?lat={lat}&lon={lon}&z={zoom}, requirements: [\"iframe\",\"no-welcome-message]},", + "$ref": "#/definitions/default" + }, "enableUserBadge": { + "description": "If set to false, disables logging in.\nThe userbadge will be hidden, all login-buttons will be hidden and editing will be disabled", "type": "boolean" }, "enableShareScreen": { + "description": "If false, hides the tab 'share'-tab in the welcomeMessage", "type": "boolean" }, "enableMoreQuests": { + "description": "Hides the tab with more themes in the welcomeMessage", "type": "boolean" }, "enableLayers": { + "description": "If false, the layer selection/filter view will be hidden\nThe corresponding URL-parameter is 'fs-filters' instead of 'fs-layers'", "type": "boolean" }, "enableSearch": { + "description": "If set to false, hides the search bar", "type": "boolean" }, "enableAddNewPoints": { + "description": "If set to false, the ability to add new points or nodes will be disabled.\nEditing already existing features will still be possible", "type": "boolean" }, "enableGeolocation": { + "description": "If set to false, the 'geolocation'-button will be hidden.", "type": "boolean" }, "enableBackgroundLayerSelection": { + "description": "Enable switching the backgroundlayer.\nIf false, the quickswitch-buttons are removed (bottom left) and the dropdown in the layer selection is removed as well", "type": "boolean" }, "enableShowAllQuestions": { + "description": "If set to true, will show _all_ unanswered questions in a popup instead of just the next one", "type": "boolean" }, "enableDownload": { + "description": "If set to true, download button for the data will be shown (offers downloading as geojson and csv)", "type": "boolean" }, "enablePdfDownload": { + "description": "If set to true, exporting a pdf is enabled", "type": "boolean" }, - "enableIframePopout": { + "enableNoteImports": { + "description": "If true, notes will be loaded and parsed. If a note is an import (as created by the import_helper.html-tool from mapcomplete),\nthese notes will be shown if a relevant layer is present.", "type": "boolean" }, "overpassUrl": { @@ -263,7 +279,6 @@ "description", "icon", "id", - "language", "layers", "maintainer", "startLat", @@ -355,8 +370,15 @@ "description": "If 'group' is defined on many tagRenderings, these are grouped together when shown. The questions are grouped together as well.\nThe first tagRendering of a group will always be a sticky element.", "type": "string" }, + "labels": { + "description": "A list of labels. These are strings that are used for various purposes, e.g. to filter them away", + "type": "array", + "items": { + "type": "string" + } + }, "render": { - "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`" + "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`\ntype: rendered" }, "question": { "description": "If it turns out that this tagRendering doesn't match _any_ value, then we show this question.\nIf undefined, the question is never asked and this tagrendering is read-only" @@ -384,6 +406,9 @@ "description": "The type of the text-field, e.g. 'string', 'nat', 'float', 'date',...\nSee Docs/SpecialInputElements.md and UI/Input/ValidatedTextField.ts for supported values", "type": "string" }, + "placeholder": { + "description": "A (translated) text that is shown (as gray text) within the textfield" + }, "helperArgs": { "description": "Extra parameters to initialize the input helper arguments.\nFor semantics, see the 'SpecialInputElements.md'", "type": "array", @@ -431,7 +456,11 @@ ] }, "then": { - "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option" + "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option\ntype: rendered" + }, + "icon": { + "description": "An icon supporting this mapping; typically shown pretty small\nType: icon", + "type": "string" }, "hideInAnswer": { "description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}", @@ -475,7 +504,7 @@ }, "additionalProperties": false }, - "default_3": { + "default_4": { "description": "The PointRenderingConfig gives all details onto how to render a single point of a feature.\n\nThis can be used if:\n\n- The feature is a point\n- To render something at the centroid of an area, or at the start, end or projected centroid of a way", "type": "object", "properties": { @@ -483,17 +512,11 @@ "description": "All the locations that this point should be rendered at.\nUsing `location: [\"point\", \"centroid\"] will always render centerpoint", "type": "array", "items": { - "enum": [ - "centroid", - "end", - "point", - "start" - ], "type": "string" } }, "icon": { - "description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;`", + "description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;`\n\nType: icon", "anyOf": [ { "$ref": "#/definitions/TagRenderingConfigJson" @@ -520,6 +543,7 @@ ] }, "then": { + "description": "Badge to show\nType: icon", "anyOf": [ { "$ref": "#/definitions/TagRenderingConfigJson" @@ -575,7 +599,7 @@ ], "additionalProperties": false }, - "default_4": { + "default_5": { "description": "The LineRenderingConfig gives all details onto how to render a single line of a feature.\n\nThis can be used if:\n\n- The feature is a line\n- The feature is an area", "type": "object", "properties": { @@ -597,7 +621,10 @@ "$ref": "#/definitions/TagRenderingConfigJson" }, { - "type": "string" + "type": [ + "string", + "number" + ] } ] }, @@ -663,7 +690,7 @@ }, "additionalProperties": false }, - "default": { + "default_1": { "type": "object", "properties": { "id": { @@ -686,6 +713,26 @@ "type": "string" } ] + }, + "default": { + "type": "boolean" + }, + "fields": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name" + ] + } } }, "required": [ @@ -758,7 +805,7 @@ }, "additionalProperties": false }, - "default_2": { + "default_3": { "type": "object", "properties": { "enableImproveAccuracy": { @@ -772,7 +819,7 @@ }, "additionalProperties": false }, - "default_1": { + "default_2": { "type": "object", "properties": { "appliesToKey": { @@ -800,7 +847,7 @@ ], "additionalProperties": false }, - "default_5": { + "default_6": { "description": "Configuration for a tilesource config", "type": "object", "properties": { @@ -854,7 +901,7 @@ "description": "A description for this layer.\nShown in the layer selections and in the personel theme" }, "source": { - "description": "This determines where the data for the layer is fetched.\nThere are some options:\n\n# Query OSM directly\nsource: {osmTags: \"key=value\"}\n will fetch all objects with given tags from OSM.\n Currently, this will create a query to overpass and fetch the data - in the future this might fetch from the OSM API\n\n# Query OSM Via the overpass API with a custom script\nsource: {overpassScript: \"\"} when you want to do special things. _This should be really rare_.\n This means that the data will be pulled from overpass with this script, and will ignore the osmTags for the query\n However, for the rest of the pipeline, the OsmTags will _still_ be used. This is important to enable layers etc...\n\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}\nSome API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true` in the source for this\n\nNote that both geojson-options might set a flag 'isOsmCache' indicating that the data originally comes from OSM too\n\n\nNOTE: the previous format was 'overpassTags: AndOrTagConfigJson | string', which is interpreted as a shorthand for source: {osmTags: \"key=value\"}\n While still supported, this is considered deprecated", + "description": "This determines where the data for the layer is fetched: from OSM or from an external geojson dataset.\n\nIf no 'geojson' is defined, data will be fetched from overpass and the OSM-API.\n\nEvery source _must_ define which tags _must_ be present in order to be picked up.", "anyOf": [ { "allOf": [ @@ -862,6 +909,7 @@ "type": "object", "properties": { "osmTags": { + "description": "Every source must set which tags have to be present in order to load the given layer.", "anyOf": [ { "$ref": "#/definitions/AndOrTagConfigJson" @@ -871,8 +919,9 @@ } ] }, - "overpassScript": { - "type": "string" + "maxCacheAge": { + "description": "The maximum amount of seconds that a tile is allowed to linger in the cache", + "type": "number" } }, "required": [ @@ -882,9 +931,8 @@ { "type": "object", "properties": { - "maxCacheAge": { - "description": "The maximum amount of seconds that a tile is allowed to linger in the cache", - "type": "number" + "overpassScript": { + "type": "string" } } } @@ -896,6 +944,7 @@ "type": "object", "properties": { "osmTags": { + "description": "Every source must set which tags have to be present in order to load the given layer.", "anyOf": [ { "$ref": "#/definitions/AndOrTagConfigJson" @@ -905,39 +954,49 @@ } ] }, - "geoJson": { - "type": "string" - }, - "geoJsonZoomLevel": { + "maxCacheAge": { + "description": "The maximum amount of seconds that a tile is allowed to linger in the cache", "type": "number" - }, - "isOsmCache": { - "type": "boolean" - }, - "mercatorCrs": { - "type": "boolean" } }, "required": [ - "geoJson", "osmTags" ] }, { "type": "object", "properties": { - "maxCacheAge": { - "description": "The maximum amount of seconds that a tile is allowed to linger in the cache", + "geoJson": { + "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}", + "type": "string" + }, + "geoJsonZoomLevel": { + "description": "To load a tiled geojson layer, set the zoomlevel of the tiles", "type": "number" + }, + "isOsmCache": { + "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache", + "type": "boolean" + }, + "mercatorCrs": { + "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true` in the source for this", + "type": "boolean" + }, + "idKey": { + "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'", + "type": "string" } - } + }, + "required": [ + "geoJson" + ] } ] } ] }, "calculatedTags": { - "description": "A list of extra tags to calculate, specified as \"keyToAssignTo=javascript-expression\".\nThere are a few extra functions available. Refer to Docs/CalculatedTags.md for more information\nThe functions will be run in order, e.g.\n[\n \"_max_overlap_m2=Math.max(...feat.overlapsWith(\"someOtherLayer\").map(o => o.overlap))\n \"_max_overlap_ratio=Number(feat._max_overlap_m2)/feat.area\n]", + "description": "A list of extra tags to calculate, specified as \"keyToAssignTo=javascript-expression\".\nThere are a few extra functions available. Refer to Docs/CalculatedTags.md for more information\nThe functions will be run in order, e.g.\n[\n \"_max_overlap_m2=Math.max(...feat.overlapsWith(\"someOtherLayer\").map(o => o.overlap))\n \"_max_overlap_ratio=Number(feat._max_overlap_m2)/feat.area\n]\n\nThe specified tags are evaluated lazily. E.g. if a calculated tag is only used in the popup (e.g. the number of nearby features),\nthe expensive calculation will only be performed then for that feature. This avoids clogging up the contributors PC when all features are loaded.\n\nIf a tag has to be evaluated strictly, use ':=' instead:\n\n[\n\"_some_key:=some_javascript_expression\"\n]", "type": "array", "items": { "type": "string" @@ -951,6 +1010,10 @@ "description": "This tag rendering should either be 'yes' or 'no'. If 'no' is returned, then the feature will be hidden from view.\nThis is useful to hide certain features from view.\n\nImportant: hiding features does not work dynamically, but is only calculated when the data is first renders.\nThis implies that it is not possible to hide a feature after a tagging change\n\nThe default value is 'yes'", "$ref": "#/definitions/TagRenderingConfigJson" }, + "forceLoad": { + "description": "Advanced option - might be set by the theme compiler\n\nIf true, this data will _always_ be loaded, even if the theme is disabled", + "type": "boolean" + }, "minzoom": { "description": "The minimum needed zoomlevel required before loading of the data start\nDefault: 0", "type": "number" @@ -975,31 +1038,55 @@ ] }, "titleIcons": { - "description": "Small icons shown next to the title.\nIf not specified, the OsmLink and wikipedia links will be used by default.\nUse an empty array to hide them.\nNote that \"defaults\" will insert all the default titleIcons", - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/TagRenderingConfigJson" - }, - { - "type": "string" + "description": "Small icons shown next to the title.\nIf not specified, the OsmLink and wikipedia links will be used by default.\nUse an empty array to hide them.\nNote that \"defaults\" will insert all the default titleIcons (which are added automatically)\n\nType: icon[]", + "anyOf": [ + { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/TagRenderingConfigJson" + }, + { + "type": "string" + } + ] } - ] - } + }, + { + "type": "array", + "items": [ + { + "type": "string", + "enum": [ + "defaults" + ] + } + ], + "minItems": 1, + "maxItems": 1 + } + ] }, "mapRendering": { - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/default_3" - }, - { - "$ref": "#/definitions/default_4" + "anyOf": [ + { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/default_4" + }, + { + "$ref": "#/definitions/default_5" + } + ] } - ] - } + }, + { + "type": "null" + } + ] }, "passAllFeatures": { "description": "If set, this layer will pass all the features it receives onto the next layer.\nThis is ideal for decoration, e.g. directionss on cameras", @@ -1024,6 +1111,13 @@ "description": { "description": "The _first sentence_ of the description is shown on the button of the `add` menu.\nThe full description is shown in the confirmation dialog.\n\n(The first sentence is until the first '.'-character in the description)" }, + "exampleImages": { + "description": "Example images, which show real-life pictures of what such a feature might look like\n\nType: image", + "type": "array", + "items": { + "type": "string" + } + }, "preciseInput": { "description": "If set, the user will prompted to confirm the location before actually adding the data.\nThis will be with a 'drag crosshair'-method.\n\nIf 'preferredBackgroundCategory' is set, the element will attempt to pick a background layer of that category.", "anyOf": [ @@ -1107,25 +1201,26 @@ "type": "object", "properties": { "rewrite": { - "type": "array", - "items": { - "type": "object", - "properties": { - "sourceString": { + "type": "object", + "properties": { + "sourceString": { + "type": "array", + "items": { "type": "string" - }, - "into": { - "type": "array", - "items": { - "type": "string" - } } }, - "required": [ - "into", - "sourceString" - ] - } + "into": { + "type": "array", + "items": { + "type": "array", + "items": {} + } + } + }, + "required": [ + "into", + "sourceString" + ] }, "renderings": { "type": "array", @@ -1167,10 +1262,25 @@ }, "filter": { "description": "All the extra questions for filtering", - "type": "array", - "items": { - "$ref": "#/definitions/default" - } + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/default_1" + } + }, + { + "type": "object", + "properties": { + "sameAs": { + "type": "string" + } + }, + "required": [ + "sameAs" + ] + } + ] }, "deletion": { "description": "This block defines under what circumstances the delete dialog is shown for objects of this layer.\nIf set, a dialog is shown to the user to (soft) delete the point.\nThe dialog is built to be user friendly and to prevent mistakes.\nIf deletion is not possible, the dialog will hide itself and show the reason of non-deletability instead.\n\nTo configure, the following values are possible:\n\n- false: never ever show the delete button\n- true: show the default delete button\n- undefined: use the mapcomplete default to show deletion or not. Currently, this is the same as 'false' but this will change in the future\n- or: a hash with options (see below)\n\n The delete dialog\n =================\n\n\n\n#### Hard deletion if enough experience\n\nA feature can only be deleted from OpenStreetMap by mapcomplete if:\n\n- It is a node\n- No ways or relations use the node\n- The logged-in user has enough experience OR the user is the only one to have edited the point previously\n- The logged-in user has no unread messages (or has a ton of experience)\n- The user did not select one of the 'non-delete-options' (see below)\n\nIn all other cases, a 'soft deletion' is used.\n\n#### Soft deletion\n\nA 'soft deletion' is when the point isn't deleted from OSM but retagged so that it'll won't how up in the mapcomplete theme anymore.\nThis makes it look like it was deleted, without doing damage. A fixme will be added to the point.\n\nNote that a soft deletion is _only_ possible if these tags are provided by the theme creator, as they'll be different for every theme\n\n#### No-delete options\n\nIn some cases, the contributor might want to delete something for the wrong reason (e.g. someone who wants to have a path removed \"because the path is on their private property\").\nHowever, the path exists in reality and should thus be on OSM - otherwise the next contributor will pass by and notice \"hey, there is a path missing here! Let me redraw it in OSM!)\n\nThe correct approach is to retag the feature in such a way that it is semantically correct *and* that it doesn't show up on the theme anymore.\nA no-delete option is offered as 'reason to delete it', but secretly retags.", @@ -1187,7 +1297,7 @@ "description": "Indicates if a point can be moved and configures the modalities.\n\nA feature can be moved by MapComplete if:\n\n- It is a point\n- The point is _not_ part of a way or a a relation.\n\nOff by default. Can be enabled by setting this flag or by configuring.", "anyOf": [ { - "$ref": "#/definitions/default_2" + "$ref": "#/definitions/default_3" }, { "type": "boolean" @@ -1202,7 +1312,7 @@ "description": "In some cases, a value is represented in a certain unit (such as meters for heigt/distance/..., km/h for speed, ...)\n\nSometimes, multiple denominations are possible (e.g. km/h vs mile/h; megawatt vs kilowatt vs gigawatt for power generators, ...)\n\nThis brings in some troubles, as there are multiple ways to write it (no denomitation, 'm' vs 'meter' 'metre', ...)\n\nNot only do we want to write consistent data to OSM, we also want to present this consistently to the user.\nThis is handled by defining units.\n\n# Rendering\n\nTo render a value with long (human) denomination, use {canonical(key)}\n\n# Usage\n\nFirst of all, you define which keys have units applied, for example:\n\n```\nunits: [\n appliesTo: [\"maxspeed\", \"maxspeed:hgv\", \"maxspeed:bus\"]\n applicableUnits: [\n ...\n ]\n]\n```\n\nApplicableUnits defines which is the canonical extension, how it is presented to the user, ...:\n\n```\napplicableUnits: [\n{\n canonicalDenomination: \"km/h\",\n alternativeDenomination: [\"km/u\", \"kmh\", \"kph\"]\n default: true,\n human: {\n en: \"kilometer/hour\",\n nl: \"kilometer/uur\"\n },\n humanShort: {\n en: \"km/h\",\n nl: \"km/u\"\n }\n},\n{\n canoncialDenomination: \"mph\",\n ... similar for miles an hour ...\n}\n]\n```\n\n\nIf this is defined, then every key which the denominations apply to (`maxspeed`, `maxspeed:hgv` and `maxspeed:bus`) will be rewritten at the metatagging stage:\nevery value will be parsed and the canonical extension will be added add presented to the other parts of the code.\n\nAlso, if a freeform text field is used, an extra dropdown with applicable denominations will be given", "type": "array", "items": { - "$ref": "#/definitions/default_1" + "$ref": "#/definitions/default_2" } } }, @@ -1212,6 +1322,37 @@ "source" ], "additionalProperties": false + }, + "default": { + "type": "object", + "properties": { + "icon": { + "type": "string" + }, + "text": {}, + "href": { + "type": "string" + }, + "newTab": { + "type": "boolean" + }, + "requirements": { + "type": "array", + "items": { + "enum": [ + "iframe", + "no-iframe", + "no-welcome-message", + "welcome-message" + ], + "type": "string" + } + } + }, + "required": [ + "href" + ], + "additionalProperties": false } }, "$schema": "http://json-schema.org/draft-07/schema#", diff --git a/Docs/Schemas/LayoutConfigJsonJSC.ts b/Docs/Schemas/LayoutConfigJsonJSC.ts index 9a33094f0d..14f441f166 100644 --- a/Docs/Schemas/LayoutConfigJsonJSC.ts +++ b/Docs/Schemas/LayoutConfigJsonJSC.ts @@ -11,36 +11,22 @@ export default { "type": "string" }, "maintainer": { - "description": "Who does maintian this preset?", + "description": "Who does maintain this preset?", "type": "string" }, "version": { "description": "A version number, either semantically or by date.\nShould be sortable, where the higher value is the later version", "type": "string" }, - "language": { - "description": "The supported language(s).\nThis should be a two-letter, lowercase code which identifies the language, e.g. \"en\", \"nl\", ...\nIf the theme supports multiple languages, use a list: `[\"en\",\"nl\",\"fr\"]` to allow the user to pick any of them", - "anyOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "string" - } - ] - }, "mustHaveLanguage": { - "description": "Only used in 'generateLayerOverview': if present, every translation will be checked to make sure it is fully translated", + "description": "Only used in 'generateLayerOverview': if present, every translation will be checked to make sure it is fully translated.\n\nThis must be a list of two-letter, lowercase codes which identifies the language, e.g. \"en\", \"nl\", ...", "type": "array", "items": { "type": "string" } }, "title": { - "description": "The title, as shown in the welcome message and the more-screen" + "description": "The title, as shown in the welcome message and the more-screen." }, "shortDescription": { "description": "A short description, showed as social description and in the 'more theme'-buttons.\nNote that if this one is not defined, the first sentence of 'description' is used" @@ -52,11 +38,11 @@ export default { "description": "A part of the description, shown under the login-button." }, "icon": { - "description": "The icon representing this theme.\nUsed as logo in the more-screen and (for official themes) as favicon, webmanifest logo, ...\nEither a URL or a base64 encoded value (which should include 'data:image/svg+xml;base64)", + "description": "The icon representing this theme.\nUsed as logo in the more-screen and (for official themes) as favicon, webmanifest logo, ...\nEither a URL or a base64 encoded value (which should include 'data:image/svg+xml;base64)\n\nType: icon", "type": "string" }, "socialImage": { - "description": "Link to a 'social image' which is included as og:image-tag on official themes.\nUseful to share the theme on social media.\nSee https://www.h3xed.com/web-and-internet/how-to-use-og-image-meta-tag-facebook-reddit for more information", + "description": "Link to a 'social image' which is included as og:image-tag on official themes.\nUseful to share the theme on social media.\nSee https://www.h3xed.com/web-and-internet/how-to-use-og-image-meta-tag-facebook-reddit for more information$\n\nType: image", "type": "string" }, "startZoom": { @@ -92,7 +78,7 @@ export default { "description": "Define some (overlay) slippy map tilesources", "type": "array", "items": { - "$ref": "#/definitions/default_5" + "$ref": "#/definitions/default_6" } }, "layers": { @@ -119,7 +105,14 @@ export default { } ] }, - "override": {} + "override": {}, + "hideTagRenderingsWithLabels": { + "description": "TagRenderings with any of these labels will be removed from the layer.\nNote that the 'id' and 'group' are considered labels too", + "type": "array", + "items": { + "type": "string" + } + } }, "required": [ "builtin", @@ -134,17 +127,27 @@ export default { }, "clustering": { "description": "If defined, data will be clustered.\nDefaults to {maxZoom: 16, minNeeded: 500}", - "type": "object", - "properties": { - "maxZoom": { - "description": "All zoom levels above 'maxzoom' are not clustered anymore.\nDefaults to 18", - "type": "number" + "anyOf": [ + { + "type": "object", + "properties": { + "maxZoom": { + "description": "All zoom levels above 'maxzoom' are not clustered anymore.\nDefaults to 18", + "type": "number" + }, + "minNeededElements": { + "description": "The number of elements per tile needed to start clustering\nIf clustering is defined, defaults to 250", + "type": "number" + } + } }, - "minNeededElements": { - "description": "The number of elements per tile needed to start clustering\nIf clustering is defined, defaults to 25", - "type": "number" + { + "enum": [ + false + ], + "type": "boolean" } - } + ] }, "customCss": { "description": "The URL of a custom CSS stylesheet to modify the layout", @@ -155,7 +158,7 @@ export default { "type": "boolean" }, "lockLocation": { - "description": "If set to true, the basemap will not scroll outside of the area visible on initial zoom.\nIf set to [[lat0, lon0], [lat1, lon1]], the map will not scroll outside of those bounds.\nOff by default, which will enable panning to the entire world", + "description": "If set to true, the basemap will not scroll outside of the area visible on initial zoom.\nIf set to [[lon, lat], [lon, lat]], the map will not scroll outside of those bounds.\nOff by default, which will enable panning to the entire world", "anyOf": [ { "type": "array", @@ -198,46 +201,59 @@ export default { "type": "number" } } - }, - { - "type": "boolean" } ] }, + "extraLink": { + "description": "Adds an additional button on the top-left of the application.\nThis can link to an arbitrary location.\n\nNote that {lat},{lon},{zoom}, {language} and {theme} will be replaced\n\nDefault: {icon: \"./assets/svg/pop-out.svg\", href: 'https://mapcomplete.osm.be/{theme}.html?lat={lat}&lon={lon}&z={zoom}, requirements: [\"iframe\",\"no-welcome-message]},", + "$ref": "#/definitions/default" + }, "enableUserBadge": { + "description": "If set to false, disables logging in.\nThe userbadge will be hidden, all login-buttons will be hidden and editing will be disabled", "type": "boolean" }, "enableShareScreen": { + "description": "If false, hides the tab 'share'-tab in the welcomeMessage", "type": "boolean" }, "enableMoreQuests": { + "description": "Hides the tab with more themes in the welcomeMessage", "type": "boolean" }, "enableLayers": { + "description": "If false, the layer selection/filter view will be hidden\nThe corresponding URL-parameter is 'fs-filters' instead of 'fs-layers'", "type": "boolean" }, "enableSearch": { + "description": "If set to false, hides the search bar", "type": "boolean" }, "enableAddNewPoints": { + "description": "If set to false, the ability to add new points or nodes will be disabled.\nEditing already existing features will still be possible", "type": "boolean" }, "enableGeolocation": { + "description": "If set to false, the 'geolocation'-button will be hidden.", "type": "boolean" }, "enableBackgroundLayerSelection": { + "description": "Enable switching the backgroundlayer.\nIf false, the quickswitch-buttons are removed (bottom left) and the dropdown in the layer selection is removed as well", "type": "boolean" }, "enableShowAllQuestions": { + "description": "If set to true, will show _all_ unanswered questions in a popup instead of just the next one", "type": "boolean" }, "enableDownload": { + "description": "If set to true, download button for the data will be shown (offers downloading as geojson and csv)", "type": "boolean" }, "enablePdfDownload": { + "description": "If set to true, exporting a pdf is enabled", "type": "boolean" }, - "enableIframePopout": { + "enableNoteImports": { + "description": "If true, notes will be loaded and parsed. If a note is an import (as created by the import_helper.html-tool from mapcomplete),\nthese notes will be shown if a relevant layer is present.", "type": "boolean" }, "overpassUrl": { @@ -263,7 +279,6 @@ export default { "description", "icon", "id", - "language", "layers", "maintainer", "startLat", @@ -353,8 +368,15 @@ export default { "description": "If 'group' is defined on many tagRenderings, these are grouped together when shown. The questions are grouped together as well.\nThe first tagRendering of a group will always be a sticky element.", "type": "string" }, + "labels": { + "description": "A list of labels. These are strings that are used for various purposes, e.g. to filter them away", + "type": "array", + "items": { + "type": "string" + } + }, "render": { - "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`" + "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`\ntype: rendered" }, "question": { "description": "If it turns out that this tagRendering doesn't match _any_ value, then we show this question.\nIf undefined, the question is never asked and this tagrendering is read-only" @@ -382,6 +404,9 @@ export default { "description": "The type of the text-field, e.g. 'string', 'nat', 'float', 'date',...\nSee Docs/SpecialInputElements.md and UI/Input/ValidatedTextField.ts for supported values", "type": "string" }, + "placeholder": { + "description": "A (translated) text that is shown (as gray text) within the textfield" + }, "helperArgs": { "description": "Extra parameters to initialize the input helper arguments.\nFor semantics, see the 'SpecialInputElements.md'", "type": "array", @@ -429,7 +454,11 @@ export default { ] }, "then": { - "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option" + "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option\ntype: rendered" + }, + "icon": { + "description": "An icon supporting this mapping; typically shown pretty small\nType: icon", + "type": "string" }, "hideInAnswer": { "description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}", @@ -472,7 +501,7 @@ export default { } } }, - "default_3": { + "default_4": { "description": "The PointRenderingConfig gives all details onto how to render a single point of a feature.\n\nThis can be used if:\n\n- The feature is a point\n- To render something at the centroid of an area, or at the start, end or projected centroid of a way", "type": "object", "properties": { @@ -480,17 +509,11 @@ export default { "description": "All the locations that this point should be rendered at.\nUsing `location: [\"point\", \"centroid\"] will always render centerpoint", "type": "array", "items": { - "enum": [ - "centroid", - "end", - "point", - "start" - ], "type": "string" } }, "icon": { - "description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;`", + "description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;`\n\nType: icon", "anyOf": [ { "$ref": "#/definitions/TagRenderingConfigJson" @@ -517,6 +540,7 @@ export default { ] }, "then": { + "description": "Badge to show\nType: icon", "anyOf": [ { "$ref": "#/definitions/TagRenderingConfigJson" @@ -571,7 +595,7 @@ export default { "location" ] }, - "default_4": { + "default_5": { "description": "The LineRenderingConfig gives all details onto how to render a single line of a feature.\n\nThis can be used if:\n\n- The feature is a line\n- The feature is an area", "type": "object", "properties": { @@ -593,7 +617,10 @@ export default { "$ref": "#/definitions/TagRenderingConfigJson" }, { - "type": "string" + "type": [ + "string", + "number" + ] } ] }, @@ -658,7 +685,7 @@ export default { } } }, - "default": { + "default_1": { "type": "object", "properties": { "id": { @@ -681,6 +708,26 @@ export default { "type": "string" } ] + }, + "default": { + "type": "boolean" + }, + "fields": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name" + ] + } } }, "required": [ @@ -751,7 +798,7 @@ export default { } } }, - "default_2": { + "default_3": { "type": "object", "properties": { "enableImproveAccuracy": { @@ -764,7 +811,7 @@ export default { } } }, - "default_1": { + "default_2": { "type": "object", "properties": { "appliesToKey": { @@ -791,7 +838,7 @@ export default { "appliesToKey" ] }, - "default_5": { + "default_6": { "description": "Configuration for a tilesource config", "type": "object", "properties": { @@ -844,7 +891,7 @@ export default { "description": "A description for this layer.\nShown in the layer selections and in the personel theme" }, "source": { - "description": "This determines where the data for the layer is fetched.\nThere are some options:\n\n# Query OSM directly\nsource: {osmTags: \"key=value\"}\n will fetch all objects with given tags from OSM.\n Currently, this will create a query to overpass and fetch the data - in the future this might fetch from the OSM API\n\n# Query OSM Via the overpass API with a custom script\nsource: {overpassScript: \"\"} when you want to do special things. _This should be really rare_.\n This means that the data will be pulled from overpass with this script, and will ignore the osmTags for the query\n However, for the rest of the pipeline, the OsmTags will _still_ be used. This is important to enable layers etc...\n\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}\nSome API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true` in the source for this\n\nNote that both geojson-options might set a flag 'isOsmCache' indicating that the data originally comes from OSM too\n\n\nNOTE: the previous format was 'overpassTags: AndOrTagConfigJson | string', which is interpreted as a shorthand for source: {osmTags: \"key=value\"}\n While still supported, this is considered deprecated", + "description": "This determines where the data for the layer is fetched: from OSM or from an external geojson dataset.\n\nIf no 'geojson' is defined, data will be fetched from overpass and the OSM-API.\n\nEvery source _must_ define which tags _must_ be present in order to be picked up.", "anyOf": [ { "allOf": [ @@ -852,6 +899,7 @@ export default { "type": "object", "properties": { "osmTags": { + "description": "Every source must set which tags have to be present in order to load the given layer.", "anyOf": [ { "$ref": "#/definitions/AndOrTagConfigJson" @@ -861,8 +909,9 @@ export default { } ] }, - "overpassScript": { - "type": "string" + "maxCacheAge": { + "description": "The maximum amount of seconds that a tile is allowed to linger in the cache", + "type": "number" } }, "required": [ @@ -872,9 +921,8 @@ export default { { "type": "object", "properties": { - "maxCacheAge": { - "description": "The maximum amount of seconds that a tile is allowed to linger in the cache", - "type": "number" + "overpassScript": { + "type": "string" } } } @@ -886,6 +934,7 @@ export default { "type": "object", "properties": { "osmTags": { + "description": "Every source must set which tags have to be present in order to load the given layer.", "anyOf": [ { "$ref": "#/definitions/AndOrTagConfigJson" @@ -895,39 +944,49 @@ export default { } ] }, - "geoJson": { - "type": "string" - }, - "geoJsonZoomLevel": { + "maxCacheAge": { + "description": "The maximum amount of seconds that a tile is allowed to linger in the cache", "type": "number" - }, - "isOsmCache": { - "type": "boolean" - }, - "mercatorCrs": { - "type": "boolean" } }, "required": [ - "geoJson", "osmTags" ] }, { "type": "object", "properties": { - "maxCacheAge": { - "description": "The maximum amount of seconds that a tile is allowed to linger in the cache", + "geoJson": { + "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}", + "type": "string" + }, + "geoJsonZoomLevel": { + "description": "To load a tiled geojson layer, set the zoomlevel of the tiles", "type": "number" + }, + "isOsmCache": { + "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache", + "type": "boolean" + }, + "mercatorCrs": { + "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true` in the source for this", + "type": "boolean" + }, + "idKey": { + "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'", + "type": "string" } - } + }, + "required": [ + "geoJson" + ] } ] } ] }, "calculatedTags": { - "description": "A list of extra tags to calculate, specified as \"keyToAssignTo=javascript-expression\".\nThere are a few extra functions available. Refer to Docs/CalculatedTags.md for more information\nThe functions will be run in order, e.g.\n[\n \"_max_overlap_m2=Math.max(...feat.overlapsWith(\"someOtherLayer\").map(o => o.overlap))\n \"_max_overlap_ratio=Number(feat._max_overlap_m2)/feat.area\n]", + "description": "A list of extra tags to calculate, specified as \"keyToAssignTo=javascript-expression\".\nThere are a few extra functions available. Refer to Docs/CalculatedTags.md for more information\nThe functions will be run in order, e.g.\n[\n \"_max_overlap_m2=Math.max(...feat.overlapsWith(\"someOtherLayer\").map(o => o.overlap))\n \"_max_overlap_ratio=Number(feat._max_overlap_m2)/feat.area\n]\n\nThe specified tags are evaluated lazily. E.g. if a calculated tag is only used in the popup (e.g. the number of nearby features),\nthe expensive calculation will only be performed then for that feature. This avoids clogging up the contributors PC when all features are loaded.\n\nIf a tag has to be evaluated strictly, use ':=' instead:\n\n[\n\"_some_key:=some_javascript_expression\"\n]", "type": "array", "items": { "type": "string" @@ -941,6 +1000,10 @@ export default { "description": "This tag rendering should either be 'yes' or 'no'. If 'no' is returned, then the feature will be hidden from view.\nThis is useful to hide certain features from view.\n\nImportant: hiding features does not work dynamically, but is only calculated when the data is first renders.\nThis implies that it is not possible to hide a feature after a tagging change\n\nThe default value is 'yes'", "$ref": "#/definitions/TagRenderingConfigJson" }, + "forceLoad": { + "description": "Advanced option - might be set by the theme compiler\n\nIf true, this data will _always_ be loaded, even if the theme is disabled", + "type": "boolean" + }, "minzoom": { "description": "The minimum needed zoomlevel required before loading of the data start\nDefault: 0", "type": "number" @@ -965,31 +1028,55 @@ export default { ] }, "titleIcons": { - "description": "Small icons shown next to the title.\nIf not specified, the OsmLink and wikipedia links will be used by default.\nUse an empty array to hide them.\nNote that \"defaults\" will insert all the default titleIcons", - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/TagRenderingConfigJson" - }, - { - "type": "string" + "description": "Small icons shown next to the title.\nIf not specified, the OsmLink and wikipedia links will be used by default.\nUse an empty array to hide them.\nNote that \"defaults\" will insert all the default titleIcons (which are added automatically)\n\nType: icon[]", + "anyOf": [ + { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/TagRenderingConfigJson" + }, + { + "type": "string" + } + ] } - ] - } + }, + { + "type": "array", + "items": [ + { + "type": "string", + "enum": [ + "defaults" + ] + } + ], + "minItems": 1, + "maxItems": 1 + } + ] }, "mapRendering": { - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/default_3" - }, - { - "$ref": "#/definitions/default_4" + "anyOf": [ + { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/default_4" + }, + { + "$ref": "#/definitions/default_5" + } + ] } - ] - } + }, + { + "type": "null" + } + ] }, "passAllFeatures": { "description": "If set, this layer will pass all the features it receives onto the next layer.\nThis is ideal for decoration, e.g. directionss on cameras", @@ -1014,6 +1101,13 @@ export default { "description": { "description": "The _first sentence_ of the description is shown on the button of the `add` menu.\nThe full description is shown in the confirmation dialog.\n\n(The first sentence is until the first '.'-character in the description)" }, + "exampleImages": { + "description": "Example images, which show real-life pictures of what such a feature might look like\n\nType: image", + "type": "array", + "items": { + "type": "string" + } + }, "preciseInput": { "description": "If set, the user will prompted to confirm the location before actually adding the data.\nThis will be with a 'drag crosshair'-method.\n\nIf 'preferredBackgroundCategory' is set, the element will attempt to pick a background layer of that category.", "anyOf": [ @@ -1097,25 +1191,26 @@ export default { "type": "object", "properties": { "rewrite": { - "type": "array", - "items": { - "type": "object", - "properties": { - "sourceString": { + "type": "object", + "properties": { + "sourceString": { + "type": "array", + "items": { "type": "string" - }, - "into": { - "type": "array", - "items": { - "type": "string" - } } }, - "required": [ - "into", - "sourceString" - ] - } + "into": { + "type": "array", + "items": { + "type": "array", + "items": {} + } + } + }, + "required": [ + "into", + "sourceString" + ] }, "renderings": { "type": "array", @@ -1157,10 +1252,25 @@ export default { }, "filter": { "description": "All the extra questions for filtering", - "type": "array", - "items": { - "$ref": "#/definitions/default" - } + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/default_1" + } + }, + { + "type": "object", + "properties": { + "sameAs": { + "type": "string" + } + }, + "required": [ + "sameAs" + ] + } + ] }, "deletion": { "description": "This block defines under what circumstances the delete dialog is shown for objects of this layer.\nIf set, a dialog is shown to the user to (soft) delete the point.\nThe dialog is built to be user friendly and to prevent mistakes.\nIf deletion is not possible, the dialog will hide itself and show the reason of non-deletability instead.\n\nTo configure, the following values are possible:\n\n- false: never ever show the delete button\n- true: show the default delete button\n- undefined: use the mapcomplete default to show deletion or not. Currently, this is the same as 'false' but this will change in the future\n- or: a hash with options (see below)\n\n The delete dialog\n =================\n\n\n\n#### Hard deletion if enough experience\n\nA feature can only be deleted from OpenStreetMap by mapcomplete if:\n\n- It is a node\n- No ways or relations use the node\n- The logged-in user has enough experience OR the user is the only one to have edited the point previously\n- The logged-in user has no unread messages (or has a ton of experience)\n- The user did not select one of the 'non-delete-options' (see below)\n\nIn all other cases, a 'soft deletion' is used.\n\n#### Soft deletion\n\nA 'soft deletion' is when the point isn't deleted from OSM but retagged so that it'll won't how up in the mapcomplete theme anymore.\nThis makes it look like it was deleted, without doing damage. A fixme will be added to the point.\n\nNote that a soft deletion is _only_ possible if these tags are provided by the theme creator, as they'll be different for every theme\n\n#### No-delete options\n\nIn some cases, the contributor might want to delete something for the wrong reason (e.g. someone who wants to have a path removed \"because the path is on their private property\").\nHowever, the path exists in reality and should thus be on OSM - otherwise the next contributor will pass by and notice \"hey, there is a path missing here! Let me redraw it in OSM!)\n\nThe correct approach is to retag the feature in such a way that it is semantically correct *and* that it doesn't show up on the theme anymore.\nA no-delete option is offered as 'reason to delete it', but secretly retags.", @@ -1177,7 +1287,7 @@ export default { "description": "Indicates if a point can be moved and configures the modalities.\n\nA feature can be moved by MapComplete if:\n\n- It is a point\n- The point is _not_ part of a way or a a relation.\n\nOff by default. Can be enabled by setting this flag or by configuring.", "anyOf": [ { - "$ref": "#/definitions/default_2" + "$ref": "#/definitions/default_3" }, { "type": "boolean" @@ -1192,7 +1302,7 @@ export default { "description": "In some cases, a value is represented in a certain unit (such as meters for heigt/distance/..., km/h for speed, ...)\n\nSometimes, multiple denominations are possible (e.g. km/h vs mile/h; megawatt vs kilowatt vs gigawatt for power generators, ...)\n\nThis brings in some troubles, as there are multiple ways to write it (no denomitation, 'm' vs 'meter' 'metre', ...)\n\nNot only do we want to write consistent data to OSM, we also want to present this consistently to the user.\nThis is handled by defining units.\n\n# Rendering\n\nTo render a value with long (human) denomination, use {canonical(key)}\n\n# Usage\n\nFirst of all, you define which keys have units applied, for example:\n\n```\nunits: [\n appliesTo: [\"maxspeed\", \"maxspeed:hgv\", \"maxspeed:bus\"]\n applicableUnits: [\n ...\n ]\n]\n```\n\nApplicableUnits defines which is the canonical extension, how it is presented to the user, ...:\n\n```\napplicableUnits: [\n{\n canonicalDenomination: \"km/h\",\n alternativeDenomination: [\"km/u\", \"kmh\", \"kph\"]\n default: true,\n human: {\n en: \"kilometer/hour\",\n nl: \"kilometer/uur\"\n },\n humanShort: {\n en: \"km/h\",\n nl: \"km/u\"\n }\n},\n{\n canoncialDenomination: \"mph\",\n ... similar for miles an hour ...\n}\n]\n```\n\n\nIf this is defined, then every key which the denominations apply to (`maxspeed`, `maxspeed:hgv` and `maxspeed:bus`) will be rewritten at the metatagging stage:\nevery value will be parsed and the canonical extension will be added add presented to the other parts of the code.\n\nAlso, if a freeform text field is used, an extra dropdown with applicable denominations will be given", "type": "array", "items": { - "$ref": "#/definitions/default_1" + "$ref": "#/definitions/default_2" } } }, @@ -1201,6 +1311,36 @@ export default { "mapRendering", "source" ] + }, + "default": { + "type": "object", + "properties": { + "icon": { + "type": "string" + }, + "text": {}, + "href": { + "type": "string" + }, + "newTab": { + "type": "boolean" + }, + "requirements": { + "type": "array", + "items": { + "enum": [ + "iframe", + "no-iframe", + "no-welcome-message", + "welcome-message" + ], + "type": "string" + } + } + }, + "required": [ + "href" + ] } }, "$schema": "http://json-schema.org/draft-07/schema#" diff --git a/Docs/Schemas/LineRenderingConfigJson.schema.json b/Docs/Schemas/LineRenderingConfigJson.schema.json index 979288fd08..a410d218d0 100644 --- a/Docs/Schemas/LineRenderingConfigJson.schema.json +++ b/Docs/Schemas/LineRenderingConfigJson.schema.json @@ -20,7 +20,10 @@ "$ref": "#/definitions/TagRenderingConfigJson" }, { - "type": "string" + "type": [ + "string", + "number" + ] } ] }, @@ -167,8 +170,15 @@ "description": "If 'group' is defined on many tagRenderings, these are grouped together when shown. The questions are grouped together as well.\nThe first tagRendering of a group will always be a sticky element.", "type": "string" }, + "labels": { + "description": "A list of labels. These are strings that are used for various purposes, e.g. to filter them away", + "type": "array", + "items": { + "type": "string" + } + }, "render": { - "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`" + "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`\ntype: rendered" }, "question": { "description": "If it turns out that this tagRendering doesn't match _any_ value, then we show this question.\nIf undefined, the question is never asked and this tagrendering is read-only" @@ -196,6 +206,9 @@ "description": "The type of the text-field, e.g. 'string', 'nat', 'float', 'date',...\nSee Docs/SpecialInputElements.md and UI/Input/ValidatedTextField.ts for supported values", "type": "string" }, + "placeholder": { + "description": "A (translated) text that is shown (as gray text) within the textfield" + }, "helperArgs": { "description": "Extra parameters to initialize the input helper arguments.\nFor semantics, see the 'SpecialInputElements.md'", "type": "array", @@ -243,7 +256,11 @@ ] }, "then": { - "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option" + "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option\ntype: rendered" + }, + "icon": { + "description": "An icon supporting this mapping; typically shown pretty small\nType: icon", + "type": "string" }, "hideInAnswer": { "description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}", diff --git a/Docs/Schemas/LineRenderingConfigJsonJSC.ts b/Docs/Schemas/LineRenderingConfigJsonJSC.ts index c561894ae4..918f1b4c89 100644 --- a/Docs/Schemas/LineRenderingConfigJsonJSC.ts +++ b/Docs/Schemas/LineRenderingConfigJsonJSC.ts @@ -20,7 +20,10 @@ export default { "$ref": "#/definitions/TagRenderingConfigJson" }, { - "type": "string" + "type": [ + "string", + "number" + ] } ] }, @@ -165,8 +168,15 @@ export default { "description": "If 'group' is defined on many tagRenderings, these are grouped together when shown. The questions are grouped together as well.\nThe first tagRendering of a group will always be a sticky element.", "type": "string" }, + "labels": { + "description": "A list of labels. These are strings that are used for various purposes, e.g. to filter them away", + "type": "array", + "items": { + "type": "string" + } + }, "render": { - "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`" + "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`\ntype: rendered" }, "question": { "description": "If it turns out that this tagRendering doesn't match _any_ value, then we show this question.\nIf undefined, the question is never asked and this tagrendering is read-only" @@ -194,6 +204,9 @@ export default { "description": "The type of the text-field, e.g. 'string', 'nat', 'float', 'date',...\nSee Docs/SpecialInputElements.md and UI/Input/ValidatedTextField.ts for supported values", "type": "string" }, + "placeholder": { + "description": "A (translated) text that is shown (as gray text) within the textfield" + }, "helperArgs": { "description": "Extra parameters to initialize the input helper arguments.\nFor semantics, see the 'SpecialInputElements.md'", "type": "array", @@ -241,7 +254,11 @@ export default { ] }, "then": { - "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option" + "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option\ntype: rendered" + }, + "icon": { + "description": "An icon supporting this mapping; typically shown pretty small\nType: icon", + "type": "string" }, "hideInAnswer": { "description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}", diff --git a/Docs/Schemas/PointRenderingConfigJson.schema.json b/Docs/Schemas/PointRenderingConfigJson.schema.json index 9b2aae70b7..5f14ee615e 100644 --- a/Docs/Schemas/PointRenderingConfigJson.schema.json +++ b/Docs/Schemas/PointRenderingConfigJson.schema.json @@ -6,17 +6,11 @@ "description": "All the locations that this point should be rendered at.\nUsing `location: [\"point\", \"centroid\"] will always render centerpoint", "type": "array", "items": { - "enum": [ - "centroid", - "end", - "point", - "start" - ], "type": "string" } }, "icon": { - "description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;`", + "description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;`\n\nType: icon", "anyOf": [ { "$ref": "#/definitions/TagRenderingConfigJson" @@ -43,6 +37,7 @@ ] }, "then": { + "description": "Badge to show\nType: icon", "anyOf": [ { "$ref": "#/definitions/TagRenderingConfigJson" @@ -179,8 +174,15 @@ "description": "If 'group' is defined on many tagRenderings, these are grouped together when shown. The questions are grouped together as well.\nThe first tagRendering of a group will always be a sticky element.", "type": "string" }, + "labels": { + "description": "A list of labels. These are strings that are used for various purposes, e.g. to filter them away", + "type": "array", + "items": { + "type": "string" + } + }, "render": { - "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`" + "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`\ntype: rendered" }, "question": { "description": "If it turns out that this tagRendering doesn't match _any_ value, then we show this question.\nIf undefined, the question is never asked and this tagrendering is read-only" @@ -208,6 +210,9 @@ "description": "The type of the text-field, e.g. 'string', 'nat', 'float', 'date',...\nSee Docs/SpecialInputElements.md and UI/Input/ValidatedTextField.ts for supported values", "type": "string" }, + "placeholder": { + "description": "A (translated) text that is shown (as gray text) within the textfield" + }, "helperArgs": { "description": "Extra parameters to initialize the input helper arguments.\nFor semantics, see the 'SpecialInputElements.md'", "type": "array", @@ -255,7 +260,11 @@ ] }, "then": { - "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option" + "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option\ntype: rendered" + }, + "icon": { + "description": "An icon supporting this mapping; typically shown pretty small\nType: icon", + "type": "string" }, "hideInAnswer": { "description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}", diff --git a/Docs/Schemas/PointRenderingConfigJsonJSC.ts b/Docs/Schemas/PointRenderingConfigJsonJSC.ts index c2f6a5b491..30827308f6 100644 --- a/Docs/Schemas/PointRenderingConfigJsonJSC.ts +++ b/Docs/Schemas/PointRenderingConfigJsonJSC.ts @@ -6,17 +6,11 @@ export default { "description": "All the locations that this point should be rendered at.\nUsing `location: [\"point\", \"centroid\"] will always render centerpoint", "type": "array", "items": { - "enum": [ - "centroid", - "end", - "point", - "start" - ], "type": "string" } }, "icon": { - "description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;`", + "description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;`\n\nType: icon", "anyOf": [ { "$ref": "#/definitions/TagRenderingConfigJson" @@ -43,6 +37,7 @@ export default { ] }, "then": { + "description": "Badge to show\nType: icon", "anyOf": [ { "$ref": "#/definitions/TagRenderingConfigJson" @@ -177,8 +172,15 @@ export default { "description": "If 'group' is defined on many tagRenderings, these are grouped together when shown. The questions are grouped together as well.\nThe first tagRendering of a group will always be a sticky element.", "type": "string" }, + "labels": { + "description": "A list of labels. These are strings that are used for various purposes, e.g. to filter them away", + "type": "array", + "items": { + "type": "string" + } + }, "render": { - "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`" + "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`\ntype: rendered" }, "question": { "description": "If it turns out that this tagRendering doesn't match _any_ value, then we show this question.\nIf undefined, the question is never asked and this tagrendering is read-only" @@ -206,6 +208,9 @@ export default { "description": "The type of the text-field, e.g. 'string', 'nat', 'float', 'date',...\nSee Docs/SpecialInputElements.md and UI/Input/ValidatedTextField.ts for supported values", "type": "string" }, + "placeholder": { + "description": "A (translated) text that is shown (as gray text) within the textfield" + }, "helperArgs": { "description": "Extra parameters to initialize the input helper arguments.\nFor semantics, see the 'SpecialInputElements.md'", "type": "array", @@ -253,7 +258,11 @@ export default { ] }, "then": { - "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option" + "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option\ntype: rendered" + }, + "icon": { + "description": "An icon supporting this mapping; typically shown pretty small\nType: icon", + "type": "string" }, "hideInAnswer": { "description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}", diff --git a/Docs/Schemas/TagRenderingConfigJson.schema.json b/Docs/Schemas/TagRenderingConfigJson.schema.json index f445618fe7..9b74df0328 100644 --- a/Docs/Schemas/TagRenderingConfigJson.schema.json +++ b/Docs/Schemas/TagRenderingConfigJson.schema.json @@ -10,8 +10,15 @@ "description": "If 'group' is defined on many tagRenderings, these are grouped together when shown. The questions are grouped together as well.\nThe first tagRendering of a group will always be a sticky element.", "type": "string" }, + "labels": { + "description": "A list of labels. These are strings that are used for various purposes, e.g. to filter them away", + "type": "array", + "items": { + "type": "string" + } + }, "render": { - "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`" + "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`\ntype: rendered" }, "question": { "description": "If it turns out that this tagRendering doesn't match _any_ value, then we show this question.\nIf undefined, the question is never asked and this tagrendering is read-only" @@ -39,6 +46,9 @@ "description": "The type of the text-field, e.g. 'string', 'nat', 'float', 'date',...\nSee Docs/SpecialInputElements.md and UI/Input/ValidatedTextField.ts for supported values", "type": "string" }, + "placeholder": { + "description": "A (translated) text that is shown (as gray text) within the textfield" + }, "helperArgs": { "description": "Extra parameters to initialize the input helper arguments.\nFor semantics, see the 'SpecialInputElements.md'", "type": "array", @@ -86,7 +96,11 @@ ] }, "then": { - "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option" + "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option\ntype: rendered" + }, + "icon": { + "description": "An icon supporting this mapping; typically shown pretty small\nType: icon", + "type": "string" }, "hideInAnswer": { "description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}", diff --git a/Docs/Schemas/TagRenderingConfigJsonJSC.ts b/Docs/Schemas/TagRenderingConfigJsonJSC.ts index e9decfe53e..2bc849c6e4 100644 --- a/Docs/Schemas/TagRenderingConfigJsonJSC.ts +++ b/Docs/Schemas/TagRenderingConfigJsonJSC.ts @@ -10,8 +10,15 @@ export default { "description": "If 'group' is defined on many tagRenderings, these are grouped together when shown. The questions are grouped together as well.\nThe first tagRendering of a group will always be a sticky element.", "type": "string" }, + "labels": { + "description": "A list of labels. These are strings that are used for various purposes, e.g. to filter them away", + "type": "array", + "items": { + "type": "string" + } + }, "render": { - "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`" + "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`\ntype: rendered" }, "question": { "description": "If it turns out that this tagRendering doesn't match _any_ value, then we show this question.\nIf undefined, the question is never asked and this tagrendering is read-only" @@ -39,6 +46,9 @@ export default { "description": "The type of the text-field, e.g. 'string', 'nat', 'float', 'date',...\nSee Docs/SpecialInputElements.md and UI/Input/ValidatedTextField.ts for supported values", "type": "string" }, + "placeholder": { + "description": "A (translated) text that is shown (as gray text) within the textfield" + }, "helperArgs": { "description": "Extra parameters to initialize the input helper arguments.\nFor semantics, see the 'SpecialInputElements.md'", "type": "array", @@ -86,7 +96,11 @@ export default { ] }, "then": { - "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option" + "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option\ntype: rendered" + }, + "icon": { + "description": "An icon supporting this mapping; typically shown pretty small\nType: icon", + "type": "string" }, "hideInAnswer": { "description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}", diff --git a/Docs/Schemas/TilesourceConfigJson.schema.json b/Docs/Schemas/TilesourceConfigJson.schema.json index cd80fd51f8..cef3d5386a 100644 --- a/Docs/Schemas/TilesourceConfigJson.schema.json +++ b/Docs/Schemas/TilesourceConfigJson.schema.json @@ -118,8 +118,15 @@ "description": "If 'group' is defined on many tagRenderings, these are grouped together when shown. The questions are grouped together as well.\nThe first tagRendering of a group will always be a sticky element.", "type": "string" }, + "labels": { + "description": "A list of labels. These are strings that are used for various purposes, e.g. to filter them away", + "type": "array", + "items": { + "type": "string" + } + }, "render": { - "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`" + "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`\ntype: rendered" }, "question": { "description": "If it turns out that this tagRendering doesn't match _any_ value, then we show this question.\nIf undefined, the question is never asked and this tagrendering is read-only" @@ -147,6 +154,9 @@ "description": "The type of the text-field, e.g. 'string', 'nat', 'float', 'date',...\nSee Docs/SpecialInputElements.md and UI/Input/ValidatedTextField.ts for supported values", "type": "string" }, + "placeholder": { + "description": "A (translated) text that is shown (as gray text) within the textfield" + }, "helperArgs": { "description": "Extra parameters to initialize the input helper arguments.\nFor semantics, see the 'SpecialInputElements.md'", "type": "array", @@ -194,7 +204,11 @@ ] }, "then": { - "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option" + "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option\ntype: rendered" + }, + "icon": { + "description": "An icon supporting this mapping; typically shown pretty small\nType: icon", + "type": "string" }, "hideInAnswer": { "description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}", @@ -238,7 +252,7 @@ }, "additionalProperties": false }, - "default_3": { + "default_4": { "description": "The PointRenderingConfig gives all details onto how to render a single point of a feature.\n\nThis can be used if:\n\n- The feature is a point\n- To render something at the centroid of an area, or at the start, end or projected centroid of a way", "type": "object", "properties": { @@ -246,17 +260,11 @@ "description": "All the locations that this point should be rendered at.\nUsing `location: [\"point\", \"centroid\"] will always render centerpoint", "type": "array", "items": { - "enum": [ - "centroid", - "end", - "point", - "start" - ], "type": "string" } }, "icon": { - "description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;`", + "description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;`\n\nType: icon", "anyOf": [ { "$ref": "#/definitions/TagRenderingConfigJson" @@ -283,6 +291,7 @@ ] }, "then": { + "description": "Badge to show\nType: icon", "anyOf": [ { "$ref": "#/definitions/TagRenderingConfigJson" @@ -338,7 +347,7 @@ ], "additionalProperties": false }, - "default_4": { + "default_5": { "description": "The LineRenderingConfig gives all details onto how to render a single line of a feature.\n\nThis can be used if:\n\n- The feature is a line\n- The feature is an area", "type": "object", "properties": { @@ -360,7 +369,10 @@ "$ref": "#/definitions/TagRenderingConfigJson" }, { - "type": "string" + "type": [ + "string", + "number" + ] } ] }, @@ -426,7 +438,7 @@ }, "additionalProperties": false }, - "default": { + "default_1": { "type": "object", "properties": { "id": { @@ -449,6 +461,26 @@ "type": "string" } ] + }, + "default": { + "type": "boolean" + }, + "fields": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name" + ] + } } }, "required": [ @@ -521,7 +553,7 @@ }, "additionalProperties": false }, - "default_2": { + "default_3": { "type": "object", "properties": { "enableImproveAccuracy": { @@ -535,7 +567,7 @@ }, "additionalProperties": false }, - "default_1": { + "default_2": { "type": "object", "properties": { "appliesToKey": { diff --git a/Docs/Schemas/TilesourceConfigJsonJSC.ts b/Docs/Schemas/TilesourceConfigJsonJSC.ts index 61e69a8340..15178b758e 100644 --- a/Docs/Schemas/TilesourceConfigJsonJSC.ts +++ b/Docs/Schemas/TilesourceConfigJsonJSC.ts @@ -116,8 +116,15 @@ export default { "description": "If 'group' is defined on many tagRenderings, these are grouped together when shown. The questions are grouped together as well.\nThe first tagRendering of a group will always be a sticky element.", "type": "string" }, + "labels": { + "description": "A list of labels. These are strings that are used for various purposes, e.g. to filter them away", + "type": "array", + "items": { + "type": "string" + } + }, "render": { - "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`" + "description": "Renders this value. Note that \"{key}\"-parts are substituted by the corresponding values of the element.\nIf neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value.\n\nNote that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
`\ntype: rendered" }, "question": { "description": "If it turns out that this tagRendering doesn't match _any_ value, then we show this question.\nIf undefined, the question is never asked and this tagrendering is read-only" @@ -145,6 +152,9 @@ export default { "description": "The type of the text-field, e.g. 'string', 'nat', 'float', 'date',...\nSee Docs/SpecialInputElements.md and UI/Input/ValidatedTextField.ts for supported values", "type": "string" }, + "placeholder": { + "description": "A (translated) text that is shown (as gray text) within the textfield" + }, "helperArgs": { "description": "Extra parameters to initialize the input helper arguments.\nFor semantics, see the 'SpecialInputElements.md'", "type": "array", @@ -192,7 +202,11 @@ export default { ] }, "then": { - "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option" + "description": "If the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option\ntype: rendered" + }, + "icon": { + "description": "An icon supporting this mapping; typically shown pretty small\nType: icon", + "type": "string" }, "hideInAnswer": { "description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}", @@ -235,7 +249,7 @@ export default { } } }, - "default_3": { + "default_4": { "description": "The PointRenderingConfig gives all details onto how to render a single point of a feature.\n\nThis can be used if:\n\n- The feature is a point\n- To render something at the centroid of an area, or at the start, end or projected centroid of a way", "type": "object", "properties": { @@ -243,17 +257,11 @@ export default { "description": "All the locations that this point should be rendered at.\nUsing `location: [\"point\", \"centroid\"] will always render centerpoint", "type": "array", "items": { - "enum": [ - "centroid", - "end", - "point", - "start" - ], "type": "string" } }, "icon": { - "description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;`", + "description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;`\n\nType: icon", "anyOf": [ { "$ref": "#/definitions/TagRenderingConfigJson" @@ -280,6 +288,7 @@ export default { ] }, "then": { + "description": "Badge to show\nType: icon", "anyOf": [ { "$ref": "#/definitions/TagRenderingConfigJson" @@ -334,7 +343,7 @@ export default { "location" ] }, - "default_4": { + "default_5": { "description": "The LineRenderingConfig gives all details onto how to render a single line of a feature.\n\nThis can be used if:\n\n- The feature is a line\n- The feature is an area", "type": "object", "properties": { @@ -356,7 +365,10 @@ export default { "$ref": "#/definitions/TagRenderingConfigJson" }, { - "type": "string" + "type": [ + "string", + "number" + ] } ] }, @@ -421,7 +433,7 @@ export default { } } }, - "default": { + "default_1": { "type": "object", "properties": { "id": { @@ -444,6 +456,26 @@ export default { "type": "string" } ] + }, + "default": { + "type": "boolean" + }, + "fields": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name" + ] + } } }, "required": [ @@ -514,7 +546,7 @@ export default { } } }, - "default_2": { + "default_3": { "type": "object", "properties": { "enableImproveAccuracy": { @@ -527,7 +559,7 @@ export default { } } }, - "default_1": { + "default_2": { "type": "object", "properties": { "appliesToKey": { diff --git a/Docs/SpecialInputElements.md b/Docs/SpecialInputElements.md index 2ed9307d0e..d6cde05f95 100644 --- a/Docs/SpecialInputElements.md +++ b/Docs/SpecialInputElements.md @@ -11,11 +11,11 @@ + [string](#string) + [text](#text) + [date](#date) - + [direction](#direction) - + [length](#length) - + [wikidata](#wikidata) - + [int](#int) + [nat](#nat) + + [int](#int) + + [decimal](#decimal) + + [direction](#direction) + + [wikidata](#wikidata) + [pnat](#pnat) + [float](#float) + [pfloat](#pfloat) @@ -35,7 +35,7 @@ The listed types here trigger a special input element. Use them in `tagrendering -A basic string +A simple piece of text @@ -43,7 +43,7 @@ A basic string -A string, but allows input of longer strings more comfortably and supports newlines (a text area) +A longer piece of text @@ -51,7 +51,31 @@ A string, but allows input of longer strings more comfortably and supports newli -A date +A date with date picker + + + +### nat + + + +A positive number or zero + + + +### int + + + +A number + + + +### decimal + + + +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"] @@ -63,14 +87,6 @@ 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"] - - - ### wikidata @@ -118,22 +134,6 @@ removePostfixes | remove these snippets of text from the end of the passed strin -### int - - - -A number - - - -### nat - - - -A positive number or zero - - - ### pnat @@ -154,7 +154,7 @@ A decimal -A positive decimal (incl zero) +A positive decimal (inclusive zero) @@ -170,7 +170,7 @@ An email adress -A url +The validatedTextField will format URLs to always be valid and have a https://-header (even though the 'https'-part will be hidden from the user @@ -231,4 +231,4 @@ postfix | Piece of text that will always be added to the end of the generated op Shows a color picker -This document is autogenerated from ValidatedTextField.ts \ No newline at end of file +This document is autogenerated from [UI/Input/ValidatedTextField.ts](https://github.com/pietervdvn/MapComplete/blob/develop/UI/Input/ValidatedTextField.ts) \ No newline at end of file diff --git a/Docs/SpecialRenderings.md b/Docs/SpecialRenderings.md index 1c2931f242..d95222141f 100644 --- a/Docs/SpecialRenderings.md +++ b/Docs/SpecialRenderings.md @@ -213,8 +213,8 @@ path | _undefined_ | The path (or shorthand) that should be returned name | default | description ------ | --------- | ------------- key | _undefined_ | The key to be read and to generate a histogram from -title | _empty string_ | The text to put above the given values column -countHeader | _empty string_ | The text to put above the counts +title | _empty string_ | This text will be placed above the texts (in the first column of the visulasition) +countHeader | _empty string_ | This text will be placed above the bars colors* | _undefined_ | (Matches all resting arguments - optional) Matches a regex onto a color value, e.g. `3[a-zA-Z+-]*:#33cc33` @@ -453,7 +453,7 @@ way_to_conflate | _undefined_ | The key, of which the corresponding value is the name | default | description ------ | --------- | ------------- -feature_ids | _undefined_ | A JSOn-serialized list of IDs of features to apply the tagging on +feature_ids | _undefined_ | A JSON-serialized list of IDs of features to apply the tagging on keys | _undefined_ | One key (or multiple keys, seperated by ';') of the attribute that should be copied onto the other features. text | _undefined_ | The text to show on the button autoapply | _undefined_ | A boolean indicating wether this tagging should be applied automatically if the relevant tags on this object are changed. A visual element indicating the multi_apply is still shown @@ -606,7 +606,7 @@ Id-key | id | The property name where the ID of the note to close can be found A button to run many actions for many features at once. To effectively use this button, you'll need some ingredients: -- A target layer with features for which an action is defined in a tag rendering. The following special visualisations support an autoAction: tag_apply +- A target layer with features for which an action is defined in a tag rendering. The following special visualisations support an autoAction: import_way_button, tag_apply - A host feature to place the auto-action on. This can be a big outline (such as a city). Another good option for this is the [current_view](./BuiltinLayers.md#current_view) - Then, use a calculated tag on the host feature to determine the overlapping object ids - At last, add this component @@ -624,4 +624,4 @@ icon | ./assets/svg/robot.svg | The icon to show on the button `{auto_apply(,,,,./assets/svg/robot.svg)}` -This document is autogenerated from UI/SpecialVisualisations.ts \ No newline at end of file +This document is autogenerated from [UI/SpecialVisualizations.ts](https://github.com/pietervdvn/MapComplete/blob/develop/UI/SpecialVisualizations.ts) \ No newline at end of file diff --git a/Docs/TagInfo/mapcomplete_aed.json b/Docs/TagInfo/mapcomplete_aed.json index 8003a6d061..cede399932 100644 --- a/Docs/TagInfo/mapcomplete_aed.json +++ b/Docs/TagInfo/mapcomplete_aed.json @@ -175,7 +175,7 @@ }, { "key": "id", - "description": "The MapComplete theme Open AED Map has a layer Your track showing features with this tag", + "description": "The MapComplete theme Open AED Map has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_artwork.json b/Docs/TagInfo/mapcomplete_artwork.json index ee03364d71..47ac66d834 100644 --- a/Docs/TagInfo/mapcomplete_artwork.json +++ b/Docs/TagInfo/mapcomplete_artwork.json @@ -109,7 +109,7 @@ }, { "key": "id", - "description": "The MapComplete theme Open Artwork Map has a layer Your track showing features with this tag", + "description": "The MapComplete theme Open Artwork Map has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_benches.json b/Docs/TagInfo/mapcomplete_benches.json index 542d46f54d..484abe6434 100644 --- a/Docs/TagInfo/mapcomplete_benches.json +++ b/Docs/TagInfo/mapcomplete_benches.json @@ -186,6 +186,22 @@ "description": "The MapComplete theme Benches has a layer Picnic tables showing features with this tag", "value": "picnic_table" }, + { + "key": "image", + "description": "The layer 'Picnic tables allows to upload images and adds them under the 'image'-tag (and 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 'Picnic tables allows to upload images and adds them under the 'image'-tag (and 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 'Picnic tables allows to upload images and adds them under the 'image'-tag (and 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 'Picnic tables allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, { "key": "material", "description": "Layer 'Picnic tables' shows and asks freeform values for key 'material' (in the MapComplete.osm.be theme 'Benches')" @@ -202,7 +218,7 @@ }, { "key": "id", - "description": "The MapComplete theme Benches has a layer Your track showing features with this tag", + "description": "The MapComplete theme Benches has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_bicycle_rental.json b/Docs/TagInfo/mapcomplete_bicycle_rental.json new file mode 100644 index 0000000000..6374d0914c --- /dev/null +++ b/Docs/TagInfo/mapcomplete_bicycle_rental.json @@ -0,0 +1,188 @@ +{ + "data_format": 1, + "project": { + "name": "MapComplete Bicycle rental", + "description": "A map with bicycle rental stations and bicycle rental shops", + "project_url": "https://mapcomplete.osm.be/bicycle_rental", + "doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/", + "icon_url": "https://mapcomplete.osm.be/assets/themes/bicycle_rental/logo.svg", + "contact_name": "Pieter Vander Vennet, ", + "contact_email": "pietervdvn@posteo.net" + }, + "tags": [ + { + "key": "amenity", + "description": "The MapComplete theme Bicycle rental has a layer Bicycle rental showing features with this tag", + "value": "bicycle_rental" + }, + { + "key": "bicycle_rental", + "description": "The MapComplete theme Bicycle rental has a layer Bicycle rental showing features with this tag" + }, + { + "key": "service:bicycle:rental", + "description": "The MapComplete theme Bicycle rental has a layer Bicycle rental showing features with this tag", + "value": "yes" + }, + { + "key": "rental", + "description": "The MapComplete theme Bicycle rental has a layer Bicycle rental showing features with this tag" + }, + { + "key": "shop", + "description": "Layer 'Bicycle rental' shows shop=bicycle_rental&bicycle_rental=shop with a fixed text, namely 'This is a shop whose main focus is bicycle rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle rental')", + "value": "bicycle_rental" + }, + { + "key": "bicycle_rental", + "description": "Layer 'Bicycle rental' shows shop=bicycle_rental&bicycle_rental=shop with a fixed text, namely 'This is a shop whose main focus is bicycle rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle rental')", + "value": "shop" + }, + { + "key": "shop", + "description": "Layer 'Bicycle rental' shows shop=rental with a fixed text, namely 'This is a rental buisiness which rents out various objects and/or vehicles. It rents out bicycles too, but this is not the main focus' (in the MapComplete.osm.be theme 'Bicycle rental')", + "value": "rental" + }, + { + "key": "service:bicycle:rental", + "description": "Layer 'Bicycle rental' shows service:bicycle:rental=yes&shop=bicycle with a fixed text, namely 'This is a shop which sells or repairs bicycles, but also rents out bicycles' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle rental')", + "value": "yes" + }, + { + "key": "shop", + "description": "Layer 'Bicycle rental' shows service:bicycle:rental=yes&shop=bicycle with a fixed text, namely 'This is a shop which sells or repairs bicycles, but also rents out bicycles' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle rental')", + "value": "bicycle" + }, + { + "key": "bicycle_rental", + "description": "Layer 'Bicycle rental' shows bicycle_rental=docking_station with a fixed text, namely 'This is an automated docking station, where a bicycle is mechanically locked into a structure' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle rental')", + "value": "docking_station" + }, + { + "key": "bicycle_rental", + "description": "Layer 'Bicycle rental' shows bicycle_rental=key_dispensing_machine with a fixed text, namely 'A machine is present which dispenses and accepts keys, eventually after authentication and/or payment. The bicycles are parked nearby' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle rental')", + "value": "key_dispensing_machine" + }, + { + "key": "bicycle_rental", + "description": "Layer 'Bicycle rental' shows bicycle_rental=dropoff_point with a fixed text, namely 'This is a dropoff point: a designated bicycle parking for this cycle rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle rental')", + "value": "dropoff_point" + }, + { + "key": "website", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Bicycle rental')" + }, + { + "key": "contact:website", + "description": "Layer 'Bicycle rental' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Bicycle rental')" + }, + { + "key": "email", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Bicycle rental')" + }, + { + "key": "contact:email", + "description": "Layer 'Bicycle rental' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Bicycle rental')" + }, + { + "key": "phone", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Bicycle rental')" + }, + { + "key": "contact:phone", + "description": "Layer 'Bicycle rental' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Bicycle rental')" + }, + { + "key": "opening_hours", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Bicycle rental')" + }, + { + "key": "payment:cash", + "description": "Layer 'Bicycle rental' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle rental')", + "value": "yes" + }, + { + "key": "payment:cards", + "description": "Layer 'Bicycle rental' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle rental')", + "value": "yes" + }, + { + "key": "payment:cash", + "description": "Layer 'Bicycle rental' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle rental')", + "value": "yes" + }, + { + "key": "payment:cards", + "description": "Layer 'Bicycle rental' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle rental')", + "value": "yes" + }, + { + "key": "payment:app", + "description": "Layer 'Bicycle rental' shows payment:app=yes with a fixed text, namely 'Payment is done using a dedicated app' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle rental')", + "value": "yes" + }, + { + "key": "payment:membership_card", + "description": "Layer 'Bicycle rental' shows payment:membership_card=yes with a fixed text, namely 'Payment is done using a membership card' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle rental')", + "value": "yes" + }, + { + "key": "rental", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'rental' (in the MapComplete.osm.be theme 'Bicycle rental')" + }, + { + "key": "rental", + "description": "Layer 'Bicycle rental' shows rental=city_bike with a fixed text, namely 'Normal city bikes can be rented here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle rental')", + "value": "city_bike" + }, + { + "key": "rental", + "description": "Layer 'Bicycle rental' shows rental=ebike with a fixed text, namely 'Electrical bikes can be rented here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle rental')", + "value": "ebike" + }, + { + "key": "rental", + "description": "Layer 'Bicycle rental' shows rental=bmx with a fixed text, namely 'BMX bikes can be rented here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle rental')", + "value": "bmx" + }, + { + "key": "rental", + "description": "Layer 'Bicycle rental' shows rental=mtb with a fixed text, namely 'Mountainbikes can be rented here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle rental')", + "value": "mtb" + }, + { + "key": "rental", + "description": "Layer 'Bicycle rental' shows rental=kid_bike with a fixed text, namely 'Bikes for childs can be rented here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle rental')", + "value": "kid_bike" + }, + { + "key": "capacity:city_bike", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'capacity:city_bike' (in the MapComplete.osm.be theme 'Bicycle rental')" + }, + { + "key": "capacity:ebike", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'capacity:ebike' (in the MapComplete.osm.be theme 'Bicycle rental')" + }, + { + "key": "capacity:kid_bike", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'capacity:kid_bike' (in the MapComplete.osm.be theme 'Bicycle rental')" + }, + { + "key": "capacity:bmx", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'capacity:bmx' (in the MapComplete.osm.be theme 'Bicycle rental')" + }, + { + "key": "capacity:mtb", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'capacity:mtb' (in the MapComplete.osm.be theme 'Bicycle rental')" + }, + { + "key": "capacity:bicycle_pannier", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'capacity:bicycle_pannier' (in the MapComplete.osm.be theme 'Bicycle rental')" + }, + { + "key": "id", + "description": "The MapComplete theme Bicycle rental has a layer Your travelled track showing features with this tag", + "value": "location_track" + } + ] +} \ No newline at end of file diff --git a/Docs/TagInfo/mapcomplete_bicyclelib.json b/Docs/TagInfo/mapcomplete_bicyclelib.json index cd9e68bd31..7da19e1fa0 100644 --- a/Docs/TagInfo/mapcomplete_bicyclelib.json +++ b/Docs/TagInfo/mapcomplete_bicyclelib.json @@ -108,7 +108,7 @@ }, { "key": "id", - "description": "The MapComplete theme Bicycle libraries has a layer Your track showing features with this tag", + "description": "The MapComplete theme Bicycle libraries has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_binoculars.json b/Docs/TagInfo/mapcomplete_binoculars.json index 11114fb8e1..f59c30a1fd 100644 --- a/Docs/TagInfo/mapcomplete_binoculars.json +++ b/Docs/TagInfo/mapcomplete_binoculars.json @@ -51,7 +51,7 @@ }, { "key": "id", - "description": "The MapComplete theme Binoculars has a layer Your track showing features with this tag", + "description": "The MapComplete theme Binoculars has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_bookcases.json b/Docs/TagInfo/mapcomplete_bookcases.json index ddba7cb5d9..8f96b076ba 100644 --- a/Docs/TagInfo/mapcomplete_bookcases.json +++ b/Docs/TagInfo/mapcomplete_bookcases.json @@ -146,11 +146,7 @@ }, { "key": "id", - "description": "The MapComplete theme Open Bookcase Map has a layer Possible bookcases showing features with this tag" - }, - { - "key": "id", - "description": "The MapComplete theme Open Bookcase Map has a layer Your track showing features with this tag", + "description": "The MapComplete theme Open Bookcase Map has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_cafes_and_pubs.json b/Docs/TagInfo/mapcomplete_cafes_and_pubs.json index 87d1edc2b8..285464bfa4 100644 --- a/Docs/TagInfo/mapcomplete_cafes_and_pubs.json +++ b/Docs/TagInfo/mapcomplete_cafes_and_pubs.json @@ -175,7 +175,7 @@ }, { "key": "id", - "description": "The MapComplete theme Cafés and pubs has a layer Your track showing features with this tag", + "description": "The MapComplete theme Cafés and pubs has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_campersite.json b/Docs/TagInfo/mapcomplete_campersite.json index 959fc26873..0c2ed63afd 100644 --- a/Docs/TagInfo/mapcomplete_campersite.json +++ b/Docs/TagInfo/mapcomplete_campersite.json @@ -136,6 +136,20 @@ "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", @@ -225,9 +239,23 @@ "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" + }, { "key": "id", - "description": "The MapComplete theme Campersites has a layer Your track showing features with this tag", + "description": "The MapComplete theme Campersites has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_charging_stations.json b/Docs/TagInfo/mapcomplete_charging_stations.json index 4fdb903d94..00fe86ead0 100644 --- a/Docs/TagInfo/mapcomplete_charging_stations.json +++ b/Docs/TagInfo/mapcomplete_charging_stations.json @@ -967,6 +967,16 @@ "description": "Layer 'Charging stations' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')", "value": "yes" }, + { + "key": "payment:app", + "description": "Layer 'Charging stations' shows payment:app=yes with a fixed text, namely 'Payment is done using a dedicated app' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')", + "value": "yes" + }, + { + "key": "payment:membership_card", + "description": "Layer 'Charging stations' shows payment:membership_card=yes with a fixed text, namely 'Payment is done using a membership card' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')", + "value": "yes" + }, { "key": "authentication:membership_card", "description": "Layer 'Charging stations' shows authentication:membership_card=yes with a fixed text, namely 'Authentication by a membership card' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')", @@ -1109,6 +1119,11 @@ "description": "Layer 'Charging stations' shows level=1 with a fixed text, namely 'Located on the first floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')", "value": "1" }, + { + "key": "level", + "description": "Layer 'Charging stations' shows level=-1 with a fixed text, namely 'Located on the first basement level' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Charging stations')", + "value": "-1" + }, { "key": "ref", "description": "Layer 'Charging stations' shows and asks freeform values for key 'ref' (in the MapComplete.osm.be theme 'Charging stations')" @@ -1250,7 +1265,7 @@ }, { "key": "id", - "description": "The MapComplete theme Charging stations has a layer Your track showing features with this tag", + "description": "The MapComplete theme Charging stations has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_climbing.json b/Docs/TagInfo/mapcomplete_climbing.json index 022b0b987f..1bccf0e5a9 100644 --- a/Docs/TagInfo/mapcomplete_climbing.json +++ b/Docs/TagInfo/mapcomplete_climbing.json @@ -60,6 +60,126 @@ "key": "opening_hours", "description": "Layer 'Climbing club' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Open Climbing Map')" }, + { + "key": "url", + "description": "Layer 'Climbing club' shows and asks freeform values for key 'url' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "access", + "description": "Layer 'Climbing club' shows access=yes with a fixed text, namely 'Publicly accessible to anyone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "access", + "description": "Layer 'Climbing club' shows access=permit with a fixed text, namely 'You need a permit to access here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "permit" + }, + { + "key": "access", + "description": "Layer 'Climbing club' shows access=customers with a fixed text, namely 'Only customers' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "customers" + }, + { + "key": "access", + "description": "Layer 'Climbing club' shows access=members with a fixed text, namely 'Only club members' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "members" + }, + { + "key": "access", + "description": "Layer 'Climbing club' 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 Climbing Map')", + "value": "no" + }, + { + "key": "access:description", + "description": "Layer 'Climbing club' shows values with key 'access:description' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:length", + "description": "Layer 'Climbing club' shows and asks freeform values for key 'climbing:length' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:grade:french:min", + "description": "Layer 'Climbing club' shows and asks freeform values for key 'climbing:grade:french:min' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:grade:french:max", + "description": "Layer 'Climbing club' shows and asks freeform values for key 'climbing:grade:french:max' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:boulder", + "description": "Layer 'Climbing club' shows climbing:boulder=yes with a fixed text, namely 'Bouldering is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:boulder", + "description": "Layer 'Climbing club' shows climbing:boulder=no with a fixed text, namely 'Bouldering is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:boulder", + "description": "Layer 'Climbing club' shows climbing:boulder=limited with a fixed text, namely 'Bouldering is possible, allthough there are only a few routes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "limited" + }, + { + "key": "climbing:boulder", + "description": "Layer 'Climbing club' shows climbing:boulder~^..*$ with a fixed text, namely 'There are {climbing:boulder} boulder routes' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:toprope", + "description": "Layer 'Climbing club' shows climbing:toprope=yes with a fixed text, namely 'Toprope climbing is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:toprope", + "description": "Layer 'Climbing club' shows climbing:toprope=no with a fixed text, namely 'Toprope climbing is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:toprope", + "description": "Layer 'Climbing club' shows climbing:toprope~^..*$ with a fixed text, namely 'There are {climbing:toprope} toprope routes' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:sport", + "description": "Layer 'Climbing club' shows climbing:sport=yes with a fixed text, namely 'Sport climbing is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:sport", + "description": "Layer 'Climbing club' shows climbing:sport=no with a fixed text, namely 'Sport climbing is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:sport", + "description": "Layer 'Climbing club' shows climbing:sport~^..*$ with a fixed text, namely 'There are {climbing:sport} sport climbing routes' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:traditional", + "description": "Layer 'Climbing club' shows climbing:traditional=yes with a fixed text, namely 'Traditional climbing is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:traditional", + "description": "Layer 'Climbing club' shows climbing:traditional=no with a fixed text, namely 'Traditional climbing is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:traditional", + "description": "Layer 'Climbing club' shows climbing:traditional~^..*$ with a fixed text, namely 'There are {climbing:traditional} traditional climbing routes' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:speed", + "description": "Layer 'Climbing club' shows climbing:speed=yes with a fixed text, namely 'There is a speed climbing wall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:speed", + "description": "Layer 'Climbing club' shows climbing:speed=no with a fixed text, namely 'There is no speed climbing wall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:speed", + "description": "Layer 'Climbing club' shows climbing:speed~^..*$ with a fixed text, namely 'There are {climbing:speed} speed climbing walls' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, { "key": "sport", "description": "The MapComplete theme Open Climbing Map has a layer Climbing gyms showing features with this tag", @@ -118,6 +238,126 @@ "key": "opening_hours", "description": "Layer 'Climbing gyms' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Open Climbing Map')" }, + { + "key": "url", + "description": "Layer 'Climbing gyms' shows and asks freeform values for key 'url' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "access", + "description": "Layer 'Climbing gyms' shows access=yes with a fixed text, namely 'Publicly accessible to anyone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "access", + "description": "Layer 'Climbing gyms' shows access=permit with a fixed text, namely 'You need a permit to access here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "permit" + }, + { + "key": "access", + "description": "Layer 'Climbing gyms' shows access=customers with a fixed text, namely 'Only customers' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "customers" + }, + { + "key": "access", + "description": "Layer 'Climbing gyms' shows access=members with a fixed text, namely 'Only club members' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "members" + }, + { + "key": "access", + "description": "Layer 'Climbing gyms' 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 Climbing Map')", + "value": "no" + }, + { + "key": "access:description", + "description": "Layer 'Climbing gyms' shows values with key 'access:description' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:length", + "description": "Layer 'Climbing gyms' shows and asks freeform values for key 'climbing:length' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:grade:french:min", + "description": "Layer 'Climbing gyms' shows and asks freeform values for key 'climbing:grade:french:min' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:grade:french:max", + "description": "Layer 'Climbing gyms' shows and asks freeform values for key 'climbing:grade:french:max' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:boulder", + "description": "Layer 'Climbing gyms' shows climbing:boulder=yes with a fixed text, namely 'Bouldering is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:boulder", + "description": "Layer 'Climbing gyms' shows climbing:boulder=no with a fixed text, namely 'Bouldering is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:boulder", + "description": "Layer 'Climbing gyms' shows climbing:boulder=limited with a fixed text, namely 'Bouldering is possible, allthough there are only a few routes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "limited" + }, + { + "key": "climbing:boulder", + "description": "Layer 'Climbing gyms' shows climbing:boulder~^..*$ with a fixed text, namely 'There are {climbing:boulder} boulder routes' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:toprope", + "description": "Layer 'Climbing gyms' shows climbing:toprope=yes with a fixed text, namely 'Toprope climbing is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:toprope", + "description": "Layer 'Climbing gyms' shows climbing:toprope=no with a fixed text, namely 'Toprope climbing is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:toprope", + "description": "Layer 'Climbing gyms' shows climbing:toprope~^..*$ with a fixed text, namely 'There are {climbing:toprope} toprope routes' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:sport", + "description": "Layer 'Climbing gyms' shows climbing:sport=yes with a fixed text, namely 'Sport climbing is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:sport", + "description": "Layer 'Climbing gyms' shows climbing:sport=no with a fixed text, namely 'Sport climbing is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:sport", + "description": "Layer 'Climbing gyms' shows climbing:sport~^..*$ with a fixed text, namely 'There are {climbing:sport} sport climbing routes' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:traditional", + "description": "Layer 'Climbing gyms' shows climbing:traditional=yes with a fixed text, namely 'Traditional climbing is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:traditional", + "description": "Layer 'Climbing gyms' shows climbing:traditional=no with a fixed text, namely 'Traditional climbing is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:traditional", + "description": "Layer 'Climbing gyms' shows climbing:traditional~^..*$ with a fixed text, namely 'There are {climbing:traditional} traditional climbing routes' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:speed", + "description": "Layer 'Climbing gyms' shows climbing:speed=yes with a fixed text, namely 'There is a speed climbing wall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:speed", + "description": "Layer 'Climbing gyms' shows climbing:speed=no with a fixed text, namely 'There is no speed climbing wall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:speed", + "description": "Layer 'Climbing gyms' shows climbing:speed~^..*$ with a fixed text, namely 'There are {climbing:speed} speed climbing walls' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, { "key": "climbing", "description": "The MapComplete theme Open Climbing Map has a layer Climbing routes showing features with this tag", @@ -179,6 +419,126 @@ "key": "description", "description": "Layer 'Climbing routes' shows and asks freeform values for key 'description' (in the MapComplete.osm.be theme 'Open Climbing Map')" }, + { + "key": "url", + "description": "Layer 'Climbing routes' shows and asks freeform values for key 'url' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "access", + "description": "Layer 'Climbing routes' shows access=yes with a fixed text, namely 'Publicly accessible to anyone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "access", + "description": "Layer 'Climbing routes' shows access=permit with a fixed text, namely 'You need a permit to access here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "permit" + }, + { + "key": "access", + "description": "Layer 'Climbing routes' shows access=customers with a fixed text, namely 'Only customers' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "customers" + }, + { + "key": "access", + "description": "Layer 'Climbing routes' shows access=members with a fixed text, namely 'Only club members' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "members" + }, + { + "key": "access", + "description": "Layer 'Climbing routes' 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 Climbing Map')", + "value": "no" + }, + { + "key": "access:description", + "description": "Layer 'Climbing routes' shows values with key 'access:description' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:length", + "description": "Layer 'Climbing routes' shows and asks freeform values for key 'climbing:length' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:grade:french:min", + "description": "Layer 'Climbing routes' shows and asks freeform values for key 'climbing:grade:french:min' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:grade:french:max", + "description": "Layer 'Climbing routes' shows and asks freeform values for key 'climbing:grade:french:max' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:boulder", + "description": "Layer 'Climbing routes' shows climbing:boulder=yes with a fixed text, namely 'Bouldering is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:boulder", + "description": "Layer 'Climbing routes' shows climbing:boulder=no with a fixed text, namely 'Bouldering is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:boulder", + "description": "Layer 'Climbing routes' shows climbing:boulder=limited with a fixed text, namely 'Bouldering is possible, allthough there are only a few routes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "limited" + }, + { + "key": "climbing:boulder", + "description": "Layer 'Climbing routes' shows climbing:boulder~^..*$ with a fixed text, namely 'There are {climbing:boulder} boulder routes' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:toprope", + "description": "Layer 'Climbing routes' shows climbing:toprope=yes with a fixed text, namely 'Toprope climbing is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:toprope", + "description": "Layer 'Climbing routes' shows climbing:toprope=no with a fixed text, namely 'Toprope climbing is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:toprope", + "description": "Layer 'Climbing routes' shows climbing:toprope~^..*$ with a fixed text, namely 'There are {climbing:toprope} toprope routes' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:sport", + "description": "Layer 'Climbing routes' shows climbing:sport=yes with a fixed text, namely 'Sport climbing is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:sport", + "description": "Layer 'Climbing routes' shows climbing:sport=no with a fixed text, namely 'Sport climbing is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:sport", + "description": "Layer 'Climbing routes' shows climbing:sport~^..*$ with a fixed text, namely 'There are {climbing:sport} sport climbing routes' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:traditional", + "description": "Layer 'Climbing routes' shows climbing:traditional=yes with a fixed text, namely 'Traditional climbing is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:traditional", + "description": "Layer 'Climbing routes' shows climbing:traditional=no with a fixed text, namely 'Traditional climbing is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:traditional", + "description": "Layer 'Climbing routes' shows climbing:traditional~^..*$ with a fixed text, namely 'There are {climbing:traditional} traditional climbing routes' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:speed", + "description": "Layer 'Climbing routes' shows climbing:speed=yes with a fixed text, namely 'There is a speed climbing wall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:speed", + "description": "Layer 'Climbing routes' shows climbing:speed=no with a fixed text, namely 'There is no speed climbing wall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:speed", + "description": "Layer 'Climbing routes' shows climbing:speed~^..*$ with a fixed text, namely 'There are {climbing:speed} speed climbing walls' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, { "key": "sport", "description": "The MapComplete theme Open Climbing Map has a layer Climbing opportunities showing features with this tag", @@ -238,6 +598,126 @@ "description": "Layer 'Climbing opportunities' shows rock=limestone with a fixed text, namely 'Limestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", "value": "limestone" }, + { + "key": "url", + "description": "Layer 'Climbing opportunities' shows and asks freeform values for key 'url' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "access", + "description": "Layer 'Climbing opportunities' shows access=yes with a fixed text, namely 'Publicly accessible to anyone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "access", + "description": "Layer 'Climbing opportunities' shows access=permit with a fixed text, namely 'You need a permit to access here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "permit" + }, + { + "key": "access", + "description": "Layer 'Climbing opportunities' shows access=customers with a fixed text, namely 'Only customers' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "customers" + }, + { + "key": "access", + "description": "Layer 'Climbing opportunities' shows access=members with a fixed text, namely 'Only club members' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "members" + }, + { + "key": "access", + "description": "Layer 'Climbing opportunities' 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 Climbing Map')", + "value": "no" + }, + { + "key": "access:description", + "description": "Layer 'Climbing opportunities' shows values with key 'access:description' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:length", + "description": "Layer 'Climbing opportunities' shows and asks freeform values for key 'climbing:length' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:grade:french:min", + "description": "Layer 'Climbing opportunities' shows and asks freeform values for key 'climbing:grade:french:min' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:grade:french:max", + "description": "Layer 'Climbing opportunities' shows and asks freeform values for key 'climbing:grade:french:max' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:boulder", + "description": "Layer 'Climbing opportunities' shows climbing:boulder=yes with a fixed text, namely 'Bouldering is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:boulder", + "description": "Layer 'Climbing opportunities' shows climbing:boulder=no with a fixed text, namely 'Bouldering is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:boulder", + "description": "Layer 'Climbing opportunities' shows climbing:boulder=limited with a fixed text, namely 'Bouldering is possible, allthough there are only a few routes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "limited" + }, + { + "key": "climbing:boulder", + "description": "Layer 'Climbing opportunities' shows climbing:boulder~^..*$ with a fixed text, namely 'There are {climbing:boulder} boulder routes' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:toprope", + "description": "Layer 'Climbing opportunities' shows climbing:toprope=yes with a fixed text, namely 'Toprope climbing is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:toprope", + "description": "Layer 'Climbing opportunities' shows climbing:toprope=no with a fixed text, namely 'Toprope climbing is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:toprope", + "description": "Layer 'Climbing opportunities' shows climbing:toprope~^..*$ with a fixed text, namely 'There are {climbing:toprope} toprope routes' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:sport", + "description": "Layer 'Climbing opportunities' shows climbing:sport=yes with a fixed text, namely 'Sport climbing is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:sport", + "description": "Layer 'Climbing opportunities' shows climbing:sport=no with a fixed text, namely 'Sport climbing is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:sport", + "description": "Layer 'Climbing opportunities' shows climbing:sport~^..*$ with a fixed text, namely 'There are {climbing:sport} sport climbing routes' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:traditional", + "description": "Layer 'Climbing opportunities' shows climbing:traditional=yes with a fixed text, namely 'Traditional climbing is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:traditional", + "description": "Layer 'Climbing opportunities' shows climbing:traditional=no with a fixed text, namely 'Traditional climbing is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:traditional", + "description": "Layer 'Climbing opportunities' shows climbing:traditional~^..*$ with a fixed text, namely 'There are {climbing:traditional} traditional climbing routes' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:speed", + "description": "Layer 'Climbing opportunities' shows climbing:speed=yes with a fixed text, namely 'There is a speed climbing wall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:speed", + "description": "Layer 'Climbing opportunities' shows climbing:speed=no with a fixed text, namely 'There is no speed climbing wall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:speed", + "description": "Layer 'Climbing opportunities' shows climbing:speed~^..*$ with a fixed text, namely 'There are {climbing:speed} speed climbing walls' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, { "key": "leisure", "description": "The MapComplete theme Open Climbing Map has a layer Climbing opportunities? showing features with this tag", @@ -283,9 +763,129 @@ "description": "Layer 'Climbing opportunities?' shows climbing=no with a fixed text, namely 'Climbing is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", "value": "no" }, + { + "key": "url", + "description": "Layer 'Climbing opportunities?' shows and asks freeform values for key 'url' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "access", + "description": "Layer 'Climbing opportunities?' shows access=yes with a fixed text, namely 'Publicly accessible to anyone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "access", + "description": "Layer 'Climbing opportunities?' shows access=permit with a fixed text, namely 'You need a permit to access here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "permit" + }, + { + "key": "access", + "description": "Layer 'Climbing opportunities?' shows access=customers with a fixed text, namely 'Only customers' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "customers" + }, + { + "key": "access", + "description": "Layer 'Climbing opportunities?' shows access=members with a fixed text, namely 'Only club members' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "members" + }, + { + "key": "access", + "description": "Layer 'Climbing opportunities?' 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 Climbing Map')", + "value": "no" + }, + { + "key": "access:description", + "description": "Layer 'Climbing opportunities?' shows values with key 'access:description' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:length", + "description": "Layer 'Climbing opportunities?' shows and asks freeform values for key 'climbing:length' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:grade:french:min", + "description": "Layer 'Climbing opportunities?' shows and asks freeform values for key 'climbing:grade:french:min' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:grade:french:max", + "description": "Layer 'Climbing opportunities?' shows and asks freeform values for key 'climbing:grade:french:max' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:boulder", + "description": "Layer 'Climbing opportunities?' shows climbing:boulder=yes with a fixed text, namely 'Bouldering is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:boulder", + "description": "Layer 'Climbing opportunities?' shows climbing:boulder=no with a fixed text, namely 'Bouldering is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:boulder", + "description": "Layer 'Climbing opportunities?' shows climbing:boulder=limited with a fixed text, namely 'Bouldering is possible, allthough there are only a few routes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "limited" + }, + { + "key": "climbing:boulder", + "description": "Layer 'Climbing opportunities?' shows climbing:boulder~^..*$ with a fixed text, namely 'There are {climbing:boulder} boulder routes' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:toprope", + "description": "Layer 'Climbing opportunities?' shows climbing:toprope=yes with a fixed text, namely 'Toprope climbing is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:toprope", + "description": "Layer 'Climbing opportunities?' shows climbing:toprope=no with a fixed text, namely 'Toprope climbing is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:toprope", + "description": "Layer 'Climbing opportunities?' shows climbing:toprope~^..*$ with a fixed text, namely 'There are {climbing:toprope} toprope routes' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:sport", + "description": "Layer 'Climbing opportunities?' shows climbing:sport=yes with a fixed text, namely 'Sport climbing is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:sport", + "description": "Layer 'Climbing opportunities?' shows climbing:sport=no with a fixed text, namely 'Sport climbing is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:sport", + "description": "Layer 'Climbing opportunities?' shows climbing:sport~^..*$ with a fixed text, namely 'There are {climbing:sport} sport climbing routes' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:traditional", + "description": "Layer 'Climbing opportunities?' shows climbing:traditional=yes with a fixed text, namely 'Traditional climbing is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:traditional", + "description": "Layer 'Climbing opportunities?' shows climbing:traditional=no with a fixed text, namely 'Traditional climbing is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:traditional", + "description": "Layer 'Climbing opportunities?' shows climbing:traditional~^..*$ with a fixed text, namely 'There are {climbing:traditional} traditional climbing routes' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, + { + "key": "climbing:speed", + "description": "Layer 'Climbing opportunities?' shows climbing:speed=yes with a fixed text, namely 'There is a speed climbing wall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "yes" + }, + { + "key": "climbing:speed", + "description": "Layer 'Climbing opportunities?' shows climbing:speed=no with a fixed text, namely 'There is no speed climbing wall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Climbing Map')", + "value": "no" + }, + { + "key": "climbing:speed", + "description": "Layer 'Climbing opportunities?' shows climbing:speed~^..*$ with a fixed text, namely 'There are {climbing:speed} speed climbing walls' (in the MapComplete.osm.be theme 'Open Climbing Map')" + }, { "key": "id", - "description": "The MapComplete theme Open Climbing Map has a layer Your track showing features with this tag", + "description": "The MapComplete theme Open Climbing Map has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_cycle_infra.json b/Docs/TagInfo/mapcomplete_cycle_infra.json index 6f060da3be..322786dee5 100644 --- a/Docs/TagInfo/mapcomplete_cycle_infra.json +++ b/Docs/TagInfo/mapcomplete_cycle_infra.json @@ -756,7 +756,7 @@ }, { "key": "id", - "description": "The MapComplete theme Bicycle infrastructure has a layer Your track showing features with this tag", + "description": "The MapComplete theme Bicycle infrastructure has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_cyclestreets.json b/Docs/TagInfo/mapcomplete_cyclestreets.json index f661dbf580..998ff21590 100644 --- a/Docs/TagInfo/mapcomplete_cyclestreets.json +++ b/Docs/TagInfo/mapcomplete_cyclestreets.json @@ -5,7 +5,7 @@ "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", + "icon_url": "https://mapcomplete.osm.be/assets/themes/cyclestreets/logo.svg", "contact_name": "Pieter Vander Vennet, MapComplete", "contact_email": "pietervdvn@posteo.net" }, @@ -31,6 +31,65 @@ "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 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 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 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 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 with a fixed text, namely 'This street is a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')", + "value": "yes" + }, + { + "key": "proposed:cyclestreet", + "description": "Layer 'Cyclestreets' shows cyclestreet=yes with a fixed text, namely 'This street is a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.", + "value": "" + }, + { + "key": "cyclestreet", + "description": "Layer 'Cyclestreets' shows 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 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 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 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 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", @@ -52,6 +111,65 @@ "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 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 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 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 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 with a fixed text, namely 'This street is a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')", + "value": "yes" + }, + { + "key": "proposed:cyclestreet", + "description": "Layer 'Future cyclestreet' shows cyclestreet=yes with a fixed text, namely 'This street is a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.", + "value": "" + }, + { + "key": "cyclestreet", + "description": "Layer 'Future cyclestreet' shows 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 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 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 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 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", @@ -83,9 +201,68 @@ "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 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 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 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 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 with a fixed text, namely 'This street is a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')", + "value": "yes" + }, + { + "key": "proposed:cyclestreet", + "description": "Layer 'All streets' shows cyclestreet=yes with a fixed text, namely 'This street is a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.", + "value": "" + }, + { + "key": "cyclestreet", + "description": "Layer 'All streets' shows 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 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 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 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 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')" + }, { "key": "id", - "description": "The MapComplete theme Cyclestreets has a layer Your track showing features with this tag", + "description": "The MapComplete theme Cyclestreets has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_cyclofix.json b/Docs/TagInfo/mapcomplete_cyclofix.json index 22513e9520..774e972bbf 100644 --- a/Docs/TagInfo/mapcomplete_cyclofix.json +++ b/Docs/TagInfo/mapcomplete_cyclofix.json @@ -50,6 +50,10 @@ "description": "The MapComplete theme Cyclofix - an open map for cyclists has a layer Bike cafe showing features with this tag", "value": "bicycle" }, + { + "key": "service:bicycle:.*", + "description": "The MapComplete theme Cyclofix - an open map for cyclists has a layer Bike cafe showing features with this tag" + }, { "key": "image", "description": "The layer 'Bike cafe allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" @@ -311,8 +315,8 @@ }, { "key": "service:bicycle:cleaning:fee", - "description": "Layer 'Bike repair/shop' shows service:bicycle:cleaning:fee=yes with a fixed text, namely 'The cleaning service has a fee, but the amount is not known' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", - "value": "yes" + "description": "Layer 'Bike repair/shop' shows service:bicycle:cleaning:fee=yes&service:bicycle:cleaning:charge= with a fixed text, namely 'The cleaning service has a fee, but the amount is not known' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "value": "yes&service:bicycle:cleaning:charge=" }, { "key": "amenity", @@ -412,184 +416,204 @@ }, { "key": "amenity", - "description": "The MapComplete theme Cyclofix - an open map for cyclists has a layer Bike stations (repair, pump or both) showing features with this tag", + "description": "The MapComplete theme Cyclofix - an open map for cyclists has a layer Bicycle pump and repair showing features with this tag", "value": "bicycle_repair_station" }, { "key": "image", - "description": "The layer 'Bike stations (repair, pump or both) allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + "description": "The layer 'Bicycle pump and repair allows to upload images and adds them under the 'image'-tag (and 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 'Bike stations (repair, pump or both) allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + "description": "The layer 'Bicycle pump and repair allows to upload images and adds them under the 'image'-tag (and 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 'Bike stations (repair, pump or both) allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + "description": "The layer 'Bicycle pump and repair allows to upload images and adds them under the 'image'-tag (and 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 'Bike stations (repair, pump or both) allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + "description": "The layer 'Bicycle pump and repair allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" }, { "key": "service:bicycle:tools", - "description": "Layer 'Bike stations (repair, pump or both)' shows service:bicycle:tools=no&service:bicycle:pump=yes with a fixed text, namely 'There is only a pump present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:tools=no&service:bicycle:pump=yes with a fixed text, namely 'There is only a pump present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", "value": "no" }, { "key": "service:bicycle:pump", - "description": "Layer 'Bike stations (repair, pump or both)' shows service:bicycle:tools=no&service:bicycle:pump=yes with a fixed text, namely 'There is only a pump present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:tools=no&service:bicycle:pump=yes with a fixed text, namely 'There is only a pump present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", "value": "yes" }, { "key": "service:bicycle:tools", - "description": "Layer 'Bike stations (repair, pump or both)' shows service:bicycle:tools=yes&service:bicycle:pump=no with a fixed text, namely 'There are only tools (screwdrivers, pliers...) present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:tools=yes&service:bicycle:pump=no with a fixed text, namely 'There are only tools (screwdrivers, pliers...) present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", "value": "yes" }, { "key": "service:bicycle:pump", - "description": "Layer 'Bike stations (repair, pump or both)' shows service:bicycle:tools=yes&service:bicycle:pump=no with a fixed text, namely 'There are only tools (screwdrivers, pliers...) present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:tools=yes&service:bicycle:pump=no with a fixed text, namely 'There are only tools (screwdrivers, pliers...) present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", "value": "no" }, { "key": "service:bicycle:tools", - "description": "Layer 'Bike stations (repair, pump or both)' shows service:bicycle:tools=yes&service:bicycle:pump=yes with a fixed text, namely 'There are both tools and a pump present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:tools=yes&service:bicycle:pump=yes with a fixed text, namely 'There are both tools and a pump present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", "value": "yes" }, { "key": "service:bicycle:pump", - "description": "Layer 'Bike stations (repair, pump or both)' shows service:bicycle:tools=yes&service:bicycle:pump=yes with a fixed text, namely 'There are both tools and a pump present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:tools=yes&service:bicycle:pump=yes with a fixed text, namely 'There are both tools and a pump present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", "value": "yes" }, - { - "key": "operator", - "description": "Layer 'Bike stations (repair, pump or both)' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')" - }, - { - "key": "operator", - "description": "Layer 'Bike stations (repair, pump or both)' shows operator=De Fietsambassade Gent with a fixed text, namely 'De Fietsambassade Gent' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", - "value": "De Fietsambassade Gent" - }, - { - "key": "email", - "description": "Layer 'Bike stations (repair, pump or both)' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')" - }, - { - "key": "phone", - "description": "Layer 'Bike stations (repair, pump or both)' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')" - }, - { - "key": "opening_hours", - "description": "Layer 'Bike stations (repair, pump or both)' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')" - }, - { - "key": "opening_hours", - "description": "Layer 'Bike stations (repair, pump or both)' shows opening_hours=24/7 with a fixed text, namely 'Always open' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", - "value": "24/7" - }, - { - "key": "opening_hours", - "description": "Layer 'Bike stations (repair, pump or both)' shows with a fixed text, namely 'Always open' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists') Picking this answer will delete the key opening_hours.", - "value": "" - }, - { - "key": "service:bicycle:chain_tool", - "description": "Layer 'Bike stations (repair, pump or both)' shows service:bicycle:chain_tool=yes with a fixed text, namely 'There is a chain tool' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", - "value": "yes" - }, - { - "key": "service:bicycle:chain_tool", - "description": "Layer 'Bike stations (repair, pump or both)' shows service:bicycle:chain_tool=no with a fixed text, namely 'There is no chain tool' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", - "value": "no" - }, - { - "key": "service:bicycle:stand", - "description": "Layer 'Bike stations (repair, pump or both)' shows service:bicycle:stand=yes with a fixed text, namely 'There is a hook or stand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", - "value": "yes" - }, - { - "key": "service:bicycle:stand", - "description": "Layer 'Bike stations (repair, pump or both)' shows service:bicycle:stand=no with a fixed text, namely 'There is no hook or stand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", - "value": "no" - }, { "key": "service:bicycle:pump:operational_status", - "description": "Layer 'Bike stations (repair, pump or both)' shows service:bicycle:pump:operational_status=broken with a fixed text, namely 'The bike pump is broken' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:pump:operational_status=broken with a fixed text, namely 'The bike pump is broken' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", "value": "broken" }, { "key": "service:bicycle:pump:operational_status", - "description": "Layer 'Bike stations (repair, pump or both)' shows with a fixed text, namely 'The bike pump is operational' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists') Picking this answer will delete the key service:bicycle:pump:operational_status.", - "value": "" + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:pump:operational_status=operational with a fixed text, namely 'The bike pump is operational' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "value": "operational" + }, + { + "key": "opening_hours", + "description": "Layer 'Bicycle pump and repair' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')" + }, + { + "key": "opening_hours", + "description": "Layer 'Bicycle pump and repair' shows opening_hours=24/7 with a fixed text, namely 'Always open' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "value": "24/7" + }, + { + "key": "access", + "description": "Layer 'Bicycle pump and repair' 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 'Cyclofix - an open map for cyclists')", + "value": "yes" + }, + { + "key": "access", + "description": "Layer 'Bicycle pump and repair' shows access=public with a fixed text, namely 'Publicly accessible' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "value": "public" + }, + { + "key": "access", + "description": "Layer 'Bicycle pump and repair' shows access=customers with a fixed text, namely 'Only for customers' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "value": "customers" + }, + { + "key": "access", + "description": "Layer 'Bicycle pump and repair' shows access=private with a fixed text, namely 'Not accessible to the general public' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "value": "private" + }, + { + "key": "access", + "description": "Layer 'Bicycle pump and repair' shows access=no with a fixed text, namely 'Not accessible to the general public' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "value": "no" + }, + { + "key": "operator", + "description": "Layer 'Bicycle pump and repair' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')" + }, + { + "key": "email", + "description": "Layer 'Bicycle pump and repair' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')" + }, + { + "key": "phone", + "description": "Layer 'Bicycle pump and repair' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')" + }, + { + "key": "service:bicycle:chain_tool", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:chain_tool=yes with a fixed text, namely 'There is a chain tool' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "value": "yes" + }, + { + "key": "service:bicycle:chain_tool", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:chain_tool=no with a fixed text, namely 'There is no chain tool' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "value": "no" + }, + { + "key": "service:bicycle:stand", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:stand=yes with a fixed text, namely 'There is a hook or stand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "value": "yes" + }, + { + "key": "service:bicycle:stand", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:stand=no with a fixed text, namely 'There is no hook or stand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "value": "no" }, { "key": "valves", - "description": "Layer 'Bike stations (repair, pump or both)' shows and asks freeform values for key 'valves' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')" + "description": "Layer 'Bicycle pump and repair' shows and asks freeform values for key 'valves' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')" }, { "key": "valves", - "description": "Layer 'Bike stations (repair, pump or both)' shows valves=sclaverand with a fixed text, namely 'Sclaverand (also known as Presta)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "description": "Layer 'Bicycle pump and repair' shows valves=sclaverand with a fixed text, namely 'Sclaverand (also known as Presta)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", "value": "sclaverand" }, { "key": "valves", - "description": "Layer 'Bike stations (repair, pump or both)' shows valves=dunlop with a fixed text, namely 'Dunlop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "description": "Layer 'Bicycle pump and repair' shows valves=dunlop with a fixed text, namely 'Dunlop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", "value": "dunlop" }, { "key": "valves", - "description": "Layer 'Bike stations (repair, pump or both)' shows valves=schrader with a fixed text, namely 'Schrader (cars)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "description": "Layer 'Bicycle pump and repair' shows valves=schrader with a fixed text, namely 'Schrader (cars)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", "value": "schrader" }, { "key": "manual", - "description": "Layer 'Bike stations (repair, pump or both)' shows manual=yes with a fixed text, namely 'Manual pump' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "description": "Layer 'Bicycle pump and repair' shows manual=yes with a fixed text, namely 'Manual pump' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", "value": "yes" }, { "key": "manual", - "description": "Layer 'Bike stations (repair, pump or both)' shows manual=no with a fixed text, namely 'Electrical pump' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "description": "Layer 'Bicycle pump and repair' shows manual=no with a fixed text, namely 'Electrical pump' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", "value": "no" }, { "key": "manometer", - "description": "Layer 'Bike stations (repair, pump or both)' shows manometer=yes with a fixed text, namely 'There is a manometer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "description": "Layer 'Bicycle pump and repair' shows manometer=yes with a fixed text, namely 'There is a manometer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", "value": "yes" }, { "key": "manometer", - "description": "Layer 'Bike stations (repair, pump or both)' shows manometer=no with a fixed text, namely 'There is no manometer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "description": "Layer 'Bicycle pump and repair' shows manometer=no with a fixed text, namely 'There is no manometer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", "value": "no" }, { "key": "manometer", - "description": "Layer 'Bike stations (repair, pump or both)' shows manometer=broken with a fixed text, namely 'There is manometer but it is broken' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "description": "Layer 'Bicycle pump and repair' shows manometer=broken with a fixed text, namely 'There is manometer but it is broken' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", "value": "broken" }, { "key": "level", - "description": "Layer 'Bike stations (repair, pump or both)' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')" + "description": "Layer 'Bicycle pump and repair' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')" }, { "key": "location", - "description": "Layer 'Bike stations (repair, pump or both)' shows location=underground with a fixed text, namely 'Located underground' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "description": "Layer 'Bicycle pump and repair' shows location=underground with a fixed text, namely 'Located underground' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", "value": "underground" }, { "key": "level", - "description": "Layer 'Bike stations (repair, pump or both)' shows level=0 with a fixed text, namely 'Located on the ground floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "description": "Layer 'Bicycle pump and repair' shows level=0 with a fixed text, namely 'Located on the ground floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", "value": "0" }, { "key": "level", - "description": "Layer 'Bike stations (repair, pump or both)' shows with a fixed text, namely 'Located on the ground floor' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists') Picking this answer will delete the key level.", + "description": "Layer 'Bicycle pump and repair' shows with a fixed text, namely 'Located on the ground floor' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists') Picking this answer will delete the key level.", "value": "" }, { "key": "level", - "description": "Layer 'Bike stations (repair, pump or both)' shows level=1 with a fixed text, namely 'Located on the first floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "description": "Layer 'Bicycle pump and repair' shows level=1 with a fixed text, namely 'Located on the first floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", "value": "1" }, + { + "key": "level", + "description": "Layer 'Bicycle pump and repair' shows level=-1 with a fixed text, namely 'Located on the first basement level' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "value": "-1" + }, { "key": "amenity", "description": "The MapComplete theme Cyclofix - an open map for cyclists has a layer Bicycle tube vending machine showing features with this tag", @@ -864,6 +888,11 @@ "description": "The MapComplete theme Cyclofix - an open map for cyclists has a layer Bike cleaning service showing features with this tag", "value": "bicycle_wash" }, + { + "key": "amenity", + "description": "The MapComplete theme Cyclofix - an open map for cyclists has a layer Bike cleaning service showing features with this tag", + "value": "bike_wash" + }, { "key": "image", "description": "The layer 'Bike cleaning service allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" @@ -896,8 +925,8 @@ }, { "key": "service:bicycle:cleaning:fee", - "description": "Layer 'Bike cleaning service' shows service:bicycle:cleaning:fee=yes with a fixed text, namely 'The cleaning service has a fee, but the amount is not known' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", - "value": "yes" + "description": "Layer 'Bike cleaning service' shows service:bicycle:cleaning:fee=yes&service:bicycle:cleaning:charge= with a fixed text, namely 'The cleaning service has a fee, but the amount is not known' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')", + "value": "yes&service:bicycle:cleaning:charge=" }, { "key": "charge", @@ -1062,7 +1091,7 @@ }, { "key": "id", - "description": "The MapComplete theme Cyclofix - an open map for cyclists has a layer Your track showing features with this tag", + "description": "The MapComplete theme Cyclofix - an open map for cyclists has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_drinking_water.json b/Docs/TagInfo/mapcomplete_drinking_water.json index ee53cb101c..538f7c6e30 100644 --- a/Docs/TagInfo/mapcomplete_drinking_water.json +++ b/Docs/TagInfo/mapcomplete_drinking_water.json @@ -62,7 +62,7 @@ }, { "key": "id", - "description": "The MapComplete theme Drinking Water has a layer Your track showing features with this tag", + "description": "The MapComplete theme Drinking Water has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_entrances.json b/Docs/TagInfo/mapcomplete_entrances.json index 350ee1f840..45ecc35918 100644 --- a/Docs/TagInfo/mapcomplete_entrances.json +++ b/Docs/TagInfo/mapcomplete_entrances.json @@ -221,7 +221,7 @@ }, { "key": "id", - "description": "The MapComplete theme Entrances has a layer Your track showing features with this tag", + "description": "The MapComplete theme Entrances has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_etymology.json b/Docs/TagInfo/mapcomplete_etymology.json index 9bf207cf7b..9eb2fabede 100644 --- a/Docs/TagInfo/mapcomplete_etymology.json +++ b/Docs/TagInfo/mapcomplete_etymology.json @@ -175,9 +175,78 @@ "key": "wikipedia", "description": "The layer 'Parks and forests without etymology information allows to upload images and adds them under the 'image'-tag (and 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": "The MapComplete theme Open Etymology Map has a layer Education institutions without etymology information showing features with this tag" + }, + { + "key": "amenity", + "description": "The MapComplete theme Open Etymology Map has a layer Education institutions without etymology information showing features with this tag", + "value": "school" + }, + { + "key": "amenity", + "description": "The MapComplete theme Open Etymology Map has a layer Education institutions without etymology information showing features with this tag", + "value": "kindergarten" + }, + { + "key": "amenity", + "description": "The MapComplete theme Open Etymology Map has a layer Education institutions without etymology information showing features with this tag", + "value": "university" + }, + { + "key": "amenity", + "description": "The MapComplete theme Open Etymology Map has a layer Education institutions without etymology information showing features with this tag", + "value": "college" + }, + { + "key": "image", + "description": "The layer 'Education institutions without etymology information shows images based on the keys image, image:0, image:1,... and wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "mapillary", + "description": "The layer 'Education institutions without etymology information shows images based on the keys image, image:0, image:1,... and wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikidata", + "description": "The layer 'Education institutions without etymology information shows images based on the keys image, image:0, image:1,... and wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "wikipedia", + "description": "The layer 'Education institutions without etymology information shows images based on the keys image, image:0, image:1,... and wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "name:etymology:wikidata", + "description": "Layer 'Education institutions without etymology information' shows and asks freeform values for key 'name:etymology:wikidata' (in the MapComplete.osm.be theme 'Open Etymology Map')" + }, + { + "key": "name:etymology", + "description": "Layer 'Education institutions without etymology information' shows and asks freeform values for key 'name:etymology' (in the MapComplete.osm.be theme 'Open Etymology Map')" + }, + { + "key": "name:etymology", + "description": "Layer 'Education institutions without etymology information' shows name:etymology=unknown with a fixed text, namely 'The origin of this name is unknown in all literature' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Etymology Map')", + "value": "unknown" + }, + { + "key": "image", + "description": "The layer 'Education institutions without etymology information allows to upload images and adds them under the 'image'-tag (and 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 'Education institutions without etymology information allows to upload images and adds them under the 'image'-tag (and 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 'Education institutions without etymology information allows to upload images and adds them under the 'image'-tag (and 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 'Education institutions without etymology information allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, { "key": "id", - "description": "The MapComplete theme Open Etymology Map has a layer Your track showing features with this tag", + "description": "The MapComplete theme Open Etymology Map has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_facadegardens.json b/Docs/TagInfo/mapcomplete_facadegardens.json index 3975080fe6..c50650aa79 100644 --- a/Docs/TagInfo/mapcomplete_facadegardens.json +++ b/Docs/TagInfo/mapcomplete_facadegardens.json @@ -105,7 +105,7 @@ }, { "key": "id", - "description": "The MapComplete theme Facade gardens has a layer Your track showing features with this tag", + "description": "The MapComplete theme Facade gardens has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_food.json b/Docs/TagInfo/mapcomplete_food.json index fd1efec039..bc7c02616e 100644 --- a/Docs/TagInfo/mapcomplete_food.json +++ b/Docs/TagInfo/mapcomplete_food.json @@ -359,7 +359,7 @@ }, { "key": "id", - "description": "The MapComplete theme Restaurants and fast food has a layer Your track showing features with this tag", + "description": "The MapComplete theme Restaurants and fast food has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_fritures.json b/Docs/TagInfo/mapcomplete_fritures.json index 4544e6d296..4e088a5041 100644 --- a/Docs/TagInfo/mapcomplete_fritures.json +++ b/Docs/TagInfo/mapcomplete_fritures.json @@ -362,356 +362,9 @@ "description": "Layer 'Fries shop' shows dog=unleashed with a fixed text, namely 'Dogs are allowed and can run around freely' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", "value": "unleashed" }, - { - "key": "amenity", - "description": "The MapComplete theme Friturenkaart has a layer Restaurants and fast food showing features with this tag", - "value": "fast_food" - }, - { - "key": "amenity", - "description": "The MapComplete theme Friturenkaart has a layer Restaurants and fast food showing features with this tag", - "value": "restaurant" - }, - { - "key": "image", - "description": "The layer 'Restaurants and fast food allows to upload images and adds them under the 'image'-tag (and 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 'Restaurants and fast food allows to upload images and adds them under the 'image'-tag (and 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 'Restaurants and fast food allows to upload images and adds them under the 'image'-tag (and 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 'Restaurants and fast food allows to upload images and adds them under the 'image'-tag (and 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 'Restaurants and fast food' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Friturenkaart')" - }, - { - "key": "amenity", - "description": "Layer 'Restaurants and fast food' shows amenity=fast_food with a fixed text, namely 'Dit is een fastfood-zaak. De focus ligt op snelle bediening, zitplaatsen zijn vaak beperkt en functioneel' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "fast_food" - }, - { - "key": "amenity", - "description": "Layer 'Restaurants and fast food' shows amenity=restaurant with a fixed text, namely 'Dit is een restaurant. De focus ligt op een aangename ervaring waar je aan tafel wordt bediend' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "restaurant" - }, - { - "key": "opening_hours", - "description": "Layer 'Restaurants and fast food' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Friturenkaart')" - }, - { - "key": "website", - "description": "Layer 'Restaurants and fast food' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Friturenkaart')" - }, - { - "key": "contact:website", - "description": "Layer 'Restaurants and fast food' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Friturenkaart')" - }, - { - "key": "email", - "description": "Layer 'Restaurants and fast food' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Friturenkaart')" - }, - { - "key": "contact:email", - "description": "Layer 'Restaurants and fast food' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Friturenkaart')" - }, - { - "key": "phone", - "description": "Layer 'Restaurants and fast food' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Friturenkaart')" - }, - { - "key": "contact:phone", - "description": "Layer 'Restaurants and fast food' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Friturenkaart')" - }, - { - "key": "payment:cash", - "description": "Layer 'Restaurants and fast food' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "yes" - }, - { - "key": "payment:cards", - "description": "Layer 'Restaurants and fast food' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "yes" - }, - { - "key": "wheelchair", - "description": "Layer 'Restaurants and fast food' shows wheelchair=designated with a fixed text, namely 'This place is specially adapted for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "designated" - }, - { - "key": "wheelchair", - "description": "Layer 'Restaurants and fast food' shows wheelchair=yes with a fixed text, namely 'This place is easily reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "yes" - }, - { - "key": "wheelchair", - "description": "Layer 'Restaurants and fast food' shows wheelchair=limited with a fixed text, namely 'It is possible to reach this place in a wheelchair, but it is not easy' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "limited" - }, - { - "key": "wheelchair", - "description": "Layer 'Restaurants and fast food' shows wheelchair=no with a fixed text, namely 'This place is not reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "no" - }, - { - "key": "cuisine", - "description": "Layer 'Restaurants and fast food' shows and asks freeform values for key 'cuisine' (in the MapComplete.osm.be theme 'Friturenkaart')" - }, - { - "key": "cuisine", - "description": "Layer 'Restaurants and fast food' shows cuisine=pizza with a fixed text, namely 'This is a pizzeria' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "pizza" - }, - { - "key": "cuisine", - "description": "Layer 'Restaurants and fast food' shows cuisine=friture with a fixed text, namely 'This is a friture' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "friture" - }, - { - "key": "cuisine", - "description": "Layer 'Restaurants and fast food' shows cuisine=pasta with a fixed text, namely 'Mainly serves pasta' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "pasta" - }, - { - "key": "cuisine", - "description": "Layer 'Restaurants and fast food' shows cuisine=kebab with a fixed text, namely 'Dit is een kebabzaak' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "kebab" - }, - { - "key": "cuisine", - "description": "Layer 'Restaurants and fast food' shows cuisine=sandwich with a fixed text, namely 'Dit is een broodjeszaak' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "sandwich" - }, - { - "key": "cuisine", - "description": "Layer 'Restaurants and fast food' shows cuisine=burger with a fixed text, namely 'Dit is een hamburgerrestaurant' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "burger" - }, - { - "key": "cuisine", - "description": "Layer 'Restaurants and fast food' shows cuisine=sushi with a fixed text, namely 'Dit is een sushirestaurant' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "sushi" - }, - { - "key": "cuisine", - "description": "Layer 'Restaurants and fast food' shows cuisine=coffee with a fixed text, namely 'Dit is een koffiezaak' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "coffee" - }, - { - "key": "cuisine", - "description": "Layer 'Restaurants and fast food' shows cuisine=italian with a fixed text, namely 'Dit is een Italiaans restaurant (dat meer dan enkel pasta of pizza verkoopt)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "italian" - }, - { - "key": "cuisine", - "description": "Layer 'Restaurants and fast food' shows cuisine=french with a fixed text, namely 'Dit is een Frans restaurant' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "french" - }, - { - "key": "cuisine", - "description": "Layer 'Restaurants and fast food' shows cuisine=chinese with a fixed text, namely 'Dit is een Chinees restaurant' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "chinese" - }, - { - "key": "cuisine", - "description": "Layer 'Restaurants and fast food' shows cuisine=greek with a fixed text, namely 'Dit is een Grieks restaurant' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "greek" - }, - { - "key": "cuisine", - "description": "Layer 'Restaurants and fast food' shows cuisine=indian with a fixed text, namely 'Dit is een Indisch restaurant' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "indian" - }, - { - "key": "cuisine", - "description": "Layer 'Restaurants and fast food' shows cuisine=turkish with a fixed text, namely 'Dit is een Turks restaurant (dat meer dan enkel kebab verkoopt)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "turkish" - }, - { - "key": "cuisine", - "description": "Layer 'Restaurants and fast food' shows cuisine=thai with a fixed text, namely 'Dit is een Thaïs restaurant' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "thai" - }, - { - "key": "takeaway", - "description": "Layer 'Restaurants and fast food' shows takeaway=only with a fixed text, namely 'This is a take-away only business' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "only" - }, - { - "key": "takeaway", - "description": "Layer 'Restaurants and fast food' shows takeaway=yes with a fixed text, namely 'Take-away is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "yes" - }, - { - "key": "takeaway", - "description": "Layer 'Restaurants and fast food' shows takeaway=no with a fixed text, namely 'Take-away is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "no" - }, - { - "key": "diet:vegetarian", - "description": "Layer 'Restaurants and fast food' shows diet:vegetarian=no with a fixed text, namely 'Geen vegetarische opties beschikbaar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "no" - }, - { - "key": "diet:vegetarian", - "description": "Layer 'Restaurants and fast food' shows diet:vegetarian=limited with a fixed text, namely 'Beperkte vegetarische opties zijn beschikbaar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "limited" - }, - { - "key": "diet:vegetarian", - "description": "Layer 'Restaurants and fast food' shows diet:vegetarian=yes with a fixed text, namely 'Vegetarische opties zijn beschikbaar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "yes" - }, - { - "key": "diet:vegetarian", - "description": "Layer 'Restaurants and fast food' shows diet:vegetarian=only with a fixed text, namely 'Enkel vegetarische opties zijn beschikbaar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "only" - }, - { - "key": "diet:vegan", - "description": "Layer 'Restaurants and fast food' shows diet:vegan=no with a fixed text, namely 'Geen veganistische opties beschikbaar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "no" - }, - { - "key": "diet:vegan", - "description": "Layer 'Restaurants and fast food' shows diet:vegan=limited with a fixed text, namely 'Beperkte veganistische opties zijn beschikbaar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "limited" - }, - { - "key": "diet:vegan", - "description": "Layer 'Restaurants and fast food' shows diet:vegan=yes with a fixed text, namely 'Veganistische opties zijn beschikbaar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "yes" - }, - { - "key": "diet:vegan", - "description": "Layer 'Restaurants and fast food' shows diet:vegan=only with a fixed text, namely 'Enkel veganistische opties zijn beschikbaar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "only" - }, - { - "key": "diet:halal", - "description": "Layer 'Restaurants and fast food' shows diet:halal=no with a fixed text, namely 'There are no halal options available' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "no" - }, - { - "key": "diet:halal", - "description": "Layer 'Restaurants and fast food' shows diet:halal=limited with a fixed text, namely 'There is a small halal menu' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "limited" - }, - { - "key": "diet:halal", - "description": "Layer 'Restaurants and fast food' shows diet:halal=yes with a fixed text, namely 'There is a halal menu' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "yes" - }, - { - "key": "diet:halal", - "description": "Layer 'Restaurants and fast food' shows diet:halal=only with a fixed text, namely 'Only halal options are available' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "only" - }, - { - "key": "diet:vegetarian", - "description": "Layer 'Restaurants and fast food' 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 'Restaurants and fast food' 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 'Restaurants and fast food' 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 'Restaurants and fast food' 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 'Restaurants and fast food' 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:vegan", - "description": "Layer 'Restaurants and fast food' shows diet:vegan=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 'Restaurants and fast food' 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 'Restaurants and fast food' 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": "reusable_packaging:accept", - "description": "Layer 'Restaurants and fast food' shows reusable_packaging:accept=yes with a fixed text, namely 'You can bring your own containers 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": "reusable_packaging:accept", - "description": "Layer 'Restaurants and fast food' shows reusable_packaging:accept=no with a fixed text, namely 'Bringing your own container is not allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "no" - }, - { - "key": "reusable_packaging:accept", - "description": "Layer 'Restaurants and fast food' shows reusable_packaging:accept=only with a fixed text, namely 'You must 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" - }, - { - "key": "service:electricity", - "description": "Layer 'Restaurants and fast food' shows service:electricity=yes with a fixed text, namely 'There are plenty of domestic sockets available to customers seated indoors, where they can charge their electronics' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "yes" - }, - { - "key": "service:electricity", - "description": "Layer 'Restaurants and fast food' shows service:electricity=limited with a fixed text, namely 'There are a few domestic sockets available to customers seated indoors, where they can charge their electronics' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "limited" - }, - { - "key": "service:electricity", - "description": "Layer 'Restaurants and fast food' shows service:electricity=ask with a fixed text, namely 'There are no sockets available indoors to customers, but charging might be possible if the staff is asked' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "ask" - }, - { - "key": "service:electricity", - "description": "Layer 'Restaurants and fast food' shows service:electricity=no with a fixed text, namely 'There are a no domestic sockets available to customers seated indoors' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "no" - }, - { - "key": "dog", - "description": "Layer 'Restaurants and fast food' shows dog=yes with a fixed text, namely 'Dogs are allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "yes" - }, - { - "key": "dog", - "description": "Layer 'Restaurants and fast food' shows dog=no with a fixed text, namely 'Dogs are not allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "no" - }, - { - "key": "dog", - "description": "Layer 'Restaurants and fast food' shows dog=leashed with a fixed text, namely 'Dogs are allowed, but they have to be leashed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "leashed" - }, - { - "key": "dog", - "description": "Layer 'Restaurants and fast food' shows dog=unleashed with a fixed text, namely 'Dogs are allowed and can run around freely' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Friturenkaart')", - "value": "unleashed" - }, { "key": "id", - "description": "The MapComplete theme Friturenkaart has a layer Your track showing features with this tag", + "description": "The MapComplete theme Friturenkaart has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_ghostbikes.json b/Docs/TagInfo/mapcomplete_ghostbikes.json index adb9868025..928a081a5b 100644 --- a/Docs/TagInfo/mapcomplete_ghostbikes.json +++ b/Docs/TagInfo/mapcomplete_ghostbikes.json @@ -54,7 +54,7 @@ }, { "key": "id", - "description": "The MapComplete theme Ghost bikes has a layer Your track showing features with this tag", + "description": "The MapComplete theme Ghost bikes has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_hackerspaces.json b/Docs/TagInfo/mapcomplete_hackerspaces.json index 729ccf73da..d87813d3de 100644 --- a/Docs/TagInfo/mapcomplete_hackerspaces.json +++ b/Docs/TagInfo/mapcomplete_hackerspaces.json @@ -98,7 +98,7 @@ }, { "key": "id", - "description": "The MapComplete theme Hackerspaces has a layer Your track showing features with this tag", + "description": "The MapComplete theme Hackerspaces has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_hailhydrant.json b/Docs/TagInfo/mapcomplete_hailhydrant.json index f7bc882ad0..2186fd41b3 100644 --- a/Docs/TagInfo/mapcomplete_hailhydrant.json +++ b/Docs/TagInfo/mapcomplete_hailhydrant.json @@ -273,7 +273,7 @@ }, { "key": "id", - "description": "The MapComplete theme Hydrants, Extinguishers, Fire stations, and Ambulance stations. has a layer Your track showing features with this tag", + "description": "The MapComplete theme Hydrants, Extinguishers, Fire stations, and Ambulance stations. has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_maps.json b/Docs/TagInfo/mapcomplete_maps.json index a930aa1b78..3a220afb83 100644 --- a/Docs/TagInfo/mapcomplete_maps.json +++ b/Docs/TagInfo/mapcomplete_maps.json @@ -77,7 +77,7 @@ }, { "key": "id", - "description": "The MapComplete theme A map of maps has a layer Your track showing features with this tag", + "description": "The MapComplete theme A map of maps has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_nature.json b/Docs/TagInfo/mapcomplete_nature.json index db56810a20..7a32c2783a 100644 --- a/Docs/TagInfo/mapcomplete_nature.json +++ b/Docs/TagInfo/mapcomplete_nature.json @@ -1,8 +1,8 @@ { "data_format": 1, "project": { - "name": "MapComplete De Natuur in", - "description": "Deze kaart bevat informatie voor natuurliefhebbers", + "name": "MapComplete Into nature", + "description": "A map for nature lovers, with interesting POI's", "project_url": "https://mapcomplete.osm.be/nature", "doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/", "icon_url": "https://mapcomplete.osm.be/assets/themes/nature/logo.svg", @@ -12,7 +12,7 @@ "tags": [ { "key": "amenity", - "description": "The MapComplete theme De Natuur in has a layer Drinking water showing features with this tag", + "description": "The MapComplete theme Into nature has a layer Drinking water showing features with this tag", "value": "drinking_water" }, { @@ -33,36 +33,36 @@ }, { "key": "operational_status", - "description": "Layer 'Drinking water' shows and asks freeform values for key 'operational_status' (in the MapComplete.osm.be theme 'De Natuur in')" + "description": "Layer 'Drinking water' shows and asks freeform values for key 'operational_status' (in the MapComplete.osm.be theme 'Into nature')" }, { "key": "operational_status", - "description": "Layer 'Drinking water' shows with a fixed text, namely 'This drinking water works' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in') Picking this answer will delete the key operational_status.", + "description": "Layer 'Drinking water' shows with a fixed text, namely 'This drinking water works' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature') 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 'De Natuur in')", + "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 'Into nature')", "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 'De Natuur in')", + "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 'Into nature')", "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 'De Natuur in')", + "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 'Into nature')", "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 'De Natuur in')", + "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 'Into nature')", "value": "no" }, { "key": "leisure", - "description": "The MapComplete theme De Natuur in has a layer Vogelkijkhutten showing features with this tag", + "description": "The MapComplete theme Into nature has a layer Vogelkijkhutten showing features with this tag", "value": "bird_hide" }, { @@ -83,187 +83,101 @@ }, { "key": "shelter", - "description": "Layer 'Vogelkijkhutten' shows shelter=no with a fixed text, namely 'Vogelkijkwand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Vogelkijkhutten' shows shelter=no with a fixed text, namely 'Vogelkijkwand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", "value": "no" }, { "key": "building", - "description": "Layer 'Vogelkijkhutten' shows shelter=no with a fixed text, namely 'Vogelkijkwand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in') Picking this answer will delete the key building.", + "description": "Layer 'Vogelkijkhutten' shows shelter=no with a fixed text, namely 'Vogelkijkwand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature') Picking this answer will delete the key building.", "value": "" }, { "key": "amenity", - "description": "Layer 'Vogelkijkhutten' shows shelter=no with a fixed text, namely 'Vogelkijkwand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in') Picking this answer will delete the key amenity.", + "description": "Layer 'Vogelkijkhutten' shows shelter=no with a fixed text, namely 'Vogelkijkwand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature') Picking this answer will delete the key amenity.", "value": "" }, { "key": "amenity", - "description": "Layer 'Vogelkijkhutten' shows amenity=shelter&building=yes&shelter=yes with a fixed text, namely 'Vogelkijkhut' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Vogelkijkhutten' shows amenity=shelter&building=yes&shelter=yes with a fixed text, namely 'Vogelkijkhut' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", "value": "shelter" }, { "key": "building", - "description": "Layer 'Vogelkijkhutten' shows amenity=shelter&building=yes&shelter=yes with a fixed text, namely 'Vogelkijkhut' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Vogelkijkhutten' shows amenity=shelter&building=yes&shelter=yes with a fixed text, namely 'Vogelkijkhut' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", "value": "yes" }, { "key": "shelter", - "description": "Layer 'Vogelkijkhutten' shows amenity=shelter&building=yes&shelter=yes with a fixed text, namely 'Vogelkijkhut' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Vogelkijkhutten' shows amenity=shelter&building=yes&shelter=yes with a fixed text, namely 'Vogelkijkhut' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", "value": "yes" }, { "key": "building", - "description": "Layer 'Vogelkijkhutten' shows building=tower&bird_hide=tower with a fixed text, namely 'Vogelkijktoren' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Vogelkijkhutten' shows building=tower&bird_hide=tower with a fixed text, namely 'Vogelkijktoren' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", "value": "tower" }, { "key": "bird_hide", - "description": "Layer 'Vogelkijkhutten' shows building=tower&bird_hide=tower with a fixed text, namely 'Vogelkijktoren' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Vogelkijkhutten' shows building=tower&bird_hide=tower with a fixed text, namely 'Vogelkijktoren' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", "value": "tower" }, { "key": "amenity", - "description": "Layer 'Vogelkijkhutten' shows amenity=shelter|building=yes|shelter=yes with a fixed text, namely 'Vogelkijkhut' (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Vogelkijkhutten' shows amenity=shelter|building=yes|shelter=yes with a fixed text, namely 'Vogelkijkhut' (in the MapComplete.osm.be theme 'Into nature')", "value": "shelter" }, { "key": "building", - "description": "Layer 'Vogelkijkhutten' shows amenity=shelter|building=yes|shelter=yes with a fixed text, namely 'Vogelkijkhut' (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Vogelkijkhutten' shows amenity=shelter|building=yes|shelter=yes with a fixed text, namely 'Vogelkijkhut' (in the MapComplete.osm.be theme 'Into nature')", "value": "yes" }, { "key": "shelter", - "description": "Layer 'Vogelkijkhutten' shows amenity=shelter|building=yes|shelter=yes with a fixed text, namely 'Vogelkijkhut' (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Vogelkijkhutten' shows amenity=shelter|building=yes|shelter=yes with a fixed text, namely 'Vogelkijkhut' (in the MapComplete.osm.be theme 'Into nature')", "value": "yes" }, { "key": "wheelchair", - "description": "Layer 'Vogelkijkhutten' shows wheelchair=designated with a fixed text, namely 'Er zijn speciale voorzieningen voor rolstoelen' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Vogelkijkhutten' shows wheelchair=designated with a fixed text, namely 'Er zijn speciale voorzieningen voor rolstoelen' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", "value": "designated" }, { "key": "wheelchair", - "description": "Layer 'Vogelkijkhutten' shows wheelchair=yes with a fixed text, namely 'Een rolstoel raakt er vlot' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Vogelkijkhutten' shows wheelchair=yes with a fixed text, namely 'Een rolstoel raakt er vlot' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", "value": "yes" }, { "key": "wheelchair", - "description": "Layer 'Vogelkijkhutten' shows wheelchair=limited with a fixed text, namely 'Je kan er raken met een rolstoel, maar het is niet makkelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Vogelkijkhutten' shows wheelchair=limited with a fixed text, namely 'Je kan er raken met een rolstoel, maar het is niet makkelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", "value": "limited" }, { "key": "wheelchair", - "description": "Layer 'Vogelkijkhutten' shows wheelchair=no with a fixed text, namely 'Niet rolstoeltoegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Vogelkijkhutten' shows wheelchair=no with a fixed text, namely 'Niet rolstoeltoegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", "value": "no" }, { "key": "operator", - "description": "Layer 'Vogelkijkhutten' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'De Natuur in')" + "description": "Layer 'Vogelkijkhutten' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Into nature')" }, { "key": "operator", - "description": "Layer 'Vogelkijkhutten' shows operator=Natuurpunt with a fixed text, namely 'Beheer door Natuurpunt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Vogelkijkhutten' shows operator=Natuurpunt with a fixed text, namely 'Beheer door Natuurpunt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", "value": "Natuurpunt" }, { "key": "operator", - "description": "Layer 'Vogelkijkhutten' shows operator=Agentschap Natuur en Bos with a fixed text, namely 'Beheer door het Agentschap Natuur en Bos ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Vogelkijkhutten' shows operator=Agentschap Natuur en Bos with a fixed text, namely 'Beheer door het Agentschap Natuur en Bos ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", "value": "Agentschap Natuur en Bos" }, - { - "key": "tourism", - "description": "The MapComplete theme De Natuur in has a layer Maps showing features with this tag", - "value": "map" - }, - { - "key": "information", - "description": "The MapComplete theme De Natuur in 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 'De Natuur in')" - }, - { - "key": "map_source", - "description": "Layer 'Maps' shows map_source=OpenStreetMap 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 'De Natuur in')", - "value": "OpenStreetMap" - }, - { - "key": "not:map_source", - "description": "Layer 'Maps' shows map_source=OpenStreetMap 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 'De Natuur in') 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 'De Natuur in')", - "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 'De Natuur in')", - "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 'De Natuur in')", - "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 'De Natuur in')", - "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 'De Natuur in')", - "value": "no" - }, - { - "key": "information", - "description": "The MapComplete theme De Natuur in has a layer Information boards showing features with this tag", - "value": "board" - }, - { - "key": "image", - "description": "The layer 'Information boards allows to upload images and adds them under the 'image'-tag (and 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 'Information boards allows to upload images and adds them under the 'image'-tag (and 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 'Information boards allows to upload images and adds them under the 'image'-tag (and 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 'Information boards allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" - }, { "key": "leisure", - "description": "The MapComplete theme De Natuur in has a layer Natuurgebied showing features with this tag", + "description": "The MapComplete theme Into nature has a layer Natuurgebied showing features with this tag", "value": "nature_reserve" }, { "key": "boundary", - "description": "The MapComplete theme De Natuur in has a layer Natuurgebied showing features with this tag", + "description": "The MapComplete theme Into nature has a layer Natuurgebied showing features with this tag", "value": "protected_area" }, { @@ -284,155 +198,602 @@ }, { "key": "access:description", - "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'access:description' (in the MapComplete.osm.be theme 'De Natuur in')" + "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'access:description' (in the MapComplete.osm.be theme 'Into nature')" }, { "key": "access", - "description": "Layer 'Natuurgebied' shows access=yes with a fixed text, namely 'Vrij toegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Natuurgebied' shows access=yes with a fixed text, namely 'Vrij toegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", "value": "yes" }, { "key": "fee", - "description": "Layer 'Natuurgebied' shows access=yes with a fixed text, namely 'Vrij toegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in') Picking this answer will delete the key fee.", + "description": "Layer 'Natuurgebied' shows access=yes with a fixed text, namely 'Vrij toegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature') Picking this answer will delete the key fee.", "value": "" }, { "key": "access", - "description": "Layer 'Natuurgebied' shows access=no with a fixed text, namely 'Niet toegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Natuurgebied' shows access=no with a fixed text, namely 'Niet toegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", "value": "no" }, { "key": "fee", - "description": "Layer 'Natuurgebied' shows access=no with a fixed text, namely 'Niet toegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in') Picking this answer will delete the key fee.", + "description": "Layer 'Natuurgebied' shows access=no with a fixed text, namely 'Niet toegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature') Picking this answer will delete the key fee.", "value": "" }, { "key": "access", - "description": "Layer 'Natuurgebied' shows access=private 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 'De Natuur in')", + "description": "Layer 'Natuurgebied' shows access=private 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 'Into nature')", "value": "private" }, { "key": "fee", - "description": "Layer 'Natuurgebied' shows access=private 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 'De Natuur in') Picking this answer will delete the key fee.", + "description": "Layer 'Natuurgebied' shows access=private 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 'Into nature') Picking this answer will delete the key fee.", "value": "" }, { "key": "access", - "description": "Layer 'Natuurgebied' shows access=permissive 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 'De Natuur in')", + "description": "Layer 'Natuurgebied' shows access=permissive 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 'Into nature')", "value": "permissive" }, { "key": "fee", - "description": "Layer 'Natuurgebied' shows access=permissive 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 'De Natuur in') Picking this answer will delete the key fee.", + "description": "Layer 'Natuurgebied' shows access=permissive 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 'Into nature') Picking this answer will delete the key fee.", "value": "" }, { "key": "access", - "description": "Layer 'Natuurgebied' shows access=guided 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 'De Natuur in')", + "description": "Layer 'Natuurgebied' shows access=guided 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 'Into nature')", "value": "guided" }, { "key": "fee", - "description": "Layer 'Natuurgebied' shows access=guided 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 'De Natuur in') Picking this answer will delete the key fee.", + "description": "Layer 'Natuurgebied' shows access=guided 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 'Into nature') Picking this answer will delete the key fee.", "value": "" }, { "key": "access", - "description": "Layer 'Natuurgebied' 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 'De Natuur in')", + "description": "Layer 'Natuurgebied' 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 'Into nature')", "value": "yes" }, { "key": "fee", - "description": "Layer 'Natuurgebied' 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 'De Natuur in')", + "description": "Layer 'Natuurgebied' 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 'Into nature')", "value": "yes" }, { "key": "operator", - "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'De Natuur in')" + "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Into nature')" }, { "key": "operator", - "description": "Layer 'Natuurgebied' shows operator=Natuurpunt with a fixed text, namely 'Dit gebied wordt beheerd door Natuurpunt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Natuurgebied' shows operator=Natuurpunt with a fixed text, namely 'Dit gebied wordt beheerd door Natuurpunt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", "value": "Natuurpunt" }, { "key": "operator", - "description": "Layer 'Natuurgebied' shows operator~^(n|N)atuurpunt.*$ with a fixed text, namely 'Dit gebied wordt beheerd door {operator}' (in the MapComplete.osm.be theme 'De Natuur in')" + "description": "Layer 'Natuurgebied' shows operator~^(n|N)atuurpunt.*$ with a fixed text, namely 'Dit gebied wordt beheerd door {operator}' (in the MapComplete.osm.be theme 'Into nature')" }, { "key": "operator", - "description": "Layer 'Natuurgebied' shows operator=Agentschap Natuur en Bos with a fixed text, namely 'Dit gebied wordt beheerd door het Agentschap Natuur en Bos' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Natuurgebied' shows operator=Agentschap Natuur en Bos with a fixed text, namely 'Dit gebied wordt beheerd door het Agentschap Natuur en Bos' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", "value": "Agentschap Natuur en Bos" }, { "key": "name:nl", - "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'name:nl' (in the MapComplete.osm.be theme 'De Natuur in')" + "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'name:nl' (in the MapComplete.osm.be theme 'Into nature')" }, { "key": "name", - "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'De Natuur in')" + "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Into nature')" }, { "key": "noname", - "description": "Layer 'Natuurgebied' shows noname=yes with a fixed text, namely 'Dit gebied heeft geen naam' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Natuurgebied' shows noname=yes with a fixed text, namely 'Dit gebied heeft geen naam' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", "value": "yes" }, { "key": "name", - "description": "Layer 'Natuurgebied' shows noname=yes with a fixed text, namely 'Dit gebied heeft geen naam' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in') Picking this answer will delete the key name.", + "description": "Layer 'Natuurgebied' shows noname=yes with a fixed text, namely 'Dit gebied heeft geen naam' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature') Picking this answer will delete the key name.", "value": "" }, { "key": "dog", - "description": "Layer 'Natuurgebied' shows dog=leashed with a fixed text, namely 'Dogs have to be leashed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Natuurgebied' shows dog=leashed with a fixed text, namely 'Dogs have to be leashed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", "value": "leashed" }, { "key": "dog", - "description": "Layer 'Natuurgebied' shows dog=no with a fixed text, namely 'No dogs allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Natuurgebied' shows dog=no with a fixed text, namely 'No dogs allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", "value": "no" }, { "key": "dog", - "description": "Layer 'Natuurgebied' shows dog=yes with a fixed text, namely 'Dogs are allowed to roam freely' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'De Natuur in')", + "description": "Layer 'Natuurgebied' shows dog=yes with a fixed text, namely 'Dogs are allowed to roam freely' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", "value": "yes" }, { "key": "website", - "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'De Natuur in')" + "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Into nature')" }, { "key": "curator", - "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'curator' (in the MapComplete.osm.be theme 'De Natuur in')" + "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'curator' (in the MapComplete.osm.be theme 'Into nature')" }, { "key": "email", - "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'De Natuur in')" + "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Into nature')" }, { "key": "phone", - "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'De Natuur in')" + "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Into nature')" }, { "key": "description", - "description": "Layer 'Natuurgebied' shows values with key 'description' (in the MapComplete.osm.be theme 'De Natuur in')" + "description": "Layer 'Natuurgebied' shows values with key 'description' (in the MapComplete.osm.be theme 'Into nature')" }, { "key": "description:0", - "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'description:0' (in the MapComplete.osm.be theme 'De Natuur in')" + "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'description:0' (in the MapComplete.osm.be theme 'Into nature')" }, { "key": "wikidata", - "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'wikidata' (in the MapComplete.osm.be theme 'De Natuur in')" + "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'wikidata' (in the MapComplete.osm.be theme 'Into nature')" }, { "key": "wikidata", - "description": "Layer 'Natuurgebied' shows with a fixed text, namely 'No Wikipedia page has been linked yet' (in the MapComplete.osm.be theme 'De Natuur in') Picking this answer will delete the key wikidata.", + "description": "Layer 'Natuurgebied' shows with a fixed text, namely 'No Wikipedia page has been linked yet' (in the MapComplete.osm.be theme 'Into nature') Picking this answer will delete the key wikidata.", "value": "" }, + { + "key": "tourism", + "description": "The MapComplete theme Into nature has a layer Maps showing features with this tag", + "value": "map" + }, + { + "key": "information", + "description": "The MapComplete theme Into nature 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 'Into nature')" + }, + { + "key": "map_source", + "description": "Layer 'Maps' shows map_source=OpenStreetMap 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 'Into nature')", + "value": "OpenStreetMap" + }, + { + "key": "not:map_source", + "description": "Layer 'Maps' shows map_source=OpenStreetMap 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 'Into nature') 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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "value": "no" + }, + { + "key": "information", + "description": "The MapComplete theme Into nature has a layer Information boards showing features with this tag", + "value": "board" + }, + { + "key": "image", + "description": "The layer 'Information boards allows to upload images and adds them under the 'image'-tag (and 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 'Information boards allows to upload images and adds them under the 'image'-tag (and 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 'Information boards allows to upload images and adds them under the 'image'-tag (and 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 'Information boards allows to upload images and adds them under the 'image'-tag (and 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 Into nature 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 backrest=yes with a fixed text, namely 'Backrest: Yes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", + "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 'Into nature')", + "value": "no" + }, + { + "key": "seats", + "description": "Layer 'Benches' shows and asks freeform values for key 'seats' (in the MapComplete.osm.be theme 'Into nature')" + }, + { + "key": "material", + "description": "Layer 'Benches' shows and asks freeform values for key 'material' (in the MapComplete.osm.be theme 'Into nature')" + }, + { + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "value": "steel" + }, + { + "key": "direction", + "description": "Layer 'Benches' shows and asks freeform values for key 'direction' (in the MapComplete.osm.be theme 'Into nature')" + }, + { + "key": "colour", + "description": "Layer 'Benches' shows and asks freeform values for key 'colour' (in the MapComplete.osm.be theme 'Into nature')" + }, + { + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "value": "yellow" + }, + { + "key": "survey:date", + "description": "Layer 'Benches' shows and asks freeform values for key 'survey:date' (in the MapComplete.osm.be theme 'Into nature')" + }, + { + "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 'Into nature') Picking this answer will delete the key survey:date.", + "value": "" + }, + { + "key": "leisure", + "description": "The MapComplete theme Into nature has a layer Picnic tables showing features with this tag", + "value": "picnic_table" + }, + { + "key": "image", + "description": "The layer 'Picnic tables allows to upload images and adds them under the 'image'-tag (and 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 'Picnic tables allows to upload images and adds them under the 'image'-tag (and 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 'Picnic tables allows to upload images and adds them under the 'image'-tag (and 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 'Picnic tables allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "material", + "description": "Layer 'Picnic tables' shows and asks freeform values for key 'material' (in the MapComplete.osm.be theme 'Into nature')" + }, + { + "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 'Into nature')", + "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 'Into nature')", + "value": "concrete" + }, + { + "key": "amenity", + "description": "The MapComplete theme Into nature 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 'Into nature')" + }, + { + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "value": "key" + }, + { + "key": "access", + "description": "Layer 'Toilets' shows access=public with a fixed text, namely 'Public access' (in the MapComplete.osm.be theme 'Into nature')", + "value": "public" + }, + { + "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 'Into nature')", + "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 'Into nature')", + "value": "no" + }, + { + "key": "charge", + "description": "Layer 'Toilets' shows and asks freeform values for key 'charge' (in the MapComplete.osm.be theme 'Into nature')" + }, + { + "key": "payment:cash", + "description": "Layer 'Toilets' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", + "value": "yes" + }, + { + "key": "payment:cards", + "description": "Layer 'Toilets' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", + "value": "yes" + }, + { + "key": "opening_hours", + "description": "Layer 'Toilets' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Into nature')" + }, + { + "key": "opening_hours", + "description": "Layer 'Toilets' shows opening_hours=24/7 with a fixed text, namely 'Opened 24/7' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", + "value": "24/7" + }, + { + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')" + }, + { + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "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 'Into nature')", + "value": "dedicated_room" + }, + { + "key": "toilets:handwashing", + "description": "Layer 'Toilets' shows toilets:handwashing=yes with a fixed text, namely 'This toilets have a sink to wash your hands' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", + "value": "yes" + }, + { + "key": "toilets:handwashing", + "description": "Layer 'Toilets' shows toilets:handwashing=no with a fixed text, namely 'This toilets don't have a sink to wash your hands' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", + "value": "no" + }, + { + "key": "toilets:paper_supplied", + "description": "Layer 'Toilets' shows toilets:paper_supplied=yes with a fixed text, namely 'This toilet is equipped with toilet paper' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", + "value": "yes" + }, + { + "key": "toilets:paper_supplied", + "description": "Layer 'Toilets' shows toilets:paper_supplied=no with a fixed text, namely 'You have to bring your own toilet paper to this toilet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", + "value": "no" + }, + { + "key": "level", + "description": "Layer 'Toilets' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'Into nature')" + }, + { + "key": "location", + "description": "Layer 'Toilets' shows location=underground with a fixed text, namely 'Located underground' (in the MapComplete.osm.be theme 'Into nature')", + "value": "underground" + }, + { + "key": "level", + "description": "Layer 'Toilets' shows level=0 with a fixed text, namely 'Located on the ground floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", + "value": "0" + }, + { + "key": "level", + "description": "Layer 'Toilets' shows with a fixed text, namely 'Located on the ground floor' (in the MapComplete.osm.be theme 'Into nature') Picking this answer will delete the key level.", + "value": "" + }, + { + "key": "level", + "description": "Layer 'Toilets' shows level=1 with a fixed text, namely 'Located on the first floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", + "value": "1" + }, + { + "key": "level", + "description": "Layer 'Toilets' shows level=-1 with a fixed text, namely 'Located on the first basement level' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Into nature')", + "value": "-1" + }, + { + "key": "description", + "description": "Layer 'Toilets' shows and asks freeform values for key 'description' (in the MapComplete.osm.be theme 'Into nature')" + }, { "key": "id", - "description": "The MapComplete theme De Natuur in has a layer Your track showing features with this tag", + "description": "The MapComplete theme Into nature has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_notes.json b/Docs/TagInfo/mapcomplete_notes.json index 580b68620a..194c65c341 100644 --- a/Docs/TagInfo/mapcomplete_notes.json +++ b/Docs/TagInfo/mapcomplete_notes.json @@ -5,7 +5,7 @@ "description": "A note is a pin on the map with some text to indicate something wrong", "project_url": "https://mapcomplete.osm.be/notes", "doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/", - "icon_url": "https://mapcomplete.osm.be/assets/svg/resolved.svg", + "icon_url": "https://mapcomplete.osm.be/assets/themes/notes/logo.svg", "contact_name": "Pieter Vander Vennet, MapComplete", "contact_email": "pietervdvn@posteo.net" }, @@ -16,7 +16,7 @@ }, { "key": "id", - "description": "The MapComplete theme Notes on OpenStreetMap has a layer Your track showing features with this tag", + "description": "The MapComplete theme Notes on OpenStreetMap has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_observation_towers.json b/Docs/TagInfo/mapcomplete_observation_towers.json index 54cd526c00..1e8766dd56 100644 --- a/Docs/TagInfo/mapcomplete_observation_towers.json +++ b/Docs/TagInfo/mapcomplete_observation_towers.json @@ -45,16 +45,14 @@ "description": "Layer 'Observation towers' shows and asks freeform values for key 'height' (in the MapComplete.osm.be theme 'Observation towers')" }, { - "key": "operator", - "description": "Layer 'Observation towers' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Observation towers')" + "key": "access", + "description": "Layer 'Observation towers' shows access=yes with a fixed text, namely 'This tower is publicly accessible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Observation towers')", + "value": "yes" }, { - "key": "website", - "description": "Layer 'Observation towers' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Observation towers')" - }, - { - "key": "contact:website", - "description": "Layer 'Observation towers' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Observation towers')" + "key": "access", + "description": "Layer 'Observation towers' shows access=guided with a fixed text, namely 'This tower can only be visited with a guide' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Observation towers')", + "value": "guided" }, { "key": "charge", @@ -80,6 +78,32 @@ "description": "Layer 'Observation towers' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Observation towers')", "value": "yes" }, + { + "key": "website", + "description": "Layer 'Observation towers' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Observation towers')" + }, + { + "key": "contact:website", + "description": "Layer 'Observation towers' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Observation towers')" + }, + { + "key": "step_count", + "description": "Layer 'Observation towers' shows and asks freeform values for key 'step_count' (in the MapComplete.osm.be theme 'Observation towers')" + }, + { + "key": "elevator", + "description": "Layer 'Observation towers' shows elevator=yes with a fixed text, namely 'This tower has an elevator which takes visitors to the top' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Observation towers')", + "value": "yes" + }, + { + "key": "elevator", + "description": "Layer 'Observation towers' shows elevator=no with a fixed text, namely 'This tower does not have an elevator' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Observation towers')", + "value": "no" + }, + { + "key": "operator", + "description": "Layer 'Observation towers' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Observation towers')" + }, { "key": "wheelchair", "description": "Layer 'Observation towers' shows wheelchair=designated with a fixed text, namely 'This place is specially adapted for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Observation towers')", @@ -111,7 +135,7 @@ }, { "key": "id", - "description": "The MapComplete theme Observation towers has a layer Your track showing features with this tag", + "description": "The MapComplete theme Observation towers has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_openwindpowermap.json b/Docs/TagInfo/mapcomplete_openwindpowermap.json index a8ba2b6042..83ecc311ad 100644 --- a/Docs/TagInfo/mapcomplete_openwindpowermap.json +++ b/Docs/TagInfo/mapcomplete_openwindpowermap.json @@ -5,7 +5,7 @@ "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", + "icon_url": "https://mapcomplete.osm.be/assets/themes/openwindpowermap/logo.svg", "contact_name": "Pieter Vander Vennet, Seppe Santens", "contact_email": "pietervdvn@posteo.net" }, @@ -53,7 +53,7 @@ }, { "key": "id", - "description": "The MapComplete theme OpenWindPowerMap has a layer Your track showing features with this tag", + "description": "The MapComplete theme OpenWindPowerMap has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_parkings.json b/Docs/TagInfo/mapcomplete_parkings.json index b4248bac68..0e52361f0e 100644 --- a/Docs/TagInfo/mapcomplete_parkings.json +++ b/Docs/TagInfo/mapcomplete_parkings.json @@ -33,7 +33,7 @@ }, { "key": "id", - "description": "The MapComplete theme Parking has a layer Your track showing features with this tag", + "description": "The MapComplete theme Parking has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_personal.json b/Docs/TagInfo/mapcomplete_personal.json index 1e65c6d4b4..d80185cd31 100644 --- a/Docs/TagInfo/mapcomplete_personal.json +++ b/Docs/TagInfo/mapcomplete_personal.json @@ -10,10 +10,6611 @@ "contact_email": "pietervdvn@posteo.net" }, "tags": [ + { + "key": "emergency", + "description": "The MapComplete theme Personal theme 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 'Personal theme')", + "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 'Personal theme')", + "value": "no" + }, + { + "key": "access", + "description": "Layer 'Defibrillators' shows and asks freeform values for key 'access' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "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 'Personal theme')", + "value": "yes" + }, + { + "key": "access", + "description": "Layer 'Defibrillators' shows access=public with a fixed text, namely 'Publicly accessible' (in the MapComplete.osm.be theme 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "value": "no" + }, + { + "key": "defibrillator", + "description": "Layer 'Defibrillators' shows with a fixed text, namely 'There is no info about the type of device' (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key defibrillator.", + "value": "" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "value": "automatic" + }, + { + "key": "defibrillator", + "description": "Layer 'Defibrillators' shows defibrillator~^..*$ with a fixed text, namely 'This is a special type of defibrillator: {defibrillator}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "level", + "description": "Layer 'Defibrillators' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "level", + "description": "Layer 'Defibrillators' shows level=0 with a fixed text, namely 'This defibrillator is on the ground floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "0" + }, + { + "key": "level", + "description": "Layer 'Defibrillators' shows level=1 with a fixed text, namely 'This defibrillator is on the first floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "defibrillator:location", + "description": "Layer 'Defibrillators' shows and asks freeform values for key 'defibrillator:location' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "defibrillator:location:en", + "description": "Layer 'Defibrillators' shows and asks freeform values for key 'defibrillator:location:en' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "defibrillator:location:fr", + "description": "Layer 'Defibrillators' shows and asks freeform values for key 'defibrillator:location:fr' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "wheelchair", + "description": "Layer 'Defibrillators' shows wheelchair=designated with a fixed text, namely 'This place is specially adapted for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "designated" + }, + { + "key": "wheelchair", + "description": "Layer 'Defibrillators' shows wheelchair=yes with a fixed text, namely 'This place is easily reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "wheelchair", + "description": "Layer 'Defibrillators' shows wheelchair=limited with a fixed text, namely 'It is possible to reach this place in a wheelchair, but it is not easy' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "limited" + }, + { + "key": "wheelchair", + "description": "Layer 'Defibrillators' shows wheelchair=no with a fixed text, namely 'This place is not reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "ref", + "description": "Layer 'Defibrillators' shows and asks freeform values for key 'ref' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "email", + "description": "Layer 'Defibrillators' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "phone", + "description": "Layer 'Defibrillators' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "opening_hours", + "description": "Layer 'Defibrillators' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "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 'Personal theme')", + "value": "24/7" + }, + { + "key": "description", + "description": "Layer 'Defibrillators' shows and asks freeform values for key 'description' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "survey:date", + "description": "Layer 'Defibrillators' shows and asks freeform values for key 'survey:date' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "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 'Personal theme') 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 'Personal theme')" + }, + { + "key": "tourism", + "description": "The MapComplete theme Personal theme 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 'Personal theme')" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "value": "tilework" + }, + { + "key": "artist_name", + "description": "Layer 'Artworks' shows and asks freeform values for key 'artist_name' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "website", + "description": "Layer 'Artworks' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "wikidata", + "description": "Layer 'Artworks' shows and asks freeform values for key 'wikidata' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme 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 backrest=yes with a fixed text, namely 'Backrest: Yes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "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 'Personal theme')", + "value": "no" + }, + { + "key": "seats", + "description": "Layer 'Benches' shows and asks freeform values for key 'seats' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "material", + "description": "Layer 'Benches' shows and asks freeform values for key 'material' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "value": "steel" + }, + { + "key": "direction", + "description": "Layer 'Benches' shows and asks freeform values for key 'direction' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "colour", + "description": "Layer 'Benches' shows and asks freeform values for key 'colour' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "value": "yellow" + }, + { + "key": "survey:date", + "description": "Layer 'Benches' shows and asks freeform values for key 'survey:date' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "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 'Personal theme') Picking this answer will delete the key survey:date.", + "value": "" + }, + { + "key": "bench", + "description": "The MapComplete theme Personal theme has a layer Benches at public transport stops showing features with this tag", + "value": "yes" + }, + { + "key": "bench", + "description": "The MapComplete theme Personal theme 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 'Personal theme')" + }, + { + "key": "bench", + "description": "Layer 'Benches at public transport stops' shows bench=yes with a fixed text, namely 'There is a normal, sit-down bench here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "bench", + "description": "Layer 'Benches at public transport stops' shows bench=stand_up_bench with a fixed text, namely 'Stand up bench' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "stand_up_bench" + }, + { + "key": "bench", + "description": "Layer 'Benches at public transport stops' shows bench=no with a fixed text, namely 'There is no bench here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "leisure", + "description": "The MapComplete theme Personal theme has a layer Picnic tables showing features with this tag", + "value": "picnic_table" + }, + { + "key": "image", + "description": "The layer 'Picnic tables allows to upload images and adds them under the 'image'-tag (and 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 'Picnic tables allows to upload images and adds them under the 'image'-tag (and 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 'Picnic tables allows to upload images and adds them under the 'image'-tag (and 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 'Picnic tables allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "material", + "description": "Layer 'Picnic tables' shows and asks freeform values for key 'material' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "value": "concrete" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Bicycle rental showing features with this tag", + "value": "bicycle_rental" + }, + { + "key": "bicycle_rental", + "description": "The MapComplete theme Personal theme has a layer Bicycle rental showing features with this tag" + }, + { + "key": "service:bicycle:rental", + "description": "The MapComplete theme Personal theme has a layer Bicycle rental showing features with this tag", + "value": "yes" + }, + { + "key": "rental", + "description": "The MapComplete theme Personal theme has a layer Bicycle rental showing features with this tag" + }, + { + "key": "shop", + "description": "Layer 'Bicycle rental' shows shop=bicycle_rental&bicycle_rental=shop with a fixed text, namely 'This is a shop whose main focus is bicycle rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "bicycle_rental" + }, + { + "key": "bicycle_rental", + "description": "Layer 'Bicycle rental' shows shop=bicycle_rental&bicycle_rental=shop with a fixed text, namely 'This is a shop whose main focus is bicycle rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "shop" + }, + { + "key": "shop", + "description": "Layer 'Bicycle rental' shows shop=rental with a fixed text, namely 'This is a rental buisiness which rents out various objects and/or vehicles. It rents out bicycles too, but this is not the main focus' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "rental" + }, + { + "key": "service:bicycle:rental", + "description": "Layer 'Bicycle rental' shows service:bicycle:rental=yes&shop=bicycle with a fixed text, namely 'This is a shop which sells or repairs bicycles, but also rents out bicycles' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "shop", + "description": "Layer 'Bicycle rental' shows service:bicycle:rental=yes&shop=bicycle with a fixed text, namely 'This is a shop which sells or repairs bicycles, but also rents out bicycles' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "bicycle" + }, + { + "key": "bicycle_rental", + "description": "Layer 'Bicycle rental' shows bicycle_rental=docking_station with a fixed text, namely 'This is an automated docking station, where a bicycle is mechanically locked into a structure' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "docking_station" + }, + { + "key": "bicycle_rental", + "description": "Layer 'Bicycle rental' shows bicycle_rental=key_dispensing_machine with a fixed text, namely 'A machine is present which dispenses and accepts keys, eventually after authentication and/or payment. The bicycles are parked nearby' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "key_dispensing_machine" + }, + { + "key": "bicycle_rental", + "description": "Layer 'Bicycle rental' shows bicycle_rental=dropoff_point with a fixed text, namely 'This is a dropoff point: a designated bicycle parking for this cycle rental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "dropoff_point" + }, + { + "key": "website", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:website", + "description": "Layer 'Bicycle rental' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "email", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:email", + "description": "Layer 'Bicycle rental' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "phone", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:phone", + "description": "Layer 'Bicycle rental' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "opening_hours", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "payment:cash", + "description": "Layer 'Bicycle rental' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "payment:cards", + "description": "Layer 'Bicycle rental' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "payment:cash", + "description": "Layer 'Bicycle rental' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "payment:cards", + "description": "Layer 'Bicycle rental' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "payment:app", + "description": "Layer 'Bicycle rental' shows payment:app=yes with a fixed text, namely 'Payment is done using a dedicated app' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "payment:membership_card", + "description": "Layer 'Bicycle rental' shows payment:membership_card=yes with a fixed text, namely 'Payment is done using a membership card' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "rental", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'rental' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "rental", + "description": "Layer 'Bicycle rental' shows rental=city_bike with a fixed text, namely 'Normal city bikes can be rented here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "city_bike" + }, + { + "key": "rental", + "description": "Layer 'Bicycle rental' shows rental=ebike with a fixed text, namely 'Electrical bikes can be rented here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "ebike" + }, + { + "key": "rental", + "description": "Layer 'Bicycle rental' shows rental=bmx with a fixed text, namely 'BMX bikes can be rented here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "bmx" + }, + { + "key": "rental", + "description": "Layer 'Bicycle rental' shows rental=mtb with a fixed text, namely 'Mountainbikes can be rented here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "mtb" + }, + { + "key": "rental", + "description": "Layer 'Bicycle rental' shows rental=kid_bike with a fixed text, namely 'Bikes for childs can be rented here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "kid_bike" + }, + { + "key": "capacity:city_bike", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'capacity:city_bike' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "capacity:ebike", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'capacity:ebike' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "capacity:kid_bike", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'capacity:kid_bike' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "capacity:bmx", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'capacity:bmx' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "capacity:mtb", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'capacity:mtb' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "capacity:bicycle_pannier", + "description": "Layer 'Bicycle rental' shows and asks freeform values for key 'capacity:bicycle_pannier' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme 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 'Personal theme')" + }, + { + "key": "website", + "description": "Layer 'Bicycle library' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:website", + "description": "Layer 'Bicycle library' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "phone", + "description": "Layer 'Bicycle library' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:phone", + "description": "Layer 'Bicycle library' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "email", + "description": "Layer 'Bicycle library' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:email", + "description": "Layer 'Bicycle library' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "opening_hours", + "description": "Layer 'Bicycle library' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "charge", + "description": "Layer 'Bicycle library' shows and asks freeform values for key 'charge' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "fee", + "description": "Layer 'Bicycle library' shows fee=no 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 'Personal theme')", + "value": "no" + }, + { + "key": "charge", + "description": "Layer 'Bicycle library' shows fee=no 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 'Personal theme') 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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "value": "disabled" + }, + { + "key": "description", + "description": "Layer 'Bicycle library' shows and asks freeform values for key 'description' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Binoculars showing features with this tag", + "value": "binoculars" + }, + { + "key": "image", + "description": "The layer 'Binoculars allows to upload images and adds them under the 'image'-tag (and 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 'Binoculars allows to upload images and adds them under the 'image'-tag (and 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 'Binoculars allows to upload images and adds them under the 'image'-tag (and 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 'Binoculars allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "charge", + "description": "Layer 'Binoculars' shows and asks freeform values for key 'charge' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "fee", + "description": "Layer 'Binoculars' 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 'Personal theme')", + "value": "no" + }, + { + "key": "charge", + "description": "Layer 'Binoculars' 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 'Personal theme') Picking this answer will delete the key charge.", + "value": "" + }, + { + "key": "direction", + "description": "Layer 'Binoculars' shows and asks freeform values for key 'direction' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme 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 'Personal theme')" + }, + { + "key": "noname", + "description": "Layer 'Bookcases' shows noname=yes 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 'Personal theme')", + "value": "yes" + }, + { + "key": "name", + "description": "Layer 'Bookcases' shows noname=yes 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 'Personal theme') 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 'Personal theme')" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "value": "no" + }, + { + "key": "indoor", + "description": "Layer 'Bookcases' shows with a fixed text, namely 'This bookcase is located outdoors' (in the MapComplete.osm.be theme 'Personal theme') 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 'Personal theme')", + "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 'Personal theme')", + "value": "customers" + }, + { + "key": "operator", + "description": "Layer 'Bookcases' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "brand", + "description": "Layer 'Bookcases' shows and asks freeform values for key 'brand' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "brand", + "description": "Layer 'Bookcases' shows brand=Little Free Library 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 'Personal theme')", + "value": "Little Free Library" + }, + { + "key": "nobrand", + "description": "Layer 'Bookcases' shows brand=Little Free Library 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 'Personal theme') Picking this answer will delete the key nobrand.", + "value": "" + }, + { + "key": "nobrand", + "description": "Layer 'Bookcases' shows nobrand=yes 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 'Personal theme')", + "value": "yes" + }, + { + "key": "brand", + "description": "Layer 'Bookcases' shows nobrand=yes 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 'Personal theme') 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 'Personal theme')" + }, + { + "key": "nobrand", + "description": "Layer 'Bookcases' shows nobrand=yes 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 'Personal theme')", + "value": "yes" + }, + { + "key": "brand", + "description": "Layer 'Bookcases' shows nobrand=yes 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 'Personal theme') Picking this answer will delete the key brand.", + "value": "" + }, + { + "key": "ref", + "description": "Layer 'Bookcases' shows nobrand=yes 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 'Personal theme') 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 'Personal theme')" + }, + { + "key": "website", + "description": "Layer 'Bookcases' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Cafés and pubs showing features with this tag", + "value": "bar" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Cafés and pubs showing features with this tag", + "value": "pub" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Cafés and pubs showing features with this tag", + "value": "cafe" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Cafés and pubs showing features with this tag", + "value": "biergarten" + }, + { + "key": "image", + "description": "The layer 'Cafés and pubs allows to upload images and adds them under the 'image'-tag (and 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 'Cafés and pubs allows to upload images and adds them under the 'image'-tag (and 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 'Cafés and pubs allows to upload images and adds them under the 'image'-tag (and 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 'Cafés and pubs allows to upload images and adds them under the 'image'-tag (and 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 'Cafés and pubs' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "amenity", + "description": "Layer 'Cafés and pubs' shows amenity=pub with a fixed text, namely 'Dit is een bruin café of een kroeg waar voornamelijk bier wordt gedronken. De inrichting is typisch gezellig met veel houtwerk ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pub" + }, + { + "key": "amenity", + "description": "Layer 'Cafés and pubs' shows amenity=bar with a fixed text, namely 'Dit is een bar waar men ter plaatse alcoholische drank nuttigt. De inrichting is typisch modern en commercieel, soms met lichtinstallatie en feestmuziek' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "bar" + }, + { + "key": "amenity", + "description": "Layer 'Cafés and pubs' shows amenity=cafe with a fixed text, namely 'Dit is een cafe - een plaats waar men rustig kan zitten om een thee, koffie of alcoholische drank te nuttigen.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "cafe" + }, + { + "key": "amenity", + "description": "Layer 'Cafés and pubs' shows amenity=restaurant with a fixed text, namely 'Dit is een restaurant waar men een maaltijd geserveerd krijgt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "restaurant" + }, + { + "key": "amenity", + "description": "Layer 'Cafés and pubs' shows amenity=biergarten with a fixed text, namely 'Een open ruimte waar bier geserveerd wordt. Typisch in Duitsland' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "biergarten" + }, + { + "key": "opening_hours", + "description": "Layer 'Cafés and pubs' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "website", + "description": "Layer 'Cafés and pubs' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:website", + "description": "Layer 'Cafés and pubs' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "email", + "description": "Layer 'Cafés and pubs' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:email", + "description": "Layer 'Cafés and pubs' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "phone", + "description": "Layer 'Cafés and pubs' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:phone", + "description": "Layer 'Cafés and pubs' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "payment:cash", + "description": "Layer 'Cafés and pubs' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "payment:cards", + "description": "Layer 'Cafés and pubs' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "wheelchair", + "description": "Layer 'Cafés and pubs' shows wheelchair=designated with a fixed text, namely 'This place is specially adapted for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "designated" + }, + { + "key": "wheelchair", + "description": "Layer 'Cafés and pubs' shows wheelchair=yes with a fixed text, namely 'This place is easily reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "wheelchair", + "description": "Layer 'Cafés and pubs' shows wheelchair=limited with a fixed text, namely 'It is possible to reach this place in a wheelchair, but it is not easy' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "limited" + }, + { + "key": "wheelchair", + "description": "Layer 'Cafés and pubs' shows wheelchair=no with a fixed text, namely 'This place is not reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "service:electricity", + "description": "Layer 'Cafés and pubs' shows service:electricity=yes with a fixed text, namely 'There are plenty of domestic sockets available to customers seated indoors, where they can charge their electronics' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:electricity", + "description": "Layer 'Cafés and pubs' shows service:electricity=limited with a fixed text, namely 'There are a few domestic sockets available to customers seated indoors, where they can charge their electronics' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "limited" + }, + { + "key": "service:electricity", + "description": "Layer 'Cafés and pubs' shows service:electricity=ask with a fixed text, namely 'There are no sockets available indoors to customers, but charging might be possible if the staff is asked' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "ask" + }, + { + "key": "service:electricity", + "description": "Layer 'Cafés and pubs' shows service:electricity=no with a fixed text, namely 'There are a no domestic sockets available to customers seated indoors' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "dog", + "description": "Layer 'Cafés and pubs' shows dog=yes with a fixed text, namely 'Dogs are allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "dog", + "description": "Layer 'Cafés and pubs' shows dog=no with a fixed text, namely 'Dogs are not allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "dog", + "description": "Layer 'Cafés and pubs' shows dog=leashed with a fixed text, namely 'Dogs are allowed, but they have to be leashed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "leashed" + }, + { + "key": "dog", + "description": "Layer 'Cafés and pubs' shows dog=unleashed with a fixed text, namely 'Dogs are allowed and can run around freely' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "unleashed" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Charging stations showing features with this tag", + "value": "charging_station" + }, + { + "key": "disused:amenity", + "description": "The MapComplete theme Personal theme has a layer Charging stations showing features with this tag", + "value": "charging_station" + }, + { + "key": "planned:amenity", + "description": "The MapComplete theme Personal theme has a layer Charging stations showing features with this tag", + "value": "charging_station" + }, + { + "key": "construction:amenity", + "description": "The MapComplete theme Personal theme 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": "bicycle", + "description": "Layer 'Charging stations' shows bicycle=yes with a fixed text, namely 'Bicycles can be charged here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "motorcar", + "description": "Layer 'Charging stations' shows motorcar=yes with a fixed text, namely 'Cars can be charged here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "scooter", + "description": "Layer 'Charging stations' shows scooter=yes with a fixed text, namely 'Scooters can be charged here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "hgv", + "description": "Layer 'Charging stations' shows hgv=yes with a fixed text, namely 'Heavy good vehicles (such as trucks) can be charged here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "bus", + "description": "Layer 'Charging stations' shows bus=yes with a fixed text, namely 'Buses can be charged here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "access", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'access' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "access", + "description": "Layer 'Charging stations' shows access=yes with a fixed text, namely 'Anyone can use this charging station (payment might be needed)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "access", + "description": "Layer 'Charging stations' shows access=permissive|access=public with a fixed text, namely 'Anyone can use this charging station (payment might be needed)' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "permissive" + }, + { + "key": "access", + "description": "Layer 'Charging stations' shows access=permissive|access=public with a fixed text, namely 'Anyone can use this charging station (payment might be needed)' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "public" + }, + { + "key": "access", + "description": "Layer 'Charging stations' shows access=customers with a fixed text, namely 'Only customers of the place this station belongs to can use this charging station
E.g. a charging station operated by hotel which is only usable by their guests' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "customers" + }, + { + "key": "access", + "description": "Layer 'Charging stations' shows access=private with a fixed text, namely 'Not accessible to the general public (e.g. only accessible to the owners, employees, ...)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "private" + }, + { + "key": "capacity", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'capacity' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:schuko", + "description": "Layer 'Charging stations' shows socket:schuko=1 with a fixed text, namely '
Schuko wall plug without ground pin (CEE7/4 type F)
' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "socket:schuko", + "description": "Layer 'Charging stations' shows socket:schuko~^..*$&socket:schuko!~^1$ with a fixed text, namely '
Schuko wall plug without ground pin (CEE7/4 type F)
' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:typee", + "description": "Layer 'Charging stations' shows socket:typee=1 with a fixed text, namely '
European wall plug with ground pin (CEE7/4 type E)
' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "socket:typee", + "description": "Layer 'Charging stations' shows socket:typee~^..*$&socket:typee!~^1$ with a fixed text, namely '
European wall plug with ground pin (CEE7/4 type E)
' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:chademo", + "description": "Layer 'Charging stations' shows socket:chademo=1 with a fixed text, namely '
Chademo
' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "socket:chademo", + "description": "Layer 'Charging stations' shows socket:chademo~^..*$&socket:chademo!~^1$ with a fixed text, namely '
Chademo
' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:type1_cable", + "description": "Layer 'Charging stations' shows socket:type1_cable=1 with a fixed text, namely '
Type 1 with cable (J1772)
' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "socket:type1_cable", + "description": "Layer 'Charging stations' shows socket:type1_cable~^..*$&socket:type1_cable!~^1$ with a fixed text, namely '
Type 1 with cable (J1772)
' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:type1", + "description": "Layer 'Charging stations' shows socket:type1=1 with a fixed text, namely '
Type 1 without cable (J1772)
' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "socket:type1", + "description": "Layer 'Charging stations' shows socket:type1~^..*$&socket:type1!~^1$ with a fixed text, namely '
Type 1 without cable (J1772)
' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:type1_combo", + "description": "Layer 'Charging stations' shows socket:type1_combo=1 with a fixed text, namely '
Type 1 CCS (aka Type 1 Combo)
' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "socket:type1_combo", + "description": "Layer 'Charging stations' shows socket:type1_combo~^..*$&socket:type1_combo!~^1$ with a fixed text, namely '
Type 1 CCS (aka Type 1 Combo)
' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:tesla_supercharger", + "description": "Layer 'Charging stations' shows socket:tesla_supercharger=1 with a fixed text, namely '
Tesla Supercharger
' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "socket:tesla_supercharger", + "description": "Layer 'Charging stations' shows socket:tesla_supercharger~^..*$&socket:tesla_supercharger!~^1$ with a fixed text, namely '
Tesla Supercharger
' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:type2", + "description": "Layer 'Charging stations' shows socket:type2=1 with a fixed text, namely '
Type 2 (mennekes)
' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "socket:type2", + "description": "Layer 'Charging stations' shows socket:type2~^..*$&socket:type2!~^1$ with a fixed text, namely '
Type 2 (mennekes)
' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:type2_combo", + "description": "Layer 'Charging stations' shows socket:type2_combo=1 with a fixed text, namely '
Type 2 CCS (mennekes)
' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "socket:type2_combo", + "description": "Layer 'Charging stations' shows socket:type2_combo~^..*$&socket:type2_combo!~^1$ with a fixed text, namely '
Type 2 CCS (mennekes)
' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:type2_cable", + "description": "Layer 'Charging stations' shows socket:type2_cable=1 with a fixed text, namely '
Type 2 with cable (mennekes)
' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "socket:type2_cable", + "description": "Layer 'Charging stations' shows socket:type2_cable~^..*$&socket:type2_cable!~^1$ with a fixed text, namely '
Type 2 with cable (mennekes)
' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:tesla_supercharger_ccs", + "description": "Layer 'Charging stations' shows socket:tesla_supercharger_ccs=1 with a fixed text, namely '
Tesla Supercharger CCS (a branded type2_css)
' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "socket:tesla_supercharger_ccs", + "description": "Layer 'Charging stations' shows socket:tesla_supercharger_ccs~^..*$&socket:tesla_supercharger_ccs!~^1$ with a fixed text, namely '
Tesla Supercharger CCS (a branded type2_css)
' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:tesla_destination", + "description": "Layer 'Charging stations' shows socket:tesla_destination=1 with a fixed text, namely '
Tesla Supercharger (destination)
' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "socket:tesla_destination", + "description": "Layer 'Charging stations' shows socket:tesla_destination~^..*$&socket:tesla_destination!~^1$&_country=us with a fixed text, namely '
Tesla Supercharger (destination)
' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:tesla_destination", + "description": "Layer 'Charging stations' shows socket:tesla_destination=1 with a fixed text, namely '
Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "socket:tesla_destination", + "description": "Layer 'Charging stations' shows socket:tesla_destination~^..*$&socket:tesla_destination!~^1$&_country!~^us$ with a fixed text, namely '
Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:USB-A", + "description": "Layer 'Charging stations' shows socket:USB-A=1 with a fixed text, namely '
USB to charge phones and small electronics
' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "socket:USB-A", + "description": "Layer 'Charging stations' shows socket:USB-A~^..*$&socket:USB-A!~^1$ with a fixed text, namely '
USB to charge phones and small electronics
' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:bosch_3pin", + "description": "Layer 'Charging stations' shows socket:bosch_3pin=1 with a fixed text, namely '
Bosch Active Connect with 3 pins and cable
' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "socket:bosch_3pin", + "description": "Layer 'Charging stations' shows socket:bosch_3pin~^..*$&socket:bosch_3pin!~^1$ with a fixed text, namely '
Bosch Active Connect with 3 pins and cable
' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:bosch_5pin", + "description": "Layer 'Charging stations' shows socket:bosch_5pin=1 with a fixed text, namely '
Bosch Active Connect with 5 pins and cable
' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "socket:bosch_5pin", + "description": "Layer 'Charging stations' shows socket:bosch_5pin~^..*$&socket:bosch_5pin!~^1$ with a fixed text, namely '
Bosch Active Connect with 5 pins and cable
' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:schuko", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:schuko' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:typee", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:typee' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:chademo", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:chademo' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:type1_cable", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type1_cable' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:type1", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type1' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:type1_combo", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type1_combo' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:tesla_supercharger", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:tesla_supercharger' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:type2", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type2' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:type2_combo", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type2_combo' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:type2_cable", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type2_cable' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:tesla_supercharger_ccs", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:tesla_supercharger_ccs' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:tesla_destination", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:tesla_destination' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:tesla_destination", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:tesla_destination' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:USB-A", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:USB-A' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:bosch_3pin", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:bosch_3pin' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:bosch_5pin", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:bosch_5pin' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:schuko:voltage", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:schuko:voltage' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:schuko:voltage", + "description": "Layer 'Charging stations' shows socket:socket:schuko:voltage=230 V with a fixed text, namely '
Schuko wall plug without ground pin (CEE7/4 type F)
outputs 230 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "230 V" + }, + { + "key": "socket:schuko:current", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:schuko:current' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:schuko:current", + "description": "Layer 'Charging stations' shows socket:socket:schuko:current=16 A with a fixed text, namely '
Schuko wall plug without ground pin (CEE7/4 type F)
outputs at most 16 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "16 A" + }, + { + "key": "socket:schuko:output", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:schuko:output' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:schuko:output", + "description": "Layer 'Charging stations' shows socket:socket:schuko:output=3.6 kw with a fixed text, namely '
Schuko wall plug without ground pin (CEE7/4 type F)
outputs at most 3.6 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "3.6 kw" + }, + { + "key": "socket:typee:voltage", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:typee:voltage' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:typee:voltage", + "description": "Layer 'Charging stations' shows socket:socket:typee:voltage=230 V with a fixed text, namely '
European wall plug with ground pin (CEE7/4 type E)
outputs 230 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "230 V" + }, + { + "key": "socket:typee:current", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:typee:current' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:typee:current", + "description": "Layer 'Charging stations' shows socket:socket:typee:current=16 A with a fixed text, namely '
European wall plug with ground pin (CEE7/4 type E)
outputs at most 16 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "16 A" + }, + { + "key": "socket:typee:output", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:typee:output' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:typee:output", + "description": "Layer 'Charging stations' shows socket:socket:typee:output=3 kw with a fixed text, namely '
European wall plug with ground pin (CEE7/4 type E)
outputs at most 3 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "3 kw" + }, + { + "key": "socket:socket:typee:output", + "description": "Layer 'Charging stations' shows socket:socket:typee:output=22 kw with a fixed text, namely '
European wall plug with ground pin (CEE7/4 type E)
outputs at most 22 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "22 kw" + }, + { + "key": "socket:chademo:voltage", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:chademo:voltage' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:chademo:voltage", + "description": "Layer 'Charging stations' shows socket:socket:chademo:voltage=500 V with a fixed text, namely '
Chademo
outputs 500 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "500 V" + }, + { + "key": "socket:chademo:current", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:chademo:current' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:chademo:current", + "description": "Layer 'Charging stations' shows socket:socket:chademo:current=120 A with a fixed text, namely '
Chademo
outputs at most 120 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "120 A" + }, + { + "key": "socket:chademo:output", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:chademo:output' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:chademo:output", + "description": "Layer 'Charging stations' shows socket:socket:chademo:output=50 kw with a fixed text, namely '
Chademo
outputs at most 50 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "50 kw" + }, + { + "key": "socket:type1_cable:voltage", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type1_cable:voltage' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:type1_cable:voltage", + "description": "Layer 'Charging stations' shows socket:socket:type1_cable:voltage=200 V with a fixed text, namely '
Type 1 with cable (J1772)
outputs 200 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "200 V" + }, + { + "key": "socket:socket:type1_cable:voltage", + "description": "Layer 'Charging stations' shows socket:socket:type1_cable:voltage=240 V with a fixed text, namely '
Type 1 with cable (J1772)
outputs 240 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "240 V" + }, + { + "key": "socket:type1_cable:current", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type1_cable:current' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:type1_cable:current", + "description": "Layer 'Charging stations' shows socket:socket:type1_cable:current=32 A with a fixed text, namely '
Type 1 with cable (J1772)
outputs at most 32 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "32 A" + }, + { + "key": "socket:type1_cable:output", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type1_cable:output' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:type1_cable:output", + "description": "Layer 'Charging stations' shows socket:socket:type1_cable:output=3.7 kw with a fixed text, namely '
Type 1 with cable (J1772)
outputs at most 3.7 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "3.7 kw" + }, + { + "key": "socket:socket:type1_cable:output", + "description": "Layer 'Charging stations' shows socket:socket:type1_cable:output=7 kw with a fixed text, namely '
Type 1 with cable (J1772)
outputs at most 7 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "7 kw" + }, + { + "key": "socket:type1:voltage", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type1:voltage' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:type1:voltage", + "description": "Layer 'Charging stations' shows socket:socket:type1:voltage=200 V with a fixed text, namely '
Type 1 without cable (J1772)
outputs 200 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "200 V" + }, + { + "key": "socket:socket:type1:voltage", + "description": "Layer 'Charging stations' shows socket:socket:type1:voltage=240 V with a fixed text, namely '
Type 1 without cable (J1772)
outputs 240 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "240 V" + }, + { + "key": "socket:type1:current", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type1:current' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:type1:current", + "description": "Layer 'Charging stations' shows socket:socket:type1:current=32 A with a fixed text, namely '
Type 1 without cable (J1772)
outputs at most 32 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "32 A" + }, + { + "key": "socket:type1:output", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type1:output' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:type1:output", + "description": "Layer 'Charging stations' shows socket:socket:type1:output=3.7 kw with a fixed text, namely '
Type 1 without cable (J1772)
outputs at most 3.7 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "3.7 kw" + }, + { + "key": "socket:socket:type1:output", + "description": "Layer 'Charging stations' shows socket:socket:type1:output=6.6 kw with a fixed text, namely '
Type 1 without cable (J1772)
outputs at most 6.6 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "6.6 kw" + }, + { + "key": "socket:socket:type1:output", + "description": "Layer 'Charging stations' shows socket:socket:type1:output=7 kw with a fixed text, namely '
Type 1 without cable (J1772)
outputs at most 7 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "7 kw" + }, + { + "key": "socket:socket:type1:output", + "description": "Layer 'Charging stations' shows socket:socket:type1:output=7.2 kw with a fixed text, namely '
Type 1 without cable (J1772)
outputs at most 7.2 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "7.2 kw" + }, + { + "key": "socket:type1_combo:voltage", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type1_combo:voltage' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:type1_combo:voltage", + "description": "Layer 'Charging stations' shows socket:socket:type1_combo:voltage=400 V with a fixed text, namely '
Type 1 CCS (aka Type 1 Combo)
outputs 400 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "400 V" + }, + { + "key": "socket:socket:type1_combo:voltage", + "description": "Layer 'Charging stations' shows socket:socket:type1_combo:voltage=1000 V with a fixed text, namely '
Type 1 CCS (aka Type 1 Combo)
outputs 1000 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1000 V" + }, + { + "key": "socket:type1_combo:current", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type1_combo:current' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:type1_combo:current", + "description": "Layer 'Charging stations' shows socket:socket:type1_combo:current=50 A with a fixed text, namely '
Type 1 CCS (aka Type 1 Combo)
outputs at most 50 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "50 A" + }, + { + "key": "socket:socket:type1_combo:current", + "description": "Layer 'Charging stations' shows socket:socket:type1_combo:current=125 A with a fixed text, namely '
Type 1 CCS (aka Type 1 Combo)
outputs at most 125 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "125 A" + }, + { + "key": "socket:type1_combo:output", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type1_combo:output' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:type1_combo:output", + "description": "Layer 'Charging stations' shows socket:socket:type1_combo:output=50 kw with a fixed text, namely '
Type 1 CCS (aka Type 1 Combo)
outputs at most 50 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "50 kw" + }, + { + "key": "socket:socket:type1_combo:output", + "description": "Layer 'Charging stations' shows socket:socket:type1_combo:output=62.5 kw with a fixed text, namely '
Type 1 CCS (aka Type 1 Combo)
outputs at most 62.5 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "62.5 kw" + }, + { + "key": "socket:socket:type1_combo:output", + "description": "Layer 'Charging stations' shows socket:socket:type1_combo:output=150 kw with a fixed text, namely '
Type 1 CCS (aka Type 1 Combo)
outputs at most 150 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "150 kw" + }, + { + "key": "socket:socket:type1_combo:output", + "description": "Layer 'Charging stations' shows socket:socket:type1_combo:output=350 kw with a fixed text, namely '
Type 1 CCS (aka Type 1 Combo)
outputs at most 350 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "350 kw" + }, + { + "key": "socket:tesla_supercharger:voltage", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:tesla_supercharger:voltage' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:tesla_supercharger:voltage", + "description": "Layer 'Charging stations' shows socket:socket:tesla_supercharger:voltage=480 V with a fixed text, namely '
Tesla Supercharger
outputs 480 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "480 V" + }, + { + "key": "socket:tesla_supercharger:current", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:tesla_supercharger:current' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:tesla_supercharger:current", + "description": "Layer 'Charging stations' shows socket:socket:tesla_supercharger:current=125 A with a fixed text, namely '
Tesla Supercharger
outputs at most 125 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "125 A" + }, + { + "key": "socket:socket:tesla_supercharger:current", + "description": "Layer 'Charging stations' shows socket:socket:tesla_supercharger:current=350 A with a fixed text, namely '
Tesla Supercharger
outputs at most 350 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "350 A" + }, + { + "key": "socket:tesla_supercharger:output", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:tesla_supercharger:output' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:tesla_supercharger:output", + "description": "Layer 'Charging stations' shows socket:socket:tesla_supercharger:output=120 kw with a fixed text, namely '
Tesla Supercharger
outputs at most 120 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "120 kw" + }, + { + "key": "socket:socket:tesla_supercharger:output", + "description": "Layer 'Charging stations' shows socket:socket:tesla_supercharger:output=150 kw with a fixed text, namely '
Tesla Supercharger
outputs at most 150 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "150 kw" + }, + { + "key": "socket:socket:tesla_supercharger:output", + "description": "Layer 'Charging stations' shows socket:socket:tesla_supercharger:output=250 kw with a fixed text, namely '
Tesla Supercharger
outputs at most 250 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "250 kw" + }, + { + "key": "socket:type2:voltage", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type2:voltage' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:type2:voltage", + "description": "Layer 'Charging stations' shows socket:socket:type2:voltage=230 V with a fixed text, namely '
Type 2 (mennekes)
outputs 230 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "230 V" + }, + { + "key": "socket:socket:type2:voltage", + "description": "Layer 'Charging stations' shows socket:socket:type2:voltage=400 V with a fixed text, namely '
Type 2 (mennekes)
outputs 400 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "400 V" + }, + { + "key": "socket:type2:current", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type2:current' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:type2:current", + "description": "Layer 'Charging stations' shows socket:socket:type2:current=16 A with a fixed text, namely '
Type 2 (mennekes)
outputs at most 16 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "16 A" + }, + { + "key": "socket:socket:type2:current", + "description": "Layer 'Charging stations' shows socket:socket:type2:current=32 A with a fixed text, namely '
Type 2 (mennekes)
outputs at most 32 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "32 A" + }, + { + "key": "socket:type2:output", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type2:output' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:type2:output", + "description": "Layer 'Charging stations' shows socket:socket:type2:output=11 kw with a fixed text, namely '
Type 2 (mennekes)
outputs at most 11 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "11 kw" + }, + { + "key": "socket:socket:type2:output", + "description": "Layer 'Charging stations' shows socket:socket:type2:output=22 kw with a fixed text, namely '
Type 2 (mennekes)
outputs at most 22 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "22 kw" + }, + { + "key": "socket:type2_combo:voltage", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type2_combo:voltage' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:type2_combo:voltage", + "description": "Layer 'Charging stations' shows socket:socket:type2_combo:voltage=500 V with a fixed text, namely '
Type 2 CCS (mennekes)
outputs 500 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "500 V" + }, + { + "key": "socket:socket:type2_combo:voltage", + "description": "Layer 'Charging stations' shows socket:socket:type2_combo:voltage=920 V with a fixed text, namely '
Type 2 CCS (mennekes)
outputs 920 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "920 V" + }, + { + "key": "socket:type2_combo:current", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type2_combo:current' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:type2_combo:current", + "description": "Layer 'Charging stations' shows socket:socket:type2_combo:current=125 A with a fixed text, namely '
Type 2 CCS (mennekes)
outputs at most 125 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "125 A" + }, + { + "key": "socket:socket:type2_combo:current", + "description": "Layer 'Charging stations' shows socket:socket:type2_combo:current=350 A with a fixed text, namely '
Type 2 CCS (mennekes)
outputs at most 350 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "350 A" + }, + { + "key": "socket:type2_combo:output", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type2_combo:output' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:type2_combo:output", + "description": "Layer 'Charging stations' shows socket:socket:type2_combo:output=50 kw with a fixed text, namely '
Type 2 CCS (mennekes)
outputs at most 50 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "50 kw" + }, + { + "key": "socket:type2_cable:voltage", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type2_cable:voltage' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:type2_cable:voltage", + "description": "Layer 'Charging stations' shows socket:socket:type2_cable:voltage=230 V with a fixed text, namely '
Type 2 with cable (mennekes)
outputs 230 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "230 V" + }, + { + "key": "socket:socket:type2_cable:voltage", + "description": "Layer 'Charging stations' shows socket:socket:type2_cable:voltage=400 V with a fixed text, namely '
Type 2 with cable (mennekes)
outputs 400 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "400 V" + }, + { + "key": "socket:type2_cable:current", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type2_cable:current' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:type2_cable:current", + "description": "Layer 'Charging stations' shows socket:socket:type2_cable:current=16 A with a fixed text, namely '
Type 2 with cable (mennekes)
outputs at most 16 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "16 A" + }, + { + "key": "socket:socket:type2_cable:current", + "description": "Layer 'Charging stations' shows socket:socket:type2_cable:current=32 A with a fixed text, namely '
Type 2 with cable (mennekes)
outputs at most 32 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "32 A" + }, + { + "key": "socket:type2_cable:output", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:type2_cable:output' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:type2_cable:output", + "description": "Layer 'Charging stations' shows socket:socket:type2_cable:output=11 kw with a fixed text, namely '
Type 2 with cable (mennekes)
outputs at most 11 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "11 kw" + }, + { + "key": "socket:socket:type2_cable:output", + "description": "Layer 'Charging stations' shows socket:socket:type2_cable:output=22 kw with a fixed text, namely '
Type 2 with cable (mennekes)
outputs at most 22 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "22 kw" + }, + { + "key": "socket:tesla_supercharger_ccs:voltage", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:tesla_supercharger_ccs:voltage' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:tesla_supercharger_ccs:voltage", + "description": "Layer 'Charging stations' shows socket:socket:tesla_supercharger_ccs:voltage=500 V with a fixed text, namely '
Tesla Supercharger CCS (a branded type2_css)
outputs 500 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "500 V" + }, + { + "key": "socket:socket:tesla_supercharger_ccs:voltage", + "description": "Layer 'Charging stations' shows socket:socket:tesla_supercharger_ccs:voltage=920 V with a fixed text, namely '
Tesla Supercharger CCS (a branded type2_css)
outputs 920 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "920 V" + }, + { + "key": "socket:tesla_supercharger_ccs:current", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:tesla_supercharger_ccs:current' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:tesla_supercharger_ccs:current", + "description": "Layer 'Charging stations' shows socket:socket:tesla_supercharger_ccs:current=125 A with a fixed text, namely '
Tesla Supercharger CCS (a branded type2_css)
outputs at most 125 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "125 A" + }, + { + "key": "socket:socket:tesla_supercharger_ccs:current", + "description": "Layer 'Charging stations' shows socket:socket:tesla_supercharger_ccs:current=350 A with a fixed text, namely '
Tesla Supercharger CCS (a branded type2_css)
outputs at most 350 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "350 A" + }, + { + "key": "socket:tesla_supercharger_ccs:output", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:tesla_supercharger_ccs:output' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:tesla_supercharger_ccs:output", + "description": "Layer 'Charging stations' shows socket:socket:tesla_supercharger_ccs:output=50 kw with a fixed text, namely '
Tesla Supercharger CCS (a branded type2_css)
outputs at most 50 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "50 kw" + }, + { + "key": "socket:tesla_destination:voltage", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:tesla_destination:voltage' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:tesla_destination:voltage", + "description": "Layer 'Charging stations' shows socket:socket:tesla_destination:voltage=480 V with a fixed text, namely '
Tesla Supercharger (destination)
outputs 480 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "480 V" + }, + { + "key": "socket:tesla_destination:current", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:tesla_destination:current' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:tesla_destination:current", + "description": "Layer 'Charging stations' shows socket:socket:tesla_destination:current=125 A with a fixed text, namely '
Tesla Supercharger (destination)
outputs at most 125 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "125 A" + }, + { + "key": "socket:socket:tesla_destination:current", + "description": "Layer 'Charging stations' shows socket:socket:tesla_destination:current=350 A with a fixed text, namely '
Tesla Supercharger (destination)
outputs at most 350 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "350 A" + }, + { + "key": "socket:tesla_destination:output", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:tesla_destination:output' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:tesla_destination:output", + "description": "Layer 'Charging stations' shows socket:socket:tesla_destination:output=120 kw with a fixed text, namely '
Tesla Supercharger (destination)
outputs at most 120 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "120 kw" + }, + { + "key": "socket:socket:tesla_destination:output", + "description": "Layer 'Charging stations' shows socket:socket:tesla_destination:output=150 kw with a fixed text, namely '
Tesla Supercharger (destination)
outputs at most 150 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "150 kw" + }, + { + "key": "socket:socket:tesla_destination:output", + "description": "Layer 'Charging stations' shows socket:socket:tesla_destination:output=250 kw with a fixed text, namely '
Tesla Supercharger (destination)
outputs at most 250 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "250 kw" + }, + { + "key": "socket:tesla_destination:voltage", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:tesla_destination:voltage' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:tesla_destination:voltage", + "description": "Layer 'Charging stations' shows socket:socket:tesla_destination:voltage=230 V with a fixed text, namely '
Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
outputs 230 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "230 V" + }, + { + "key": "socket:socket:tesla_destination:voltage", + "description": "Layer 'Charging stations' shows socket:socket:tesla_destination:voltage=400 V with a fixed text, namely '
Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
outputs 400 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "400 V" + }, + { + "key": "socket:tesla_destination:current", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:tesla_destination:current' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:tesla_destination:current", + "description": "Layer 'Charging stations' shows socket:socket:tesla_destination:current=16 A with a fixed text, namely '
Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
outputs at most 16 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "16 A" + }, + { + "key": "socket:socket:tesla_destination:current", + "description": "Layer 'Charging stations' shows socket:socket:tesla_destination:current=32 A with a fixed text, namely '
Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
outputs at most 32 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "32 A" + }, + { + "key": "socket:tesla_destination:output", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:tesla_destination:output' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:tesla_destination:output", + "description": "Layer 'Charging stations' shows socket:socket:tesla_destination:output=11 kw with a fixed text, namely '
Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
outputs at most 11 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "11 kw" + }, + { + "key": "socket:socket:tesla_destination:output", + "description": "Layer 'Charging stations' shows socket:socket:tesla_destination:output=22 kw with a fixed text, namely '
Tesla supercharger (destination) (A Type 2 with cable branded as tesla)
outputs at most 22 kw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "22 kw" + }, + { + "key": "socket:USB-A:voltage", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:USB-A:voltage' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:USB-A:voltage", + "description": "Layer 'Charging stations' shows socket:socket:USB-A:voltage=5 V with a fixed text, namely '
USB to charge phones and small electronics
outputs 5 volt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "5 V" + }, + { + "key": "socket:USB-A:current", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:USB-A:current' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:USB-A:current", + "description": "Layer 'Charging stations' shows socket:socket:USB-A:current=1 A with a fixed text, namely '
USB to charge phones and small electronics
outputs at most 1 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1 A" + }, + { + "key": "socket:socket:USB-A:current", + "description": "Layer 'Charging stations' shows socket:socket:USB-A:current=2 A with a fixed text, namely '
USB to charge phones and small electronics
outputs at most 2 A' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "2 A" + }, + { + "key": "socket:USB-A:output", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:USB-A:output' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:socket:USB-A:output", + "description": "Layer 'Charging stations' shows socket:socket:USB-A:output=5w with a fixed text, namely '
USB to charge phones and small electronics
outputs at most 5w' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "5w" + }, + { + "key": "socket:socket:USB-A:output", + "description": "Layer 'Charging stations' shows socket:socket:USB-A:output=10w with a fixed text, namely '
USB to charge phones and small electronics
outputs at most 10w' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "10w" + }, + { + "key": "socket:bosch_3pin:voltage", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:bosch_3pin:voltage' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:bosch_3pin:current", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:bosch_3pin:current' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:bosch_3pin:output", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:bosch_3pin:output' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:bosch_5pin:voltage", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:bosch_5pin:voltage' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:bosch_5pin:current", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:bosch_5pin:current' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "socket:bosch_5pin:output", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'socket:bosch_5pin:output' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "opening_hours", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "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 'Personal theme')", + "value": "24/7" + }, + { + "key": "fee", + "description": "Layer 'Charging stations' shows fee=no with a fixed text, namely 'Free to use' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "fee", + "description": "Layer 'Charging stations' shows fee=no&authentication:none=yes with a fixed text, namely 'Free to use (without authenticating)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "fee:conditional", + "description": "Layer 'Charging stations' shows fee=no&authentication:none=yes with a fixed text, namely 'Free to use (without authenticating)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key fee:conditional.", + "value": "" + }, + { + "key": "charge", + "description": "Layer 'Charging stations' shows fee=no&authentication:none=yes with a fixed text, namely 'Free to use (without authenticating)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key charge.", + "value": "" + }, + { + "key": "authentication:none", + "description": "Layer 'Charging stations' shows fee=no&authentication:none=yes with a fixed text, namely 'Free to use (without authenticating)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "fee", + "description": "Layer 'Charging stations' shows fee=no&authentication:none=no with a fixed text, namely 'Free to use, but one has to authenticate' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "fee:conditional", + "description": "Layer 'Charging stations' shows fee=no&authentication:none=no with a fixed text, namely 'Free to use, but one has to authenticate' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key fee:conditional.", + "value": "" + }, + { + "key": "charge", + "description": "Layer 'Charging stations' shows fee=no&authentication:none=no with a fixed text, namely 'Free to use, but one has to authenticate' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key charge.", + "value": "" + }, + { + "key": "authentication:none", + "description": "Layer 'Charging stations' shows fee=no&authentication:none=no with a fixed text, namely 'Free to use, but one has to authenticate' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "fee", + "description": "Layer 'Charging stations' shows fee=yes&fee:conditional=no @ customers with a fixed text, namely 'Paid use, but free for customers of the hotel/pub/hospital/... who operates the charging station' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "fee:conditional", + "description": "Layer 'Charging stations' shows fee=yes&fee:conditional=no @ customers with a fixed text, namely 'Paid use, but free for customers of the hotel/pub/hospital/... who operates the charging station' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no @ customers" + }, + { + "key": "fee", + "description": "Layer 'Charging stations' shows fee=yes with a fixed text, namely 'Paid use' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "fee:conditional", + "description": "Layer 'Charging stations' shows fee=yes with a fixed text, namely 'Paid use' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key fee:conditional.", + "value": "" + }, + { + "key": "charge", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'charge' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "payment:cash", + "description": "Layer 'Charging stations' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "payment:cards", + "description": "Layer 'Charging stations' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "payment:app", + "description": "Layer 'Charging stations' shows payment:app=yes with a fixed text, namely 'Payment is done using a dedicated app' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "payment:membership_card", + "description": "Layer 'Charging stations' shows payment:membership_card=yes with a fixed text, namely 'Payment is done using a membership card' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "authentication:membership_card", + "description": "Layer 'Charging stations' shows authentication:membership_card=yes with a fixed text, namely 'Authentication by a membership card' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "authentication:app", + "description": "Layer 'Charging stations' shows authentication:app=yes with a fixed text, namely 'Authentication by an app' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "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' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "authentication:short_message", + "description": "Layer 'Charging stations' shows authentication:short_message=yes with a fixed text, namely 'Authentication via SMS is available' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "authentication:nfc", + "description": "Layer 'Charging stations' shows authentication:nfc=yes with a fixed text, namely 'Authentication via NFC is available' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "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' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "authentication:debit_card", + "description": "Layer 'Charging stations' shows authentication:debit_card=yes with a fixed text, namely 'Authentication via debit card is available' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "authentication:none", + "description": "Layer 'Charging stations' shows authentication:none=yes with a fixed text, namely 'Charging here is (also) possible without authentication' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "authentication:phone_call:number", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'authentication:phone_call:number' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "maxstay", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'maxstay' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "maxstay", + "description": "Layer 'Charging stations' shows maxstay=unlimited with a fixed text, namely 'No timelimit on leaving your vehicle here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "unlimited" + }, + { + "key": "network", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'network' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "no:network", + "description": "Layer 'Charging stations' shows no:network=yes with a fixed text, namely 'Not part of a bigger network, e.g. because the charging station is maintained by a local business' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "network", + "description": "Layer 'Charging stations' shows network=none with a fixed text, namely 'Not part of a bigger network' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "none" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "value": "EVgo" + }, + { + "key": "network", + "description": "Layer 'Charging stations' shows network=Allego with a fixed text, namely 'Allego' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "Allego" + }, + { + "key": "network", + "description": "Layer 'Charging stations' shows network=Blue Corner with a fixed text, namely 'Blue Corner' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "Blue Corner" + }, + { + "key": "network", + "description": "Layer 'Charging stations' shows network=Tesla with a fixed text, namely 'Tesla' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "Tesla" + }, + { + "key": "operator", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "network", + "description": "Layer 'Charging stations' shows network= with a fixed text, namely 'Actually, {operator} is the network' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key network.", + "value": "" + }, + { + "key": "phone", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "email", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "website", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "level", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "location", + "description": "Layer 'Charging stations' shows location=underground with a fixed text, namely 'Located underground' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "underground" + }, + { + "key": "level", + "description": "Layer 'Charging stations' shows level=0 with a fixed text, namely 'Located on the ground floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "0" + }, + { + "key": "level", + "description": "Layer 'Charging stations' shows with a fixed text, namely 'Located on the ground floor' (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key level.", + "value": "" + }, + { + "key": "level", + "description": "Layer 'Charging stations' shows level=1 with a fixed text, namely 'Located on the first floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "level", + "description": "Layer 'Charging stations' shows level=-1 with a fixed text, namely 'Located on the first basement level' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "-1" + }, + { + "key": "ref", + "description": "Layer 'Charging stations' shows and asks freeform values for key 'ref' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "planned:amenity", + "description": "Layer 'Charging stations' shows amenity=charging_station with a fixed text, namely 'This charging station works' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key planned:amenity.", + "value": "" + }, + { + "key": "construction:amenity", + "description": "Layer 'Charging stations' shows amenity=charging_station with a fixed text, namely 'This charging station works' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key construction:amenity.", + "value": "" + }, + { + "key": "disused:amenity", + "description": "Layer 'Charging stations' shows amenity=charging_station with a fixed text, namely 'This charging station works' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key disused:amenity.", + "value": "" + }, + { + "key": "operational_status", + "description": "Layer 'Charging stations' shows amenity=charging_station with a fixed text, namely 'This charging station works' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key operational_status.", + "value": "" + }, + { + "key": "amenity", + "description": "Layer 'Charging stations' shows amenity=charging_station with a fixed text, namely 'This charging station works' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "charging_station" + }, + { + "key": "planned:amenity", + "description": "Layer 'Charging stations' shows operational_status=broken&amenity=charging_station with a fixed text, namely 'This charging station is broken' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key planned:amenity.", + "value": "" + }, + { + "key": "construction:amenity", + "description": "Layer 'Charging stations' shows operational_status=broken&amenity=charging_station with a fixed text, namely 'This charging station is broken' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key construction:amenity.", + "value": "" + }, + { + "key": "disused:amenity", + "description": "Layer 'Charging stations' shows operational_status=broken&amenity=charging_station with a fixed text, namely 'This charging station is broken' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key disused:amenity.", + "value": "" + }, + { + "key": "operational_status", + "description": "Layer 'Charging stations' shows operational_status=broken&amenity=charging_station with a fixed text, namely 'This charging station is broken' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "broken" + }, + { + "key": "amenity", + "description": "Layer 'Charging stations' shows operational_status=broken&amenity=charging_station with a fixed text, namely 'This charging station is broken' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "charging_station" + }, + { + "key": "planned:amenity", + "description": "Layer 'Charging stations' shows planned:amenity=charging_station with a fixed text, namely 'A charging station is planned here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "charging_station" + }, + { + "key": "construction:amenity", + "description": "Layer 'Charging stations' shows planned:amenity=charging_station with a fixed text, namely 'A charging station is planned here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key construction:amenity.", + "value": "" + }, + { + "key": "disused:amenity", + "description": "Layer 'Charging stations' shows planned:amenity=charging_station with a fixed text, namely 'A charging station is planned here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key disused:amenity.", + "value": "" + }, + { + "key": "operational_status", + "description": "Layer 'Charging stations' shows planned:amenity=charging_station with a fixed text, namely 'A charging station is planned here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key operational_status.", + "value": "" + }, + { + "key": "amenity", + "description": "Layer 'Charging stations' shows planned:amenity=charging_station with a fixed text, namely 'A charging station is planned here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key amenity.", + "value": "" + }, + { + "key": "planned:amenity", + "description": "Layer 'Charging stations' shows construction:amenity=charging_station with a fixed text, namely 'A charging station is constructed here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key planned:amenity.", + "value": "" + }, + { + "key": "construction:amenity", + "description": "Layer 'Charging stations' shows construction:amenity=charging_station with a fixed text, namely 'A charging station is constructed here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "charging_station" + }, + { + "key": "disused:amenity", + "description": "Layer 'Charging stations' shows construction:amenity=charging_station with a fixed text, namely 'A charging station is constructed here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key disused:amenity.", + "value": "" + }, + { + "key": "operational_status", + "description": "Layer 'Charging stations' shows construction:amenity=charging_station with a fixed text, namely 'A charging station is constructed here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key operational_status.", + "value": "" + }, + { + "key": "amenity", + "description": "Layer 'Charging stations' shows construction:amenity=charging_station with a fixed text, namely 'A charging station is constructed here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key amenity.", + "value": "" + }, + { + "key": "planned:amenity", + "description": "Layer 'Charging stations' shows disused:amenity=charging_station with a fixed text, namely 'This charging station has beed permanently disabled and is not in use anymore but is still visible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key planned:amenity.", + "value": "" + }, + { + "key": "construction:amenity", + "description": "Layer 'Charging stations' shows disused:amenity=charging_station with a fixed text, namely 'This charging station has beed permanently disabled and is not in use anymore but is still visible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key construction:amenity.", + "value": "" + }, + { + "key": "disused:amenity", + "description": "Layer 'Charging stations' shows disused:amenity=charging_station with a fixed text, namely 'This charging station has beed permanently disabled and is not in use anymore but is still visible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "charging_station" + }, + { + "key": "operational_status", + "description": "Layer 'Charging stations' shows disused:amenity=charging_station with a fixed text, namely 'This charging station has beed permanently disabled and is not in use anymore but is still visible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key operational_status.", + "value": "" + }, + { + "key": "amenity", + "description": "Layer 'Charging stations' shows disused:amenity=charging_station with a fixed text, namely 'This charging station has beed permanently disabled and is not in use anymore but is still visible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key amenity.", + "value": "" + }, + { + "key": "parking:fee", + "description": "Layer 'Charging stations' shows parking:fee=no with a fixed text, namely 'No additional parking cost while charging' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "parking:fee", + "description": "Layer 'Charging stations' shows parking:fee=yes with a fixed text, namely 'An additional parking fee should be paid while charging' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "cycleway" + }, + { + "key": "cycleway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "lane" + }, + { + "key": "cycleway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "shared_lane" + }, + { + "key": "cycleway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "track" + }, + { + "key": "cyclestreet", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "yes" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "residential" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "tertiary" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "unclassified" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "primary" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "secondary" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "path" + }, + { + "key": "bicycle", + "description": "The MapComplete theme Personal theme has a layer Cycleways and roads showing features with this tag", + "value": "designated" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways and roads' shows cycleway=shared_lane with a fixed text, namely 'There is a shared lane' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "shared_lane" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways and roads' shows cycleway=lane with a fixed text, namely 'There is a lane next to the road (separated with paint)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "lane" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways and roads' shows cycleway=track with a fixed text, namely 'There is a track, but no cycleway drawn separately from this road on the map.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "track" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways and roads' shows cycleway=separate with a fixed text, namely 'There is a separately drawn cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "separate" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways and roads' shows cycleway=no with a fixed text, namely 'There is no cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "cycleway", + "description": "Layer 'Cycleways and roads' shows cycleway=no with a fixed text, namely 'There is no cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "lit", + "description": "Layer 'Cycleways and roads' shows lit=yes with a fixed text, namely 'This street is lit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "lit", + "description": "Layer 'Cycleways and roads' shows lit=no with a fixed text, namely 'This road is not lit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "lit", + "description": "Layer 'Cycleways and roads' shows lit=sunset-sunrise with a fixed text, namely 'This road is lit at night' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "sunset-sunrise" + }, + { + "key": "lit", + "description": "Layer 'Cycleways and roads' shows lit=24/7 with a fixed text, namely 'This road is lit 24/7' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "24/7" + }, + { + "key": "cyclestreet", + "description": "Layer 'Cycleways and roads' shows cyclestreet=yes with a fixed text, namely 'This is a cyclestreet, and a 30km/h zone.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "cyclestreet", + "description": "Layer 'Cycleways and roads' shows cyclestreet=yes with a fixed text, namely 'This is a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "cyclestreet", + "description": "Layer 'Cycleways and roads' shows with a fixed text, namely 'This is not a cyclestreet.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key cyclestreet.", + "value": "" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways and roads' shows and asks freeform values for key 'maxspeed' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways and roads' shows maxspeed=20 with a fixed text, namely 'The maximum speed is 20 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "20" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways and roads' shows maxspeed=30 with a fixed text, namely 'The maximum speed is 30 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "30" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways and roads' shows maxspeed=50 with a fixed text, namely 'The maximum speed is 50 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "50" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways and roads' shows maxspeed=70 with a fixed text, namely 'The maximum speed is 70 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "70" + }, + { + "key": "maxspeed", + "description": "Layer 'Cycleways and roads' shows maxspeed=90 with a fixed text, namely 'The maximum speed is 90 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "90" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows and asks freeform values for key 'cycleway:surface' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=unpaved with a fixed text, namely 'This cycleway is unpaved' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "unpaved" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=paved with a fixed text, namely 'This cycleway is paved' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "paved" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=asphalt with a fixed text, namely 'This cycleway is made of asphalt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "asphalt" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=paving_stones with a fixed text, namely 'This cycleway is made of smooth paving stones' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "paving_stones" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=concrete with a fixed text, namely 'This cycleway is made of concrete' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "concrete" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=cobblestone with a fixed text, namely 'This cycleway is made of cobblestone (unhewn or sett)' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "cobblestone" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=unhewn_cobblestone with a fixed text, namely 'This cycleway is made of raw, natural cobblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "unhewn_cobblestone" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=sett with a fixed text, namely 'This cycleway is made of flat, square cobblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "sett" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=wood with a fixed text, namely 'This cycleway is made of wood' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "wood" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=gravel with a fixed text, namely 'This cycleway is made of gravel' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "gravel" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=fine_gravel with a fixed text, namely 'This cycleway is made of fine gravel' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "fine_gravel" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=pebblestone with a fixed text, namely 'This cycleway is made of pebblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pebblestone" + }, + { + "key": "cycleway:surface", + "description": "Layer 'Cycleways and roads' shows cycleway:surface=ground with a fixed text, namely 'This cycleway is made from raw ground' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "ground" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=excellent with a fixed text, namely 'Usable for thin rollers: rollerblade, skateboard' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "excellent" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=good with a fixed text, namely 'Usable for thin wheels: racing bike' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "good" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=intermediate with a fixed text, namely 'Usable for normal wheels: city bike, wheelchair, scooter' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "intermediate" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=bad with a fixed text, namely 'Usable for robust wheels: trekking bike, car, rickshaw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "bad" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=very_bad with a fixed text, namely 'Usable for vehicles with high clearance: light duty off-road vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "very_bad" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=horrible with a fixed text, namely 'Usable for off-road vehicles: heavy duty off-road vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "horrible" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=very_horrible with a fixed text, namely 'Usable for specialized off-road vehicles: tractor, ATV' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "very_horrible" + }, + { + "key": "cycleway:smoothness", + "description": "Layer 'Cycleways and roads' shows cycleway:smoothness=impassable with a fixed text, namely 'Impassable / No wheeled vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "impassable" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows and asks freeform values for key 'surface' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=unpaved with a fixed text, namely 'This cycleway is unhardened' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "unpaved" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=paved with a fixed text, namely 'This cycleway is paved' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "paved" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=asphalt with a fixed text, namely 'This cycleway is made of asphalt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "asphalt" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=paving_stones with a fixed text, namely 'This cycleway is made of smooth paving stones' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "paving_stones" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=concrete with a fixed text, namely 'This cycleway is made of concrete' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "concrete" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=cobblestone with a fixed text, namely 'This cycleway is made of cobblestone (unhewn or sett)' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "cobblestone" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=unhewn_cobblestone with a fixed text, namely 'This cycleway is made of raw, natural cobblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "unhewn_cobblestone" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=sett with a fixed text, namely 'This cycleway is made of flat, square cobblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "sett" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=wood with a fixed text, namely 'This cycleway is made of wood' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "wood" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=gravel with a fixed text, namely 'This cycleway is made of gravel' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "gravel" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=fine_gravel with a fixed text, namely 'This cycleway is made of fine gravel' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "fine_gravel" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=pebblestone with a fixed text, namely 'This cycleway is made of pebblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pebblestone" + }, + { + "key": "surface", + "description": "Layer 'Cycleways and roads' shows surface=ground with a fixed text, namely 'This cycleway is made from raw ground' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "ground" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=excellent with a fixed text, namely 'Usable for thin rollers: rollerblade, skateboard' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "excellent" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=good with a fixed text, namely 'Usable for thin wheels: racing bike' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "good" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=intermediate with a fixed text, namely 'Usable for normal wheels: city bike, wheelchair, scooter' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "intermediate" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=bad with a fixed text, namely 'Usable for robust wheels: trekking bike, car, rickshaw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "bad" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=very_bad with a fixed text, namely 'Usable for vehicles with high clearance: light duty off-road vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "very_bad" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=horrible with a fixed text, namely 'Usable for off-road vehicles: heavy duty off-road vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "horrible" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=very_horrible with a fixed text, namely 'Usable for specialized off-road vehicles: tractor, ATV' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "very_horrible" + }, + { + "key": "smoothness", + "description": "Layer 'Cycleways and roads' shows smoothness=impassable with a fixed text, namely 'Impassable / No wheeled vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "impassable" + }, + { + "key": "width:carriageway", + "description": "Layer 'Cycleways and roads' shows and asks freeform values for key 'width:carriageway' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7 with a fixed text, namely 'Compulsory cycleway ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "BE:D7" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign~^BE:D7;.*$ with a fixed text, namely 'Compulsory cycleway (with supplementary sign)
' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D9 with a fixed text, namely 'Segregated foot/cycleway ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "BE:D9" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D10 with a fixed text, namely 'Unsegregated foot/cycleway ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "BE:D10" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=none with a fixed text, namely 'No traffic sign present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "none" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=BE:D7 with a fixed text, namely 'Compulsory cycleway ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "BE:D7" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign~^BE:D7;.*$ with a fixed text, namely 'Compulsory cycleway (with supplementary sign)
' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=BE:D9 with a fixed text, namely 'Segregated foot/cycleway ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "BE:D9" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=BE:D10 with a fixed text, namely 'Unsegregated foot/cycleway ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "BE:D10" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=none with a fixed text, namely 'No traffic sign present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "none" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7;BE:M6 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "BE:D7;BE:M6" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7;BE:M13 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "BE:D7;BE:M13" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7;BE:M14 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "BE:D7;BE:M14" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7;BE:M7 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "BE:D7;BE:M7" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7;BE:M15 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "BE:D7;BE:M15" + }, + { + "key": "cycleway:traffic_sign", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign=BE:D7;BE:M16 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "BE:D7;BE:M16" + }, + { + "key": "cycleway:traffic_sign:supplementary", + "description": "Layer 'Cycleways and roads' shows cycleway:traffic_sign:supplementary=none with a fixed text, namely 'No supplementary traffic sign present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "none" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=BE:D7;BE:M6 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "BE:D7;BE:M6" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=BE:D7;BE:M13 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "BE:D7;BE:M13" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=BE:D7;BE:M14 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "BE:D7;BE:M14" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=BE:D7;BE:M7 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "BE:D7;BE:M7" + }, + { + "key": ":traffic_sign", + "description": "Layer 'Cycleways and roads' shows :traffic_sign=BE:D7;BE:M15 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "BE:D7;BE:M15" + }, + { + "key": "traffic_sign", + "description": "Layer 'Cycleways and roads' shows traffic_sign=BE:D7;BE:M16 with a fixed text, namely '' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "BE:D7;BE:M16" + }, + { + "key": "traffic_sign:supplementary", + "description": "Layer 'Cycleways and roads' shows traffic_sign:supplementary=none with a fixed text, namely 'No supplementary traffic sign present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "none" + }, + { + "key": "cycleway:buffer", + "description": "Layer 'Cycleways and roads' shows and asks freeform values for key 'cycleway:buffer' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "cycleway:separation", + "description": "Layer 'Cycleways and roads' shows cycleway:separation=dashed_line with a fixed text, namely 'This cycleway is separated by a dashed line' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "dashed_line" + }, + { + "key": "cycleway:separation", + "description": "Layer 'Cycleways and roads' shows cycleway:separation=solid_line with a fixed text, namely 'This cycleway is separated by a solid line' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "solid_line" + }, + { + "key": "cycleway:separation", + "description": "Layer 'Cycleways and roads' shows cycleway:separation=parking_lane with a fixed text, namely 'This cycleway is separated by a parking lane' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "parking_lane" + }, + { + "key": "cycleway:separation", + "description": "Layer 'Cycleways and roads' shows cycleway:separation=kerb with a fixed text, namely 'This cycleway is separated by a kerb' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "kerb" + }, + { + "key": "separation", + "description": "Layer 'Cycleways and roads' shows separation=dashed_line with a fixed text, namely 'This cycleway is separated by a dashed line' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "dashed_line" + }, + { + "key": "separation", + "description": "Layer 'Cycleways and roads' shows separation=solid_line with a fixed text, namely 'This cycleway is separated by a solid line' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "solid_line" + }, + { + "key": "separation", + "description": "Layer 'Cycleways and roads' shows separation=parking_lane with a fixed text, namely 'This cycleway is separated by a parking lane' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "parking_lane" + }, + { + "key": "separation", + "description": "Layer 'Cycleways and roads' shows separation=kerb with a fixed text, namely 'This cycleway is separated by a kerb' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "kerb" + }, + { + "key": "barrier", + "description": "The MapComplete theme Personal theme has a layer Barriers showing features with this tag", + "value": "bollard" + }, + { + "key": "barrier", + "description": "The MapComplete theme Personal theme has a layer Barriers showing features with this tag", + "value": "cycle_barrier" + }, + { + "key": "bicycle", + "description": "Layer 'Barriers' shows bicycle=yes with a fixed text, namely 'A cyclist can go past this.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "bicycle", + "description": "Layer 'Barriers' shows bicycle=no with a fixed text, namely 'A cyclist can not go past this.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "barrier", + "description": "Layer 'Barriers' shows barrier=bollard with a fixed text, namely 'This is a single bollard in the road' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "bollard" + }, + { + "key": "barrier", + "description": "Layer 'Barriers' shows barrier=cycle_barrier with a fixed text, namely 'This is a cycle barrier slowing down cyclists' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "cycle_barrier" + }, + { + "key": "bollard", + "description": "Layer 'Barriers' shows bollard=removable with a fixed text, namely 'Removable bollard' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "removable" + }, + { + "key": "bollard", + "description": "Layer 'Barriers' shows bollard=fixed with a fixed text, namely 'Fixed bollard' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "fixed" + }, + { + "key": "bollard", + "description": "Layer 'Barriers' shows bollard=foldable with a fixed text, namely 'Bollard that can be folded down' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "foldable" + }, + { + "key": "bollard", + "description": "Layer 'Barriers' shows bollard=flexible with a fixed text, namely 'Flexible bollard, usually plastic' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "flexible" + }, + { + "key": "bollard", + "description": "Layer 'Barriers' shows bollard=rising with a fixed text, namely 'Rising bollard' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "rising" + }, + { + "key": "cycle_barrier", + "description": "Layer 'Barriers' shows cycle_barrier=single with a fixed text, namely 'Single, just two barriers with a space inbetween ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "single" + }, + { + "key": "cycle_barrier", + "description": "Layer 'Barriers' shows cycle_barrier=double with a fixed text, namely 'Double, two barriers behind each other ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "double" + }, + { + "key": "cycle_barrier", + "description": "Layer 'Barriers' shows cycle_barrier=triple with a fixed text, namely 'Triple, three barriers behind each other ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "triple" + }, + { + "key": "cycle_barrier", + "description": "Layer 'Barriers' shows cycle_barrier=squeeze with a fixed text, namely 'Squeeze gate, gap is smaller at top, than at the bottom ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "squeeze" + }, + { + "key": "maxwidth:physical", + "description": "Layer 'Barriers' shows and asks freeform values for key 'maxwidth:physical' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "width:separation", + "description": "Layer 'Barriers' shows and asks freeform values for key 'width:separation' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "width:opening", + "description": "Layer 'Barriers' shows and asks freeform values for key 'width:opening' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "overlap", + "description": "Layer 'Barriers' shows and asks freeform values for key 'overlap' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Crossings showing features with this tag", + "value": "traffic_signals" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Crossings showing features with this tag", + "value": "crossing" + }, + { + "key": "crossing", + "description": "Layer 'Crossings' shows crossing=uncontrolled with a fixed text, namely 'Crossing, without traffic lights' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "uncontrolled" + }, + { + "key": "crossing", + "description": "Layer 'Crossings' shows crossing=traffic_signals with a fixed text, namely 'Crossing with traffic signals' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "traffic_signals" + }, + { + "key": "crossing", + "description": "Layer 'Crossings' shows crossing=zebra with a fixed text, namely 'Zebra crossing' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "zebra" + }, + { + "key": "crossing", + "description": "Layer 'Crossings' shows crossing=unmarked with a fixed text, namely 'Crossing without crossing markings' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "unmarked" + }, + { + "key": "crossing_ref", + "description": "Layer 'Crossings' shows crossing_ref=zebra with a fixed text, namely 'This is a zebra crossing' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "zebra" + }, + { + "key": "crossing_ref", + "description": "Layer 'Crossings' shows with a fixed text, namely 'This is not a zebra crossing' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key crossing_ref.", + "value": "" + }, + { + "key": "bicycle", + "description": "Layer 'Crossings' shows bicycle=yes with a fixed text, namely 'A cyclist can use this crossing' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "bicycle", + "description": "Layer 'Crossings' shows bicycle=no with a fixed text, namely 'A cyclist can not use this crossing' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "crossing:island", + "description": "Layer 'Crossings' shows crossing:island=yes with a fixed text, namely 'This crossing has an island in the middle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "crossing:island", + "description": "Layer 'Crossings' shows crossing:island=no with a fixed text, namely 'This crossing does not have an island in the middle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "tactile_paving", + "description": "Layer 'Crossings' shows tactile_paving=yes with a fixed text, namely 'This crossing has tactile paving' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "tactile_paving", + "description": "Layer 'Crossings' shows tactile_paving=no with a fixed text, namely 'This crossing does not have tactile paving' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "tactile_paving", + "description": "Layer 'Crossings' shows tactile_paving=incorrect with a fixed text, namely 'This crossing has tactile paving, but is not correct' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "incorrect" + }, + { + "key": "button_operated", + "description": "Layer 'Crossings' shows button_operated=yes with a fixed text, namely 'This traffic light has a button to request green light' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "button_operated", + "description": "Layer 'Crossings' shows button_operated=no with a fixed text, namely 'This traffic light does not have a button to request green light' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "red_turn:right:bicycle", + "description": "Layer 'Crossings' shows red_turn:right:bicycle=yes with a fixed text, namely 'A cyclist can turn right if the light is red ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "red_turn:right:bicycle", + "description": "Layer 'Crossings' shows red_turn:right:bicycle=yes with a fixed text, namely 'A cyclist can turn right if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "red_turn:right:bicycle", + "description": "Layer 'Crossings' shows red_turn:right:bicycle=no with a fixed text, namely 'A cyclist can not turn right if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "red_turn:straight:bicycle", + "description": "Layer 'Crossings' shows red_turn:straight:bicycle=yes with a fixed text, namely 'A cyclist can go straight on if the light is red ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "red_turn:straight:bicycle", + "description": "Layer 'Crossings' shows red_turn:straight:bicycle=yes with a fixed text, namely 'A cyclist can go straight on if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "red_turn:straight:bicycle", + "description": "Layer 'Crossings' shows red_turn:straight:bicycle=no with a fixed text, namely 'A cyclist can not go straight on if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Bike cafe showing features with this tag", + "value": "pub" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Bike cafe showing features with this tag", + "value": "bar" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Bike cafe showing features with this tag", + "value": "cafe" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Bike cafe showing features with this tag", + "value": "restaurant" + }, + { + "key": "pub", + "description": "The MapComplete theme Personal theme has a layer Bike cafe showing features with this tag", + "value": "cycling" + }, + { + "key": "pub", + "description": "The MapComplete theme Personal theme has a layer Bike cafe showing features with this tag", + "value": "bicycle" + }, + { + "key": "theme", + "description": "The MapComplete theme Personal theme has a layer Bike cafe showing features with this tag", + "value": "cycling" + }, + { + "key": "theme", + "description": "The MapComplete theme Personal theme has a layer Bike cafe showing features with this tag", + "value": "bicycle" + }, + { + "key": "service:bicycle:.*", + "description": "The MapComplete theme Personal theme has a layer Bike cafe showing features with this tag" + }, + { + "key": "image", + "description": "The layer 'Bike cafe allows to upload images and adds them under the 'image'-tag (and 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 'Bike cafe allows to upload images and adds them under the 'image'-tag (and 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 'Bike cafe allows to upload images and adds them under the 'image'-tag (and 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 'Bike cafe allows to upload images and adds them under the 'image'-tag (and 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 'Bike cafe' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "service:bicycle:pump", + "description": "Layer 'Bike cafe' shows service:bicycle:pump=yes with a fixed text, namely 'This bike cafe offers a bike pump for anyone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:bicycle:pump", + "description": "Layer 'Bike cafe' shows service:bicycle:pump=no with a fixed text, namely 'This bike cafe doesn't offer a bike pump for anyone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "service:bicycle:diy", + "description": "Layer 'Bike cafe' shows service:bicycle:diy=yes with a fixed text, namely 'This bike cafe offers tools for DIY repair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:bicycle:diy", + "description": "Layer 'Bike cafe' shows service:bicycle:diy=no with a fixed text, namely 'This bike cafe doesn't offer tools for DIY repair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "service:bicycle:repair", + "description": "Layer 'Bike cafe' shows service:bicycle:repair=yes with a fixed text, namely 'This bike cafe repairs bikes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:bicycle:repair", + "description": "Layer 'Bike cafe' shows service:bicycle:repair=no with a fixed text, namely 'This bike cafe doesn't repair bikes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "website", + "description": "Layer 'Bike cafe' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "phone", + "description": "Layer 'Bike cafe' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "email", + "description": "Layer 'Bike cafe' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "opening_hours", + "description": "Layer 'Bike cafe' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "shop", + "description": "The MapComplete theme Personal theme has a layer Bike repair/shop showing features with this tag", + "value": "bicycle" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Bike repair/shop showing features with this tag", + "value": "bicycle_rental" + }, + { + "key": "network", + "description": "The MapComplete theme Personal theme has a layer Bike repair/shop showing features with this tag", + "value": "" + }, + { + "key": "shop", + "description": "The MapComplete theme Personal theme has a layer Bike repair/shop showing features with this tag", + "value": "sports" + }, + { + "key": "sport", + "description": "The MapComplete theme Personal theme has a layer Bike repair/shop showing features with this tag", + "value": "bicycle" + }, + { + "key": "sport", + "description": "The MapComplete theme Personal theme has a layer Bike repair/shop showing features with this tag", + "value": "cycling" + }, + { + "key": "sport", + "description": "The MapComplete theme Personal theme has a layer Bike repair/shop showing features with this tag", + "value": "" + }, + { + "key": "image", + "description": "The layer 'Bike repair/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 'Bike repair/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 'Bike repair/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 'Bike repair/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 'Bike repair/shop' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "website", + "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "phone", + "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "email", + "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "opening_hours", + "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "description", + "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'description' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "access", + "description": "Layer 'Bike repair/shop' shows values with key 'access' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "service:bicycle:retail", + "description": "Layer 'Bike repair/shop' shows service:bicycle:retail=yes with a fixed text, namely 'This shop sells bikes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:bicycle:retail", + "description": "Layer 'Bike repair/shop' shows service:bicycle:retail=no with a fixed text, namely 'This shop doesn't sell bikes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "service:bicycle:repair", + "description": "Layer 'Bike repair/shop' shows service:bicycle:repair=yes with a fixed text, namely 'This shop repairs bikes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:bicycle:repair", + "description": "Layer 'Bike repair/shop' shows service:bicycle:repair=no with a fixed text, namely 'This shop doesn't repair bikes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "service:bicycle:repair", + "description": "Layer 'Bike repair/shop' shows service:bicycle:repair=only_sold with a fixed text, namely 'This shop only repairs bikes bought here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "only_sold" + }, + { + "key": "service:bicycle:repair", + "description": "Layer 'Bike repair/shop' shows service:bicycle:repair=brand with a fixed text, namely 'This shop only repairs bikes of a certain brand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "brand" + }, + { + "key": "service:bicycle:rental", + "description": "Layer 'Bike repair/shop' shows service:bicycle:rental=yes with a fixed text, namely 'This shop rents out bikes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:bicycle:rental", + "description": "Layer 'Bike repair/shop' shows service:bicycle:rental=no with a fixed text, namely 'This shop doesn't rent out bikes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "service:bicycle:second_hand", + "description": "Layer 'Bike repair/shop' shows service:bicycle:second_hand=yes with a fixed text, namely 'This shop sells second-hand bikes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:bicycle:second_hand", + "description": "Layer 'Bike repair/shop' shows service:bicycle:second_hand=no with a fixed text, namely 'This shop doesn't sell second-hand bikes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "service:bicycle:second_hand", + "description": "Layer 'Bike repair/shop' shows service:bicycle:second_hand=only with a fixed text, namely 'This shop only sells second-hand bikes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "only" + }, + { + "key": "service:bicycle:pump", + "description": "Layer 'Bike repair/shop' shows service:bicycle:pump=yes with a fixed text, namely 'This shop offers a bike pump for anyone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:bicycle:pump", + "description": "Layer 'Bike repair/shop' shows service:bicycle:pump=no with a fixed text, namely 'This shop doesn't offer a bike pump for anyone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "service:bicycle:pump", + "description": "Layer 'Bike repair/shop' shows service:bicycle:pump=separate with a fixed text, namely 'There is bicycle pump, it is shown as a separate point ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "separate" + }, + { + "key": "service:bicycle:diy", + "description": "Layer 'Bike repair/shop' shows service:bicycle:diy=yes with a fixed text, namely 'This shop offers tools for DIY repair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:bicycle:diy", + "description": "Layer 'Bike repair/shop' shows service:bicycle:diy=no with a fixed text, namely 'This shop doesn't offer tools for DIY repair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "service:bicycle:diy", + "description": "Layer 'Bike repair/shop' shows service:bicycle:diy=only_sold with a fixed text, namely 'Tools for DIY repair are only available if you bought/hire the bike in the shop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "only_sold" + }, + { + "key": "service:bicycle:cleaning", + "description": "Layer 'Bike repair/shop' shows service:bicycle:cleaning=yes with a fixed text, namely 'This shop cleans bicycles' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:bicycle:cleaning", + "description": "Layer 'Bike repair/shop' shows service:bicycle:cleaning=diy with a fixed text, namely 'This shop has an installation where one can clean bicycles themselves' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "diy" + }, + { + "key": "service:bicycle:cleaning", + "description": "Layer 'Bike repair/shop' shows service:bicycle:cleaning=no with a fixed text, namely 'This shop doesn't offer bicycle cleaning' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "service:bicycle:cleaning:charge", + "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'service:bicycle:cleaning:charge' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "service:bicycle:cleaning:fee", + "description": "Layer 'Bike repair/shop' 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 'Personal theme')", + "value": "no&service:bicycle:cleaning:charge=" + }, + { + "key": "service:bicycle:cleaning:fee", + "description": "Layer 'Bike repair/shop' shows service:bicycle:cleaning:fee=no with a fixed text, namely 'Free to use' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "service:bicycle:cleaning:fee", + "description": "Layer 'Bike repair/shop' shows service:bicycle:cleaning:fee=yes&service:bicycle:cleaning:charge= with a fixed text, namely 'The cleaning service has a fee, but the amount is not known' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes&service:bicycle:cleaning:charge=" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Bicycle pump and repair showing features with this tag", + "value": "bicycle_repair_station" + }, + { + "key": "image", + "description": "The layer 'Bicycle pump and repair allows to upload images and adds them under the 'image'-tag (and 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 pump and repair allows to upload images and adds them under the 'image'-tag (and 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 pump and repair allows to upload images and adds them under the 'image'-tag (and 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 pump and repair allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "service:bicycle:tools", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:tools=no&service:bicycle:pump=yes with a fixed text, namely 'There is only a pump present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "service:bicycle:pump", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:tools=no&service:bicycle:pump=yes with a fixed text, namely 'There is only a pump present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:bicycle:tools", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:tools=yes&service:bicycle:pump=no with a fixed text, namely 'There are only tools (screwdrivers, pliers...) present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:bicycle:pump", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:tools=yes&service:bicycle:pump=no with a fixed text, namely 'There are only tools (screwdrivers, pliers...) present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "service:bicycle:tools", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:tools=yes&service:bicycle:pump=yes with a fixed text, namely 'There are both tools and a pump present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:bicycle:pump", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:tools=yes&service:bicycle:pump=yes with a fixed text, namely 'There are both tools and a pump present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:bicycle:pump:operational_status", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:pump:operational_status=broken with a fixed text, namely 'The bike pump is broken' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "broken" + }, + { + "key": "service:bicycle:pump:operational_status", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:pump:operational_status=operational with a fixed text, namely 'The bike pump is operational' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "operational" + }, + { + "key": "opening_hours", + "description": "Layer 'Bicycle pump and repair' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "opening_hours", + "description": "Layer 'Bicycle pump and repair' shows opening_hours=24/7 with a fixed text, namely 'Always open' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "24/7" + }, + { + "key": "access", + "description": "Layer 'Bicycle pump and repair' 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 'Personal theme')", + "value": "yes" + }, + { + "key": "access", + "description": "Layer 'Bicycle pump and repair' shows access=public with a fixed text, namely 'Publicly accessible' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "public" + }, + { + "key": "access", + "description": "Layer 'Bicycle pump and repair' shows access=customers with a fixed text, namely 'Only for customers' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "customers" + }, + { + "key": "access", + "description": "Layer 'Bicycle pump and repair' shows access=private with a fixed text, namely 'Not accessible to the general public' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "private" + }, + { + "key": "access", + "description": "Layer 'Bicycle pump and repair' shows access=no with a fixed text, namely 'Not accessible to the general public' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "operator", + "description": "Layer 'Bicycle pump and repair' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "email", + "description": "Layer 'Bicycle pump and repair' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "phone", + "description": "Layer 'Bicycle pump and repair' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "service:bicycle:chain_tool", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:chain_tool=yes with a fixed text, namely 'There is a chain tool' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:bicycle:chain_tool", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:chain_tool=no with a fixed text, namely 'There is no chain tool' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "service:bicycle:stand", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:stand=yes with a fixed text, namely 'There is a hook or stand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:bicycle:stand", + "description": "Layer 'Bicycle pump and repair' shows service:bicycle:stand=no with a fixed text, namely 'There is no hook or stand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "valves", + "description": "Layer 'Bicycle pump and repair' shows and asks freeform values for key 'valves' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "valves", + "description": "Layer 'Bicycle pump and repair' shows valves=sclaverand with a fixed text, namely 'Sclaverand (also known as Presta)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "sclaverand" + }, + { + "key": "valves", + "description": "Layer 'Bicycle pump and repair' shows valves=dunlop with a fixed text, namely 'Dunlop' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "dunlop" + }, + { + "key": "valves", + "description": "Layer 'Bicycle pump and repair' shows valves=schrader with a fixed text, namely 'Schrader (cars)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "schrader" + }, + { + "key": "manual", + "description": "Layer 'Bicycle pump and repair' shows manual=yes with a fixed text, namely 'Manual pump' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "manual", + "description": "Layer 'Bicycle pump and repair' shows manual=no with a fixed text, namely 'Electrical pump' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "manometer", + "description": "Layer 'Bicycle pump and repair' shows manometer=yes with a fixed text, namely 'There is a manometer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "manometer", + "description": "Layer 'Bicycle pump and repair' shows manometer=no with a fixed text, namely 'There is no manometer' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "manometer", + "description": "Layer 'Bicycle pump and repair' shows manometer=broken with a fixed text, namely 'There is manometer but it is broken' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "broken" + }, + { + "key": "level", + "description": "Layer 'Bicycle pump and repair' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "location", + "description": "Layer 'Bicycle pump and repair' shows location=underground with a fixed text, namely 'Located underground' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "underground" + }, + { + "key": "level", + "description": "Layer 'Bicycle pump and repair' shows level=0 with a fixed text, namely 'Located on the ground floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "0" + }, + { + "key": "level", + "description": "Layer 'Bicycle pump and repair' shows with a fixed text, namely 'Located on the ground floor' (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key level.", + "value": "" + }, + { + "key": "level", + "description": "Layer 'Bicycle pump and repair' shows level=1 with a fixed text, namely 'Located on the first floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "level", + "description": "Layer 'Bicycle pump and repair' shows level=-1 with a fixed text, namely 'Located on the first basement level' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "-1" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Bicycle tube vending machine showing features with this tag", + "value": "vending_machine" + }, + { + "key": "vending", + "description": "The MapComplete theme Personal theme has a layer Bicycle tube vending machine showing features with this tag" + }, + { + "key": "image", + "description": "The layer 'Bicycle tube vending machine allows to upload images and adds them under the 'image'-tag (and 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 tube vending machine allows to upload images and adds them under the 'image'-tag (and 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 tube vending machine allows to upload images and adds them under the 'image'-tag (and 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 tube vending machine allows to upload images and adds them under the 'image'-tag (and 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 'Bicycle tube vending machine' shows and asks freeform values for key 'operational_status' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "operational_status", + "description": "Layer 'Bicycle tube vending machine' shows with a fixed text, namely 'This vending machine works' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key operational_status.", + "value": "" + }, + { + "key": "operational_status", + "description": "Layer 'Bicycle tube vending machine' shows operational_status=broken with a fixed text, namely 'This vending machine is broken' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "broken" + }, + { + "key": "operational_status", + "description": "Layer 'Bicycle tube vending machine' shows operational_status=closed with a fixed text, namely 'This vending machine is closed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "closed" + }, + { + "key": "charge", + "description": "Layer 'Bicycle tube vending machine' shows and asks freeform values for key 'charge' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "payment:coins", + "description": "Layer 'Bicycle tube vending machine' shows payment:coins=yes with a fixed text, namely 'Payment with coins is possible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "payment:notes", + "description": "Layer 'Bicycle tube vending machine' shows payment:notes=yes with a fixed text, namely 'Payment with notes is possible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "payment:cards", + "description": "Layer 'Bicycle tube vending machine' shows payment:cards=yes with a fixed text, namely 'Payment with cards is possible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "brand", + "description": "Layer 'Bicycle tube vending machine' shows and asks freeform values for key 'brand' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "brand", + "description": "Layer 'Bicycle tube vending machine' shows brand=Continental with a fixed text, namely 'Continental tubes are sold here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "Continental" + }, + { + "key": "brand", + "description": "Layer 'Bicycle tube vending machine' shows brand=Schwalbe with a fixed text, namely 'Schwalbe tubes are sold here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "Schwalbe" + }, + { + "key": "operator", + "description": "Layer 'Bicycle tube vending machine' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "operator", + "description": "Layer 'Bicycle tube vending machine' shows operator=Schwalbe with a fixed text, namely 'Maintained by Schwalbe' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "Schwalbe" + }, + { + "key": "operator", + "description": "Layer 'Bicycle tube vending machine' shows operator=Continental with a fixed text, namely 'Maintained by Continental' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "Continental" + }, + { + "key": "vending:bicycle_light", + "description": "Layer 'Bicycle tube vending machine' shows vending:bicycle_light=yes with a fixed text, namely 'Bicycle lights are sold here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "vending:gloves", + "description": "Layer 'Bicycle tube vending machine' shows vending:gloves=yes with a fixed text, namely 'Gloves are sold here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "vending:bicycle_repair_kit", + "description": "Layer 'Bicycle tube vending machine' shows vending:bicycle_repair_kit=yes with a fixed text, namely 'Bicycle repair kits are sold here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "vending:bicycle_pump", + "description": "Layer 'Bicycle tube vending machine' shows vending:bicycle_pump=yes with a fixed text, namely 'Bicycle pumps are sold here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "vending:bicycle_lock", + "description": "Layer 'Bicycle tube vending machine' shows vending:bicycle_lock=yes with a fixed text, namely 'Bicycle locks are sold here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme 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 'Personal theme')" + }, + { + "key": "operational_status", + "description": "Layer 'Drinking water' shows with a fixed text, namely 'This drinking water works' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') 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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "value": "no" + }, + { + "key": "theme", + "description": "The MapComplete theme Personal theme has a layer Bike related object showing features with this tag", + "value": "bicycle" + }, + { + "key": "theme", + "description": "The MapComplete theme Personal theme has a layer Bike related object showing features with this tag", + "value": "cycling" + }, + { + "key": "sport", + "description": "The MapComplete theme Personal theme has a layer Bike related object showing features with this tag", + "value": "cycling" + }, + { + "key": "association", + "description": "The MapComplete theme Personal theme has a layer Bike related object showing features with this tag", + "value": "cycling" + }, + { + "key": "association", + "description": "The MapComplete theme Personal theme has a layer Bike related object showing features with this tag", + "value": "bicycle" + }, + { + "key": "ngo", + "description": "The MapComplete theme Personal theme has a layer Bike related object showing features with this tag", + "value": "cycling" + }, + { + "key": "ngo", + "description": "The MapComplete theme Personal theme has a layer Bike related object showing features with this tag", + "value": "bicycle" + }, + { + "key": "club", + "description": "The MapComplete theme Personal theme has a layer Bike related object showing features with this tag", + "value": "bicycle" + }, + { + "key": "club", + "description": "The MapComplete theme Personal theme has a layer Bike related object showing features with this tag", + "value": "cycling" + }, + { + "key": "image", + "description": "The layer 'Bike related object allows to upload images and adds them under the 'image'-tag (and 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 'Bike related object allows to upload images and adds them under the 'image'-tag (and 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 'Bike related object allows to upload images and adds them under the 'image'-tag (and 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 'Bike related object allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "description", + "description": "Layer 'Bike related object' shows and asks freeform values for key 'description' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "website", + "description": "Layer 'Bike related object' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:website", + "description": "Layer 'Bike related object' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "email", + "description": "Layer 'Bike related object' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:email", + "description": "Layer 'Bike related object' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "phone", + "description": "Layer 'Bike related object' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:phone", + "description": "Layer 'Bike related object' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "opening_hours", + "description": "Layer 'Bike related object' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "service:bicycle:cleaning", + "description": "The MapComplete theme Personal theme has a layer Bike cleaning service showing features with this tag", + "value": "yes" + }, + { + "key": "service:bicycle:cleaning", + "description": "The MapComplete theme Personal theme has a layer Bike cleaning service showing features with this tag", + "value": "diy" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Bike cleaning service showing features with this tag", + "value": "bicycle_wash" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Bike cleaning service showing features with this tag", + "value": "bike_wash" + }, + { + "key": "image", + "description": "The layer 'Bike cleaning service allows to upload images and adds them under the 'image'-tag (and 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 'Bike cleaning service allows to upload images and adds them under the 'image'-tag (and 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 'Bike cleaning service allows to upload images and adds them under the 'image'-tag (and 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 'Bike cleaning service allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "service:bicycle:cleaning:charge", + "description": "Layer 'Bike cleaning service' shows and asks freeform values for key 'service:bicycle:cleaning:charge' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "service:bicycle:cleaning:fee", + "description": "Layer 'Bike cleaning service' 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 'Personal theme')", + "value": "no&service:bicycle:cleaning:charge=" + }, + { + "key": "service:bicycle:cleaning:fee", + "description": "Layer 'Bike cleaning service' shows service:bicycle:cleaning:fee=no with a fixed text, namely 'Free to use' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "service:bicycle:cleaning:fee", + "description": "Layer 'Bike cleaning service' shows service:bicycle:cleaning:fee=yes&service:bicycle:cleaning:charge= with a fixed text, namely 'The cleaning service has a fee, but the amount is not known' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes&service:bicycle:cleaning:charge=" + }, + { + "key": "charge", + "description": "Layer 'Bike cleaning service' shows and asks freeform values for key 'charge' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "fee", + "description": "Layer 'Bike cleaning service' shows fee=no&charge= with a fixed text, namely 'Free to use cleaning service' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no&charge=" + }, + { + "key": "fee", + "description": "Layer 'Bike cleaning service' shows fee=no with a fixed text, namely 'Free to use' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "fee", + "description": "Layer 'Bike cleaning service' shows 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 'Personal theme')", + "value": "yes" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Bike parking showing features with this tag", + "value": "bicycle_parking" + }, + { + "key": "image", + "description": "The layer 'Bike 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 'Bike 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 'Bike 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 'Bike 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": "bicycle_parking", + "description": "Layer 'Bike parking' shows and asks freeform values for key 'bicycle_parking' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "bicycle_parking", + "description": "Layer 'Bike parking' shows bicycle_parking=stands with a fixed text, namely 'Staple racks ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "stands" + }, + { + "key": "bicycle_parking", + "description": "Layer 'Bike parking' shows bicycle_parking=wall_loops with a fixed text, namely 'Wheel rack/loops ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "wall_loops" + }, + { + "key": "bicycle_parking", + "description": "Layer 'Bike parking' shows bicycle_parking=handlebar_holder with a fixed text, namely 'Handlebar holder ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "handlebar_holder" + }, + { + "key": "bicycle_parking", + "description": "Layer 'Bike parking' shows bicycle_parking=rack with a fixed text, namely 'Rack ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "rack" + }, + { + "key": "bicycle_parking", + "description": "Layer 'Bike parking' shows bicycle_parking=two_tier with a fixed text, namely 'Two-tiered ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "two_tier" + }, + { + "key": "bicycle_parking", + "description": "Layer 'Bike parking' shows bicycle_parking=shed with a fixed text, namely 'Shed ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "shed" + }, + { + "key": "bicycle_parking", + "description": "Layer 'Bike parking' shows bicycle_parking=bollard with a fixed text, namely 'Bollard ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "bollard" + }, + { + "key": "bicycle_parking", + "description": "Layer 'Bike parking' shows bicycle_parking=floor with a fixed text, namely 'An area on the floor which is marked for bicycle parking' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "floor" + }, + { + "key": "location", + "description": "Layer 'Bike parking' shows location=underground with a fixed text, namely 'Underground parking' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "underground" + }, + { + "key": "location", + "description": "Layer 'Bike parking' shows location=surface with a fixed text, namely 'Surface level parking' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "surface" + }, + { + "key": "location", + "description": "Layer 'Bike parking' shows location=rooftop with a fixed text, namely 'Rooftop parking' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "rooftop" + }, + { + "key": "location", + "description": "Layer 'Bike parking' shows with a fixed text, namely 'Surface level parking' (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key location.", + "value": "" + }, + { + "key": "location", + "description": "Layer 'Bike parking' shows location=rooftop with a fixed text, namely 'Rooftop parking' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "rooftop" + }, + { + "key": "covered", + "description": "Layer 'Bike parking' shows covered=yes with a fixed text, namely 'This parking is covered (it has a roof)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "covered", + "description": "Layer 'Bike parking' shows covered=no with a fixed text, namely 'This parking is not covered' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "capacity", + "description": "Layer 'Bike parking' shows and asks freeform values for key 'capacity' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "access", + "description": "Layer 'Bike parking' shows and asks freeform values for key 'access' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "access", + "description": "Layer 'Bike parking' 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 'Personal theme')", + "value": "yes" + }, + { + "key": "access", + "description": "Layer 'Bike parking' shows access=customers with a fixed text, namely 'Access is primarily for visitors to a business' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "customers" + }, + { + "key": "access", + "description": "Layer 'Bike parking' shows access=private with a fixed text, namely 'Access is limited to members of a school, company or organisation' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "private" + }, + { + "key": "cargo_bike", + "description": "Layer 'Bike parking' shows cargo_bike=yes with a fixed text, namely 'This parking has room for cargo bikes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "cargo_bike", + "description": "Layer 'Bike parking' shows cargo_bike=designated with a fixed text, namely 'This parking has designated (official) spots for cargo bikes.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "designated" + }, + { + "key": "cargo_bike", + "description": "Layer 'Bike parking' shows cargo_bike=no with a fixed text, namely 'You're not allowed to park cargo bikes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "capacity:cargo_bike", + "description": "Layer 'Bike parking' shows and asks freeform values for key 'capacity:cargo_bike' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Pedestrain paths showing features with this tag", + "value": "footway" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Pedestrain paths showing features with this tag", + "value": "path" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Pedestrain paths showing features with this tag", + "value": "corridor" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Pedestrain paths showing features with this tag", + "value": "steps" + }, + { + "key": "entrance", + "description": "The MapComplete theme Personal theme has a layer Entrance showing features with this tag" + }, + { + "key": "indoor", + "description": "The MapComplete theme Personal theme has a layer Entrance showing features with this tag", + "value": "door" + }, + { + "key": "image", + "description": "The layer 'Entrance allows to upload images and adds them under the 'image'-tag (and 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 'Entrance allows to upload images and adds them under the 'image'-tag (and 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 'Entrance allows to upload images and adds them under the 'image'-tag (and 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 'Entrance allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "entrance", + "description": "Layer 'Entrance' shows entrance=yes with a fixed text, namely 'No specific entrance type is known' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "entrance", + "description": "Layer 'Entrance' shows indoor=door with a fixed text, namely 'This is an indoor door, separating a room or a corridor within a single building' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key entrance.", + "value": "" + }, + { + "key": "indoor", + "description": "Layer 'Entrance' shows indoor=door with a fixed text, namely 'This is an indoor door, separating a room or a corridor within a single building' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "door" + }, + { + "key": "indoor", + "description": "Layer 'Entrance' shows entrance=main with a fixed text, namely 'This is the main entrance' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key indoor.", + "value": "" + }, + { + "key": "entrance", + "description": "Layer 'Entrance' shows entrance=main with a fixed text, namely 'This is the main entrance' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "main" + }, + { + "key": "indoor", + "description": "Layer 'Entrance' shows entrance=secondary with a fixed text, namely 'This is a secondary entrance' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key indoor.", + "value": "" + }, + { + "key": "entrance", + "description": "Layer 'Entrance' shows entrance=secondary with a fixed text, namely 'This is a secondary entrance' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "secondary" + }, + { + "key": "indoor", + "description": "Layer 'Entrance' shows entrance=service with a fixed text, namely 'This is a service entrance - normally only used for employees, delivery, ...' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key indoor.", + "value": "" + }, + { + "key": "entrance", + "description": "Layer 'Entrance' shows entrance=service with a fixed text, namely 'This is a service entrance - normally only used for employees, delivery, ...' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "service" + }, + { + "key": "indoor", + "description": "Layer 'Entrance' shows entrance=exit with a fixed text, namely 'This is an exit where one can not enter' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key indoor.", + "value": "" + }, + { + "key": "entrance", + "description": "Layer 'Entrance' shows entrance=exit with a fixed text, namely 'This is an exit where one can not enter' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "exit" + }, + { + "key": "indoor", + "description": "Layer 'Entrance' shows entrance=entrance with a fixed text, namely 'This is an entrance where one can only enter (but not exit)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key indoor.", + "value": "" + }, + { + "key": "entrance", + "description": "Layer 'Entrance' shows entrance=entrance with a fixed text, namely 'This is an entrance where one can only enter (but not exit)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "entrance" + }, + { + "key": "indoor", + "description": "Layer 'Entrance' shows entrance=emergency with a fixed text, namely 'This is emergency exit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key indoor.", + "value": "" + }, + { + "key": "entrance", + "description": "Layer 'Entrance' shows entrance=emergency with a fixed text, namely 'This is emergency exit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "emergency" + }, + { + "key": "indoor", + "description": "Layer 'Entrance' shows entrance=home with a fixed text, namely 'This is the entrance to a private home' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key indoor.", + "value": "" + }, + { + "key": "entrance", + "description": "Layer 'Entrance' shows entrance=home with a fixed text, namely 'This is the entrance to a private home' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "home" + }, + { + "key": "door", + "description": "Layer 'Entrance' shows door=yes with a fixed text, namely 'The door type is not known' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "door", + "description": "Layer 'Entrance' shows door=hinged with a fixed text, namely 'A classical, hinged door supported by joints' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "hinged" + }, + { + "key": "door", + "description": "Layer 'Entrance' shows door=revolving with a fixed text, namely 'A revolving door which hangs on a central shaft, rotating within a cylindrical enclosure' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "revolving" + }, + { + "key": "door", + "description": "Layer 'Entrance' shows door=sliding with a fixed text, namely 'A sliding door where the door slides sidewards, typically parallel with a wall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "sliding" + }, + { + "key": "door", + "description": "Layer 'Entrance' shows door=overhead with a fixed text, namely 'A door which rolls from overhead, typically seen for garages' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "overhead" + }, + { + "key": "door", + "description": "Layer 'Entrance' shows door=no with a fixed text, namely 'This is an entrance without a physical door' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "automatic_door", + "description": "Layer 'Entrance' shows automatic_door=yes with a fixed text, namely 'This is an automatic door' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "automatic_door", + "description": "Layer 'Entrance' shows automatic_door=no with a fixed text, namely 'This door is not automated' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "automatic_door", + "description": "Layer 'Entrance' shows automatic_door=motion with a fixed text, namely 'This door will open automatically when motion is detected' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "motion" + }, + { + "key": "automatic_door", + "description": "Layer 'Entrance' shows automatic_door=floor with a fixed text, namely 'This door will open automatically when a sensor in the floor is triggered' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "floor" + }, + { + "key": "automatic_door", + "description": "Layer 'Entrance' shows automatic_door=button with a fixed text, namely 'This door will open automatically when a button is pressed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "button" + }, + { + "key": "automatic_door", + "description": "Layer 'Entrance' shows automatic_door=slowdown_button with a fixed text, namely 'This door revolves automatically all the time, but has a button to slow it down, e.g. for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "slowdown_button" + }, + { + "key": "automatic_door", + "description": "Layer 'Entrance' shows automatic_door=continuous with a fixed text, namely 'This door revolves automatically all the time' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "continuous" + }, + { + "key": "automatic_door", + "description": "Layer 'Entrance' shows automatic_door=serviced_on_button_press with a fixed text, namely 'This door will be opened by staff when requested by pressing a buttonfastfood-zaak. De focus ligt op snelle bediening, zitplaatsen zijn vaak beperkt en functioneel' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "fast_food" + }, + { + "key": "amenity", + "description": "Layer 'Restaurants and fast food' shows amenity=restaurant with a fixed text, namely 'Dit is een restaurant. De focus ligt op een aangename ervaring waar je aan tafel wordt bediend' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "restaurant" + }, + { + "key": "opening_hours", + "description": "Layer 'Restaurants and fast food' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "website", + "description": "Layer 'Restaurants and fast food' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:website", + "description": "Layer 'Restaurants and fast food' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "email", + "description": "Layer 'Restaurants and fast food' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:email", + "description": "Layer 'Restaurants and fast food' shows contact:email~^..*$ with a fixed text, namely '{contact:email}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "phone", + "description": "Layer 'Restaurants and fast food' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:phone", + "description": "Layer 'Restaurants and fast food' shows contact:phone~^..*$ with a fixed text, namely '{contact:phone}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "payment:cash", + "description": "Layer 'Restaurants and fast food' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "payment:cards", + "description": "Layer 'Restaurants and fast food' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "wheelchair", + "description": "Layer 'Restaurants and fast food' shows wheelchair=designated with a fixed text, namely 'This place is specially adapted for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "designated" + }, + { + "key": "wheelchair", + "description": "Layer 'Restaurants and fast food' shows wheelchair=yes with a fixed text, namely 'This place is easily reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "wheelchair", + "description": "Layer 'Restaurants and fast food' shows wheelchair=limited with a fixed text, namely 'It is possible to reach this place in a wheelchair, but it is not easy' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "limited" + }, + { + "key": "wheelchair", + "description": "Layer 'Restaurants and fast food' shows wheelchair=no with a fixed text, namely 'This place is not reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "cuisine", + "description": "Layer 'Restaurants and fast food' shows and asks freeform values for key 'cuisine' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "cuisine", + "description": "Layer 'Restaurants and fast food' shows cuisine=pizza with a fixed text, namely 'This is a pizzeria' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pizza" + }, + { + "key": "cuisine", + "description": "Layer 'Restaurants and fast food' shows cuisine=friture with a fixed text, namely 'This is a friture' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "friture" + }, + { + "key": "cuisine", + "description": "Layer 'Restaurants and fast food' shows cuisine=pasta with a fixed text, namely 'Mainly serves pasta' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pasta" + }, + { + "key": "cuisine", + "description": "Layer 'Restaurants and fast food' shows cuisine=kebab with a fixed text, namely 'Dit is een kebabzaak' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "kebab" + }, + { + "key": "cuisine", + "description": "Layer 'Restaurants and fast food' shows cuisine=sandwich with a fixed text, namely 'Dit is een broodjeszaak' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "sandwich" + }, + { + "key": "cuisine", + "description": "Layer 'Restaurants and fast food' shows cuisine=burger with a fixed text, namely 'Dit is een hamburgerrestaurant' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "burger" + }, + { + "key": "cuisine", + "description": "Layer 'Restaurants and fast food' shows cuisine=sushi with a fixed text, namely 'Dit is een sushirestaurant' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "sushi" + }, + { + "key": "cuisine", + "description": "Layer 'Restaurants and fast food' shows cuisine=coffee with a fixed text, namely 'Dit is een koffiezaak' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "coffee" + }, + { + "key": "cuisine", + "description": "Layer 'Restaurants and fast food' shows cuisine=italian with a fixed text, namely 'Dit is een Italiaans restaurant (dat meer dan enkel pasta of pizza verkoopt)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "italian" + }, + { + "key": "cuisine", + "description": "Layer 'Restaurants and fast food' shows cuisine=french with a fixed text, namely 'Dit is een Frans restaurant' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "french" + }, + { + "key": "cuisine", + "description": "Layer 'Restaurants and fast food' shows cuisine=chinese with a fixed text, namely 'Dit is een Chinees restaurant' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "chinese" + }, + { + "key": "cuisine", + "description": "Layer 'Restaurants and fast food' shows cuisine=greek with a fixed text, namely 'Dit is een Grieks restaurant' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "greek" + }, + { + "key": "cuisine", + "description": "Layer 'Restaurants and fast food' shows cuisine=indian with a fixed text, namely 'Dit is een Indisch restaurant' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "indian" + }, + { + "key": "cuisine", + "description": "Layer 'Restaurants and fast food' shows cuisine=turkish with a fixed text, namely 'Dit is een Turks restaurant (dat meer dan enkel kebab verkoopt)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "turkish" + }, + { + "key": "cuisine", + "description": "Layer 'Restaurants and fast food' shows cuisine=thai with a fixed text, namely 'Dit is een Thaïs restaurant' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "thai" + }, + { + "key": "takeaway", + "description": "Layer 'Restaurants and fast food' shows takeaway=only with a fixed text, namely 'This is a take-away only business' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "only" + }, + { + "key": "takeaway", + "description": "Layer 'Restaurants and fast food' shows takeaway=yes with a fixed text, namely 'Take-away is possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "takeaway", + "description": "Layer 'Restaurants and fast food' shows takeaway=no with a fixed text, namely 'Take-away is not possible here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "diet:vegetarian", + "description": "Layer 'Restaurants and fast food' shows diet:vegetarian=no with a fixed text, namely 'Geen vegetarische opties beschikbaar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "diet:vegetarian", + "description": "Layer 'Restaurants and fast food' shows diet:vegetarian=limited with a fixed text, namely 'Beperkte vegetarische opties zijn beschikbaar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "limited" + }, + { + "key": "diet:vegetarian", + "description": "Layer 'Restaurants and fast food' shows diet:vegetarian=yes with a fixed text, namely 'Vegetarische opties zijn beschikbaar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "diet:vegetarian", + "description": "Layer 'Restaurants and fast food' shows diet:vegetarian=only with a fixed text, namely 'Enkel vegetarische opties zijn beschikbaar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "only" + }, + { + "key": "diet:vegan", + "description": "Layer 'Restaurants and fast food' shows diet:vegan=no with a fixed text, namely 'Geen veganistische opties beschikbaar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "diet:vegan", + "description": "Layer 'Restaurants and fast food' shows diet:vegan=limited with a fixed text, namely 'Beperkte veganistische opties zijn beschikbaar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "limited" + }, + { + "key": "diet:vegan", + "description": "Layer 'Restaurants and fast food' shows diet:vegan=yes with a fixed text, namely 'Veganistische opties zijn beschikbaar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "diet:vegan", + "description": "Layer 'Restaurants and fast food' shows diet:vegan=only with a fixed text, namely 'Enkel veganistische opties zijn beschikbaar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "only" + }, + { + "key": "diet:halal", + "description": "Layer 'Restaurants and fast food' shows diet:halal=no with a fixed text, namely 'There are no halal options available' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "diet:halal", + "description": "Layer 'Restaurants and fast food' shows diet:halal=limited with a fixed text, namely 'There is a small halal menu' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "limited" + }, + { + "key": "diet:halal", + "description": "Layer 'Restaurants and fast food' shows diet:halal=yes with a fixed text, namely 'There is a halal menu' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "diet:halal", + "description": "Layer 'Restaurants and fast food' shows diet:halal=only with a fixed text, namely 'Only halal options are available' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "only" + }, + { + "key": "diet:vegetarian", + "description": "Layer 'Restaurants and fast food' 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 'Personal theme')", + "value": "yes" + }, + { + "key": "diet:vegetarian", + "description": "Layer 'Restaurants and fast food' 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 'Personal theme')", + "value": "limited" + }, + { + "key": "diet:vegetarian", + "description": "Layer 'Restaurants and fast food' 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 'Personal theme')", + "value": "no" + }, + { + "key": "diet:vegan", + "description": "Layer 'Restaurants and fast food' 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 'Personal theme')", + "value": "yes" + }, + { + "key": "diet:vegan", + "description": "Layer 'Restaurants and fast food' 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 'Personal theme')", + "value": "limited" + }, + { + "key": "diet:vegan", + "description": "Layer 'Restaurants and fast food' shows diet:vegan=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 'Personal theme')", + "value": "no" + }, + { + "key": "friture:oil", + "description": "Layer 'Restaurants and fast food' 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 'Personal theme')", + "value": "vegetable" + }, + { + "key": "friture:oil", + "description": "Layer 'Restaurants and fast food' 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 'Personal theme')", + "value": "animal" + }, + { + "key": "reusable_packaging:accept", + "description": "Layer 'Restaurants and fast food' shows reusable_packaging:accept=yes with a fixed text, namely 'You can bring your own containers 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 'Personal theme')", + "value": "yes" + }, + { + "key": "reusable_packaging:accept", + "description": "Layer 'Restaurants and fast food' shows reusable_packaging:accept=no with a fixed text, namely 'Bringing your own container is not allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "reusable_packaging:accept", + "description": "Layer 'Restaurants and fast food' shows reusable_packaging:accept=only with a fixed text, namely 'You must bring your own container to order here.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "only" + }, + { + "key": "service:electricity", + "description": "Layer 'Restaurants and fast food' shows service:electricity=yes with a fixed text, namely 'There are plenty of domestic sockets available to customers seated indoors, where they can charge their electronics' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "service:electricity", + "description": "Layer 'Restaurants and fast food' shows service:electricity=limited with a fixed text, namely 'There are a few domestic sockets available to customers seated indoors, where they can charge their electronics' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "limited" + }, + { + "key": "service:electricity", + "description": "Layer 'Restaurants and fast food' shows service:electricity=ask with a fixed text, namely 'There are no sockets available indoors to customers, but charging might be possible if the staff is asked' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "ask" + }, + { + "key": "service:electricity", + "description": "Layer 'Restaurants and fast food' shows service:electricity=no with a fixed text, namely 'There are a no domestic sockets available to customers seated indoors' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "dog", + "description": "Layer 'Restaurants and fast food' shows dog=yes with a fixed text, namely 'Dogs are allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "dog", + "description": "Layer 'Restaurants and fast food' shows dog=no with a fixed text, namely 'Dogs are not allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "dog", + "description": "Layer 'Restaurants and fast food' shows dog=leashed with a fixed text, namely 'Dogs are allowed, but they have to be leashed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "leashed" + }, + { + "key": "dog", + "description": "Layer 'Restaurants and fast food' shows dog=unleashed with a fixed text, namely 'Dogs are allowed and can run around freely' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "unleashed" + }, + { + "key": "memorial", + "description": "The MapComplete theme Personal theme 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 'Personal theme')" + }, + { + "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 'Personal theme')", + "value": "yes" + }, + { + "key": "source", + "description": "Layer 'Ghost bikes' shows and asks freeform values for key 'source' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "inscription", + "description": "Layer 'Ghost bikes' shows and asks freeform values for key 'inscription' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "start_date", + "description": "Layer 'Ghost bikes' shows and asks freeform values for key 'start_date' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "emergency", + "description": "The MapComplete theme Personal theme 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 'Personal theme')" + }, + { + "key": "colour", + "description": "Layer 'Map of hydrants' shows with a fixed text, namely 'The hydrant color is unknown.' (in the MapComplete.osm.be theme 'Personal theme') 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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')" + }, + { + "key": "fire_hydrant:type", + "description": "Layer 'Map of hydrants' shows with a fixed text, namely 'The hydrant type is unknown.' (in the MapComplete.osm.be theme 'Personal theme') 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 ' Pillar type.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pillar" + }, + { + "key": "fire_hydrant:type", + "description": "Layer 'Map of hydrants' shows fire_hydrant:type=pipe with a fixed text, namely ' Pipe type.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pipe" + }, + { + "key": "fire_hydrant:type", + "description": "Layer 'Map of hydrants' shows fire_hydrant:type=wall with a fixed text, namely ' Wall type.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "wall" + }, + { + "key": "fire_hydrant:type", + "description": "Layer 'Map of hydrants' shows fire_hydrant:type=underground with a fixed text, namely ' Underground type.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "underground" + }, + { + "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 'Personal theme')", + "value": "fire_hydrant" + }, + { + "key": "disused:emergency", + "description": "Layer 'Map of hydrants' shows disused:emergency=fire_hydrant with a fixed text, namely 'The hydrant is unavailable' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "fire_hydrant" + }, + { + "key": "emergency", + "description": "Layer 'Map of hydrants' shows disused:emergency=fire_hydrant with a fixed text, namely 'The hydrant is unavailable' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key emergency.", + "value": "" + }, + { + "key": "removed:emergency", + "description": "Layer 'Map of hydrants' shows removed:emergency=fire_hydrant 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 'Personal theme')", + "value": "fire_hydrant" + }, + { + "key": "emergency", + "description": "Layer 'Map of hydrants' shows removed:emergency=fire_hydrant 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 'Personal theme') 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 Personal theme 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 'Personal theme')" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "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 Personal theme 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 'Personal theme')" + }, + { + "key": "addr:street", + "description": "Layer 'Map of fire stations' shows and asks freeform values for key 'addr:street' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "addr:place", + "description": "Layer 'Map of fire stations' shows and asks freeform values for key 'addr:place' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "operator", + "description": "Layer 'Map of fire stations' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 Personal theme 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 'Personal theme')" + }, + { + "key": "addr:street", + "description": "Layer 'Map of ambulance stations' shows and asks freeform values for key 'addr:street' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "addr:place", + "description": "Layer 'Map of ambulance stations' shows and asks freeform values for key 'addr:place' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "operator", + "description": "Layer 'Map of ambulance stations' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "operator:type", + "description": "Layer 'Map of ambulance stations' shows and asks freeform values for key 'operator:type' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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" + }, + { + "key": "tourism", + "description": "The MapComplete theme Personal theme has a layer Maps showing features with this tag", + "value": "map" + }, + { + "key": "information", + "description": "The MapComplete theme Personal theme 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 'Personal theme')" + }, + { + "key": "map_source", + "description": "Layer 'Maps' shows map_source=OpenStreetMap 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 'Personal theme')", + "value": "OpenStreetMap" + }, + { + "key": "not:map_source", + "description": "Layer 'Maps' shows map_source=OpenStreetMap 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 'Personal theme') 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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "value": "no" + }, + { + "key": "leisure", + "description": "The MapComplete theme Personal theme has a layer Vogelkijkhutten showing features with this tag", + "value": "bird_hide" + }, + { + "key": "image", + "description": "The layer 'Vogelkijkhutten allows to upload images and adds them under the 'image'-tag (and 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 'Vogelkijkhutten allows to upload images and adds them under the 'image'-tag (and 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 'Vogelkijkhutten allows to upload images and adds them under the 'image'-tag (and 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 'Vogelkijkhutten allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary" + }, + { + "key": "shelter", + "description": "Layer 'Vogelkijkhutten' shows shelter=no with a fixed text, namely 'Vogelkijkwand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "building", + "description": "Layer 'Vogelkijkhutten' shows shelter=no with a fixed text, namely 'Vogelkijkwand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key building.", + "value": "" + }, + { + "key": "amenity", + "description": "Layer 'Vogelkijkhutten' shows shelter=no with a fixed text, namely 'Vogelkijkwand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key amenity.", + "value": "" + }, + { + "key": "amenity", + "description": "Layer 'Vogelkijkhutten' shows amenity=shelter&building=yes&shelter=yes with a fixed text, namely 'Vogelkijkhut' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "shelter" + }, + { + "key": "building", + "description": "Layer 'Vogelkijkhutten' shows amenity=shelter&building=yes&shelter=yes with a fixed text, namely 'Vogelkijkhut' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "shelter", + "description": "Layer 'Vogelkijkhutten' shows amenity=shelter&building=yes&shelter=yes with a fixed text, namely 'Vogelkijkhut' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "building", + "description": "Layer 'Vogelkijkhutten' shows building=tower&bird_hide=tower with a fixed text, namely 'Vogelkijktoren' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "tower" + }, + { + "key": "bird_hide", + "description": "Layer 'Vogelkijkhutten' shows building=tower&bird_hide=tower with a fixed text, namely 'Vogelkijktoren' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "tower" + }, + { + "key": "amenity", + "description": "Layer 'Vogelkijkhutten' shows amenity=shelter|building=yes|shelter=yes with a fixed text, namely 'Vogelkijkhut' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "shelter" + }, + { + "key": "building", + "description": "Layer 'Vogelkijkhutten' shows amenity=shelter|building=yes|shelter=yes with a fixed text, namely 'Vogelkijkhut' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "shelter", + "description": "Layer 'Vogelkijkhutten' shows amenity=shelter|building=yes|shelter=yes with a fixed text, namely 'Vogelkijkhut' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "wheelchair", + "description": "Layer 'Vogelkijkhutten' shows wheelchair=designated with a fixed text, namely 'Er zijn speciale voorzieningen voor rolstoelen' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "designated" + }, + { + "key": "wheelchair", + "description": "Layer 'Vogelkijkhutten' shows wheelchair=yes with a fixed text, namely 'Een rolstoel raakt er vlot' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "wheelchair", + "description": "Layer 'Vogelkijkhutten' shows wheelchair=limited with a fixed text, namely 'Je kan er raken met een rolstoel, maar het is niet makkelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "limited" + }, + { + "key": "wheelchair", + "description": "Layer 'Vogelkijkhutten' shows wheelchair=no with a fixed text, namely 'Niet rolstoeltoegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "operator", + "description": "Layer 'Vogelkijkhutten' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "operator", + "description": "Layer 'Vogelkijkhutten' shows operator=Natuurpunt with a fixed text, namely 'Beheer door Natuurpunt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "Natuurpunt" + }, + { + "key": "operator", + "description": "Layer 'Vogelkijkhutten' shows operator=Agentschap Natuur en Bos with a fixed text, namely 'Beheer door het Agentschap Natuur en Bos ' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "Agentschap Natuur en Bos" + }, + { + "key": "leisure", + "description": "The MapComplete theme Personal theme has a layer Natuurgebied showing features with this tag", + "value": "nature_reserve" + }, + { + "key": "boundary", + "description": "The MapComplete theme Personal theme has a layer Natuurgebied showing features with this tag", + "value": "protected_area" + }, + { + "key": "image", + "description": "The layer 'Natuurgebied allows to upload images and adds them under the 'image'-tag (and 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 'Natuurgebied allows to upload images and adds them under the 'image'-tag (and 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 'Natuurgebied allows to upload images and adds them under the 'image'-tag (and 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 'Natuurgebied allows to upload images and adds them under the 'image'-tag (and 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 'Natuurgebied' shows and asks freeform values for key 'access:description' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "access", + "description": "Layer 'Natuurgebied' shows access=yes with a fixed text, namely 'Vrij toegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "fee", + "description": "Layer 'Natuurgebied' shows access=yes with a fixed text, namely 'Vrij toegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key fee.", + "value": "" + }, + { + "key": "access", + "description": "Layer 'Natuurgebied' shows access=no with a fixed text, namely 'Niet toegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "fee", + "description": "Layer 'Natuurgebied' shows access=no with a fixed text, namely 'Niet toegankelijk' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key fee.", + "value": "" + }, + { + "key": "access", + "description": "Layer 'Natuurgebied' shows access=private 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 'Personal theme')", + "value": "private" + }, + { + "key": "fee", + "description": "Layer 'Natuurgebied' shows access=private 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 'Personal theme') Picking this answer will delete the key fee.", + "value": "" + }, + { + "key": "access", + "description": "Layer 'Natuurgebied' shows access=permissive 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 'Personal theme')", + "value": "permissive" + }, + { + "key": "fee", + "description": "Layer 'Natuurgebied' shows access=permissive 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 'Personal theme') Picking this answer will delete the key fee.", + "value": "" + }, + { + "key": "access", + "description": "Layer 'Natuurgebied' shows access=guided 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 'Personal theme')", + "value": "guided" + }, + { + "key": "fee", + "description": "Layer 'Natuurgebied' shows access=guided 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 'Personal theme') Picking this answer will delete the key fee.", + "value": "" + }, + { + "key": "access", + "description": "Layer 'Natuurgebied' 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 'Personal theme')", + "value": "yes" + }, + { + "key": "fee", + "description": "Layer 'Natuurgebied' 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 'Personal theme')", + "value": "yes" + }, + { + "key": "operator", + "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "operator", + "description": "Layer 'Natuurgebied' shows operator=Natuurpunt with a fixed text, namely 'Dit gebied wordt beheerd door Natuurpunt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "Natuurpunt" + }, + { + "key": "operator", + "description": "Layer 'Natuurgebied' shows operator~^(n|N)atuurpunt.*$ with a fixed text, namely 'Dit gebied wordt beheerd door {operator}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "operator", + "description": "Layer 'Natuurgebied' shows operator=Agentschap Natuur en Bos with a fixed text, namely 'Dit gebied wordt beheerd door het Agentschap Natuur en Bos' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "Agentschap Natuur en Bos" + }, + { + "key": "name:nl", + "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'name:nl' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "name", + "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "noname", + "description": "Layer 'Natuurgebied' shows noname=yes with a fixed text, namely 'Dit gebied heeft geen naam' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "name", + "description": "Layer 'Natuurgebied' shows noname=yes with a fixed text, namely 'Dit gebied heeft geen naam' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key name.", + "value": "" + }, + { + "key": "dog", + "description": "Layer 'Natuurgebied' shows dog=leashed with a fixed text, namely 'Dogs have to be leashed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "leashed" + }, + { + "key": "dog", + "description": "Layer 'Natuurgebied' shows dog=no with a fixed text, namely 'No dogs allowed' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "dog", + "description": "Layer 'Natuurgebied' shows dog=yes with a fixed text, namely 'Dogs are allowed to roam freely' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "website", + "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "curator", + "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'curator' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "email", + "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "phone", + "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "description", + "description": "Layer 'Natuurgebied' shows values with key 'description' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "description:0", + "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'description:0' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "wikidata", + "description": "Layer 'Natuurgebied' shows and asks freeform values for key 'wikidata' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "wikidata", + "description": "Layer 'Natuurgebied' shows with a fixed text, namely 'No Wikipedia page has been linked yet' (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key wikidata.", + "value": "" + }, + { + "key": "information", + "description": "The MapComplete theme Personal theme has a layer Information boards showing features with this tag", + "value": "board" + }, + { + "key": "image", + "description": "The layer 'Information boards allows to upload images and adds them under the 'image'-tag (and 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 'Information boards allows to upload images and adds them under the 'image'-tag (and 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 'Information boards allows to upload images and adds them under the 'image'-tag (and 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 'Information boards allows to upload images and adds them under the 'image'-tag (and 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 Personal theme 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 'Personal theme')" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "value": "key" + }, + { + "key": "access", + "description": "Layer 'Toilets' shows access=public with a fixed text, namely 'Public access' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "public" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "value": "no" + }, + { + "key": "charge", + "description": "Layer 'Toilets' shows and asks freeform values for key 'charge' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "payment:cash", + "description": "Layer 'Toilets' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "payment:cards", + "description": "Layer 'Toilets' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "opening_hours", + "description": "Layer 'Toilets' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "opening_hours", + "description": "Layer 'Toilets' shows opening_hours=24/7 with a fixed text, namely 'Opened 24/7' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "24/7" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "value": "dedicated_room" + }, + { + "key": "toilets:handwashing", + "description": "Layer 'Toilets' shows toilets:handwashing=yes with a fixed text, namely 'This toilets have a sink to wash your hands' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "toilets:handwashing", + "description": "Layer 'Toilets' shows toilets:handwashing=no with a fixed text, namely 'This toilets don't have a sink to wash your hands' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "toilets:paper_supplied", + "description": "Layer 'Toilets' shows toilets:paper_supplied=yes with a fixed text, namely 'This toilet is equipped with toilet paper' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "toilets:paper_supplied", + "description": "Layer 'Toilets' shows toilets:paper_supplied=no with a fixed text, namely 'You have to bring your own toilet paper to this toilet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "level", + "description": "Layer 'Toilets' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "location", + "description": "Layer 'Toilets' shows location=underground with a fixed text, namely 'Located underground' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "underground" + }, + { + "key": "level", + "description": "Layer 'Toilets' shows level=0 with a fixed text, namely 'Located on the ground floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "0" + }, + { + "key": "level", + "description": "Layer 'Toilets' shows with a fixed text, namely 'Located on the ground floor' (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key level.", + "value": "" + }, + { + "key": "level", + "description": "Layer 'Toilets' shows level=1 with a fixed text, namely 'Located on the first floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "level", + "description": "Layer 'Toilets' shows level=-1 with a fixed text, namely 'Located on the first basement level' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "-1" + }, + { + "key": "description", + "description": "Layer 'Toilets' shows and asks freeform values for key 'description' (in the MapComplete.osm.be theme 'Personal theme')" + }, { "key": "id", - "description": "The MapComplete theme Personal theme has a layer Your track showing features with this tag", - "value": "location_track" + "description": "The MapComplete theme Personal theme has a layer OpenStreetMap notes showing features with this tag" + }, + { + "key": "tower:type", + "description": "The MapComplete theme Personal theme has a layer Observation towers showing features with this tag", + "value": "observation" + }, + { + "key": "image", + "description": "The layer 'Observation towers allows to upload images and adds them under the 'image'-tag (and 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 'Observation towers allows to upload images and adds them under the 'image'-tag (and 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 'Observation towers allows to upload images and adds them under the 'image'-tag (and 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 'Observation towers allows to upload images and adds them under the 'image'-tag (and 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 'Observation towers' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "noname", + "description": "Layer 'Observation towers' shows noname=yes with a fixed text, namely 'This tower doesn't have a specific name' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "height", + "description": "Layer 'Observation towers' shows and asks freeform values for key 'height' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "access", + "description": "Layer 'Observation towers' shows access=yes with a fixed text, namely 'This tower is publicly accessible' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "access", + "description": "Layer 'Observation towers' shows access=guided with a fixed text, namely 'This tower can only be visited with a guide' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "guided" + }, + { + "key": "charge", + "description": "Layer 'Observation towers' shows and asks freeform values for key 'charge' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "fee", + "description": "Layer 'Observation towers' shows fee=no with a fixed text, namely 'Free to visit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "charge", + "description": "Layer 'Observation towers' shows fee=no with a fixed text, namely 'Free to visit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key charge.", + "value": "" + }, + { + "key": "payment:cash", + "description": "Layer 'Observation towers' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "payment:cards", + "description": "Layer 'Observation towers' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "website", + "description": "Layer 'Observation towers' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "contact:website", + "description": "Layer 'Observation towers' shows contact:website~^..*$ with a fixed text, namely '{contact:website}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "step_count", + "description": "Layer 'Observation towers' shows and asks freeform values for key 'step_count' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "elevator", + "description": "Layer 'Observation towers' shows elevator=yes with a fixed text, namely 'This tower has an elevator which takes visitors to the top' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "elevator", + "description": "Layer 'Observation towers' shows elevator=no with a fixed text, namely 'This tower does not have an elevator' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "operator", + "description": "Layer 'Observation towers' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "wheelchair", + "description": "Layer 'Observation towers' shows wheelchair=designated with a fixed text, namely 'This place is specially adapted for wheelchair users' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "designated" + }, + { + "key": "wheelchair", + "description": "Layer 'Observation towers' shows wheelchair=yes with a fixed text, namely 'This place is easily reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "wheelchair", + "description": "Layer 'Observation towers' shows wheelchair=limited with a fixed text, namely 'It is possible to reach this place in a wheelchair, but it is not easy' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "limited" + }, + { + "key": "wheelchair", + "description": "Layer 'Observation towers' shows wheelchair=no with a fixed text, namely 'This place is not reachable with a wheelchair' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "wikidata", + "description": "Layer 'Observation towers' shows and asks freeform values for key 'wikidata' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "wikidata", + "description": "Layer 'Observation towers' shows with a fixed text, namely 'No Wikipedia page has been linked yet' (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key wikidata.", + "value": "" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Parking showing features with this tag", + "value": "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": "leisure", + "description": "The MapComplete theme Personal theme 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 'Personal theme')" + }, + { + "key": "surface", + "description": "Layer 'Playgrounds' shows surface=grass with a fixed text, namely 'The surface is grass' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "grass" + }, + { + "key": "surface", + "description": "Layer 'Playgrounds' shows surface=sand with a fixed text, namely 'The surface is sand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "sand" + }, + { + "key": "surface", + "description": "Layer 'Playgrounds' shows surface=woodchips with a fixed text, namely 'The surface consist of woodchips' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "woodchips" + }, + { + "key": "surface", + "description": "Layer 'Playgrounds' shows surface=paving_stones with a fixed text, namely 'The surface is paving stones' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "paving_stones" + }, + { + "key": "surface", + "description": "Layer 'Playgrounds' shows surface=asphalt with a fixed text, namely 'The surface is asphalt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "asphalt" + }, + { + "key": "surface", + "description": "Layer 'Playgrounds' shows surface=concrete with a fixed text, namely 'The surface is concrete' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "concrete" + }, + { + "key": "surface", + "description": "Layer 'Playgrounds' shows surface=unpaved with a fixed text, namely 'The surface is unpaved' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "unpaved" + }, + { + "key": "surface", + "description": "Layer 'Playgrounds' shows surface=paved with a fixed text, namely 'The surface is paved' (in the MapComplete.osm.be theme 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "value": "no" + }, + { + "key": "min_age", + "description": "Layer 'Playgrounds' shows and asks freeform values for key 'min_age' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "max_age", + "description": "Layer 'Playgrounds' shows and asks freeform values for key 'max_age' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "operator", + "description": "Layer 'Playgrounds' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "value": "customers" + }, + { + "key": "access", + "description": "Layer 'Playgrounds' shows access=students with a fixed text, namely 'Only accessible to students of the school' (in the MapComplete.osm.be theme 'Personal theme')", + "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 'Personal theme')", + "value": "private" + }, + { + "key": "email", + "description": "Layer 'Playgrounds' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "phone", + "description": "Layer 'Playgrounds' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "value": "no" + }, + { + "key": "opening_hours", + "description": "Layer 'Playgrounds' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "value": "24/7" + }, + { + "key": "shop", + "description": "The MapComplete theme Personal theme 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 'Personal theme')" + }, + { + "key": "shop", + "description": "Layer 'Shop' shows and asks freeform values for key 'shop' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "value": "car" + }, + { + "key": "phone", + "description": "Layer 'Shop' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "website", + "description": "Layer 'Shop' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "email", + "description": "Layer 'Shop' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "opening_hours", + "description": "Layer 'Shop' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "payment:cash", + "description": "Layer 'Shop' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "payment:cards", + "description": "Layer 'Shop' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "yes" + }, + { + "key": "leisure", + "description": "The MapComplete theme Personal theme 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 'Personal theme')" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "value": "basket" + }, + { + "key": "surface", + "description": "Layer 'Sport pitches' shows and asks freeform values for key 'surface' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "surface", + "description": "Layer 'Sport pitches' shows surface=grass with a fixed text, namely 'The surface is grass' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "grass" + }, + { + "key": "surface", + "description": "Layer 'Sport pitches' shows surface=sand with a fixed text, namely 'The surface is sand' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "sand" + }, + { + "key": "surface", + "description": "Layer 'Sport pitches' shows surface=paving_stones with a fixed text, namely 'The surface is paving stones' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "paving_stones" + }, + { + "key": "surface", + "description": "Layer 'Sport pitches' shows surface=asphalt with a fixed text, namely 'The surface is asphalt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "asphalt" + }, + { + "key": "surface", + "description": "Layer 'Sport pitches' shows surface=concrete with a fixed text, namely 'The surface is concrete' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "value": "no" + }, + { + "key": "phone", + "description": "Layer 'Sport pitches' shows and asks freeform values for key 'phone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "email", + "description": "Layer 'Sport pitches' shows and asks freeform values for key 'email' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "opening_hours", + "description": "Layer 'Sport pitches' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "opening_hours", + "description": "Layer 'Sport pitches' shows with a fixed text, namely '24/7 toegankelijk' (in the MapComplete.osm.be theme 'Personal theme') 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 'Personal theme')", + "value": "24/7" + }, + { + "key": "highway", + "description": "The MapComplete theme Personal theme has a layer Street Lamps showing features with this tag", + "value": "street_lamp" + }, + { + "key": "ref", + "description": "Layer 'Street Lamps' shows and asks freeform values for key 'ref' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "support", + "description": "Layer 'Street Lamps' shows support=catenary with a fixed text, namely 'This lamp is suspended using cables' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "catenary" + }, + { + "key": "support", + "description": "Layer 'Street Lamps' shows support=ceiling with a fixed text, namely 'This lamp is mounted on a ceiling' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "ceiling" + }, + { + "key": "support", + "description": "Layer 'Street Lamps' shows support=ground with a fixed text, namely 'This lamp is mounted in the ground' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "ground" + }, + { + "key": "support", + "description": "Layer 'Street Lamps' shows support=pedestal with a fixed text, namely 'This lamp is mounted on a short pole (mostly < 1.5m)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pedestal" + }, + { + "key": "support", + "description": "Layer 'Street Lamps' shows support=pole with a fixed text, namely 'This lamp is mounted on a pole' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "pole" + }, + { + "key": "support", + "description": "Layer 'Street Lamps' shows support=wall with a fixed text, namely 'This lamp is mounted directly to the wall' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "wall" + }, + { + "key": "support", + "description": "Layer 'Street Lamps' shows support=wall_mount with a fixed text, namely 'This lamp is mounted to the wall using a metal bar' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "wall_mount" + }, + { + "key": "lamp_mount", + "description": "Layer 'Street Lamps' shows lamp_mount=straight_mast with a fixed text, namely 'This lamp sits atop of a straight mast' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "straight_mast" + }, + { + "key": "lamp_mount", + "description": "Layer 'Street Lamps' shows lamp_mount=bent_mast with a fixed text, namely 'This lamp sits at the end of a bent mast' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "bent_mast" + }, + { + "key": "light:method", + "description": "Layer 'Street Lamps' shows light:method=electric with a fixed text, namely 'This lamp is lit electrically' (in the MapComplete.osm.be theme 'Personal theme')", + "value": "electric" + }, + { + "key": "light:method", + "description": "Layer 'Street Lamps' shows light:method=LED with a fixed text, namely 'This lamp uses LEDs' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "LED" + }, + { + "key": "light:method", + "description": "Layer 'Street Lamps' shows light:method=incandescent with a fixed text, namely 'This lamp uses incandescent lighting' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "incandescent" + }, + { + "key": "light:method", + "description": "Layer 'Street Lamps' shows light:method=halogen with a fixed text, namely 'This lamp uses halogen lighting' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "halogen" + }, + { + "key": "light:method", + "description": "Layer 'Street Lamps' shows light:method=discharge with a fixed text, namely 'This lamp uses discharge lamps (unknown type)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "discharge" + }, + { + "key": "light:method", + "description": "Layer 'Street Lamps' shows light:method=mercury with a fixed text, namely 'This lamp uses a mercury-vapour lamp (lightly blueish)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "mercury" + }, + { + "key": "light:method", + "description": "Layer 'Street Lamps' shows light:method=metal-halide with a fixed text, namely 'This lamp uses metal-halide lamps (bright white)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "metal-halide" + }, + { + "key": "light:method", + "description": "Layer 'Street Lamps' shows light:method=fluorescent with a fixed text, namely 'This lamp uses fluorescent lighting' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "fluorescent" + }, + { + "key": "light:method", + "description": "Layer 'Street Lamps' shows light:method=sodium with a fixed text, namely 'This lamp uses sodium lamps (unknown type)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "sodium" + }, + { + "key": "light:method", + "description": "Layer 'Street Lamps' shows light:method=low_pressure_sodium with a fixed text, namely 'This lamp uses low pressure sodium lamps (monochrome orange)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "low_pressure_sodium" + }, + { + "key": "light:method", + "description": "Layer 'Street Lamps' shows light:method=high_pressure_sodium with a fixed text, namely 'This lamp uses high pressure sodium lamps (orange with white)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "high_pressure_sodium" + }, + { + "key": "light:method", + "description": "Layer 'Street Lamps' shows light:method=gas with a fixed text, namely 'This lamp is lit using gas' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "gas" + }, + { + "key": "light:colour", + "description": "Layer 'Street Lamps' shows and asks freeform values for key 'light:colour' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "light:colour", + "description": "Layer 'Street Lamps' shows light:colour=white with a fixed text, namely 'This lamp emits white light' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "white" + }, + { + "key": "light:colour", + "description": "Layer 'Street Lamps' shows light:colour=green with a fixed text, namely 'This lamp emits green light' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "green" + }, + { + "key": "light:colour", + "description": "Layer 'Street Lamps' shows light:colour=orange with a fixed text, namely 'This lamp emits orange light' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "orange" + }, + { + "key": "light:count", + "description": "Layer 'Street Lamps' shows and asks freeform values for key 'light:count' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "light:count", + "description": "Layer 'Street Lamps' shows light:count=1 with a fixed text, namely 'This lamp has 1 fixture' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "1" + }, + { + "key": "light:count", + "description": "Layer 'Street Lamps' shows light:count=2 with a fixed text, namely 'This lamp has 2 fixtures' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "2" + }, + { + "key": "light:lit", + "description": "Layer 'Street Lamps' shows light:lit=dusk-dawn with a fixed text, namely 'This lamp is lit at night' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "dusk-dawn" + }, + { + "key": "light:lit", + "description": "Layer 'Street Lamps' shows light:lit=24/7 with a fixed text, namely 'This lamp is lit 24/7' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "24/7" + }, + { + "key": "light:lit", + "description": "Layer 'Street Lamps' shows light:lit=motion with a fixed text, namely 'This lamp is lit based on motion' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "motion" + }, + { + "key": "light:lit", + "description": "Layer 'Street Lamps' shows light:lit=demand with a fixed text, namely 'This lamp is lit based on demand (e.g. with a pushbutton)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "demand" + }, + { + "key": "light:direction", + "description": "Layer 'Street Lamps' shows and asks freeform values for key 'light:direction' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "camera:direction", + "description": "The MapComplete theme Personal theme has a layer Direction visualization showing features with this tag" + }, + { + "key": "direction", + "description": "The MapComplete theme Personal theme has a layer Direction visualization showing features with this tag" + }, + { + "key": "man_made", + "description": "The MapComplete theme Personal theme has a layer Surveillance camera's showing features with this tag", + "value": "surveillance" + }, + { + "key": "surveillance:type", + "description": "The MapComplete theme Personal theme has a layer Surveillance camera's showing features with this tag", + "value": "camera" + }, + { + "key": "surveillance:type", + "description": "The MapComplete theme Personal theme has a layer Surveillance camera's showing features with this tag", + "value": "ALPR" + }, + { + "key": "surveillance:type", + "description": "The MapComplete theme Personal theme 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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')" + }, + { + "key": "camera:direction", + "description": "Layer 'Surveillance camera's' shows direction~^..*$ with a fixed text, namely 'Films to a compass heading of {direction}' (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key camera:direction.", + "value": "" + }, + { + "key": "direction", + "description": "Layer 'Surveillance camera's' shows direction~^..*$ with a fixed text, namely 'Films to a compass heading of {direction}' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "operator", + "description": "Layer 'Surveillance camera's' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "value": "no" + }, + { + "key": "indoor", + "description": "Layer 'Surveillance camera's' shows with a fixed text, namely 'This camera is probably located outdoors' (in the MapComplete.osm.be theme 'Personal theme') 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 'Personal theme')" + }, + { + "key": "surveillance:zone", + "description": "Layer 'Surveillance camera's' shows and asks freeform values for key 'surveillance:zone' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')" + }, + { + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "value": "ceiling" + }, + { + "key": "natural", + "description": "The MapComplete theme Personal theme 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} m' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "leaf_type", + "description": "Layer 'Tree' shows leaf_type=broadleaved with a fixed text, namely '\"\"/ Broadleaved' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "broadleaved" + }, + { + "key": "leaf_type", + "description": "Layer 'Tree' shows leaf_type=needleleaved with a fixed text, namely '\"\"/ Needleleaved' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "needleleaved" + }, + { + "key": "leaf_type", + "description": "Layer 'Tree' shows leaf_type=leafless with a fixed text, namely '\"\"/ Permanently leafless' (in the MapComplete.osm.be theme 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "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 'Personal theme')", + "value": "evergreen" + }, + { + "key": "name", + "description": "Layer 'Tree' shows and asks freeform values for key 'name' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "name", + "description": "Layer 'Tree' shows 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 'Personal theme') Picking this answer will delete the key name.", + "value": "" + }, + { + "key": "noname", + "description": "Layer 'Tree' shows 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 'Personal theme')", + "value": "yes" + }, + { + "key": "heritage", + "description": "Layer 'Tree' shows heritage=4&heritage:operator=OnroerendErfgoed with a fixed text, namely '\"\"/ Registered as heritage by Onroerend Erfgoed Flanders' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "4" + }, + { + "key": "heritage:operator", + "description": "Layer 'Tree' shows heritage=4&heritage:operator=OnroerendErfgoed with a fixed text, namely '\"\"/ Registered as heritage by Onroerend Erfgoed Flanders' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "OnroerendErfgoed" + }, + { + "key": "heritage", + "description": "Layer 'Tree' shows heritage=4&heritage:operator=aatl with a fixed text, namely 'Registered as heritage by Direction du Patrimoine culturel Brussels' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "4" + }, + { + "key": "heritage:operator", + "description": "Layer 'Tree' shows heritage=4&heritage:operator=aatl with a fixed text, namely 'Registered as heritage by Direction du Patrimoine culturel Brussels' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "aatl" + }, + { + "key": "heritage", + "description": "Layer 'Tree' shows heritage=yes 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 'Personal theme')", + "value": "yes" + }, + { + "key": "heritage:operator", + "description": "Layer 'Tree' shows heritage=yes 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 'Personal theme') Picking this answer will delete the key heritage:operator.", + "value": "" + }, + { + "key": "heritage", + "description": "Layer 'Tree' shows heritage=no with a fixed text, namely 'Not registered as heritage' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "no" + }, + { + "key": "heritage:operator", + "description": "Layer 'Tree' shows heritage=no with a fixed text, namely 'Not registered as heritage' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') 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 'Personal theme')" + }, + { + "key": "ref:OnroerendErfgoed", + "description": "Layer 'Tree' shows and asks freeform values for key 'ref:OnroerendErfgoed' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "wikidata", + "description": "Layer 'Tree' shows and asks freeform values for key 'wikidata' (in the MapComplete.osm.be theme 'Personal theme')" + }, + { + "key": "amenity", + "description": "The MapComplete theme Personal theme has a layer Waste Basket showing features with this tag", + "value": "waste_basket" + }, + { + "key": "waste", + "description": "Layer 'Waste Basket' shows with a fixed text, namely 'A waste basket for general waste' (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key waste.", + "value": "" + }, + { + "key": "waste", + "description": "Layer 'Waste Basket' shows waste=trash with a fixed text, namely 'A waste basket for general waste' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "trash" + }, + { + "key": "waste", + "description": "Layer 'Waste Basket' shows waste=dog_excrement with a fixed text, namely 'A waste basket for dog excrements' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "dog_excrement" + }, + { + "key": "waste", + "description": "Layer 'Waste Basket' shows waste=cigarettes with a fixed text, namely 'A waste basket for cigarettes' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "cigarettes" + }, + { + "key": "waste", + "description": "Layer 'Waste Basket' shows waste=drugs with a fixed text, namely 'A waste basket for drugs' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "drugs" + }, + { + "key": "waste", + "description": "Layer 'Waste Basket' shows waste=sharps with a fixed text, namely 'A waste basket for needles and other sharp objects' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "sharps" + }, + { + "key": "vending", + "description": "Layer 'Waste Basket' shows vending=dog_excrement_bag with a fixed text, namely 'This waste basket has a dispenser for (dog) excrement bags' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "dog_excrement_bag" + }, + { + "key": "not:vending", + "description": "Layer 'Waste Basket' shows vending=dog_excrement_bag with a fixed text, namely 'This waste basket has a dispenser for (dog) excrement bags' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key not:vending.", + "value": "" + }, + { + "key": "not:vending", + "description": "Layer 'Waste Basket' shows not:vending=dog_excrement_bag with a fixed text, namely 'This waste basket does not have a dispenser for (dog) excrement bags' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme')", + "value": "dog_excrement_bag" + }, + { + "key": "vending", + "description": "Layer 'Waste Basket' shows not:vending=dog_excrement_bag with a fixed text, namely 'This waste basket does not have a dispenser for (dog) excrement bags' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key vending.", + "value": "" + }, + { + "key": "vending", + "description": "Layer 'Waste Basket' shows with a fixed text, namely 'This waste basket does not have a dispenser for (dog) excrement bags' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Personal theme') Picking this answer will delete the key vending.", + "value": "" } ] } \ No newline at end of file diff --git a/Docs/TagInfo/mapcomplete_playgrounds.json b/Docs/TagInfo/mapcomplete_playgrounds.json index 08803526aa..7571ff96bd 100644 --- a/Docs/TagInfo/mapcomplete_playgrounds.json +++ b/Docs/TagInfo/mapcomplete_playgrounds.json @@ -97,11 +97,6 @@ "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 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')", @@ -114,7 +109,7 @@ }, { "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')", + "description": "Layer 'Playgrounds' shows access=students with a fixed text, namely 'Only accessible to students of the school' (in the MapComplete.osm.be theme 'Playgrounds')", "value": "students" }, { @@ -159,14 +154,9 @@ "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 with a fixed text, namely 'Always accessible' (in the MapComplete.osm.be theme 'Playgrounds') Picking this answer will delete the key opening_hours.", - "value": "" - }, { "key": "id", - "description": "The MapComplete theme Playgrounds has a layer Your track showing features with this tag", + "description": "The MapComplete theme Playgrounds has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_postboxes.json b/Docs/TagInfo/mapcomplete_postboxes.json index 58dbc0fb4a..5a377c28aa 100644 --- a/Docs/TagInfo/mapcomplete_postboxes.json +++ b/Docs/TagInfo/mapcomplete_postboxes.json @@ -6,7 +6,7 @@ "project_url": "https://mapcomplete.osm.be/postboxes", "doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/", "icon_url": "https://mapcomplete.osm.be/assets/themes/postboxes/postbox.svg", - "contact_name": "Pieter Vander Vennet, ", + "contact_name": "Pieter Vander Vennet, nicolelaine", "contact_email": "pietervdvn@posteo.net" }, "tags": [ @@ -63,7 +63,7 @@ }, { "key": "id", - "description": "The MapComplete theme Postbox and Post Office Map has a layer Your track showing features with this tag", + "description": "The MapComplete theme Postbox and Post Office Map has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_shops.json b/Docs/TagInfo/mapcomplete_shops.json index b910020bfc..a0f96ea50e 100644 --- a/Docs/TagInfo/mapcomplete_shops.json +++ b/Docs/TagInfo/mapcomplete_shops.json @@ -89,9 +89,19 @@ "key": "opening_hours", "description": "Layer 'Shop' shows and asks freeform values for key 'opening_hours' (in the MapComplete.osm.be theme 'Open Shop Map')" }, + { + "key": "payment:cash", + "description": "Layer 'Shop' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "yes" + }, + { + "key": "payment:cards", + "description": "Layer 'Shop' shows payment:cards=yes with a fixed text, namely 'Payment cards are accepted here' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Shop Map')", + "value": "yes" + }, { "key": "id", - "description": "The MapComplete theme Open Shop Map has a layer Your track showing features with this tag", + "description": "The MapComplete theme Open Shop Map has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_sport_pitches.json b/Docs/TagInfo/mapcomplete_sport_pitches.json index 1a5ceff5b8..0f4e6209d9 100644 --- a/Docs/TagInfo/mapcomplete_sport_pitches.json +++ b/Docs/TagInfo/mapcomplete_sport_pitches.json @@ -158,7 +158,7 @@ }, { "key": "id", - "description": "The MapComplete theme Sport pitches has a layer Your track showing features with this tag", + "description": "The MapComplete theme Sport pitches has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_street_lighting.json b/Docs/TagInfo/mapcomplete_street_lighting.json index 3b7f55b933..4051bc241e 100644 --- a/Docs/TagInfo/mapcomplete_street_lighting.json +++ b/Docs/TagInfo/mapcomplete_street_lighting.json @@ -223,7 +223,7 @@ }, { "key": "id", - "description": "The MapComplete theme Street Lighting has a layer Your track showing features with this tag", + "description": "The MapComplete theme Street Lighting has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_surveillance.json b/Docs/TagInfo/mapcomplete_surveillance.json index 4223f2a7b9..18f7d02f41 100644 --- a/Docs/TagInfo/mapcomplete_surveillance.json +++ b/Docs/TagInfo/mapcomplete_surveillance.json @@ -175,7 +175,7 @@ }, { "key": "id", - "description": "The MapComplete theme Surveillance under Surveillance has a layer Your track showing features with this tag", + "description": "The MapComplete theme Surveillance under Surveillance has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_toilets.json b/Docs/TagInfo/mapcomplete_toilets.json index f1daf8345a..f58006c2c4 100644 --- a/Docs/TagInfo/mapcomplete_toilets.json +++ b/Docs/TagInfo/mapcomplete_toilets.json @@ -201,13 +201,18 @@ "description": "Layer 'Toilets' shows level=1 with a fixed text, namely 'Located on the first floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')", "value": "1" }, + { + "key": "level", + "description": "Layer 'Toilets' shows level=-1 with a fixed text, namely 'Located on the first basement level' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Toilet Map')", + "value": "-1" + }, { "key": "description", "description": "Layer 'Toilets' shows and asks freeform values for key 'description' (in the MapComplete.osm.be theme 'Open Toilet Map')" }, { "key": "id", - "description": "The MapComplete theme Open Toilet Map has a layer Your track showing features with this tag", + "description": "The MapComplete theme Open Toilet Map has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_trees.json b/Docs/TagInfo/mapcomplete_trees.json index 0e6f4fe95d..ec6c91fc78 100644 --- a/Docs/TagInfo/mapcomplete_trees.json +++ b/Docs/TagInfo/mapcomplete_trees.json @@ -33,7 +33,7 @@ }, { "key": "height", - "description": "Layer 'Tree' shows height~^^[0-9.]+$$ with a fixed text, namely 'Height: {height} m' (in the MapComplete.osm.be theme 'Trees')" + "description": "Layer 'Tree' shows height~^[0-9.]+$ with a fixed text, namely 'Height: {height} m' (in the MapComplete.osm.be theme 'Trees')" }, { "key": "leaf_type", @@ -168,7 +168,7 @@ }, { "key": "id", - "description": "The MapComplete theme Trees has a layer Your track showing features with this tag", + "description": "The MapComplete theme Trees has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/TagInfo/mapcomplete_waste_basket.json b/Docs/TagInfo/mapcomplete_waste_basket.json index ff89c53f35..8f94b4f128 100644 --- a/Docs/TagInfo/mapcomplete_waste_basket.json +++ b/Docs/TagInfo/mapcomplete_waste_basket.json @@ -72,7 +72,7 @@ }, { "key": "id", - "description": "The MapComplete theme Waste Basket has a layer Your track showing features with this tag", + "description": "The MapComplete theme Waste Basket has a layer Your travelled track showing features with this tag", "value": "location_track" } ] diff --git a/Docs/Tags_format.md b/Docs/Tags_format.md index 7531d89b6c..83ff0c392c 100644 --- a/Docs/Tags_format.md +++ b/Docs/Tags_format.md @@ -80,7 +80,7 @@ which we do not want. To mitigate this, use: -``` +```json "mappings": [ { "if":"key:={some_other_key}" @@ -90,4 +90,5 @@ To mitigate this, use: ] ``` -One can use `key!:=prefix-{other_key}-postfix` as well, to match if `key` is _not_ the same as `prefix-{other_key}-postfix` (with other_key substituted by the value) \ No newline at end of file +One can use `key!:=prefix-{other_key}-postfix` as well, to match if `key` is _not_ the same +as `prefix-{other_key}-postfix` (with `other_key` substituted by the value) diff --git a/Docs/Tools/GenerateSeries.ts b/Docs/Tools/GenerateSeries.ts index 633a632b2e..9f135c54d1 100644 --- a/Docs/Tools/GenerateSeries.ts +++ b/Docs/Tools/GenerateSeries.ts @@ -4,6 +4,8 @@ import {Utils} from "../../Utils"; import {exec} from "child_process" import {GeoOperations} from "../../Logic/GeoOperations"; +ScriptUtils.fixUtils() + class StatsDownloader { private readonly startYear = 2020 @@ -75,7 +77,7 @@ class StatsDownloader { while (url) { ScriptUtils.erasableLog(`Downloading stats for ${year}-${month}, page ${page} ${url}`) - const result = await ScriptUtils.DownloadJSON(url, headers) + const result = await Utils.downloadJson(url, headers) page++; allFeatures.push(...result.features) if (result.features === undefined) { @@ -615,6 +617,18 @@ function createGraphs(allFeatures: ChangeSetData[], appliedFilterDescription: st f => f.properties.editor.substr("MapComplete ".length, 6).replace(/[a-zA-Z-/]/g, ''), 1 ) + + Group.createStackedBarChartPerDay( + "Changesets per minor version number" + appliedFilterDescription, + allFeatures, + f => { + const base = f.properties.editor.substr("MapComplete ".length).replace(/[a-zA-Z-/]/g, '') + const [major, minor, patch] = base.split(".") + return major+"."+minor + + }, + 1 + ) Group.createStackedBarChartPerDay( "Deletion-changesets per theme" + appliedFilterDescription, diff --git a/Docs/Tools/cache_centerpoints.sh b/Docs/Tools/cache_centerpoints.sh index 2b342c7b9f..0fdf56c09e 100755 --- a/Docs/Tools/cache_centerpoints.sh +++ b/Docs/Tools/cache_centerpoints.sh @@ -6,7 +6,7 @@ cd ../.. cd ../MapComplete-data git pull cd - -ts-node scripts/slice.ts Docs/Tools/centerpoints.geojson 8 ../MapComplete-data/mapcomplete-changes/ +ts-node scripts/slice.ts ./Docs/Tools/centerpoints.geojson 8 ../MapComplete-data/mapcomplete-changes/ cd - git add mapcomplete-changes/* git commit -am "New changeset data" diff --git a/Docs/Tools/centerpoints.geojson b/Docs/Tools/centerpoints.geojson index 6c26feaaa2..463bf000db 100644 --- a/Docs/Tools/centerpoints.geojson +++ b/Docs/Tools/centerpoints.geojson @@ -294617,6 +294617,9254 @@ ] } }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Dampee", + "uid": "2175714", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-31T21:33:07Z", + "reviewed_features": [], + "create": 0, + "modify": 33, + "delete": 0, + "area": 0.302340176125955, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116841128, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 44, + "imagery": "osm", + "language": "nl" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.7762744, + 51.0840675 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dekarl", + "uid": "5760", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-31T20:59:37Z", + "reviewed_features": [], + "create": 0, + "modify": 17, + "delete": 0, + "area": 0.00105564918512994, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116839950, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 25, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 8.62957005, + 50.11264635 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T20:55:23Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 1.5720880000753e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116839830, + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 4, + "change_within_25m": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -70.5702008, + -33.592247900000004 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thibaultmol", + "uid": "2916921", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-31T20:07:54Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0.00000341655243999605, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116838253, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 6, + "imagery": "osm", + "language": "nl" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.4060130500000003, + 51.0437088 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T20:05:56Z", + "reviewed_features": [], + "create": 0, + "modify": 17, + "delete": 0, + "area": 0.000267321901200112, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116838205, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 33, + "imagery": "osm", + "language": "nl" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.8072667, + 50.8561587 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T20:00:21Z", + "reviewed_features": [], + "create": 26, + "modify": 9, + "delete": 0, + "area": 0.00000235544504000526, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116838028, + "host": "mapcomplete.osm.be", + "move": 8, + "theme": "grb", + "import": 3, + "imagery": "osm", + "language": "en", + "conflation": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.94155685, + 51.0865118 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #observation_towers", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T18:40:10Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000854707867650675, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116835279, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "observation_towers", + "answer": 2, + "imagery": "osm", + "language": "nl", + "change_over_5000m": 1, + "change_within_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.5775916500000005, + 51.30728795 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Albin Gasparetto", + "uid": "1227542", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-31T18:30:10Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116834915, + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 2, + "imagery": "osm", + "language": "fr" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.6061148, + 42.9635577 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T18:25:51Z", + "reviewed_features": [], + "create": 0, + "modify": 18, + "delete": 0, + "area": 0.00268974535874002, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116834751, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "food", + "answer": 20, + "imagery": "osm", + "language": "nl", + "change_over_5000m": 8, + "change_within_500m": 2, + "change_within_1000m": 10 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.586551050000001, + 51.3298335 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T18:20:32Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 1, + "area": 0.00000391775579999962, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116834514, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "food", + "answer": 4, + "imagery": "osm", + "deletion": 1, + "language": "nl", + "change_within_1000m": 5, + "deletion:node/2839388468": "het is gesloten" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.60917505, + 51.3113039 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #campersite", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T18:02:46Z", + "reviewed_features": [], + "create": 1, + "modify": 6, + "delete": 0, + "area": 0.000516267444149891, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116833812, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "campersite", + "answer": 13, + "imagery": "osm", + "language": "nl", + "change_over_5000m": 1, + "change_within_5000m": 13 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.59615445, + 51.32447155 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #artwork", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T18:00:57Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 1, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116833750, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "artwork", + "answer": 1, + "imagery": "osm", + "deletion": 1, + "language": "nl", + "change_over_5000m": 3, + "deletion:node/9463800980": "testing point" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.5510462, + 51.3447623 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T17:56:59Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116833592, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "benches", + "answer": 1, + "imagery": "osm", + "language": "nl", + "change_over_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.5288583, + 51.335231 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #waste_basket", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T14:53:45Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116827153, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "waste_basket", + "answer": 1, + "imagery": "osm", + "language": "nl", + "change_within_25m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.8040893, + 51.5003409 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T14:53:03Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116827127, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "benches", + "answer": 2, + "imagery": "osm", + "language": "nl", + "change_within_25m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.8041537, + 51.5003604 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "jay8ea", + "uid": "251482", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #street_lighting", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-31T14:37:37Z", + "reviewed_features": [], + "create": 0, + "modify": 9, + "delete": 0, + "area": 0.0000359177414400359, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116826540, + "host": "mapcomplete.osm.be", + "theme": "street_lighting", + "answer": 9, + "imagery": "osm", + "language": "en", + "change_within_1000m": 5, + "change_within_5000m": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -2.263366, + 53.441007299999995 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #street_lighting", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T13:51:52Z", + "reviewed_features": [], + "create": 2, + "modify": 2, + "delete": 0, + "area": 0.0000142517841200104, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116824801, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "split": 3, + "theme": "street_lighting", + "answer": 2, + "imagery": "osm", + "language": "nl", + "relation-fix": 1, + "change_within_25m": 3, + "change_within_100m": 1, + "change_within_500m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.7386330999999995, + 51.5129685 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Oberfuzzi", + "uid": "14794109", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T12:23:31Z", + "reviewed_features": [], + "create": 2, + "modify": 0, + "delete": 0, + "area": 0.000052404764060028, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116821293, + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 13.00298455, + 52.0127729 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #cafes_and_pubs", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T10:41:12Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116816749, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cafes_and_pubs", + "answer": 2, + "imagery": "osm", + "language": "nl", + "change_over_5000m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.6791617, + 51.2988118 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-31T05:30:33Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116805462, + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -71.2803384, + -35.1138347 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bponkishore", + "uid": "14062769", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-31T04:47:04Z", + "reviewed_features": [], + "create": 0, + "modify": 59, + "delete": 0, + "area": 0.0716206775721303, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116804502, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 76, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 80.19127465, + 12.99810655 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/seppesantens/mapcomplete-themes/main/walkingnodenetworks/walkingnodenetworks.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T22:31:12Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116798885, + "host": "mapcomplete.osm.be", + "theme": "gh://seppesantens/mapcomplete-themes/main/walkingnodenetworks/walkingnodenetworks.json", + "answer": 1, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.3147602, + 51.1178506 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T22:11:07Z", + "reviewed_features": [], + "create": 0, + "modify": 187, + "delete": 0, + "area": 0.02428234594258, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116798400, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 312, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.44436785, + 54.8553503 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T21:51:09Z", + "reviewed_features": [], + "create": 67, + "modify": 163, + "delete": 2, + "area": 0.0000305241867000207, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116797900, + "host": "mapcomplete.osm.be", + "move": 144, + "theme": "grb", + "answer": 1, + "import": 7, + "imagery": "osm", + "language": "nl", + "conflation": 36 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.01855345, + 51.190309400000004 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Strubbl", + "uid": "536583", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T20:09:57Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116794977, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "bookcases", + "answer": 3, + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 11.9423304, + 48.0446517 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "nickinparadise", + "uid": "2049708", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #cafes_and_pubs", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T20:08:15Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116794926, + "host": "mapcomplete.osm.be", + "theme": "cafes_and_pubs", + "answer": 1, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -85.8709538, + 11.2567941 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T19:00:27Z", + "reviewed_features": [], + "create": 5, + "modify": 3, + "delete": 0, + "area": 0.0152817128300388, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116792994, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 21, + "imagery": "osm", + "language": "en", + "add-image": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.4553815, + 50.905514 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #cyclestreets", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T18:19:38Z", + "reviewed_features": [], + "create": 0, + "modify": 28, + "delete": 0, + "area": 0.00166960104119988, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116791647, + "host": "mapcomplete.osm.be", + "theme": "cyclestreets", + "answer": 27, + "imagery": "osm", + "language": "en", + "add-image": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.5609383, + 50.9349965 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #cafes_and_pubs", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T17:48:56Z", + "reviewed_features": [], + "create": 0, + "modify": 8, + "delete": 0, + "area": 0.00637684746888019, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116790606, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cafes_and_pubs", + "answer": 9, + "imagery": "osm", + "language": "nl", + "change_over_5000m": 5, + "change_within_5000m": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.5986909, + 51.31757235 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T17:43:57Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116790432, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "hailhydrant", + "answer": 1, + "imagery": "HDM_HOT", + "language": "en", + "change_over_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.5439407, + 51.3515309 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T17:32:57Z", + "reviewed_features": [], + "create": 0, + "modify": 7, + "delete": 0, + "area": 0.00226203856761992, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116790056, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cyclofix", + "answer": 11, + "imagery": "CartoDB.Voyager", + "language": "nl", + "change_over_5000m": 5, + "change_within_1000m": 6 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.5898251000000005, + 51.33464275 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #cyclestreets", + "comments_count": 6, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T17:22:41Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 9.82111299993227e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116789721, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cyclestreets", + "answer": 1, + "imagery": "osm", + "language": "nl", + "change_over_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.7302096, + 51.397992450000004 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T16:43:29Z", + "reviewed_features": [], + "create": 3, + "modify": 2, + "delete": 0, + "area": 0.00583592169276009, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116788202, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "bookcases", + "answer": 4, + "imagery": "osm", + "language": "en", + "change_over_5000m": 3, + "change_within_100m": 3, + "change_within_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.6678992, + 51.3461246 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "whatismoss", + "uid": "8427311", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T15:21:31Z", + "reviewed_features": [], + "create": 0, + "modify": 117, + "delete": 0, + "area": 0.00150771340651005, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116784793, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 166, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.03411615, + 50.632665349999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #test", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T14:15:14Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116782141, + "host": "mapcomplete.osm.be", + "theme": "test", + "answer": 1, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.3704001, + 51.07371 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/seppesantens/mapcomplete-themes/main/walkingnodenetworks/walkingnodenetworks.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T14:11:07Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116781962, + "host": "mapcomplete.osm.be", + "theme": "gh://seppesantens/mapcomplete-themes/main/walkingnodenetworks/walkingnodenetworks.json", + "answer": 1, + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.3715484, + 51.0730973 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bponkishore", + "uid": "14062769", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T13:33:28Z", + "reviewed_features": [], + "create": 0, + "modify": 71, + "delete": 0, + "area": 0.0137339877607205, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116780241, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 82, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 80.22573235, + 12.996295700000001 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T13:30:56Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 0.000539445246579971, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116780133, + "host": "mapcomplete.osm.be", + "theme": "benches", + "answer": 1, + "imagery": "osm", + "language": "en", + "add-image": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.36724335, + 51.0806832 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "StefDeGreef", + "uid": "1860737", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T13:13:19Z", + "reviewed_features": [], + "create": 1, + "modify": 6, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116779371, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 7, + "imagery": "CartoDB.Voyager", + "language": "fr", + "add-image": 2, + "change_over_5000m": 1, + "change_within_25m": 9 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.4409596, + 50.8045511 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T13:06:59Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 7.05640000000658e-7, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116779137, + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 2, + "imagery": "osm", + "language": "en", + "change_within_25m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.3782611, + 51.087767 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Stinus_Clasius", + "uid": "1086503", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T10:08:56Z", + "reviewed_features": [], + "create": 246, + "modify": 52, + "delete": 0, + "area": 0.00141076370252995, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116772568, + "host": "mapcomplete.osm.be", + "move": 47, + "theme": "grb", + "import": 18, + "imagery": "osm", + "language": "nl", + "conflation": 10 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.80743895, + 51.160137649999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T08:36:05Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 2.40641999993362e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116769631, + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "bookcases", + "imagery": "osm", + "language": "nl", + "add-image": 2, + "change_within_25m": 1, + "change_within_50m": 2, + "move:node/9246056984": "improve_accuracy" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.2489615, + 50.7412799 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T08:12:05Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116769153, + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "imagery": "osm", + "language": "de", + "change_over_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 11.7066367, + 48.0343016 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bponkishore", + "uid": "14062769", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T07:45:24Z", + "reviewed_features": [], + "create": 0, + "modify": 37, + "delete": 0, + "area": 0.000927423012169844, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116768596, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 53, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 80.13171685, + 12.93122725 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T01:44:52Z", + "reviewed_features": [], + "create": 13, + "modify": 49, + "delete": 0, + "area": 0.00917739696472004, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116764627, + "host": "mapcomplete.osm.be", + "move": 41, + "theme": "grb", + "answer": 2, + "import": 4, + "imagery": "osm", + "language": "nl", + "conflation": 12 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.078408, + 51.158278 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-29T22:08:51Z", + "reviewed_features": [], + "create": 0, + "modify": 148, + "delete": 0, + "area": 0.0158762882422795, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116761076, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 197, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.62152875, + 54.828519400000005 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Dominic Z", + "uid": "56475", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-29T18:54:11Z", + "reviewed_features": [], + "create": 0, + "modify": 97, + "delete": 0, + "area": 0.00100082572523997, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116756281, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 130, + "imagery": "osm", + "language": "de" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 8.56894195, + 48.8985458 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-29T18:50:44Z", + "reviewed_features": [], + "create": 0, + "modify": 56, + "delete": 0, + "area": 0.0214745386162698, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116756190, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 76, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.6196153500000001, + 54.85182775 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "eiryelio", + "uid": "831652", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-29T17:17:25Z", + "reviewed_features": [], + "create": 3, + "modify": 4, + "delete": 0, + "area": 0.0000567647676699667, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116753063, + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 7, + "imagery": "osm", + "language": "fr" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.13869285, + 50.69412825 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-29T16:17:30Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116750828, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "toilets", + "imagery": "osm", + "language": "en", + "add-image": 1, + "change_within_25m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2319562, + 51.21206 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 43, + "name": "Invalid key value combination" + } + ], + "tags": [], + "features": [ + { + "url": "node-9458281311", + "osm_id": 9458281311, + "reasons": [ + 43 + ], + "version": 2, + "primary_tags": { + "amenity": "bicycle_wash" + } + } + ], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-29T15:57:26Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116749960, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cyclofix", + "answer": 1, + "imagery": "CartoDB.Voyager", + "language": "en", + "add-image": 1, + "change_over_5000m": 1, + "change_within_25m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2430643, + 51.2055222 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-29T15:30:21Z", + "reviewed_features": [], + "create": 0, + "modify": 103, + "delete": 0, + "area": 0.0328009178565809, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116748790, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 134, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.59851645, + 54.854494700000004 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Oberfuzzi", + "uid": "14794109", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-29T10:56:41Z", + "reviewed_features": [], + "create": 5, + "modify": 4, + "delete": 0, + "area": 0.0000121697786800094, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116739093, + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 12.9914712, + 52.0096516 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-29T10:41:57Z", + "reviewed_features": [], + "create": 0, + "modify": 161, + "delete": 0, + "area": 0.0225476762166004, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116738609, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 290, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.5986677500000002, + 54.8794021 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "LySioS", + "uid": "11579673", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-29T09:10:05Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116735492, + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 5, + "imagery": "osm", + "language": "fr", + "change_over_5000m": 1, + "change_within_25m": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.9361894, + 42.691316 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-29T08:17:40Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116734074, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 3, + "imagery": "AGIVFlandersGRB", + "language": "nl", + "change_within_5000m": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.2387824, + 50.7363781 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 43, + "name": "Invalid key value combination" + } + ], + "tags": [], + "features": [ + { + "url": "node-9456801536", + "osm_id": 9456801536, + "reasons": [ + 43 + ], + "version": 1, + "primary_tags": { + "amenity": "binoculars" + } + } + ], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #binoculars", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-28T22:53:01Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116726369, + "host": "mapcomplete.osm.be", + "theme": "binoculars", + "imagery": "osm", + "language": "en", + "change_over_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.4307197, + 51.3903943 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T21:17:33Z", + "reviewed_features": [], + "create": 0, + "modify": 156, + "delete": 0, + "area": 0.00518273964818984, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116723580, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 225, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.59195535, + 54.81667415 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T21:09:06Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 4.41766800008404e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116723289, + "host": "mapcomplete.osm.be", + "theme": "playgrounds", + "imagery": "osm", + "language": "en", + "add-image": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.3737312, + 50.85941445 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T20:47:17Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.20233727205076, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116722525, + "host": "mapcomplete.osm.be", + "theme": "food", + "imagery": "osm", + "language": "en", + "add-image": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.670772899999999, + 51.007172049999994 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "foo_bar_lol", + "uid": "14955867", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T20:13:20Z", + "reviewed_features": [], + "create": 25, + "modify": 30, + "delete": 0, + "area": 0.000173747155200079, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116721473, + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 102, + "imagery": "osm", + "language": "fr" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.8920704, + 42.6957615 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T20:08:28Z", + "reviewed_features": [], + "create": 0, + "modify": 10, + "delete": 0, + "area": 0.204492830610087, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116721335, + "host": "mapcomplete.osm.be", + "theme": "shops", + "answer": 2, + "imagery": "osm", + "language": "en", + "add-image": 8 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.67012115, + 51.00590755 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-28T20:01:30Z", + "reviewed_features": [], + "create": 148, + "modify": 37, + "delete": 0, + "area": 0.0000422385408499707, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116721159, + "host": "mapcomplete.osm.be", + "move": 34, + "theme": "grb", + "import": 20, + "imagery": "osm", + "language": "nl", + "conflation": 6, + "change_over_5000m": 20 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.36734185, + 50.961900549999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T19:20:51Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0.00000120700943999719, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116720054, + "host": "mapcomplete.osm.be", + "theme": "playgrounds", + "imagery": "osm", + "language": "en", + "add-image": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.9927642, + 51.1546347 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #http://127.0.0.1:8080/assets/themes/bicycle_rental/bicycle_rental.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-28T18:35:50Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0.00000140749019999876, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116718826, + "host": "127.0.0.1:1234", + "theme": "http://127.0.0.1:8080/assets/themes/bicycle_rental/bicycle_rental.json", + "answer": 4, + "imagery": "osm", + "language": "nl" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2186024499999997, + 51.2005528 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Arickx", + "uid": "9282195", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/xliving/xliving.github.io/main/OSM/amenity-recycling/recycling-organic/mapcomplete.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-28T16:07:13Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116713659, + "host": "mapcomplete.osm.be", + "theme": "gh://xliving/xliving.github.io/main/osm/amenity-recycling/recycling-organic/mapcomplete.json", + "answer": 1, + "imagery": "osm", + "language": "nl" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2227347, + 51.2227335 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T16:05:29Z", + "reviewed_features": [], + "create": 3, + "modify": 9, + "delete": 0, + "area": 0.0000961499082600199, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116713573, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 12, + "imagery": "CartoDB.Voyager", + "language": "en", + "add-image": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.3874675, + 50.860726549999995 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-28T15:18:31Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 8.3280959998577e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116711729, + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 4, + "change_within_25m": 2, + "change_within_500m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -70.5700582, + -33.5922434 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-28T14:42:38Z", + "reviewed_features": [], + "create": 1, + "modify": 5, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116710319, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cyclofix", + "answer": 7, + "imagery": "CartoDB.Voyager", + "language": "nl", + "add-image": 2, + "change_over_5000m": 1, + "change_within_25m": 9 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2130557, + 51.2262186 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-28T14:36:03Z", + "reviewed_features": [], + "create": 0, + "modify": 11, + "delete": 0, + "area": 0.0000105203646899932, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116710083, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "etymology", + "answer": 10, + "imagery": "osm", + "language": "nl", + "add-image": 2, + "change_within_50m": 2, + "change_within_100m": 6, + "change_within_500m": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.21028495, + 51.22414125 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T11:59:25Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116704794, + "host": "mapcomplete.osm.be", + "theme": "benches", + "imagery": "osm", + "language": "nl", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.450733, + 51.0860489 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T10:25:01Z", + "reviewed_features": [], + "create": 1, + "modify": 4, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116701187, + "host": "mapcomplete.osm.be", + "theme": "benches", + "answer": 5, + "imagery": "AGIV", + "language": "en", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.3615407, + 50.8655084 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T09:50:53Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0.00008107748580005, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116699921, + "host": "mapcomplete.osm.be", + "theme": "shops", + "imagery": "osm", + "language": "en", + "add-image": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.377382, + 50.866593949999995 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T09:42:19Z", + "reviewed_features": [], + "create": 5, + "modify": 11, + "delete": 0, + "area": 0.0000651249312400366, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116699600, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 28, + "imagery": "AGIV", + "language": "en", + "add-image": 6 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.36936375, + 50.8665814 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T08:38:40Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 2.61590000002776e-7, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116697144, + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 2, + "imagery": "osm", + "language": "nl" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.2033171, + 50.91468155 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-28T07:24:53Z", + "reviewed_features": [], + "create": 6, + "modify": 0, + "delete": 0, + "area": 0.00000126834246000256, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116694883, + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "answer": 3, + "imagery": "osm", + "language": "de", + "change_over_5000m": 6, + "change_within_25m": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 11.806203, + 48.01815485 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-28T01:40:12Z", + "reviewed_features": [], + "create": 0, + "modify": 8, + "delete": 0, + "area": 0.00000931708730001056, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116687884, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "etymology", + "answer": 11, + "imagery": "osm", + "language": "nl", + "change_within_5000m": 11 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2201764, + 51.19624135 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #http://127.0.0.1:8080/assets/themes/bicycle_rental/bicycle_rental.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-28T01:36:42Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 3.08587500003621e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116687814, + "host": "127.0.0.1:1234", + "theme": "http://127.0.0.1:8080/assets/themes/bicycle_rental/bicycle_rental.json", + "answer": 5, + "imagery": "osm", + "language": "nl", + "change_within_5000m": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2186476500000003, + 51.19689015 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "paunofu", + "uid": "13779940", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/wherethesidewalkshavenoname.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T00:25:54Z", + "reviewed_features": [], + "create": 0, + "modify": 7, + "delete": 0, + "area": 0.0000339124622400134, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116686782, + "host": "mapcomplete.osm.be", + "theme": "gh://yopaseopor/mcquests/master/wherethesidewalkshavenoname.json", + "answer": 9, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 0.11324745, + 38.8354727 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/xliving/xliving.github.io/main/OSM/amenity-recycling/recycling-organic/mapcomplete.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-27T23:09:14Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116685572, + "host": "mapcomplete.osm.be", + "theme": "gh://xliving/xliving.github.io/main/osm/amenity-recycling/recycling-organic/mapcomplete.json", + "answer": 1, + "imagery": "osm", + "language": "nl", + "change_within_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2227347, + 51.2227335 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Stinus_Clasius", + "uid": "1086503", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-27T21:27:21Z", + "reviewed_features": [], + "create": 121, + "modify": 11, + "delete": 0, + "area": 0.000242894437729942, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116683137, + "host": "mapcomplete.osm.be", + "move": 9, + "theme": "grb", + "import": 12, + "imagery": "osm", + "language": "nl", + "conflation": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.66370005, + 51.349533750000006 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-27T17:16:16Z", + "reviewed_features": [], + "create": 4, + "modify": 2, + "delete": 0, + "area": 0.0000286642542400079, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116675422, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 10, + "imagery": "AGIV", + "language": "nl", + "change_over_5000m": 4, + "change_within_5000m": 10 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.2352218, + 50.7343714 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-27T15:06:36Z", + "reviewed_features": [], + "create": 98, + "modify": 10, + "delete": 0, + "area": 0.0000121179275999887, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116670817, + "host": "mapcomplete.osm.be", + "move": 8, + "theme": "grb", + "import": 13, + "imagery": "osm", + "language": "en", + "conflation": 4, + "change_over_5000m": 11 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.2641247, + 50.15758685 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-27T13:14:47Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116666480, + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -72.1031394, + -36.6072722 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Oberfuzzi", + "uid": "14794109", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-27T09:11:23Z", + "reviewed_features": [], + "create": 4, + "modify": 5, + "delete": 0, + "area": 0.00000506531273999234, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116656004, + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 12.997329100000002, + 52.00868745 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-27T03:42:47Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 4.6682299996363e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116646267, + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 2, + "change_within_25m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -70.56981205, + -33.59239755 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-27T02:32:46Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116645369, + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 1, + "change_within_50m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -70.5697582, + -33.5927064 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-26T23:10:18Z", + "reviewed_features": [], + "create": 10, + "modify": 11, + "delete": 0, + "area": 3.01669379997268e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116642455, + "host": "mapcomplete.osm.be", + "move": 10, + "theme": "grb", + "import": 1, + "imagery": "osm", + "language": "nl", + "conflation": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.9440349999999995, + 51.17657525 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "nutsd02440", + "uid": "14948432", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-26T21:10:49Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116639191, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "surveillance", + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -82.73682, + 42.6813272 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "RobJN", + "uid": "411244", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #uk_addresses", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-26T21:03:45Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116638996, + "host": "mapcomplete.osm.be", + "theme": "uk_addresses", + "import": 1, + "imagery": "osm", + "language": "en", + "change_over_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.6050693, + 52.287768 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-26T18:04:09Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116632831, + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -70.5701008, + -33.5922799 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "StefDeGreef", + "uid": "1860737", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-26T16:54:11Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116630080, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 4, + "imagery": "CartoDB.Voyager", + "language": "fr", + "add-image": 1, + "change_over_5000m": 1, + "change_within_25m": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.4230499, + 50.8238691 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "sebkur", + "uid": "22917", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-26T13:55:23Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116623879, + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 14.7200229, + 51.951571 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "sebkur", + "uid": "22917", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-26T10:31:44Z", + "reviewed_features": [], + "create": 3, + "modify": 2, + "delete": 0, + "area": 0.0000024634888400043, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116617025, + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 14.712339, + 51.95319485 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "habi", + "uid": "15671", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-26T09:24:21Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116614780, + "host": "mapcomplete.osm.be", + "theme": "trees", + "answer": 3, + "imagery": "osm", + "language": "en", + "change_within_25m": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 7.4343939, + 46.942024 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-26T02:19:01Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 1.11591089992536e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116607298, + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -70.56955145, + -33.59287325 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-25T21:45:41Z", + "reviewed_features": [], + "create": 28, + "modify": 8, + "delete": 0, + "area": 5.42221380000553e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116602785, + "host": "mapcomplete.osm.be", + "move": 4, + "theme": "grb", + "answer": 3, + "import": 4, + "imagery": "osm", + "language": "nl", + "conflation": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.00652675, + 51.125120100000004 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "febutix", + "uid": "14929311", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-25T19:26:17Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 0.00000925620282999628, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116598894, + "host": "mapcomplete.osm.be", + "theme": "playgrounds", + "answer": 6, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 12.35655525, + 51.37578895 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-25T19:19:22Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116598670, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 4, + "imagery": "CartoDB.Voyager", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.4076949, + 50.9022336 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Dominic Z", + "uid": "56475", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-25T19:08:20Z", + "reviewed_features": [], + "create": 0, + "modify": 53, + "delete": 0, + "area": 0.000219547729519855, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116598337, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 69, + "imagery": "osm", + "language": "de", + "change_within_100m": 1, + "change_within_500m": 39, + "change_within_1000m": 23, + "change_within_5000m": 6 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 8.60475495, + 48.893630200000004 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Eric Royer", + "uid": "12137407", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-25T18:02:19Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 7.07552439995965e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116596008, + "host": "mapcomplete.osm.be", + "theme": "food", + "answer": 4, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.58998315, + 45.3685482 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #aed_brugge", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-25T14:06:53Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 0.00000751373524000127, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116587243, + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 4, + "imagery": "HDM_HOT", + "language": "nl" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.23648865, + 50.734142000000006 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "AgusQui", + "uid": "331218", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/AgusQui/MapCompleteRailway/main/Signals", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-25T13:47:08Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000159310590100029, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116586469, + "host": "mapcomplete.osm.be", + "theme": "gh://agusqui/mapcompleterailway/main/signals", + "answer": 2, + "imagery": "osm", + "language": "es", + "change_within_50m": 1, + "change_within_100m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -58.6564494, + -34.65655835 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Erin76", + "uid": "8982454", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #openwindpowermap", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-25T13:03:11Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116584832, + "host": "mapcomplete.osm.be", + "theme": "openwindpowermap", + "answer": 1, + "imagery": "CartoDB.Positron", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.0354918, + 50.8911597 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "AgusQui", + "uid": "331218", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/AgusQui/MapCompleteRailway/main/railway", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-25T12:48:50Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 1.30967999973559e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116584318, + "host": "mapcomplete.osm.be", + "theme": "gh://agusqui/mapcompleterailway/main/railway", + "answer": 12, + "imagery": "osm", + "language": "en", + "change_over_5000m": 7, + "change_within_25m": 1, + "change_within_50m": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -58.5300206, + -34.57497515 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "tiptracks", + "uid": "513840", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-25T07:59:25Z", + "reviewed_features": [], + "create": 0, + "modify": 56, + "delete": 0, + "area": 0.000173014503740079, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116573101, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 85, + "imagery": "osm", + "language": "nl" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 6.6628074999999995, + 53.08572045 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "omnibeet", + "uid": "10145113", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-25T02:20:20Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 9.57015000004629e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116565413, + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 2, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -121.92194605, + 37.79153255 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-alpha-2", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-25T02:16:00Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116565370, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "toerisme_vlaanderen", + "import": 1, + "imagery": "osm", + "language": "nl", + "change_over_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.3683341, + 51.3318233 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T22:32:21Z", + "reviewed_features": [], + "create": 43, + "modify": 107, + "delete": 13, + "area": 0.0000626125906600265, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116561818, + "host": "mapcomplete.osm.be", + "move": 91, + "theme": "grb", + "import": 6, + "imagery": "AGIV", + "language": "nl", + "conflation": 32, + "change_over_5000m": 6 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.9852492999999996, + 51.18475345 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-24T22:29:11Z", + "reviewed_features": [], + "create": 0, + "modify": 80, + "delete": 0, + "area": 0.00171805430148003, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116561728, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 111, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.5816227999999999, + 54.901477400000005 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T22:25:47Z", + "reviewed_features": [], + "create": 37, + "modify": 26, + "delete": 1, + "area": 0.00000953489481004836, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116561651, + "host": "mapcomplete.osm.be", + "move": 21, + "theme": "grb", + "import": 4, + "imagery": "osm", + "language": "nl", + "conflation": 10, + "change_over_5000m": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.98896845, + 51.182845549999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "tiptracks", + "uid": "513840", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T19:39:16Z", + "reviewed_features": [], + "create": 0, + "modify": 63, + "delete": 0, + "area": 0.0010201372895999, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116556239, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 87, + "imagery": "osm", + "language": "nl", + "change_within_500m": 13, + "change_within_1000m": 21, + "change_within_5000m": 53 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 6.688803999999999, + 53.07935005 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "RNoerr", + "uid": "14846404", + "editor": "MapComplete 0.14.3", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-24T15:21:25Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 2.37250000203903e-10, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116545513, + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 1, + "move:node/9444973776": "improve_accuracy" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -70.54325614999999, + -33.44285375 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "GBAB", + "uid": "3335899", + "editor": "MapComplete 0.14.3", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-24T14:52:19Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0.00000379038275000676, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116544521, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 1, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 20.13315905, + 46.242142650000005 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.3", + "comment": "Adding data with #MapComplete for theme #test", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T13:55:37Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116542643, + "host": "mapcomplete.osm.be", + "theme": "test", + "answer": 1, + "imagery": "cyclosm", + "language": "en", + "change_within_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -73.2476759, + -39.8157794 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.3", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T13:54:10Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.00000429368235000938, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116542587, + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 2, + "change_within_1000m": 1, + "change_within_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -73.24599225, + -39.814452849999995 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.3", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T12:25:58Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 8.71140299987843e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116539369, + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 3, + "change_over_5000m": 1, + "change_within_50m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -73.23293275, + -39.84288665 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.14.3", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T12:05:51Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116538531, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 4, + "imagery": "osm", + "language": "en", + "change_over_5000m": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.1241237, + 51.2236943 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.14.3", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T11:51:01Z", + "reviewed_features": [], + "create": 86, + "modify": 0, + "delete": 0, + "area": 4.16711839998382e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116537976, + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 7, + "imagery": "osm", + "language": "en", + "change_over_5000m": 7 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.12275175, + 51.221985399999994 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.14.3", + "comment": "Adding data with #MapComplete for theme #cyclestreets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T11:47:44Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0.00000342298308000794, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116537847, + "host": "mapcomplete.osm.be", + "theme": "cyclestreets", + "answer": 1, + "imagery": "osm", + "language": "en", + "change_over_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.1369779, + 51.164167649999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.0-alpha-2", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T10:55:34Z", + "reviewed_features": [], + "create": 36, + "modify": 155, + "delete": 4, + "area": 0.00000279522179998971, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116535808, + "host": "pietervdvn.github.io", + "move": 136, + "path": "mc/develop/", + "theme": "grb", + "import": 4, + "imagery": "AGIV", + "language": "nl", + "conflation": 38, + "change_over_5000m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.98761725, + 51.1804887 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.14.2", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-24T00:16:51Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116519085, + "host": "mapcomplete.osm.be", + "theme": "food", + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 13.5241815, + 49.2290904 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.14.2", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-24T00:13:50Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 1.00273440000094e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116519038, + "host": "mapcomplete.osm.be", + "theme": "shops", + "imagery": "osm", + "language": "en", + "add-image": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 13.521208999999999, + 49.2330217 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-23T22:57:30Z", + "reviewed_features": [], + "create": 2, + "modify": 3, + "delete": 0, + "area": 0.00000417210731000175, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116517846, + "host": "mapcomplete.osm.be", + "theme": "benches", + "imagery": "osm", + "language": "en", + "add-image": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 13.52364265, + 49.22973895 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "AgusQui", + "uid": "331218", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #cycle_infra", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-23T22:32:49Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116517297, + "host": "mapcomplete.osm.be", + "theme": "cycle_infra", + "answer": 2, + "imagery": "CartoDB.Voyager", + "language": "en", + "change_over_5000m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -58.6977179, + -34.6656855 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "AgusQui", + "uid": "331218", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/AgusQui/MapCompleteRailway/main/Signals", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-23T22:15:53Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116516938, + "host": "mapcomplete.osm.be", + "theme": "gh://agusqui/mapcompleterailway/main/signals", + "answer": 3, + "imagery": "osm", + "language": "es", + "change_within_25m": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -58.4244061, + -34.6110649 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Stinus_Clasius", + "uid": "1086503", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-23T21:08:30Z", + "reviewed_features": [], + "create": 21, + "modify": 21, + "delete": 0, + "area": 6.93011939996776e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116515172, + "host": "mapcomplete.osm.be", + "move": 16, + "theme": "grb", + "answer": 3, + "import": 3, + "imagery": "osm", + "language": "nl", + "conflation": 6 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.740266500000001, + 51.40866905 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-23T19:13:53Z", + "reviewed_features": [], + "create": 0, + "modify": 10, + "delete": 0, + "area": 3.2040799999588e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116511833, + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "osm", + "language": "en", + "add-image": 10, + "change_over_5000m": 8 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -73.2328015, + -39.8429688 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-23T16:26:27Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116506336, + "host": "mapcomplete.osm.be", + "theme": "benches", + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.1947952, + 51.1763651 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-23T16:17:53Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0.0000086998715999985, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116505950, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 2, + "imagery": "CartoDB.Voyager", + "language": "en", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.19529115, + 51.1779451 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-23T15:33:43Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 4.64379999998317e-9, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116504080, + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "toerisme_vlaanderen", + "answer": 5, + "imagery": "AGIV", + "language": "nl", + "change_over_5000m": 1, + "change_within_25m": 6, + "move:node/9442452056": "improve_accuracy" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.458398799999999, + 51.0217554 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "sebkur", + "uid": "22917", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-23T15:08:30Z", + "reviewed_features": [], + "create": 6, + "modify": 6, + "delete": 0, + "area": 0.0000192773456999972, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116503101, + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 14.62747115, + 51.7390956 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-23T14:25:12Z", + "reviewed_features": [], + "create": 1, + "modify": 7, + "delete": 1, + "area": 0.00000264645007000264, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116501463, + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 13, + "imagery": "AGIV", + "deletion": 1, + "language": "nl", + "change_over_5000m": 1, + "change_within_25m": 7, + "change_within_50m": 6, + "change_within_500m": 1, + "deletion:node/8572587333": "disused" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.45837735, + 51.02112345 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-23T09:46:08Z", + "reviewed_features": [], + "create": 0, + "modify": 51, + "delete": 0, + "area": 0.000589263945929979, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116491728, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 78, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.5692373499999999, + 54.88496725 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "StefDeGreef", + "uid": "1860737", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-23T09:21:51Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 6.53219999857112e-10, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116491069, + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "cyclofix", + "answer": 3, + "imagery": "CartoDB.Voyager", + "language": "fr", + "add-image": 1, + "change_within_25m": 5, + "move:node/7634798362": "improve_accuracy" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.4576957, + 50.961111450000004 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Mich4711", + "uid": "12764098", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #cycle_infra", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-23T07:03:23Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 0.000115274098339935, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116488734, + "host": "mapcomplete.osm.be", + "theme": "cycle_infra", + "answer": 12, + "imagery": "CartoDB.Voyager", + "language": "nl" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.8124763999999995, + 51.09496155 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/seppesantens/MapComplete-Themes/main/cyclenodenetworks/cyclenodenetworks.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-22T19:30:09Z", + "reviewed_features": [], + "create": 0, + "modify": 10, + "delete": 0, + "area": 0.00315847708793968, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116477825, + "host": "mapcomplete.osm.be", + "theme": "gh://seppesantens/mapcomplete-themes/main/cyclenodenetworks/cyclenodenetworks.json", + "answer": 10, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.36666135, + 51.1008506 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #nature", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-22T19:26:42Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.00000626235553999491, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116477778, + "host": "mapcomplete.osm.be", + "theme": "nature", + "imagery": "osm", + "language": "nl", + "add-image": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.31298025, + 51.1065399 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #postboxes", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-22T19:22:38Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116477697, + "host": "mapcomplete.osm.be", + "theme": "postboxes", + "imagery": "CartoDB.Voyager", + "language": "en", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.3195172, + 51.1152861 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #artwork", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-22T19:17:14Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116477554, + "host": "mapcomplete.osm.be", + "theme": "artwork", + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.3110784, + 51.1131436 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-alpha-1", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-22T19:17:02Z", + "reviewed_features": [], + "create": 2, + "modify": 9, + "delete": 0, + "area": 0.00000718946479999856, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116477552, + "host": "pietervdvn.github.io", + "move": 1, + "path": "mc/develop/", + "theme": "food", + "answer": 10, + "imagery": "osm", + "language": "en", + "add-image": 1, + "change_over_5000m": 2, + "change_within_25m": 12, + "move:node/9439916874": "improve_accuracy" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.1239862, + 51.2208381 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-alpha-1", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-22T19:13:45Z", + "reviewed_features": [], + "create": 9, + "modify": 5, + "delete": 0, + "area": 1.15958440000032e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116477462, + "host": "pietervdvn.github.io", + "move": 4, + "path": "mc/develop/", + "theme": "grb", + "import": 1, + "imagery": "osm", + "language": "en", + "conflation": 2, + "change_within_50m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.1229162, + 51.2224231 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/seppesantens/mapcomplete-themes/main/walkingnodenetworks/walkingnodenetworks.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-22T18:16:40Z", + "reviewed_features": [], + "create": 0, + "modify": 19, + "delete": 0, + "area": 0.000248568796900044, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116475963, + "host": "mapcomplete.osm.be", + "theme": "gh://seppesantens/mapcomplete-themes/main/walkingnodenetworks/walkingnodenetworks.json", + "answer": 15, + "imagery": "osm", + "language": "en", + "add-image": 6 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.31706595, + 51.1103648 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-alpha-1", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-22T17:34:40Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116474641, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "food", + "answer": 5, + "imagery": "osm", + "language": "en", + "change_over_5000m": 1, + "change_within_25m": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.1227752, + 51.2223189 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-22T17:13:40Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116473925, + "host": "mapcomplete.osm.be", + "theme": "benches", + "answer": 1, + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.3541679, + 51.1054843 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Frans_Napaters", + "uid": "3574538", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 2, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-22T10:47:57Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116461006, + "host": "mapcomplete.osm.be", + "theme": "aed", + "imagery": "osm", + "language": "nl" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.876773, + 51.0710463 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "LySioS", + "uid": "11579673", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-22T08:08:25Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116457152, + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 3, + "imagery": "osm", + "language": "fr", + "change_within_5000m": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.941156, + 42.702383 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-22T03:04:55Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116453646, + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 130.5694434, + 31.765696 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "LySioS", + "uid": "11579673", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-21T22:01:27Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116449226, + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "imagery": "osm", + "language": "fr" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.941156, + 42.702383 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-21T20:33:28Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116446646, + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "osm", + "language": "en", + "add-image": 1, + "change_within_500m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -70.688579, + -33.544727 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Eric Royer", + "uid": "12137407", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-21T18:14:59Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.00000714259083999707, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116442724, + "host": "mapcomplete.osm.be", + "theme": "food", + "answer": 2, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.5915541, + 45.3667009 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Casi1980", + "uid": "13989376", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-21T16:13:53Z", + "reviewed_features": [], + "create": 5, + "modify": 0, + "delete": 0, + "area": 0.0000342879884000059, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116438284, + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 14.16730235, + 52.4009305 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Redssu", + "uid": "13639663", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #parkings", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-21T15:44:01Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 1, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116437063, + "host": "mapcomplete.osm.be", + "theme": "parkings", + "imagery": "Geoportal2-PL-aerial_image_WMTS", + "deletion": 1, + "language": "en", + "deletion:node/9437251385": "testing point" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 17.402716, + 52.0871765 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-21T13:19:01Z", + "reviewed_features": [], + "create": 2, + "modify": 0, + "delete": 0, + "area": 2.99949870002994e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116431524, + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "imagery": "osm", + "language": "de", + "change_over_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 11.876745750000001, + 47.98920365 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #campersite", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-21T08:41:49Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 2.98837170000368e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116418875, + "host": "mapcomplete.osm.be", + "theme": "campersite", + "answer": 4, + "imagery": "osm", + "language": "en", + "add-image": 2, + "change_within_25m": 6 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.93470065, + 47.51954345 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-21T08:04:56Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116417325, + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "imagery": "osm", + "language": "de", + "change_over_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 11.7917955, + 48.0038767 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Frans_Napaters", + "uid": "3574538", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-21T07:45:01Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116416417, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 5, + "imagery": "CartoDB.Voyager", + "language": "nl" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.8407651, + 51.1844879 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-alpha", + "comment": "Adding data with #MapComplete for theme #entrances", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-21T02:38:05Z", + "reviewed_features": [], + "create": 2, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116409050, + "host": "127.0.0.1:1234", + "theme": "entrances", + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2211101, + 51.2165519 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bponkishore", + "uid": "14062769", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-20T14:20:21Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000010727936059982, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116387905, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 2, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 79.48586145, + 11.609596400000001 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bponkishore", + "uid": "14062769", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-20T14:15:01Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 6.74894049995624e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116387718, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 1, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 79.49300495, + 11.61079045 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bponkishore", + "uid": "14062769", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-20T14:11:53Z", + "reviewed_features": [], + "create": 0, + "modify": 7, + "delete": 0, + "area": 0.0000521909006399796, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116387593, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 8, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 79.4919115, + 11.6108397 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bponkishore", + "uid": "14062769", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-20T13:56:54Z", + "reviewed_features": [], + "create": 0, + "modify": 10, + "delete": 0, + "area": 0.000153664163840007, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116387099, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 10, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 79.4853311, + 11.6160407 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Frans_Napaters", + "uid": "3574538", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-20T10:48:08Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116379703, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "imagery": "CartoDB.Voyager", + "language": "nl", + "change_over_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.8407651, + 51.1844879 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Camilo Nuñez Castro", + "uid": "5143819", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-20T10:23:50Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0.0153640376684809, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116378559, + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "answer": 3, + "imagery": "HDM_HOT", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -71.1644866, + -33.527211300000005 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-20T10:04:57Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116377738, + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 2, + "imagery": "osm", + "language": "en", + "change_within_25m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.9138955, + 43.557006 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-20T10:04:52Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116377734, + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 4, + "imagery": "osm", + "language": "en", + "change_over_5000m": 1, + "change_within_25m": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.9138955, + 43.557006 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Frans_Napaters", + "uid": "3574538", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #waste_basket", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-20T09:38:11Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116376644, + "host": "mapcomplete.osm.be", + "theme": "waste_basket", + "answer": 2, + "imagery": "osm", + "language": "nl", + "change_over_5000m": 1, + "change_within_50m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.8438334, + 51.1846001 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Frans_Napaters", + "uid": "3574538", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-20T09:26:32Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116376152, + "host": "mapcomplete.osm.be", + "theme": "benches", + "imagery": "osm", + "language": "nl", + "add-image": 1, + "change_within_50m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.8413405, + 51.1844432 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Welshie", + "uid": "508", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #uk_addresses", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T22:24:42Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 2.35348200000993e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116361219, + "host": "mapcomplete.osm.be", + "theme": "uk_addresses", + "answer": 2, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.6997616, + 51.551828150000006 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-19T21:27:48Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.00000219359049998863, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116359563, + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 3, + "change_within_1000m": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -73.2489349, + -39.81135755 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Eric Royer", + "uid": "12137407", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T19:46:59Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 1.11867210000184e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116356310, + "host": "mapcomplete.osm.be", + "theme": "food", + "answer": 4, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.5919811500000005, + 45.359122850000006 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "spelledwrongdotuk", + "uid": "12198029", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T18:01:59Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 4.04546999997997e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116353102, + "host": "mapcomplete.osm.be", + "theme": "shops", + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -2.4146299, + 51.54057515 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #observation_towers", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T16:47:40Z", + "reviewed_features": [], + "create": 0, + "modify": 19, + "delete": 0, + "area": 0.00134167138663015, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116350440, + "host": "mapcomplete.osm.be", + "theme": "observation_towers", + "answer": 22, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -60.717606450000005, + -32.95491625 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #entrances", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T16:43:12Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116350272, + "host": "mapcomplete.osm.be", + "theme": "entrances", + "answer": 2, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -60.8128564, + -32.9191204 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #cafes_and_pubs", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T16:38:58Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 2.21421599998492e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116350132, + "host": "mapcomplete.osm.be", + "theme": "cafes_and_pubs", + "answer": 3, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -60.81164535, + -32.9182597 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T16:35:53Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116350004, + "host": "mapcomplete.osm.be", + "theme": "benches", + "answer": 1, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -60.8075963, + -32.9118752 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T16:30:58Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116349812, + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 2, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -60.8102045, + -32.9180053 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #charging_stations", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T16:24:53Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000201229218709971, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116349573, + "host": "mapcomplete.osm.be", + "theme": "charging_stations", + "answer": 3, + "imagery": "CartoDB.Voyager", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -60.811818349999996, + -32.92832065 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #campersite", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-19T15:01:58Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116346307, + "host": "mapcomplete.osm.be", + "theme": "campersite", + "answer": 4, + "imagery": "osm", + "language": "en", + "change_over_5000m": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.9968427, + 42.8927249 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "WinstonSmith", + "uid": "36030", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-19T13:55:39Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 3.01599999994786e-10, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116343902, + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "cyclofix", + "answer": 5, + "imagery": "CartoDB.Voyager", + "language": "en", + "change_over_5000m": 1, + "change_within_25m": 6, + "move:node/9431075016": "improve_accuracy" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 11.39543145, + 44.5057338 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T13:50:57Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116343730, + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -71.6127057, + -33.5828149 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-19T10:45:00Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116336052, + "host": "mapcomplete.osm.be", + "theme": "shops", + "answer": 2, + "imagery": "osm", + "language": "en", + "change_within_25m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.6120027, + 42.3854559 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-19T10:35:19Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116335626, + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 6, + "imagery": "osm", + "language": "en", + "add-image": 1, + "change_over_5000m": 1, + "change_within_50m": 7 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.6151991, + 42.3833737 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #campersite", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-19T10:28:03Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116335294, + "host": "mapcomplete.osm.be", + "theme": "campersite", + "answer": 5, + "imagery": "osm", + "language": "en", + "add-image": 1, + "change_over_5000m": 1, + "change_within_25m": 6 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.6160606, + 42.3832823 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-19T07:10:54Z", + "reviewed_features": [], + "create": 6, + "modify": 0, + "delete": 0, + "area": 0.00000504208404000317, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116327686, + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "imagery": "osm", + "language": "de", + "change_over_5000m": 6 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 11.7979062, + 47.9973627 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "c_cesar", + "uid": "12078598", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #street_lighting", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T02:56:44Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000101179301879975, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116322023, + "host": "mapcomplete.osm.be", + "theme": "street_lighting", + "answer": 2, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -44.90216035, + -20.1514238 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-18T20:28:48Z", + "reviewed_features": [], + "create": 2, + "modify": 16, + "delete": 0, + "area": 0.0352407458746197, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116315097, + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 23, + "imagery": "osm", + "language": "nl" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.315534700000001, + 50.98703155 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "InsertUser", + "uid": "89098", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #street_lighting", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-18T18:02:57Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0.000014509771999975, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116310179, + "host": "mapcomplete.osm.be", + "theme": "street_lighting", + "answer": 1, + "imagery": "osm", + "language": "en", + "change_within_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -78.6171767, + 26.522722299999998 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Brandoberinspektor Erdmann", + "uid": "13364061", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-18T17:12:40Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116308236, + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 13.8111556, + 52.8245416 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Emilius123", + "uid": "13874704", + "editor": "MapComplete 0.14.0", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-18T16:54:19Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116307538, + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 3, + "imagery": "osm", + "language": "de" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 8.31451, + 49.6111974 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "H@mlet", + "uid": "691314", + "editor": "MapComplete 0.14.0", + "comment": "Adding data with #MapComplete for theme #maps", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-18T16:51:45Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 1, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116307441, + "host": "mapcomplete.osm.be", + "theme": "maps", + "answer": 2, + "imagery": "osm", + "deletion": 1, + "language": "en", + "deletion:node/9428929578": "testing point" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.6632915, + 48.2497405 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "StefDeGreef", + "uid": "1860737", + "editor": "MapComplete 0.14.0", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-18T16:39:34Z", + "reviewed_features": [], + "create": 1, + "modify": 6, + "delete": 1, + "area": 1.13525999902947e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116307009, + "host": "mapcomplete.osm.be", + "move": 2, + "theme": "cyclofix", + "answer": 7, + "imagery": "CartoDB.Voyager", + "deletion": 1, + "language": "fr", + "add-image": 2, + "change_over_5000m": 1, + "change_within_25m": 12, + "move:node/9428878139": "improve_accuracy", + "deletion:node/2895132452": "mauvaise catégorie" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.41250475, + 50.7928359 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.0", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-18T15:01:18Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116302996, + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -71.60132, + -33.0506821 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "redsteakraw", + "uid": "139856", + "editor": "MapComplete 0.14.0", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-18T14:39:27Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116302086, + "host": "mapcomplete.osm.be", + "theme": "shops", + "imagery": "osm", + "language": "en", + "change_over_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -73.2254687, + 41.1775402 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.14.0", + "comment": "Adding data with #MapComplete for theme #charging_stations", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-18T14:12:49Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.0000156636832000166, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116301008, + "host": "mapcomplete.osm.be", + "theme": "charging_stations", + "answer": 2, + "imagery": "CartoDB.Voyager", + "language": "en", + "change_within_5000m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.1997808, + 51.2480584 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.14.0", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-18T12:30:33Z", + "reviewed_features": [], + "create": 493, + "modify": 24, + "delete": 0, + "area": 0.000123694740399945, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116297063, + "host": "mapcomplete.osm.be", + "move": 12, + "theme": "grb", + "answer": 12, + "import": 70, + "imagery": "osm", + "language": "nl", + "conflation": 6, + "change_over_5000m": 31 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.4259625499999995, + 50.9443591 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Oberfuzzi", + "uid": "14794109", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-18T09:11:57Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116288326, + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 12.9979688, + 52.0042014 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Alexmol", + "uid": "347293", + "editor": "MapComplete 0.14.0", + "comment": "Adding data with #MapComplete for theme #charging_stations", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-18T08:18:34Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 4.42062000027127e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116286179, + "host": "mapcomplete.osm.be", + "theme": "charging_stations", + "answer": 3, + "imagery": "CartoDB.Voyager", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -7.997677400000001, + 37.097929050000005 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.14.0", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-18T07:26:13Z", + "reviewed_features": [], + "create": 8, + "modify": 0, + "delete": 0, + "area": 0.0000170105570800058, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116284120, + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "imagery": "osm", + "language": "de", + "change_over_5000m": 8 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 11.7947104, + 47.9985517 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.0", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-18T00:26:29Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 2.4180712000211e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116276269, + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 10 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -72.9844339, + -41.313438500000004 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-17T21:19:15Z", + "reviewed_features": [], + "create": 0, + "modify": 13, + "delete": 0, + "area": 0.0000351928768799252, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116272308, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 16, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -60.817341400000004, + -32.915705599999995 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #test", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-17T19:49:35Z", + "reviewed_features": [], + "create": 0, + "modify": 9, + "delete": 0, + "area": 3.24362679983325e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116269302, + "host": "mapcomplete.osm.be", + "theme": "test", + "answer": 1, + "imagery": "cyclosm", + "language": "en", + "add-image": 8 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -73.232737, + -39.84197315 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #cycle_infra", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-17T18:04:59Z", + "reviewed_features": [], + "create": 0, + "modify": 18, + "delete": 0, + "area": 0.0000115978500000235, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116265873, + "host": "mapcomplete.osm.be", + "theme": "cycle_infra", + "answer": 25, + "imagery": "CartoDB.Voyager", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -60.80993265, + -32.9171347 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-17T17:54:01Z", + "reviewed_features": [], + "create": 0, + "modify": 24, + "delete": 0, + "area": 0.000120456413900002, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116265476, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 47, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -60.81834605, + -32.9249174 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-17T16:06:04Z", + "reviewed_features": [], + "create": 2, + "modify": 3, + "delete": 0, + "area": 2.33004870001592e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116260926, + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 5, + "imagery": "osm", + "language": "en", + "add-image": 1, + "change_within_25m": 8 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.93089525, + 41.71797225 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-17T15:22:06Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116259129, + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 7, + "imagery": "PNOA-Spain-TMS", + "language": "en", + "change_over_5000m": 1, + "change_within_25m": 7 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.9338675, + 41.7155799 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-17T15:05:38Z", + "reviewed_features": [], + "create": 0, + "modify": 11, + "delete": 0, + "area": 0.0000277241270199868, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116258551, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 19, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -60.80894055, + -32.9186193 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-17T14:46:27Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116257758, + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 4, + "imagery": "osm", + "language": "en", + "add-image": 1, + "change_within_25m": 3, + "change_within_50m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.9332367, + 41.7201447 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-17T12:46:23Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116253168, + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 1, + "imagery": "PNOA-Spain-TMS", + "language": "en", + "change_within_25m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.7877593, + 41.6692173 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.14.0-rc-1", + "comment": "Adding data with #MapComplete for theme #fritures", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-17T12:35:35Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 1.91868000000708e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116252714, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "fritures", + "answer": 7, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2092487, + 51.187981 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "whatismoss", + "uid": "8427311", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-17T12:12:53Z", + "reviewed_features": [], + "create": 0, + "modify": 19, + "delete": 0, + "area": 0.0000992712495500068, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116251861, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 29, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.05608345, + 50.64385105 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Stinus_Clasius", + "uid": "1086503", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-17T10:29:47Z", + "reviewed_features": [], + "create": 31, + "modify": 0, + "delete": 0, + "area": 7.93330560003959e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116247427, + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 4, + "imagery": "osm", + "language": "nl" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.738035, + 51.3890941 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "divyaboomi", + "uid": "14872477", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-17T09:48:47Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116245840, + "host": "mapcomplete.osm.be", + "theme": "aed", + "imagery": "osm", + "language": "en", + "change_over_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 78.1197721, + 9.9251855 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #campersite", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-17T09:08:04Z", + "reviewed_features": [], + "create": 2, + "modify": 6, + "delete": 0, + "area": 0.305596821364734, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116244201, + "host": "mapcomplete.osm.be", + "theme": "campersite", + "answer": 12, + "imagery": "osm", + "language": "en", + "add-image": 1, + "change_over_5000m": 3, + "change_within_25m": 4, + "change_within_50m": 8 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.17652725, + 41.47241845 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "sanchi", + "uid": "170106", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-17T04:53:31Z", + "reviewed_features": [], + "create": 0, + "modify": 20, + "delete": 0, + "area": 0.000192742500800013, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116236409, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 37, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -5.671200300000001, + 40.970611399999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "sanchi", + "uid": "170106", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-16T23:24:25Z", + "reviewed_features": [], + "create": 0, + "modify": 9, + "delete": 0, + "area": 0.0000141224073900198, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116231990, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 24, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -5.67732555, + 40.97097975 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-16T22:06:07Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116230459, + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 1, + "change_within_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -72.9840192, + -41.3133377 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-16T21:05:16Z", + "reviewed_features": [], + "create": 900, + "modify": 1, + "delete": 0, + "area": 0.0000688753578000003, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116229030, + "host": "mapcomplete.osm.be", + "theme": "grb", + "answer": 1, + "import": 88, + "imagery": "AGIV", + "language": "nl" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.429169399999999, + 50.94341609999999 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Angel Spotorno", + "uid": "680374", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-16T20:15:16Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116227831, + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -70.6123594, + -33.4588056 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #campersite", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-16T16:48:16Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 6.40518009999607e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116221498, + "host": "mapcomplete.osm.be", + "theme": "campersite", + "answer": 7, + "imagery": "osm", + "language": "en", + "change_over_5000m": 7 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.68912875, + 41.62233455 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "ClarissaWAM", + "uid": "13745921", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-16T16:23:38Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116220610, + "host": "mapcomplete.osm.be", + "theme": "bookcases", + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.9887022, + 49.998414 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "ClarissaWAM", + "uid": "13745921", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-16T16:21:19Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116220534, + "host": "mapcomplete.osm.be", + "theme": "bookcases", + "answer": 1, + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.9887022, + 49.998414 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-16T15:53:58Z", + "reviewed_features": [], + "create": 9, + "modify": 0, + "delete": 0, + "area": 0.000722147582880123, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116219481, + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "answer": 2, + "imagery": "Mapbox", + "language": "de", + "change_over_5000m": 9, + "change_within_25m": 1, + "change_within_50m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 11.825623499999999, + 48.0152577 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "RobJN", + "uid": "411244", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #uk_addresses", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-16T14:41:15Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116216583, + "host": "mapcomplete.osm.be", + "theme": "uk_addresses", + "import": 1, + "imagery": "osm", + "language": "en", + "change_over_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.6050693, + 52.287768 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-16T14:35:24Z", + "reviewed_features": [], + "create": 470, + "modify": 100, + "delete": 0, + "area": 0.0943456521998089, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116216334, + "host": "mapcomplete.osm.be", + "move": 98, + "theme": "grb", + "import": 47, + "language": "nl", + "conflation": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.21355055, + 51.051660749999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-16T11:28:10Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116210098, + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 5, + "imagery": "osm", + "language": "nl", + "change_within_1000m": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.0117371, + 51.1267423 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "StefDeGreef", + "uid": "1860737", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-16T06:06:30Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 0.00000808506228000206, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116204074, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 5, + "imagery": "CartoDB.Voyager", + "language": "fr", + "change_within_5000m": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.419692850000001, + 50.7958663 + ] + } + }, { "type": "Feature", "properties": { @@ -304224,6 +313472,14611 @@ 51.0704913 ] } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "paunofu", + "uid": "13779940", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #policia", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-16T02:04:06Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 2.89347500000227e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117457096, + "host": "mapcomplete.osm.be", + "theme": "policia", + "answer": 1, + "locale": "es", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 0.01627835, + 38.84951305 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "hortacalaf", + "uid": "14495457", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T22:26:09Z", + "reviewed_features": [], + "create": 0, + "modify": 9, + "delete": 0, + "area": 0.000013911295680006, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117453659, + "host": "mapcomplete.osm.be", + "theme": "gh://yopaseopor/mcquests/master/libraries.json", + "answer": 17, + "locale": "es", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.7230294000000002, + 41.2215123 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "yopaseopor", + "uid": "500572", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #policia", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T21:41:05Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 3.62565959998223e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117452493, + "host": "mapcomplete.osm.be", + "theme": "policia", + "answer": 1, + "locale": "es", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -0.12545395, + 38.9246067 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T19:49:54Z", + "reviewed_features": [], + "create": 0, + "modify": 13, + "delete": 0, + "area": 0.0000445046332799785, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117449421, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 14, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.5868946, + 54.699118999999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T19:37:59Z", + "reviewed_features": [], + "create": 34, + "modify": 96, + "delete": 0, + "area": 0.00187154913067983, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117449082, + "host": "mapcomplete.osm.be", + "move": 86, + "theme": "grb", + "answer": 4, + "import": 3, + "locale": "nl", + "imagery": "osm", + "conflation": 18 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.01026755, + 51.1412806 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 2, + "name": "possible import" + }, + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "JensTi", + "uid": "57212", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T19:10:19Z", + "reviewed_features": [], + "create": 2792, + "modify": 9, + "delete": 0, + "area": 0.000427762375040024, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117448329, + "host": "mapcomplete.osm.be", + "theme": "grb", + "answer": 9, + "import": 339, + "locale": "nl", + "imagery": "AGIVFlandersGRB" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.0863391, + 50.7549276 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Moisès", + "uid": "12884230", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T18:08:40Z", + "reviewed_features": [], + "create": 0, + "modify": 9, + "delete": 0, + "area": 0.00382693492044069, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117446527, + "host": "mapcomplete.osm.be", + "theme": "gh://yopaseopor/mcquests/master/libraries.json", + "answer": 11, + "locale": "ca", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.1575371, + 41.5192789 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "wanderruderer", + "uid": "352135", + "editor": "MapComplete 0.16.0", + "comment": "Adding data with #MapComplete for theme #cycle_infra", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T15:36:20Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117441334, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cycle_infra", + "answer": 1, + "locale": "de", + "imagery": "CartoDB.Voyager", + "change_within_50m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 8.0500179, + 52.2456512 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Lenezir", + "uid": "299539", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T15:19:16Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 0.00000513138213000518, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117440772, + "host": "mapcomplete.osm.be", + "theme": "bookcases", + "answer": 6, + "locale": "fr", + "imagery": "osm", + "change_within_5000m": 6 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 6.63879255, + 43.44335065 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "micjoe", + "uid": "15079427", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T14:42:15Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117439419, + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "EsriWorldImagery", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 11.7883325, + 53.0267663 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T14:15:27Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117438314, + "host": "mapcomplete.osm.be", + "theme": "shops", + "answer": 1, + "locale": "en", + "imagery": "osm", + "change_within_25m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.7182358, + 51.0537752 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "paunofu", + "uid": "13779940", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #policia", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T13:38:32Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 0.0294471418661003, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117436964, + "host": "mapcomplete.osm.be", + "theme": "policia", + "answer": 5, + "locale": "es", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -0.04458525, + 38.745986099999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T13:28:18Z", + "reviewed_features": [], + "create": 7, + "modify": 17, + "delete": 0, + "area": 0.00000435760623999802, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117436594, + "host": "mapcomplete.osm.be", + "move": 16, + "theme": "grb", + "import": 1, + "locale": "nl", + "imagery": "osm", + "conflation": 2, + "change_over_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.9947672, + 51.218186 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T13:21:07Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117436337, + "host": "mapcomplete.osm.be", + "theme": "toilets", + "locale": "en", + "imagery": "osm", + "change_over_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.7251733, + 51.0537177 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.16.0", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T13:06:12Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117435799, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "shops", + "answer": 1, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.7041469, + 51.0508861 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "ecabre4", + "uid": "554769", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #street_lighting", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T13:05:22Z", + "reviewed_features": [], + "create": 0, + "modify": 22, + "delete": 0, + "area": 0.0000078264270299983, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117435769, + "host": "mapcomplete.osm.be", + "theme": "street_lighting", + "answer": 23, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 0.90875515, + 41.13772655 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "ecabre4", + "uid": "554769", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #sport_pitches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T13:02:31Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000214938428550002, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117435681, + "host": "mapcomplete.osm.be", + "theme": "sport_pitches", + "answer": 4, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 0.91776795, + 41.14022375 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "ecabre4", + "uid": "554769", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T12:53:47Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.00000185412135999829, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117435353, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 0.9093435, + 41.1382068 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.16.0", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T12:48:52Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117435150, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "shops", + "answer": 1, + "locale": "en", + "imagery": "osm", + "add-image": 1, + "change_within_25m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.7041469, + 51.0508861 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 42, + "name": "Invalid tag modification" + } + ], + "tags": [], + "features": [ + { + "url": "node-7113286712", + "name": "Font Vella", + "osm_id": 7113286712, + "reasons": [ + 42 + ], + "version": 4, + "primary_tags": { + "amenity": "drinking_water" + } + } + ], + "user": "ecabre4", + "uid": "554769", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #drinking_water", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T12:46:06Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 0.0000027295635899964, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117435015, + "host": "mapcomplete.osm.be", + "theme": "drinking_water", + "answer": 5, + "locale": "en", + "imagery": "CartoDB.Voyager" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 0.9091858500000001, + 41.13696105 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "ecabre4", + "uid": "554769", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #cafes_and_pubs", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T12:44:00Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117434904, + "host": "mapcomplete.osm.be", + "theme": "cafes_and_pubs", + "answer": 3, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 0.9090906, + 41.1383502 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "ecabre4", + "uid": "554769", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T12:40:18Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117434769, + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 4, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.0921566, + 41.3943477 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T11:33:46Z", + "reviewed_features": [], + "create": 0, + "modify": 18, + "delete": 0, + "area": 0.0000732996494399763, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117432037, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 20, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.3341677999999995, + 51.126763999999994 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Oberfuzzi", + "uid": "14794109", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T10:39:12Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117429886, + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 12.9978749, + 52.0178661 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T10:01:35Z", + "reviewed_features": [], + "create": 0, + "modify": 26, + "delete": 0, + "area": 0.000684767872619997, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117428420, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 29, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.396433699999999, + 51.09445185 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "JLZIMMERMANN", + "uid": "188930", + "editor": "MapComplete 0.16.0", + "comment": "Adding data with #MapComplete for theme #entrances", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T09:43:51Z", + "reviewed_features": [], + "create": 0, + "modify": 29, + "delete": 0, + "area": 0.00003797131584, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117427613, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "entrances", + "answer": 22, + "locale": "en", + "imagery": "osm", + "add-image": 10, + "change_within_25m": 32 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.8097481, + 44.1349809 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "benetj", + "uid": "2353661", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T09:35:09Z", + "reviewed_features": [], + "create": 0, + "modify": 27, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117427236, + "host": "mapcomplete.osm.be", + "theme": "gh://yopaseopor/mcquests/master/libraries.json", + "answer": 32, + "locale": "ca", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.7781999, + 39.6470007 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "JLZIMMERMANN", + "uid": "188930", + "editor": "MapComplete 0.16.0", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T09:33:04Z", + "reviewed_features": [], + "create": 1, + "modify": 4, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117427140, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "benches", + "answer": 6, + "locale": "fr", + "imagery": "osm", + "add-image": 1, + "change_over_5000m": 1, + "change_within_25m": 7 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.8198981, + 44.1290616 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "wanderruderer", + "uid": "352135", + "editor": "MapComplete 0.16.0", + "comment": "Adding data with #MapComplete for theme #cycle_infra", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T09:19:54Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117426633, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cycle_infra", + "answer": 3, + "locale": "de", + "imagery": "CartoDB.Voyager" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 8.0500179, + 52.2456512 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Moisès", + "uid": "12884230", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T09:18:45Z", + "reviewed_features": [], + "create": 0, + "modify": 20, + "delete": 0, + "area": 0.000428524569870031, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117426593, + "host": "mapcomplete.osm.be", + "theme": "gh://yopaseopor/mcquests/master/libraries.json", + "answer": 30, + "locale": "ca", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.22094855, + 41.52830585 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "annuel", + "uid": "14551226", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #wandelknooppunten", + "comments_count": 1, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T09:14:01Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117426389, + "host": "mapcomplete.osm.be", + "theme": "wandelknooppunten", + "answer": 1, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.5878403, + 52.0747411 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "ecabre4", + "uid": "554769", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T09:07:04Z", + "reviewed_features": [], + "create": 3, + "modify": 4, + "delete": 0, + "area": 2.41250400001165e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117426122, + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 6, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 0.9091758, + 41.137894700000004 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "LFFMH", + "uid": "14449743", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T08:43:42Z", + "reviewed_features": [], + "create": 2, + "modify": 0, + "delete": 0, + "area": 0.0000254036475000084, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117425181, + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 14.00924475, + 52.0909329 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "ecabre4", + "uid": "554769", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T08:33:38Z", + "reviewed_features": [], + "create": 0, + "modify": 8, + "delete": 0, + "area": 5.45183650003151e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117424772, + "host": "mapcomplete.osm.be", + "theme": "benches", + "answer": 8, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 0.90877025, + 41.13826855 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "anticamfoix", + "uid": "15042359", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T08:19:24Z", + "reviewed_features": [], + "create": 4, + "modify": 5, + "delete": 0, + "area": 0.0000153758587599979, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117424226, + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 9, + "locale": "fr", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.6070158, + 42.965237 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "brust84", + "uid": "1225756", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T07:23:07Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117422010, + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "answer": 1, + "locale": "en", + "imagery": "GEOSN-DOP-RGB", + "change_over_5000m": 1, + "change_within_25m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 13.6825596, + 51.060074 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pol Rojas", + "uid": "12632106", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T07:23:03Z", + "reviewed_features": [], + "create": 0, + "modify": 11, + "delete": 0, + "area": 4.4071708999864e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117422006, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 13, + "locale": "en", + "imagery": "CartoDB.Voyager" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.17336835, + 41.39285865 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "benetj", + "uid": "2353661", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T07:10:38Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117421559, + "host": "mapcomplete.osm.be", + "theme": "food", + "answer": 1, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.7717385, + 39.6509155 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joseph83", + "uid": "10732704", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #street_lighting", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T07:06:30Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 0.0000496582992000451, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117421407, + "host": "mapcomplete.osm.be", + "theme": "street_lighting", + "answer": 6, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.8341679, + 44.0602011 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pol Rojas", + "uid": "12632106", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T07:04:54Z", + "reviewed_features": [], + "create": 0, + "modify": 14, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117421351, + "host": "mapcomplete.osm.be", + "theme": "gh://yopaseopor/mcquests/master/libraries.json", + "answer": 18, + "locale": "ca", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.1197808, + 41.3858675 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "paunofu", + "uid": "13779940", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #Comisaria", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T00:20:12Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 1.83835319999886e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117414634, + "host": "mapcomplete.osm.be", + "theme": "comisaria", + "answer": 1, + "locale": "ca", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 0.0875193, + 38.836771049999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T00:01:13Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0.00000398958095998377, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117414389, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 2, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.0002554, + 51.163843299999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "paunofu", + "uid": "13779940", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T23:23:25Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117413850, + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "answer": 3, + "locale": "en", + "imagery": "PNOA-Spain-TMS" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 0.1163489, + 38.8326918 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "paunofu", + "uid": "13779940", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T22:48:53Z", + "reviewed_features": [], + "create": 0, + "modify": 24, + "delete": 0, + "area": 0.00191815785856944, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117413266, + "host": "mapcomplete.osm.be", + "theme": "gh://yopaseopor/mcquests/master/libraries.json", + "answer": 32, + "locale": "es", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 0.051675950000000005, + 38.83136675 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T22:09:13Z", + "reviewed_features": [], + "create": 0, + "modify": 19, + "delete": 0, + "area": 0.00169175595000006, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117412442, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 22, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.8471685, + 54.8557585 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "complete_gth", + "uid": "9837674", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #street_lighting", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T20:56:40Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000100713439680076, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117410571, + "host": "mapcomplete.osm.be", + "theme": "street_lighting", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 10.7386792, + 50.9441082 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "alex_lofi", + "uid": "6816316", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T20:47:39Z", + "reviewed_features": [], + "create": 0, + "modify": 10, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117410300, + "host": "mapcomplete.osm.be", + "theme": "gh://yopaseopor/mcquests/master/libraries.json", + "answer": 15, + "locale": "es", + "imagery": "osm", + "change_within_500m": 15 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -3.5713944, + 37.1343799 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T20:38:37Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0.00000639281520002758, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117410026, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 1, + "locale": "en", + "imagery": "CartoDB.Voyager", + "add-image": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.3585625, + 50.8484356 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Jose Luis Infante", + "uid": "126203", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T20:31:24Z", + "reviewed_features": [], + "create": 0, + "modify": 7, + "delete": 0, + "area": 2.12366720001794e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117409761, + "host": "mapcomplete.osm.be", + "theme": "gh://yopaseopor/mcquests/master/libraries.json", + "answer": 10, + "locale": "ca", + "imagery": "osm", + "change_within_1000m": 10 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.2194003, + 41.4440369 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "msevilla00", + "uid": "240498", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T20:29:40Z", + "reviewed_features": [], + "create": 5, + "modify": 2, + "delete": 0, + "area": 0.0125160210793797, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117409709, + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 3, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -0.848376, + 41.70134615 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "anticamfoix", + "uid": "15042359", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T20:03:54Z", + "reviewed_features": [], + "create": 15, + "modify": 16, + "delete": 0, + "area": 0.0000238743854500156, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117408885, + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 25, + "locale": "fr", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.60713235, + 42.96446105 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "jqngarcia", + "uid": "5126253", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T19:52:58Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 2.62288529998133e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117408538, + "host": "mapcomplete.osm.be", + "theme": "gh://yopaseopor/mcquests/master/libraries.json", + "answer": 1, + "locale": "ca", + "imagery": "osm", + "change_within_500m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.21032245, + 41.443957850000004 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "msevilla00", + "uid": "240498", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T19:48:19Z", + "reviewed_features": [], + "create": 0, + "modify": 20, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117408411, + "host": "mapcomplete.osm.be", + "theme": "gh://yopaseopor/mcquests/master/libraries.json", + "answer": 25, + "locale": "es", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -0.7971125, + 41.7622362 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Robot8A", + "uid": "393359", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T19:37:35Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 4.10639640002543e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117408081, + "host": "mapcomplete.osm.be", + "theme": "gh://yopaseopor/mcquests/master/libraries.json", + "answer": 2, + "locale": "es", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -0.8981497, + 41.64032495 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "ecabre4", + "uid": "554769", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T19:09:14Z", + "reviewed_features": [], + "create": 0, + "modify": 15, + "delete": 0, + "area": 4.65645279997226e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117407110, + "host": "mapcomplete.osm.be", + "theme": "gh://yopaseopor/mcquests/master/libraries.json", + "answer": 25, + "locale": "es", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.1000843, + 41.1541194 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "paunofu", + "uid": "13779940", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T18:59:54Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 1.06268249998789e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117406747, + "host": "mapcomplete.osm.be", + "theme": "gh://yopaseopor/mcquests/master/libraries.json", + "answer": 3, + "locale": "es", + "imagery": "osm", + "change_within_1000m": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 0.10496275, + 38.840185149999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "hortacalaf", + "uid": "14495457", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T18:58:12Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117406606, + "host": "mapcomplete.osm.be", + "theme": "gh://yopaseopor/mcquests/master/libraries.json", + "answer": 5, + "locale": "es", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.8121879, + 41.235172 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "lmagreault", + "uid": "260065", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T18:21:50Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 8.04362650001831e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117404833, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "benches", + "answer": 2, + "locale": "en", + "imagery": "osm", + "change_within_500m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.7004119499999995, + 46.579131149999995 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "TedScouGV", + "uid": "75300", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T15:51:26Z", + "reviewed_features": [], + "create": 0, + "modify": 7, + "delete": 0, + "area": 5.35003349999433e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117399314, + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 7, + "locale": "en", + "imagery": "osm", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -4.35530075, + 47.79740325 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "LFFMH", + "uid": "14449743", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T15:12:29Z", + "reviewed_features": [], + "create": 27, + "modify": 30, + "delete": 0, + "area": 0.00809026408574927, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117397830, + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 14.005525850000001, + 52.02807425 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "womped", + "uid": "1880469", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #climbing", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T15:05:58Z", + "reviewed_features": [], + "create": 0, + "modify": 8, + "delete": 0, + "area": 0.0000652384235499885, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117397579, + "host": "mapcomplete.osm.be", + "theme": "climbing", + "answer": 10, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 11.02623015, + 49.58834715 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "cabinetcourbi", + "uid": "6231864", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T14:43:08Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117396671, + "host": "mapcomplete.osm.be", + "theme": "food", + "answer": 1, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.8090181, + 43.9481107 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "cbeddow", + "uid": "2611295", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #cafes_and_pubs", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T14:36:26Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117396402, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cafes_and_pubs", + "locale": "en", + "imagery": "osm", + "change_over_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 8.5447577, + 47.0497303 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "JLZIMMERMANN", + "uid": "188930", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #facadegardens", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T14:19:05Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117395644, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "facadegardens", + "answer": 3, + "locale": "fr", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.8092148, + 43.9474749 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joseph83", + "uid": "10732704", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #street_lighting", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T14:01:17Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 9.09940800001334e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117394914, + "host": "mapcomplete.osm.be", + "theme": "street_lighting", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.746034, + 44.095681049999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T13:37:14Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117393993, + "host": "mapcomplete.osm.be", + "theme": "trees", + "locale": "en", + "imagery": "cyclosm", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -73.2493381, + -39.8101576 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joseph83", + "uid": "10732704", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #street_lighting", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T13:32:49Z", + "reviewed_features": [], + "create": 4, + "modify": 18, + "delete": 0, + "area": 0.0080653444841389, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117393848, + "host": "mapcomplete.osm.be", + "split": 5, + "theme": "street_lighting", + "answer": 16, + "locale": "en", + "imagery": "osm", + "relation-fix": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.82105765, + 44.114283900000004 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #scales", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T13:24:36Z", + "reviewed_features": [], + "create": 2, + "modify": 2, + "delete": 0, + "area": 0.0773028109039203, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117393533, + "host": "mapcomplete.osm.be", + "theme": "scales", + "answer": 2, + "locale": "en", + "imagery": "osm", + "add-image": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.46976815, + 51.140026399999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joseph83", + "uid": "10732704", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T13:19:51Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117393391, + "host": "mapcomplete.osm.be", + "theme": "food", + "answer": 4, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.8109643, + 44.1372512 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "JLZIMMERMANN", + "uid": "188930", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T13:05:44Z", + "reviewed_features": [], + "create": 0, + "modify": 8, + "delete": 0, + "area": 0.0000920072181599986, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117392902, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "benches", + "answer": 11, + "locale": "fr", + "imagery": "osm", + "add-image": 1, + "change_within_25m": 4, + "change_within_1000m": 2, + "change_within_5000m": 6 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.81541565, + 44.1316888 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T13:04:11Z", + "reviewed_features": [], + "create": 0, + "modify": 17, + "delete": 0, + "area": 0.0000338967158399833, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117392861, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 18, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.40328985, + 51.101978599999995 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "cabinetcourbi", + "uid": "6231864", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #entrances", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T10:50:04Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117387639, + "host": "mapcomplete.osm.be", + "theme": "entrances", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.8041136, + 44.1362959 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pipeton", + "uid": "11969052", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T09:54:28Z", + "reviewed_features": [], + "create": 0, + "modify": 15, + "delete": 0, + "area": 0.00011725700990004, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117385529, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 18, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -3.6126398, + 37.184991749999995 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #entrances", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T08:20:49Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117381876, + "host": "mapcomplete.osm.be", + "theme": "entrances", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.2273985, + 50.9308739 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #nature", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T02:09:42Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117374161, + "host": "mapcomplete.osm.be", + "theme": "nature", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "change_within_50m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.0614534, + 51.1419182 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T02:06:25Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117374142, + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "change_within_50m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.0614835, + 51.1418862 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T01:55:12Z", + "reviewed_features": [], + "create": 0, + "modify": 13, + "delete": 0, + "area": 0.00162271236297987, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117374038, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 16, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 4, + "change_within_5000m": 12 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.09546145, + 51.1285031 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T01:52:26Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 4.29186550004931e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117374015, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "change_within_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.07729825, + 51.13039995 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "complete_gth", + "uid": "9837674", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T22:27:05Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117371343, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 5, + "locale": "de", + "imagery": "CartoDB.Voyager" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 10.7315329, + 50.9445605 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #entrances", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-13T21:32:38Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117370208, + "host": "mapcomplete.osm.be", + "theme": "entrances", + "answer": 2, + "locale": "en", + "imagery": "osm", + "change_within_5000m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.2356964, + 50.7318568 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 87, + "name": "Irrelevant tags on highway" + } + ], + "tags": [], + "features": [ + { + "url": "way-177394410", + "name": "Robert-Koch-Straße", + "osm_id": 177394410, + "reasons": [ + 87 + ], + "version": 3, + "primary_tags": { + "highway": "residential" + } + } + ], + "user": "complete_gth", + "uid": "9837674", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T21:14:43Z", + "reviewed_features": [], + "create": 0, + "modify": 152, + "delete": 0, + "area": 0.00228942764819996, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117369597, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 233, + "locale": "de", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 10.7024805, + 50.94857965 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T19:49:25Z", + "reviewed_features": [], + "create": 0, + "modify": 63, + "delete": 0, + "area": 0.0431145626717401, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117367225, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "etymology", + "answer": 78, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.4024667, + 54.751086150000006 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "philippec", + "uid": "76884", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-13T18:42:44Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117365388, + "host": "mapcomplete.osm.be", + "theme": "toilets", + "locale": "en", + "imagery": "osm", + "add-image": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.4794074, + 51.0276134 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "philippec", + "uid": "76884", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-13T18:40:07Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117365307, + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.482333, + 51.028025 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pipeton", + "uid": "11969052", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T16:10:24Z", + "reviewed_features": [], + "create": 0, + "modify": 14, + "delete": 0, + "area": 0.000628012638870147, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117360267, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 17, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -3.61090415, + 37.18418895 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Hopperpop", + "uid": "3664604", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/Hopperpop/OpenAsianMap/main/OpenAsianMap.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T15:44:03Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 0.00593414459932629, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117359158, + "host": "mapcomplete.osm.be", + "theme": "gh://hopperpop/openasianmap/main/openasianmap.json", + "answer": 5, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.80863725, + 51.22239715 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Frans_Napaters", + "uid": "3574538", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-13T15:13:32Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 4.70694639995571e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117357944, + "host": "mapcomplete.osm.be", + "theme": "playgrounds", + "answer": 3, + "locale": "nl", + "imagery": "osm", + "change_within_5000m": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.8675501, + 51.13203945 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T14:58:58Z", + "reviewed_features": [], + "create": 0, + "modify": 107, + "delete": 0, + "area": 0.103335514497391, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117357360, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "etymology", + "answer": 155, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.43328005, + 54.71528935 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-13T14:28:14Z", + "reviewed_features": [], + "create": 1, + "modify": 4, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117356151, + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 5, + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "change_over_5000m": 1, + "change_within_25m": 6 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.1083015, + 50.9184127 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "philippec", + "uid": "76884", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-13T13:43:24Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 0.00137637928184003, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117354491, + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 8, + "locale": "nl", + "imagery": "osm", + "change_within_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.4959851, + 51.00591035 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "wanderruderer", + "uid": "352135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #cycle_infra", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T13:40:20Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117354388, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cycle_infra", + "answer": 2, + "locale": "de", + "imagery": "CartoDB.Voyager" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 8.0059036, + 52.2450926 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T13:34:59Z", + "reviewed_features": [], + "create": 0, + "modify": 10, + "delete": 0, + "area": 0.00169528443830996, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117354149, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "etymology", + "answer": 14, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.58585385, + 54.88974535 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + }, + { + "id": 42, + "name": "Invalid tag modification" + } + ], + "tags": [], + "features": [ + { + "url": "way-642622181", + "name": "Kinderspielplatz im Dütetal", + "osm_id": 642622181, + "reasons": [ + 42 + ], + "version": 6, + "primary_tags": {} + } + ], + "user": "wanderruderer", + "uid": "352135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T13:31:17Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 7.53891599991806e-8, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117354018, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "playgrounds", + "answer": 6, + "locale": "de", + "imagery": "osm", + "soft-delete": 1, + "soft-delete:way/642622181": "duplicate" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 8.005482149999999, + 52.244985799999995 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "wanderruderer", + "uid": "352135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T13:28:32Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117353930, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "benches", + "answer": 7, + "locale": "de", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 8.005439, + 52.2449605 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Gregory Williams", + "uid": "7037", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #uk_addresses", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T11:50:29Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117350688, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "uk_addresses", + "import": 1, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.0566118, + 51.268894 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T09:43:13Z", + "reviewed_features": [], + "create": 0, + "modify": 15, + "delete": 0, + "area": 0.0109055222702116, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117346566, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 16, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.68329015, + 54.82907195 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "wanderruderer", + "uid": "352135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #cycle_infra", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T07:51:10Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117344110, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cycle_infra", + "answer": 2, + "locale": "de", + "imagery": "CartoDB.Voyager" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 8.0495579, + 52.2553818 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "yopaseopor", + "uid": "500572", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #libraries", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T23:11:24Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 1.99002279998791e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117338550, + "host": "mapcomplete.osm.be", + "theme": "libraries", + "answer": 1, + "locale": "es", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.7148795, + 41.2217 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T23:04:31Z", + "reviewed_features": [], + "create": 0, + "modify": 16, + "delete": 0, + "area": 0.0000737489202999912, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117338381, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 16, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.8673936, + 54.83841955 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T23:03:58Z", + "reviewed_features": [], + "create": 3, + "modify": 8, + "delete": 0, + "area": 1.73008110001977e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117338372, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 14, + "locale": "nl", + "imagery": "CartoDB.Voyager", + "add-image": 3, + "change_over_5000m": 20 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.00874315, + 50.83891495 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #charging_stations", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T23:02:33Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117338341, + "host": "mapcomplete.osm.be", + "theme": "charging_stations", + "answer": 2, + "locale": "nl", + "imagery": "CartoDB.Voyager", + "change_over_5000m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.9727818, + 50.8137419 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #charging_stations", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T21:19:41Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117336229, + "host": "mapcomplete.osm.be", + "theme": "charging_stations", + "answer": 4, + "locale": "nl", + "imagery": "AGIVFlandersGRB", + "change_within_100m": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.9727818, + 50.8137419 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T21:16:41Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117336170, + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "bookcases", + "locale": "nl", + "imagery": "AGIVFlandersGRB", + "add-image": 1, + "change_within_25m": 1, + "change_within_50m": 1, + "move:node/9246056984": "improve_accuracy" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.249092, + 50.7412338 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #charging_stations", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T21:16:41Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117336169, + "host": "mapcomplete.osm.be", + "theme": "charging_stations", + "answer": 1, + "locale": "nl", + "imagery": "AGIVFlandersGRB", + "add-image": 1, + "change_over_5000m": 1, + "change_within_100m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.9727818, + 50.8137419 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #climbing", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T21:03:46Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117335842, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "climbing", + "answer": 2, + "locale": "en", + "imagery": "osm", + "change_within_100m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2431303, + 51.2060932 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T20:53:30Z", + "reviewed_features": [], + "create": 0, + "modify": 17, + "delete": 0, + "area": 0.0000682430154000047, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117335595, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 25, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.472813, + 51.43154145 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T20:45:32Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 0.00000196648986001323, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117335414, + "host": "mapcomplete.osm.be", + "theme": "bookcases", + "answer": 7, + "locale": "nl", + "imagery": "osm", + "add-image": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.98087175, + 51.2039646 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #artwork", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T20:03:51Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117334399, + "host": "mapcomplete.osm.be", + "theme": "artwork", + "answer": 1, + "locale": "en", + "imagery": "osm", + "add-image": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.3705808, + 50.858798 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T18:21:04Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.00000490618759998795, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117331601, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.591588, + 54.795310799999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T18:06:16Z", + "reviewed_features": [], + "create": 0, + "modify": 100, + "delete": 0, + "area": 0.245877827420482, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117331164, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 126, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.5380011, + 51.128620600000005 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T16:58:56Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117329143, + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 4, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 1, + "change_within_25m": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.2053054, + 50.9045053 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T16:22:27Z", + "reviewed_features": [], + "create": 1, + "modify": 5, + "delete": 0, + "area": 0.00000149499209999784, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117327859, + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "toerisme_vlaanderen", + "answer": 12, + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "change_over_5000m": 1, + "change_within_25m": 7, + "change_within_500m": 7, + "move:node/1708952679": "improve_accuracy" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.060921049999999, + 51.1425507 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Hopperpop", + "uid": "3664604", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #fritures", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T16:04:19Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117327088, + "host": "mapcomplete.osm.be", + "theme": "fritures", + "answer": 3, + "locale": "nl", + "imagery": "AGIV" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.9755501, + 51.200799 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T15:24:43Z", + "reviewed_features": [], + "create": 0, + "modify": 87, + "delete": 0, + "area": 0.446045017155219, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117325641, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 118, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.84673305, + 51.025188400000005 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "RobJN", + "uid": "411244", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #uk_addresses", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T15:19:27Z", + "reviewed_features": [], + "create": 6, + "modify": 3, + "delete": 0, + "area": 1.1366288000014e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117325420, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "uk_addresses", + "answer": 13, + "import": 6, + "locale": "en", + "imagery": "osm", + "change_over_5000m": 5, + "change_within_25m": 7, + "change_within_50m": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.6054129000000001, + 52.2878507 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #nature", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T14:38:09Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117323869, + "host": "mapcomplete.osm.be", + "theme": "nature", + "locale": "en", + "imagery": "osm", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.389842, + 51.0924857 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T14:37:37Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117323851, + "host": "mapcomplete.osm.be", + "theme": "benches", + "locale": "en", + "imagery": "osm", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.3896566, + 51.0928654 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T13:38:15Z", + "reviewed_features": [], + "create": 0, + "modify": 70, + "delete": 0, + "area": 0.00218779727420004, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117321792, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 95, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.0949215500000005, + 50.923219200000005 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T12:25:16Z", + "reviewed_features": [], + "create": 0, + "modify": 67, + "delete": 0, + "area": 0.0393324001693999, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117319351, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 91, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.4825216499999998, + 54.7606524 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "philippec", + "uid": "76884", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T12:12:05Z", + "reviewed_features": [], + "create": 2, + "modify": 1, + "delete": 0, + "area": 0.0000119695415499967, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117318921, + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 5, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 2, + "change_within_5000m": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.48132485, + 51.030765450000004 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T11:59:40Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 0.000184995125639949, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117318583, + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 7, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.18356845, + 50.9019296 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T10:51:15Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117316426, + "host": "mapcomplete.osm.be", + "theme": "bookcases", + "answer": 2, + "locale": "nl", + "imagery": "osm", + "change_within_50m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.0101024, + 51.1280572 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T10:26:11Z", + "reviewed_features": [], + "create": 0, + "modify": 10, + "delete": 0, + "area": 0.00442422258415994, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117315711, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 14, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.7676228, + 51.165043100000005 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T09:56:01Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 1.90061950000558e-7, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117314758, + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "change_within_25m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.22282455, + 50.93005145 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "k4pl4n", + "uid": "11229531", + "editor": "MapComplete 0.2.3a", + "comment": "Adding data with #MapComplete for theme #vegan", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T01:05:22Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117307299, + "theme": "vegan", + "language": "en", + "theme-creator": "Christian Neumann " + }, + "geometry": { + "type": "Point", + "coordinates": [ + 8.4067009, + 49.0058082 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #climbing", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T00:27:57Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117306917, + "host": "mapcomplete.osm.be", + "theme": "climbing", + "locale": "en", + "imagery": "osm", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.3579497, + 50.8677288 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T00:25:36Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000338467525270024, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117306895, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 1, + "locale": "en", + "imagery": "CartoDB.Voyager", + "add-image": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.37119715, + 50.86158505 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T00:12:49Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000238274606769976, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117306735, + "host": "mapcomplete.osm.be", + "theme": "shops", + "locale": "en", + "imagery": "osm", + "add-image": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.35150055, + 50.85828535 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T23:21:15Z", + "reviewed_features": [], + "create": 0, + "modify": 139, + "delete": 0, + "area": 0.0128278237787205, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117305997, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 236, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.223801, + 51.217234399999995 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T23:13:27Z", + "reviewed_features": [], + "create": 48, + "modify": 22, + "delete": 0, + "area": 0.0000176368689500045, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117305884, + "host": "mapcomplete.osm.be", + "move": 21, + "theme": "grb", + "locale": "nl", + "imagery": "osm", + "conflation": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.08663425, + 51.098935749999995 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T19:55:02Z", + "reviewed_features": [], + "create": 0, + "modify": 9, + "delete": 0, + "area": 1.24045560002469e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117301022, + "host": "mapcomplete.osm.be", + "theme": "trees", + "locale": "en", + "imagery": "cyclosm", + "add-image": 9, + "change_over_5000m": 8 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -70.76757355000001, + -33.489257800000004 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T17:49:13Z", + "reviewed_features": [], + "create": 0, + "modify": 17, + "delete": 0, + "area": 1.35885120000903e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117297205, + "host": "mapcomplete.osm.be", + "move": 16, + "theme": "grb", + "locale": "nl", + "imagery": "AGIVFlandersGRB", + "conflation": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.7026322, + 51.0507195 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 43, + "name": "Invalid key value combination" + } + ], + "tags": [], + "features": [ + { + "url": "node-8024991201", + "osm_id": 8024991201, + "reasons": [ + 43 + ], + "version": 6, + "primary_tags": { + "shop": "brass_instruments" + } + } + ], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T17:38:10Z", + "reviewed_features": [], + "create": 0, + "modify": 7, + "delete": 0, + "area": 9.01651999984962e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117296852, + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "shops", + "answer": 5, + "locale": "en", + "imagery": "osm", + "add-image": 1, + "move:node/8024991201": "improve_accuracy" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.702182, + 51.0510151 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "waylink", + "uid": "12132256", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T17:18:21Z", + "reviewed_features": [], + "create": 66, + "modify": 0, + "delete": 0, + "area": 0.00000795072137998792, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117296102, + "host": "mapcomplete.osm.be", + "theme": "trees", + "locale": "en", + "imagery": "Surrey-Air_Survey", + "change_over_5000m": 28 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -0.6112112000000001, + 51.18754945 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "waylink", + "uid": "12132256", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T17:05:04Z", + "reviewed_features": [], + "create": 30, + "modify": 0, + "delete": 0, + "area": 0.00000574917770000133, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117295625, + "host": "mapcomplete.osm.be", + "theme": "trees", + "locale": "en", + "imagery": "Surrey-Air_Survey" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -0.6129124, + 51.18727935 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 83, + "name": "User has multiple blocks" + } + ], + "tags": [], + "features": [], + "user": "rodolfovargas", + "uid": "1217047", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #nature", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T16:49:51Z", + "reviewed_features": [], + "create": 0, + "modify": 12, + "delete": 0, + "area": 0.0000265520794000014, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117295023, + "host": "mapcomplete.osm.be", + "theme": "nature", + "answer": 14, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -68.153109, + -16.524512 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #buurtnatuur", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T15:16:18Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 5.82327199999694e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117292039, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "buurtnatuur", + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "change_within_25m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.7363807500000004, + 51.0547579 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.7", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T14:45:51Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117290881, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cyclofix", + "answer": 5, + "locale": "en", + "imagery": "CartoDB.Voyager", + "change_within_50m": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.7036753, + 51.0489713 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "waylink", + "uid": "12132256", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T14:43:40Z", + "reviewed_features": [], + "create": 6, + "modify": 0, + "delete": 0, + "area": 4.79922159999307e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117290798, + "host": "mapcomplete.osm.be", + "theme": "trees", + "locale": "en", + "imagery": "Surrey-Air_Survey" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -0.61240665, + 51.185958799999995 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T14:39:23Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 5.78376369995346e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117290651, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 1, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.7009465500000003, + 51.053537250000005 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 4, + "name": "mass modification" + } + ], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T14:35:12Z", + "reviewed_features": [], + "create": 80, + "modify": 510, + "delete": 10, + "area": 0.000167040742690075, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117290521, + "host": "mapcomplete.osm.be", + "move": 449, + "theme": "grb", + "answer": 2, + "import": 8, + "locale": "nl", + "imagery": "AGIV", + "conflation": 128 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.039327650000001, + 51.16185715 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 43, + "name": "Invalid key value combination" + } + ], + "tags": [], + "features": [ + { + "url": "node-9498240425", + "osm_id": 9498240425, + "reasons": [ + 43 + ], + "version": 1, + "primary_tags": { + "tourism": "map" + } + } + ], + "user": "waylink", + "uid": "12132256", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #maps", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T14:34:11Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117290489, + "host": "mapcomplete.osm.be", + "theme": "maps", + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -0.6077781, + 51.1889232 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T14:31:21Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 4.57163179997417e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117290398, + "host": "mapcomplete.osm.be", + "theme": "shops", + "answer": 1, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.70216935, + 51.058794 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T13:29:49Z", + "reviewed_features": [], + "create": 940, + "modify": 0, + "delete": 0, + "area": 0.00000977924591998971, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117288194, + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 145, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 145 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.2286577, + 50.956700600000005 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T12:41:44Z", + "reviewed_features": [], + "create": 61, + "modify": 65, + "delete": 3, + "area": 0.000200738054520031, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117286674, + "host": "mapcomplete.osm.be", + "move": 56, + "theme": "grb", + "answer": 1, + "import": 5, + "locale": "nl", + "imagery": "osm", + "conflation": 16 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.050019799999999, + 51.147232599999995 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.7", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T11:57:29Z", + "reviewed_features": [], + "create": 356, + "modify": 0, + "delete": 0, + "area": 0.00000323845038000038, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117285094, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "grb", + "import": 45, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 45 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.2345405, + 50.950699549999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T11:22:06Z", + "reviewed_features": [], + "create": 0, + "modify": 39, + "delete": 0, + "area": 0.00189539978975995, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117283702, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 72, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.2609897, + 51.0822598 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joeybab3", + "uid": "8783843", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T06:32:26Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.00000416065628997944, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117273386, + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 4, + "locale": "en", + "imagery": "osm", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -122.05421045, + 36.98852575 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.7", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T03:32:25Z", + "reviewed_features": [], + "create": 4, + "modify": 5, + "delete": 0, + "area": 2.61939739993927e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117269761, + "host": "pietervdvn.github.io", + "move": 4, + "path": "mc/develop/", + "theme": "grb", + "import": 1, + "locale": "nl", + "imagery": "osm", + "conflation": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2303648000000003, + 51.20210565 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.7", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T01:50:29Z", + "reviewed_features": [], + "create": 99, + "modify": 0, + "delete": 0, + "area": 8.24775450005381e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117268208, + "host": "127.0.0.1:1234", + "theme": "grb", + "import": 16, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.23304755, + 50.956947650000004 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 2, + "name": "possible import" + } + ], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 3, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T23:14:04Z", + "reviewed_features": [], + "create": 1363, + "modify": 11, + "delete": 0, + "area": 0.264789621125804, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117265715, + "host": "pietervdvn.github.io", + "move": 10, + "path": "mc/develop/", + "theme": "grb", + "import": 204, + "locale": "nl", + "imagery": "osm", + "conflation": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.7251993, + 51.084739049999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-10T23:05:38Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 0.0000143525726399998, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117265547, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 6, + "locale": "nl", + "imagery": "osm", + "change_within_5000m": 6 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.9173372, + 51.08922025 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-10T22:46:14Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117265193, + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 3, + "locale": "nl", + "imagery": "osm", + "change_within_5000m": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.7096154, + 51.0349112 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T20:55:04Z", + "reviewed_features": [], + "create": 0, + "modify": 68, + "delete": 0, + "area": 0.127115024572478, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117261964, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 103, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.82628115, + 54.6969143 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T19:56:14Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117260011, + "host": "mapcomplete.osm.be", + "theme": "bookcases", + "locale": "en", + "imagery": "AGIV", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.9979324, + 51.1655666 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T19:35:48Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117259394, + "host": "mapcomplete.osm.be", + "theme": "shops", + "locale": "en", + "imagery": "osm", + "add-image": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.942541, + 51.0934708 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T19:27:32Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117259168, + "host": "mapcomplete.osm.be", + "theme": "food", + "locale": "en", + "imagery": "osm", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.5588466, + 50.7861103 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T19:20:49Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0.2181586696027, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117259010, + "host": "mapcomplete.osm.be", + "theme": "playgrounds", + "locale": "en", + "imagery": "osm", + "add-image": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.301940650000001, + 50.9871752 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T19:04:11Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0.0687662546338617, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117258567, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 5, + "locale": "en", + "imagery": "CartoDB.Voyager", + "add-image": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.98379205, + 50.8396925 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pipeton", + "uid": "11969052", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T18:26:12Z", + "reviewed_features": [], + "create": 0, + "modify": 43, + "delete": 0, + "area": 0.00192598286145003, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117257353, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 58, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -3.60501505, + 37.17783205 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-10T18:15:44Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117257071, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "shops", + "answer": 1, + "locale": "en", + "imagery": "osm", + "change_within_25m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.7004163, + 51.0535894 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #climbing", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T18:03:04Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0.00129441517515011, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117256720, + "host": "mapcomplete.osm.be", + "theme": "climbing", + "answer": 4, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.33987605, + 50.84966905 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T17:59:42Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 2.93813020002945e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117256602, + "host": "mapcomplete.osm.be", + "theme": "playgrounds", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.4499508500000005, + 50.7867584 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "StefDeGreef", + "uid": "1860737", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T17:46:55Z", + "reviewed_features": [], + "create": 1, + "modify": 4, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117256167, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 5, + "locale": "fr", + "imagery": "CartoDB.Voyager", + "add-image": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.4338323, + 50.8163334 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-10T16:54:55Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 0.0000016212426899974, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117254536, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 7, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2296235500000003, + 51.20124525 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Albin Gasparetto", + "uid": "1227542", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T16:13:19Z", + "reviewed_features": [], + "create": 2, + "modify": 0, + "delete": 0, + "area": 1.78981200000161e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117252707, + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 3, + "locale": "fr", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.65965575, + 42.9136302 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "anticamfoix", + "uid": "15042359", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T15:44:04Z", + "reviewed_features": [], + "create": 3, + "modify": 0, + "delete": 0, + "area": 0.000102759123029981, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117251573, + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 8, + "locale": "fr", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.6585090500000002, + 42.916419250000004 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-10T15:25:20Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 0.0000182593782000022, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117250931, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 13, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.00058175, + 51.1588728 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-10T14:18:04Z", + "reviewed_features": [], + "create": 175, + "modify": 0, + "delete": 0, + "area": 0.00000132942488999982, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117248276, + "host": "127.0.0.1:1234", + "theme": "grb", + "import": 22, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.22646205, + 50.95457675 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #climbing", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-10T13:52:36Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117247272, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "climbing", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.7445464, + 51.041222 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-10T13:06:48Z", + "reviewed_features": [], + "create": 11, + "modify": 0, + "delete": 0, + "area": 1.28356800001321e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117245437, + "host": "127.0.0.1:1234", + "theme": "grb", + "import": 2, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.2271549, + 50.9545464 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Lattenzaun", + "uid": "2603279", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T12:53:45Z", + "reviewed_features": [], + "create": 0, + "modify": 26, + "delete": 0, + "area": 0.000312531730559862, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117244900, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 32, + "locale": "de", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.4374369, + 51.30851925 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "habi", + "uid": "15671", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-10T10:12:34Z", + "reviewed_features": [], + "create": 0, + "modify": 14, + "delete": 0, + "area": 0.00000142921481999509, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117238352, + "host": "mapcomplete.osm.be", + "theme": "trees", + "answer": 18, + "locale": "en", + "imagery": "osm", + "change_within_25m": 16, + "change_within_50m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 7.4294232000000004, + 46.95223085 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Lattenzaun", + "uid": "2603279", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T09:57:48Z", + "reviewed_features": [], + "create": 0, + "modify": 28, + "delete": 0, + "area": 0.000147436880680092, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117237763, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 38, + "locale": "de", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.4404786, + 51.30683205 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Sparkofska", + "uid": "15028493", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #drinking_water", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T09:34:40Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117236734, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "drinking_water", + "answer": 1, + "locale": "en", + "imagery": "CartoDB.Voyager" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 8.2858713, + 50.8866216 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-10T05:50:15Z", + "reviewed_features": [], + "create": 0, + "modify": 109, + "delete": 0, + "area": 0.0147166456669596, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117228304, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 193, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.9223640500000005, + 51.1093147 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T04:25:15Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117226569, + "host": "mapcomplete.osm.be", + "theme": "trees", + "locale": "en", + "imagery": "cyclosm", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -71.3379922, + -29.9535533 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Marcel1109", + "uid": "14940118", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T23:32:39Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117222929, + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 13.5541946, + 52.0577699 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "rejbzh", + "uid": "15051154", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T23:24:21Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117222795, + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 1, + "locale": "fr", + "imagery": "fr.ign.bdortho" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.6095722, + 42.960264 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-09T23:03:38Z", + "reviewed_features": [], + "create": 0, + "modify": 21, + "delete": 0, + "area": 0.000204124782880029, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117222384, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 27, + "locale": "nl", + "imagery": "osm", + "change_within_5000m": 27 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.9301259, + 51.0936796 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "rejbzh", + "uid": "15051154", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T22:48:48Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 1, + "area": 8.11762230002591e-7, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117222003, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 1, + "locale": "fr", + "imagery": "fr.ign.bdortho", + "deletion": 1, + "deletion:node/9493709466": "duplicate" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.6481919500000002, + 42.91931475 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T22:43:28Z", + "reviewed_features": [], + "create": 533, + "modify": 13, + "delete": 0, + "area": 0.00000437973960998855, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117221882, + "host": "mapcomplete.osm.be", + "move": 10, + "theme": "grb", + "answer": 1, + "import": 70, + "locale": "nl", + "imagery": "AGIVFlandersGRB", + "conflation": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.23152855, + 50.95920065 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T22:39:09Z", + "reviewed_features": [], + "create": 25, + "modify": 0, + "delete": 0, + "area": 1.29470419999773e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117221776, + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 2, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.23170945, + 50.9593676 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T22:38:45Z", + "reviewed_features": [], + "create": 5, + "modify": 0, + "delete": 0, + "area": 2.8156800001431e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117221761, + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 1, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.2319998000000005, + 50.9592019 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T22:37:19Z", + "reviewed_features": [], + "create": 0, + "modify": 11, + "delete": 0, + "area": 4.30737500005559e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117221726, + "host": "mapcomplete.osm.be", + "move": 10, + "theme": "grb", + "locale": "nl", + "imagery": "osm", + "conflation": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.23211755, + 50.95863825 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Stinus_Clasius", + "uid": "1086503", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T21:58:45Z", + "reviewed_features": [], + "create": 134, + "modify": 0, + "delete": 0, + "area": 0.0000012432383199994, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117220765, + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 20, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.6312961999999995, + 51.3481569 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 70, + "name": "Impossible angle in a highway" + } + ], + "tags": [], + "features": [ + { + "url": "way-736570673", + "name": "Westmorland Way", + "osm_id": 736570673, + "reasons": [ + 70 + ], + "version": 3, + "primary_tags": { + "highway": "primary" + } + }, + { + "url": "way-126044600", + "name": "Westmorland Way", + "osm_id": 126044600, + "reasons": [ + 70 + ], + "version": 2, + "primary_tags": { + "highway": "primary" + } + }, + { + "url": "way-736570670", + "name": "Westmorland Way", + "osm_id": 736570670, + "reasons": [ + 70 + ], + "version": 3, + "primary_tags": { + "highway": "primary" + } + } + ], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T21:18:26Z", + "reviewed_features": [], + "create": 0, + "modify": 43, + "delete": 0, + "area": 0.0400825428863997, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117219747, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 62, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.6448942999999998, + 55.2582255 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Marvin Geisler", + "uid": "13424339", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T20:35:12Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117218343, + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 13.5531508, + 52.0544254 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "rejbzh", + "uid": "15051154", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T20:26:53Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117218067, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 1, + "locale": "fr", + "imagery": "CartoDB.Voyager" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.6485795, + 42.9187911 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "rejbzh", + "uid": "15051154", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T20:26:09Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117218051, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 1, + "locale": "fr", + "imagery": "CartoDB.Voyager" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.6485997, + 42.9187699 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 70, + "name": "Impossible angle in a highway" + } + ], + "tags": [], + "features": [ + { + "url": "way-126044593", + "name": "Station Road", + "osm_id": 126044593, + "reasons": [ + 70 + ], + "version": 6, + "primary_tags": { + "highway": "primary" + } + }, + { + "url": "way-126044594", + "name": "Station Road", + "osm_id": 126044594, + "reasons": [ + 70 + ], + "version": 5, + "primary_tags": { + "highway": "secondary" + } + }, + { + "url": "way-125785869", + "name": "Stakeford Lane", + "osm_id": 125785869, + "reasons": [ + 70 + ], + "version": 4, + "primary_tags": { + "highway": "primary" + } + } + ], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T19:51:05Z", + "reviewed_features": [], + "create": 0, + "modify": 98, + "delete": 0, + "area": 0.0162084351371999, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117217034, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 143, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.56836845, + 55.1422099 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Lattenzaun", + "uid": "2603279", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T19:33:32Z", + "reviewed_features": [], + "create": 0, + "modify": 84, + "delete": 0, + "area": 0.000437229224130107, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117216564, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 117, + "locale": "de", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 9.43007285, + 51.30919625 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "anticamfoix", + "uid": "15042359", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T17:57:13Z", + "reviewed_features": [], + "create": 3, + "modify": 3, + "delete": 0, + "area": 5.70685920000429e-7, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117213496, + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 8, + "locale": "fr", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.640953, + 42.9185613 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "StefDeGreef", + "uid": "1860737", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-09T17:03:43Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117211444, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 3, + "locale": "fr", + "imagery": "CartoDB.Voyager", + "add-image": 1, + "change_over_5000m": 1, + "change_within_25m": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.4294978, + 50.8067103 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "philippec", + "uid": "76884", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-09T15:43:41Z", + "reviewed_features": [], + "create": 2, + "modify": 3, + "delete": 0, + "area": 0.00000295323861000725, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117208566, + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 7, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 2, + "change_within_1000m": 7 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.47771655, + 51.028050050000004 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jas7100", + "uid": "15023699", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T14:48:31Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117206256, + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 3, + "locale": "fr", + "imagery": "SPW_ORTHO_LAST" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.3936619, + 50.4801134 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bponkishore", + "uid": "14062769", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T14:43:39Z", + "reviewed_features": [], + "create": 0, + "modify": 30, + "delete": 0, + "area": 0.00205493764451984, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117205993, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 30, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 79.509296, + 11.6121965 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "anticamfoix", + "uid": "15042359", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T14:29:58Z", + "reviewed_features": [], + "create": 2, + "modify": 5, + "delete": 0, + "area": 0.00000871070819999706, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117205330, + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 8, + "locale": "fr", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.6086410999999998, + 42.962588049999994 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "anticamfoix", + "uid": "15042359", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T14:29:57Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117205328, + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 3, + "locale": "fr", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.6095722, + 42.960264 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "anticamfoix", + "uid": "15042359", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T14:29:49Z", + "reviewed_features": [], + "create": 1, + "modify": 5, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117205318, + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 6, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.6095936, + 42.960264 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Albin Gasparetto", + "uid": "1227542", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T14:29:14Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117205291, + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 3, + "locale": "fr", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 1.6096097, + 42.960319 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Mark Rogerson", + "uid": "14388354", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #climbing", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T14:22:29Z", + "reviewed_features": [], + "create": 0, + "modify": 7, + "delete": 0, + "area": 0.00476037562820004, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117204967, + "host": "mapcomplete.osm.be", + "theme": "climbing", + "answer": 13, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.25795455, + 51.7141201 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bponkishore", + "uid": "14062769", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T14:19:50Z", + "reviewed_features": [], + "create": 0, + "modify": 20, + "delete": 0, + "area": 0.000342445613260125, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117204832, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 23, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 79.47874895, + 11.608314499999999 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "DNRvuP", + "uid": "15049065", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T14:02:05Z", + "reviewed_features": [], + "create": 2, + "modify": 0, + "delete": 0, + "area": 3.7094008000296e-7, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117204073, + "host": "mapcomplete.osm.be", + "theme": "benches", + "answer": 3, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.4038968, + 50.3474326 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 1, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T14:01:26Z", + "reviewed_features": [], + "create": 9, + "modify": 4, + "delete": 0, + "area": 0.00000900986817000346, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117204046, + "host": "mapcomplete.osm.be", + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 8, + "locale": "nl", + "imagery": "osm", + "add-image": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.5409599499999995, + 51.22351245 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T13:46:21Z", + "reviewed_features": [], + "create": 0, + "modify": 190, + "delete": 0, + "area": 0.638697690991675, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117203387, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 276, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.4367402499999997, + 51.04148375 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T13:11:51Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117201983, + "host": "mapcomplete.osm.be", + "theme": "trees", + "answer": 1, + "locale": "en", + "imagery": "cyclosm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -73.2450132, + -39.8149123 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-09T12:09:58Z", + "reviewed_features": [], + "create": 3, + "modify": 4, + "delete": 0, + "area": 0.00000208089727000232, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117199538, + "host": "mapcomplete.osm.be", + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 4, + "locale": "nl", + "imagery": "osm", + "add-image": 3, + "change_over_5000m": 3, + "change_within_50m": 3, + "change_within_100m": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.51970325, + 51.23128395 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/seppesantens/MapComplete-Themes/main/VerkeerdeBordenDatabank/VerkeerdeBordenDatabank.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-09T12:08:06Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117199461, + "host": "mapcomplete.osm.be", + "theme": "gh://seppesantens/mapcomplete-themes/main/verkeerdebordendatabank/verkeerdebordendatabank.json", + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "change_within_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2410496, + 51.2064575 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "nicolas2b54", + "uid": "14828783", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #sidewalks", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T10:46:20Z", + "reviewed_features": [], + "create": 0, + "modify": 25, + "delete": 0, + "area": 0.000222428175280065, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117196396, + "host": "mapcomplete.osm.be", + "theme": "sidewalks", + "answer": 32, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.4348868, + 48.83941945 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-09T10:19:40Z", + "reviewed_features": [], + "create": 7, + "modify": 6, + "delete": 0, + "area": 0.0000391226473999729, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117195266, + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 10, + "locale": "nl", + "imagery": "osm", + "add-image": 3, + "change_over_5000m": 7, + "change_within_25m": 14, + "move:node/9492215009": "improve_accuracy" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.512715399999999, + 51.231305 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T10:14:28Z", + "reviewed_features": [], + "create": 0, + "modify": 162, + "delete": 0, + "area": 0.855378118823207, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117195083, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 217, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.93866145, + 51.1283177 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Jori", + "uid": "14800690", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-09T09:56:41Z", + "reviewed_features": [], + "create": 13, + "modify": 19, + "delete": 0, + "area": 0.000752581810510032, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117194308, + "host": "mapcomplete.osm.be", + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 8, + "locale": "nl", + "imagery": "osm", + "add-image": 14, + "change_over_5000m": 13, + "change_within_25m": 18, + "change_within_50m": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.52054885, + 51.23210245 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "habi", + "uid": "15671", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-09T09:46:54Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 1, + "area": 1.13080800001156e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117193831, + "host": "mapcomplete.osm.be", + "theme": "trees", + "answer": 3, + "locale": "en", + "imagery": "osm", + "deletion": 1, + "change_within_25m": 3, + "change_within_100m": 1, + "deletion:node/6119665025": "disused" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 7.4201695, + 46.93757605 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-09T08:40:02Z", + "reviewed_features": [], + "create": 14, + "modify": 17, + "delete": 0, + "area": 0.000103596247519954, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117191011, + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 11, + "locale": "nl", + "imagery": "osm", + "add-image": 13, + "change_over_5000m": 14, + "change_within_25m": 11, + "change_within_50m": 5, + "change_within_100m": 9, + "move:node/9491933424": "improve_accuracy" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.49906635, + 51.2332707 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T08:09:38Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117189898, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "locale": "en", + "imagery": "CartoDB.Voyager", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.3811197, + 50.8581346 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-09T07:03:17Z", + "reviewed_features": [], + "create": 38, + "modify": 2, + "delete": 0, + "area": 0.000449286868800087, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117187792, + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "answer": 17, + "locale": "de", + "imagery": "osm", + "change_over_5000m": 38, + "change_within_25m": 11, + "change_within_50m": 3, + "change_within_100m": 1, + "change_within_500m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 11.6946479, + 48.0103681 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T23:54:47Z", + "reviewed_features": [], + "create": 0, + "modify": 8, + "delete": 0, + "area": 0.00111348838039994, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117180667, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 9, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2616456, + 51.2185259 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T21:41:30Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000312971518639712, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117178203, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.8780273, + 54.5464718 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Frans_Napaters", + "uid": "3574538", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #charging_stations", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T21:35:34Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117178055, + "host": "mapcomplete.osm.be", + "theme": "charging_stations", + "answer": 1, + "locale": "nl", + "imagery": "CartoDB.Voyager", + "change_over_5000m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.8364815, + 51.1846906 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #waste_basket", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T19:47:02Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117175034, + "host": "mapcomplete.osm.be", + "theme": "waste_basket", + "answer": 1, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.5492029, + 50.9430976 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T19:41:50Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117174875, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 4, + "locale": "en", + "imagery": "AGIV", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.0039372, + 51.1292317 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T19:32:47Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.0853101078559389, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117174624, + "host": "mapcomplete.osm.be", + "theme": "benches", + "answer": 1, + "locale": "en", + "imagery": "osm", + "add-image": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.77762945, + 51.0366205 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 43, + "name": "Invalid key value combination" + } + ], + "tags": [], + "features": [ + { + "url": "node-9490613102", + "osm_id": 9490613102, + "reasons": [ + 43 + ], + "version": 2, + "primary_tags": { + "tourism": "map" + } + } + ], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #maps", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T19:28:28Z", + "reviewed_features": [], + "create": 3, + "modify": 1, + "delete": 0, + "area": 0.186519321469497, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117174481, + "host": "mapcomplete.osm.be", + "theme": "maps", + "locale": "en", + "imagery": "osm", + "add-image": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.715437100000001, + 51.00471125 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T18:21:22Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 1, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117172449, + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "locale": "nl", + "imagery": "osm", + "deletion": 1, + "change_within_5000m": 1, + "deletion:node/9490464167": "testing point" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2157024, + 51.2154692 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "349499", + "uid": "7006347", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T18:15:43Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117172287, + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "change_over_5000m": 1, + "change_within_500m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2157024, + 51.2154692 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #cafes_and_pubs", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T18:12:20Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117172158, + "host": "mapcomplete.osm.be", + "theme": "cafes_and_pubs", + "locale": "en", + "imagery": "osm", + "add-image": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.3719104, + 50.8495035 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T18:08:34Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 4.06296000009218e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117172020, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "locale": "en", + "imagery": "CartoDB.Voyager", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.3947423, + 50.8541809 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T17:45:23Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 9.28449999955957e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117171205, + "host": "mapcomplete.osm.be", + "theme": "food", + "locale": "en", + "imagery": "osm", + "add-image": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.3580935, + 50.844928949999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 4, + "name": "mass modification" + } + ], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T16:12:42Z", + "reviewed_features": [], + "create": 0, + "modify": 439, + "delete": 0, + "area": 1.50158077902896, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117167781, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 637, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.88985565, + 51.104120699999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T14:38:31Z", + "reviewed_features": [], + "create": 31, + "modify": 46, + "delete": 0, + "area": 0.000095567433600134, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117164043, + "host": "mapcomplete.osm.be", + "move": 43, + "theme": "grb", + "answer": 2, + "import": 2, + "locale": "nl", + "imagery": "osm", + "conflation": 6 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.9731199, + 51.16294205 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T13:53:00Z", + "reviewed_features": [], + "create": 213, + "modify": 65, + "delete": 0, + "area": 0.0130425630748969, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117162248, + "host": "mapcomplete.osm.be", + "move": 53, + "theme": "grb", + "import": 22, + "locale": "nl", + "imagery": "osm", + "conflation": 24, + "change_over_5000m": 13 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.733478, + 51.40781965 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T13:09:12Z", + "reviewed_features": [], + "create": 7, + "modify": 10, + "delete": 1, + "area": 0.0000588182025200195, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117160589, + "host": "mapcomplete.osm.be", + "move": 4, + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 6, + "locale": "nl", + "imagery": "osm", + "deletion": 1, + "add-image": 6, + "change_over_5000m": 7, + "change_within_25m": 3, + "change_within_50m": 4, + "change_within_100m": 5, + "change_within_500m": 5, + "move:node/7980623376": "improve_accuracy", + "move:node/9489869914": "improve_accuracy", + "move:node/9489892866": "improve_accuracy", + "deletion:node/7980623376": "testing point" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.5145031, + 51.22344645 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + }, + { + "id": 42, + "name": "Invalid tag modification" + } + ], + "tags": [], + "features": [ + { + "url": "way-125921816", + "name": "Verkeerstuin 'Biesieklette'", + "osm_id": 125921816, + "reasons": [ + 42 + ], + "version": 7, + "primary_tags": {} + } + ], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T12:32:11Z", + "reviewed_features": [], + "create": 2, + "modify": 8, + "delete": 0, + "area": 0.0270943589590802, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117159099, + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 9, + "locale": "nl", + "imagery": "CartoDB.Voyager", + "soft-delete": 1, + "soft-delete:way/125921816": "dit is geen speeltuin, maar een verkeerstuin waar kinderen verkeersregels leren" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.32444845, + 50.968232400000005 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T09:35:59Z", + "reviewed_features": [], + "create": 23, + "modify": 21, + "delete": 0, + "area": 0.00014069695652991, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117151884, + "host": "mapcomplete.osm.be", + "move": 2, + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 27, + "locale": "nl", + "imagery": "osm", + "add-image": 17, + "change_over_5000m": 23, + "change_within_25m": 28, + "change_within_50m": 3, + "change_within_100m": 8, + "change_within_500m": 7, + "move:node/9489430949": "improve_accuracy", + "move:node/9489646032": "improve_accuracy" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.51425635, + 51.22657435 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T09:32:05Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117151752, + "host": "mapcomplete.osm.be", + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 2, + "locale": "nl", + "imagery": "osm", + "add-image": 2, + "change_over_5000m": 1, + "change_within_25m": 3, + "change_within_50m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.5110612, + 51.2254501 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Jori", + "uid": "14800690", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T09:02:46Z", + "reviewed_features": [], + "create": 44, + "modify": 48, + "delete": 1, + "area": 0.000170286208800126, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117150611, + "host": "mapcomplete.osm.be", + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 16, + "locale": "nl", + "imagery": "osm", + "deletion": 1, + "add-image": 41, + "change_over_5000m": 44, + "change_within_25m": 58, + "deletion:node/9489217545": "testing point" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.5147709, + 51.2263965 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "kapiza", + "uid": "15040216", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cycle_infra", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T08:48:32Z", + "reviewed_features": [], + "create": 0, + "modify": 20, + "delete": 0, + "area": 0.000074070873000003, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117149982, + "host": "mapcomplete.osm.be", + "theme": "cycle_infra", + "answer": 20, + "locale": "en", + "imagery": "EsriWorldImagery" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 7.852185, + 48.00468035 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T08:37:51Z", + "reviewed_features": [], + "create": 13, + "modify": 19, + "delete": 0, + "area": 0.0000215856762799765, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117149573, + "host": "mapcomplete.osm.be", + "move": 4, + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 19, + "locale": "nl", + "imagery": "osm", + "add-image": 10, + "change_over_5000m": 13, + "change_within_25m": 6, + "change_within_50m": 17, + "change_within_100m": 10, + "move:node/9489129510": "improve_accuracy", + "move:node/9489261714": "improve_accuracy", + "move:node/9489269562": "improve_accuracy", + "move:node/9489300240": "improve_accuracy" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.5162472000000005, + 51.226175299999994 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T08:27:46Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 0.000139513019360011, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117149227, + "host": "mapcomplete.osm.be", + "theme": "benches", + "answer": 8, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.003857099999999, + 51.134489349999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T07:54:22Z", + "reviewed_features": [], + "create": 0, + "modify": 42, + "delete": 0, + "area": 0.00102796421472014, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117148021, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 57, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.9979423, + 51.1462133 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T07:48:32Z", + "reviewed_features": [], + "create": 15, + "modify": 4, + "delete": 0, + "area": 0.000204659967420032, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117147804, + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "answer": 14, + "locale": "de", + "imagery": "osm", + "change_over_5000m": 15, + "change_within_25m": 7, + "change_within_50m": 3, + "change_within_100m": 3, + "change_within_500m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 11.725999250000001, + 47.9900886 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #nature", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T07:42:57Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000643456548000032, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117147589, + "host": "mapcomplete.osm.be", + "theme": "nature", + "answer": 2, + "locale": "nl", + "imagery": "osm", + "add-image": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.010748400000001, + 51.13582065 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-07T23:59:53Z", + "reviewed_features": [], + "create": 8, + "modify": 62, + "delete": 0, + "area": 8.8785146999344e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117139657, + "host": "mapcomplete.osm.be", + "move": 55, + "theme": "grb", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "conflation": 12, + "change_within_500m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.98983215, + 51.16480105 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "dmx_valou", + "uid": "13908331", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-07T19:26:20Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117132736, + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 2, + "locale": "fr", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 6.1215835, + 46.2326336 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 4, + "name": "mass modification" + } + ], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-07T16:43:09Z", + "reviewed_features": [], + "create": 0, + "modify": 540, + "delete": 0, + "area": 0.0281794568235999, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117127208, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 886, + "locale": "nl", + "imagery": "AGIV", + "change_over_5000m": 1, + "change_within_5000m": 54 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.0031348, + 51.1688049 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-07T16:33:09Z", + "reviewed_features": [], + "create": 0, + "modify": 44, + "delete": 0, + "area": 0.000180281591279987, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117126820, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 59, + "locale": "nl", + "imagery": "AGIV" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.94144975, + 51.1434014 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "trolleway", + "uid": "397326", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #entrances", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-07T15:59:49Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 2.60532799993378e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117125624, + "host": "mapcomplete.osm.be", + "theme": "entrances", + "answer": 4, + "locale": "en", + "imagery": "osm", + "change_within_5000m": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 37.6614644, + 55.77070055 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 43, + "name": "Invalid key value combination" + } + ], + "tags": [], + "features": [ + { + "url": "node-9487156863", + "osm_id": 9487156863, + "reasons": [ + 43 + ], + "version": 1, + "primary_tags": { + "tourism": "map" + } + } + ], + "user": "mike140", + "uid": "2471547", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #maps", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-07T15:48:01Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117125249, + "host": "mapcomplete.osm.be", + "theme": "maps", + "locale": "ru", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 34.7990064, + 50.8962661 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-07T15:14:19Z", + "reviewed_features": [], + "create": 0, + "modify": 16, + "delete": 0, + "area": 0.00227333440542055, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117124054, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 22, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 12, + "change_within_5000m": 10 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.054395899999999, + 51.11872975 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "CjMalone", + "uid": "6816132", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #uk_addresses", + "comments_count": 2, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-07T14:25:59Z", + "reviewed_features": [], + "create": 11, + "modify": 8, + "delete": 0, + "area": 0.00000147473078999973, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117122175, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "uk_addresses", + "answer": 16, + "import": 11, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.29605595, + 50.69736545000001 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-07T13:47:34Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.00000266964404999211, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117120640, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 1, + "locale": "en", + "imagery": "CartoDB.Voyager", + "add-image": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.393012649999999, + 50.85382595 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-07T13:35:32Z", + "reviewed_features": [], + "create": 0, + "modify": 29, + "delete": 0, + "area": 0.00364316540420003, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117120081, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 39, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 13, + "change_within_5000m": 26 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.0215511, + 51.155660049999994 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-07T12:48:13Z", + "reviewed_features": [], + "create": 0, + "modify": 14, + "delete": 0, + "area": 0.000047543134770004, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117118217, + "host": "mapcomplete.osm.be", + "theme": "benches", + "answer": 20, + "locale": "nl", + "imagery": "osm", + "change_within_500m": 20 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.00740855, + 51.127844550000006 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Jakuje", + "uid": "1641564", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-07T08:23:47Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117107587, + "host": "mapcomplete.osm.be", + "theme": "trees", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 16.5751174, + 49.2333062 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-07T08:00:15Z", + "reviewed_features": [], + "create": 13, + "modify": 0, + "delete": 0, + "area": 0.00038083420944001, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117106705, + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "answer": 7, + "locale": "de", + "imagery": "osm", + "change_over_5000m": 13, + "change_within_25m": 4, + "change_within_50m": 2, + "change_within_100m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 11.8196291, + 48.02427265 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jas7100", + "uid": "15023699", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-07T00:01:17Z", + "reviewed_features": [], + "create": 7, + "modify": 2, + "delete": 0, + "area": 0.0217250127215007, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117098329, + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 16, + "locale": "fr", + "imagery": "SPW_ORTHO_LAST", + "change_over_5000m": 8, + "change_within_5000m": 9 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.2604713499999995, + 50.535606200000004 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T19:50:32Z", + "reviewed_features": [], + "create": 9, + "modify": 10, + "delete": 1, + "area": 0.00000271812923999703, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117092571, + "host": "mapcomplete.osm.be", + "move": 7, + "theme": "grb", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "conflation": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.8077447499999995, + 51.1716143 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pipeton", + "uid": "11969052", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-06T19:33:01Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.00000152456625000562, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117092124, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -3.6082627499999997, + 37.180579550000004 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-06T16:44:00Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 2.97816999985172e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117086537, + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "benches", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "move:node/9483811766": "improve_accuracy" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.25039075, + 51.23787525 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T15:31:08Z", + "reviewed_features": [], + "create": 0, + "modify": 82, + "delete": 0, + "area": 0.005475181474, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117083441, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 122, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.98339075, + 51.190768 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T11:47:44Z", + "reviewed_features": [], + "create": 0, + "modify": 38, + "delete": 0, + "area": 0.000301493327310007, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117076107, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 45, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.99355415, + 51.16445125 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Driesvr", + "uid": "4757701", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-06T11:23:13Z", + "reviewed_features": [], + "create": 1, + "modify": 5, + "delete": 0, + "area": 1.76999999967769e-10, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117075258, + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "cyclofix", + "answer": 6, + "locale": "en", + "imagery": "CartoDB.Voyager", + "add-image": 1, + "move:node/9483033353": "improve_accuracy" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.30692765, + 50.8342351 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "shogun", + "uid": "94315", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-06T11:03:46Z", + "reviewed_features": [], + "create": 0, + "modify": 10, + "delete": 0, + "area": 0.000758011175500046, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117074726, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "hailhydrant", + "answer": 11, + "locale": "en", + "imagery": "HDM_HOT" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 12.69386325, + 51.0759341 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "kbentekik", + "uid": "4495", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #observation_towers", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T10:56:40Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 8.57831999948163e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117074470, + "host": "mapcomplete.osm.be", + "theme": "observation_towers", + "answer": 3, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.73895285, + 50.8125385 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "kbentekik", + "uid": "4495", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T10:23:06Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 4.42549999997565e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117073294, + "host": "mapcomplete.osm.be", + "theme": "playgrounds", + "answer": 2, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.559968, + 50.849278350000006 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "kbentekik", + "uid": "4495", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #fritures", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T10:15:47Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117073072, + "host": "mapcomplete.osm.be", + "theme": "fritures", + "answer": 6, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.624339, + 50.8703127 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "kbentekik", + "uid": "4495", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #sport_pitches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T10:11:50Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0.00000417924069999491, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117072973, + "host": "mapcomplete.osm.be", + "theme": "sport_pitches", + "answer": 4, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.6149052, + 50.84535965 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "kbentekik", + "uid": "4495", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #climbing", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T10:00:32Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117072647, + "host": "mapcomplete.osm.be", + "theme": "climbing", + "answer": 5, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.5877942, + 50.7352587 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "kbentekik", + "uid": "4495", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 3, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T09:52:03Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117072390, + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 4, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.6012411, + 50.8671691 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T09:34:32Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117071913, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 3, + "locale": "nl", + "imagery": "AGIVFlandersGRB" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.2344225, + 50.7377153 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "kbentekik", + "uid": "4495", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T09:19:50Z", + "reviewed_features": [], + "create": 1, + "modify": 25, + "delete": 0, + "area": 0.00554786979894018, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117071461, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 33, + "locale": "en", + "imagery": "CartoDB.Voyager", + "change_over_5000m": 2, + "change_within_5000m": 18 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.60071485, + 50.8358086 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "hfs", + "uid": "9607", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-06T08:19:24Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117070044, + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 13.0488154, + 52.3830947 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "oudalricus", + "uid": "29752", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T04:49:30Z", + "reviewed_features": [], + "create": 2, + "modify": 2, + "delete": 0, + "area": 0.0000509027850000251, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117067048, + "host": "mapcomplete.osm.be", + "theme": "bookcases", + "answer": 5, + "locale": "en", + "imagery": "osm", + "change_over_5000m": 2, + "change_within_500m": 3, + "change_within_5000m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 6.6375567, + 49.7444332 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T03:36:36Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 1.75087499983324e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117066501, + "host": "mapcomplete.osm.be", + "theme": "trees", + "answer": 1, + "locale": "en", + "imagery": "EsriWorldImagery", + "add-image": 3, + "change_over_5000m": 1, + "change_within_1000m": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -70.57622965, + -33.58917985 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-06T01:28:05Z", + "reviewed_features": [], + "create": 1, + "modify": 4, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117065334, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 4, + "locale": "en", + "imagery": "osm", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.3293576, + 50.9330894 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclestreets", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-06T01:11:22Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 8.23910149993863e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117065156, + "host": "mapcomplete.osm.be", + "theme": "cyclestreets", + "locale": "en", + "imagery": "osm", + "add-image": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.33040935, + 50.93343195 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-05T23:19:52Z", + "reviewed_features": [], + "create": 87, + "modify": 99, + "delete": 0, + "area": 0.0156375734063937, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117063791, + "host": "mapcomplete.osm.be", + "move": 87, + "theme": "grb", + "answer": 3, + "import": 14, + "locale": "nl", + "imagery": "osm", + "conflation": 20, + "change_over_5000m": 14 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.7057804999999995, + 51.006778499999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-05T22:31:34Z", + "reviewed_features": [], + "create": 12, + "modify": 40, + "delete": 0, + "area": 3.00064160001714e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117062931, + "host": "mapcomplete.osm.be", + "move": 38, + "theme": "grb", + "locale": "nl", + "imagery": "osm", + "conflation": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 2.9493548499999998, + 51.2238674 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-05T22:12:29Z", + "reviewed_features": [], + "create": 0, + "modify": 32, + "delete": 0, + "area": 0.0000289318822999867, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117062564, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "etymology", + "answer": 33, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.4737913, + 51.04145065 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclestreets", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-05T21:07:17Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0.00000393128015998355, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117061161, + "host": "mapcomplete.osm.be", + "theme": "cyclestreets", + "locale": "en", + "imagery": "osm", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.700900900000001, + 50.9468739 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #bicycle_rental", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-05T21:05:37Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117061124, + "host": "mapcomplete.osm.be", + "theme": "bicycle_rental", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.3505589, + 50.8534436 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-05T20:57:19Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117060916, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "locale": "en", + "imagery": "CartoDB.Voyager", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.3848027, + 50.8537825 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jas7100", + "uid": "15023699", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-05T20:30:50Z", + "reviewed_features": [], + "create": 3, + "modify": 0, + "delete": 0, + "area": 0.00117592998955005, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117060144, + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 7, + "locale": "fr", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.21651575, + 50.48277865 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pipeton", + "uid": "11969052", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-05T19:14:33Z", + "reviewed_features": [], + "create": 0, + "modify": 13, + "delete": 0, + "area": 0.000186666271319987, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117057746, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 18, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -3.6029033999999998, + 37.18449865 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-05T17:50:08Z", + "reviewed_features": [], + "create": 2, + "modify": 4, + "delete": 0, + "area": 1.086299999993e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117055064, + "host": "mapcomplete.osm.be", + "theme": "trees", + "answer": 2, + "locale": "en", + "imagery": "EsriWorldImagery", + "add-image": 2, + "change_over_5000m": 2, + "change_within_25m": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -70.6199609, + -33.41523425 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #climbing", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-05T14:28:52Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117047039, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "climbing", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "change_within_50m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.6993572, + 51.0548482 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-05T14:11:48Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117046304, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 2, + "locale": "en", + "imagery": "CartoDB.Voyager" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.4279919, + 50.8954137 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pipeton", + "uid": "11969052", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-05T12:28:57Z", + "reviewed_features": [], + "create": 0, + "modify": 34, + "delete": 0, + "area": 0.000823279896180065, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117042748, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 49, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -3.6102721, + 37.19314985 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclestreets", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-05T10:30:35Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0.00000212131868001264, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117038736, + "host": "mapcomplete.osm.be", + "theme": "cyclestreets", + "locale": "en", + "imagery": "osm", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.5057758, + 50.8841731 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Jordi MF", + "uid": "8278438", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/nameca.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T23:08:30Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0.737210158408981, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117026389, + "host": "mapcomplete.osm.be", + "theme": "gh://yopaseopor/mcquests/master/nameca.json", + "answer": 3, + "locale": "ca", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -0.2540176, + 39.169342150000006 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T22:22:16Z", + "reviewed_features": [], + "create": 0, + "modify": 90, + "delete": 0, + "area": 0.0401349367103696, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117024588, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 132, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.62166195, + 54.61615275 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Stereo", + "uid": "40611", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T22:09:40Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117024181, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 1, + "locale": "en", + "imagery": "CartoDB.Voyager" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -73.9586471, + 40.7358133 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #fritures", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-04T20:14:36Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117020965, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "fritures", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "change_within_25m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.7001051, + 51.0525401 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T19:40:45Z", + "reviewed_features": [], + "create": 0, + "modify": 116, + "delete": 0, + "area": 0.0236791804765092, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117020021, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 165, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.4202968500000002, + 54.78992755 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T17:22:57Z", + "reviewed_features": [], + "create": 0, + "modify": 142, + "delete": 0, + "area": 0.0599800374607494, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117015486, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 218, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.61068935, + 54.93911265 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-04T15:35:16Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117011429, + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "answer": 1, + "locale": "de", + "imagery": "osm", + "change_over_5000m": 1, + "change_within_100m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 11.8755227, + 47.9883074 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pipeton", + "uid": "11969052", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T15:28:35Z", + "reviewed_features": [], + "create": 0, + "modify": 51, + "delete": 0, + "area": 0.000343044279940017, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117011189, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 69, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -3.60746175, + 37.1764941 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T14:32:33Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 1, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117009200, + "host": "mapcomplete.osm.be", + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "locale": "nl", + "imagery": "osm", + "deletion": 1, + "deletion:node/8264901851": "not found" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.5144967, + 51.2274513 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "AgusQui", + "uid": "331218", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/AgusQui/MapCompleteRailway/main/Signals", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-04T13:49:01Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117007591, + "host": "mapcomplete.osm.be", + "theme": "gh://agusqui/mapcompleterailway/main/signals", + "answer": 5, + "locale": "es", + "imagery": "EsriWorldImageryClarity", + "change_over_5000m": 1, + "change_within_100m": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -58.4142745, + -34.60851 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "StefDeGreef", + "uid": "1860737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-04T11:58:30Z", + "reviewed_features": [], + "create": 2, + "modify": 4, + "delete": 1, + "area": 9.99999996726842e-13, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117003771, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 7, + "locale": "fr", + "imagery": "AGIV", + "deletion": 1, + "add-image": 2, + "change_over_5000m": 2, + "change_within_25m": 10, + "deletion:node/9474148329": "mauvaise catégorie" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.4143583, + 50.8202936 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T10:50:55Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 0.0278837800463587, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 117000670, + "host": "mapcomplete.osm.be", + "theme": "benches", + "locale": "nl", + "imagery": "osm", + "add-image": 5, + "change_within_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.3643696, + 51.1336217 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Stinus_Clasius", + "uid": "1086503", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T10:18:16Z", + "reviewed_features": [], + "create": 21, + "modify": 0, + "delete": 0, + "area": 8.10454100006014e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116999217, + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 1, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.00015065, + 50.914118450000004 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "quantumstate", + "uid": "71337", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #sidewalks", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T10:17:42Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 7.81266200010587e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116999189, + "host": "mapcomplete.osm.be", + "theme": "sidewalks", + "answer": 3, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -0.04689035, + 51.4931733 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-04T07:25:27Z", + "reviewed_features": [], + "create": 7, + "modify": 0, + "delete": 0, + "area": 0.00000360670982000805, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116992786, + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "answer": 3, + "locale": "de", + "imagery": "osm", + "change_over_5000m": 7, + "change_within_25m": 2, + "change_within_50m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 11.81097665, + 48.0206827 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "womped", + "uid": "1880469", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #openwindpowermap", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T07:18:58Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 0.0000214852108499701, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116992590, + "host": "mapcomplete.osm.be", + "theme": "openwindpowermap", + "answer": 5, + "locale": "en", + "imagery": "CartoDB.Voyager" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 10.76630795, + 49.63019435 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-04T01:31:08Z", + "reviewed_features": [], + "create": 0, + "modify": 8, + "delete": 0, + "area": 0.000931500118709959, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116985905, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "shops", + "answer": 8, + "locale": "en", + "imagery": "osm", + "change_within_1000m": 1, + "change_within_5000m": 7 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2124950500000002, + 51.22994905 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-04T01:20:24Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116985783, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cyclofix", + "answer": 1, + "locale": "nl", + "imagery": "CartoDB.Voyager", + "change_over_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.7086034, + 51.0371267 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 91, + "name": "Motorway/trunk geometry modified" + } + ], + "tags": [], + "features": [ + { + "url": "way-975389803", + "name": "Consett Road", + "osm_id": 975389803, + "reasons": [ + 91 + ], + "version": 4, + "primary_tags": { + "highway": "trunk" + } + } + ], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-03T22:29:42Z", + "reviewed_features": [], + "create": 0, + "modify": 81, + "delete": 0, + "area": 0.0479769859208512, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116982670, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 123, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.73418035, + 54.89588915 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-03T18:30:09Z", + "reviewed_features": [], + "create": 0, + "modify": 109, + "delete": 0, + "area": 0.0285403107347409, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116975972, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 165, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -1.65464475, + 54.71689 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "milenasonneveld", + "uid": "8177639", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #climbing", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-03T15:44:58Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116970091, + "host": "mapcomplete.osm.be", + "theme": "climbing", + "answer": 2, + "locale": "en", + "imagery": "osm", + "add-image": 1, + "change_over_5000m": 1, + "change_within_25m": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.3006754, + 50.8825968 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-03T14:04:40Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116966319, + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 4, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 1, + "change_within_5000m": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.3630863, + 50.9960832 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "AgusQui", + "uid": "331218", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/AgusQui/MapCompleteRailway/main/Signals", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-03T13:00:07Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116963372, + "host": "mapcomplete.osm.be", + "theme": "gh://agusqui/mapcompleterailway/main/signals", + "answer": 4, + "locale": "es", + "imagery": "osm", + "change_over_5000m": 1, + "change_within_25m": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + -58.7921441, + -34.6497892 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-03T12:22:28Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116961725, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "shops", + "answer": 2, + "locale": "en", + "imagery": "osm", + "add-image": 1, + "change_within_100m": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2045793, + 51.2231139 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-03T11:18:10Z", + "reviewed_features": [], + "create": 6, + "modify": 11, + "delete": 0, + "area": 0.00000915342031999193, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116958998, + "host": "mapcomplete.osm.be", + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 8, + "locale": "nl", + "imagery": "osm", + "add-image": 7, + "change_over_5000m": 6, + "change_within_25m": 1, + "change_within_50m": 3, + "change_within_100m": 6, + "change_within_500m": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.5027176, + 51.223291149999994 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 57, + "name": "Feature overlaps with existing features" + } + ], + "tags": [], + "features": [ + { + "url": "way-1027348440", + "osm_id": 1027348440, + "reasons": [ + 57 + ], + "version": 1, + "primary_tags": { + "building": "yes" + } + } + ], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-03T11:03:53Z", + "reviewed_features": [], + "create": 65, + "modify": 82, + "delete": 1, + "area": 0.000933149096000222, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116958369, + "host": "mapcomplete.osm.be", + "move": 70, + "theme": "grb", + "answer": 1, + "import": 2, + "locale": "nl", + "imagery": "osm", + "conflation": 26 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.8953164000000005, + 51.1479844 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "ladoga", + "uid": "827957", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-03T10:38:42Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 0.0000254243576499923, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116957163, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 8, + "locale": "de", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 16.37077815, + 48.17006515 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-03T09:32:58Z", + "reviewed_features": [], + "create": 6, + "modify": 19, + "delete": 0, + "area": 2.18991759999316e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116954133, + "host": "mapcomplete.osm.be", + "move": 16, + "theme": "grb", + "locale": "nl", + "imagery": "osm", + "conflation": 6 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.036241199999999, + 51.1450411 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-03T09:31:10Z", + "reviewed_features": [], + "create": 12, + "modify": 16, + "delete": 0, + "area": 0.0000458808661800098, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116954048, + "host": "mapcomplete.osm.be", + "move": 3, + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 12, + "locale": "nl", + "imagery": "osm", + "add-image": 11, + "change_over_5000m": 12, + "change_within_25m": 14, + "change_within_100m": 8, + "change_within_500m": 4, + "move:node/9471164305": "improve_accuracy", + "move:node/9471270450": "improve_accuracy", + "move:node/9471273002": "improve_accuracy" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.50380715, + 51.222460100000006 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-03T06:49:21Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116948018, + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "locale": "de", + "imagery": "osm", + "change_over_5000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 11.7879398, + 48.0076587 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Stinus_Clasius", + "uid": "1086503", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-02T22:28:13Z", + "reviewed_features": [], + "create": 78, + "modify": 0, + "delete": 0, + "area": 0.00537978322287021, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116938373, + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 10, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.99356555, + 50.91401875 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-02T20:56:15Z", + "reviewed_features": [], + "create": 1, + "modify": 9, + "delete": 0, + "area": 0.000154698350000062, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116935775, + "host": "mapcomplete.osm.be", + "move": 6, + "theme": "cyclofix", + "answer": 4, + "locale": "nl", + "imagery": "AGIV", + "add-image": 8, + "change_within_25m": 6, + "change_within_50m": 6, + "move:node/9246056984": "improve_accuracy" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.240376599999999, + 50.7367963 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Stinus_Clasius", + "uid": "1086503", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-02T20:41:45Z", + "reviewed_features": [], + "create": 83, + "modify": 6, + "delete": 0, + "area": 0.0011675329132498, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116935227, + "host": "mapcomplete.osm.be", + "move": 4, + "theme": "grb", + "answer": 2, + "import": 7, + "locale": "nl", + "imagery": "osm", + "conflation": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.52607115, + 51.133823050000004 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-02T17:17:19Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 0.000503599892180124, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116925894, + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "benches", + "answer": 5, + "locale": "nl", + "imagery": "osm", + "move:node/1706000858": "improve_accuracy" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.01627635, + 51.1392182 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #nature", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-02T16:52:31Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 4.61999999436376e-11, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116923770, + "host": "mapcomplete.osm.be", + "theme": "nature", + "locale": "nl", + "imagery": "osm", + "add-image": 6 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.041887, + 51.1515348 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-02T15:56:24Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 0.00000220390090000211, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116920011, + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 7, + "locale": "nl", + "imagery": "osm", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.034685550000001, + 51.150353499999994 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-02T15:54:11Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0.00000286904520000127, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116919912, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "locale": "nl", + "imagery": "osm", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.0396392, + 51.1451315 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #nature", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-02T15:51:54Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116919820, + "host": "mapcomplete.osm.be", + "theme": "nature", + "locale": "nl", + "imagery": "osm", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.0150035, + 51.1428292 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-02T15:44:38Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116919481, + "host": "mapcomplete.osm.be", + "theme": "benches", + "answer": 5, + "locale": "nl", + "imagery": "osm", + "add-image": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.0149785, + 51.1428032 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "GBAB", + "uid": "3335899", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #observation_towers", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-02T14:21:11Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 1.24201999979239e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116915898, + "host": "mapcomplete.osm.be", + "theme": "observation_towers", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 18.9798257, + 47.69100315 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-02T12:39:25Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 1, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116911694, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cyclofix", + "locale": "en", + "imagery": "CartoDB.Voyager", + "deletion": 1, + "change_within_500m": 1, + "deletion:node/9425818877": "duplicate" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2249977, + 51.210513 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #test", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-02T11:42:42Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 2.5314093000299e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116909437, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "test", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "change_within_50m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.23716075, + 51.18855405 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-02T11:40:35Z", + "reviewed_features": [], + "create": 0, + "modify": 7, + "delete": 0, + "area": 0.000119596013250028, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116909356, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "playgrounds", + "answer": 4, + "locale": "nl", + "imagery": "osm", + "add-image": 4, + "delete-image": 1, + "change_within_25m": 6, + "change_within_50m": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.23202115, + 51.19379365 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-02T11:21:58Z", + "reviewed_features": [], + "create": 0, + "modify": 88, + "delete": 0, + "area": 0.00057000400200004, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116908634, + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "etymology", + "answer": 127, + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "change_within_25m": 6, + "change_within_50m": 7, + "change_within_100m": 18, + "change_within_500m": 59, + "change_within_1000m": 30, + "change_within_5000m": 8 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.2437670499999998, + 51.1900844 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thibaultmol", + "uid": "2916921", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-02T10:31:16Z", + "reviewed_features": [], + "create": 0, + "modify": 7, + "delete": 0, + "area": 0.000950729211640121, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116906468, + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 9, + "locale": "nl", + "imagery": "osm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.3696776, + 51.00611265 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "GeertDD", + "uid": "2776338", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-01T19:45:12Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116882267, + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 1, + "import": 1, + "imagery": "osm", + "language": "nl" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.4669026, + 51.4670566 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-01T15:57:32Z", + "reviewed_features": [], + "create": 10, + "modify": 0, + "delete": 0, + "area": 6.04912000016582e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116874502, + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 2, + "imagery": "AGIVFlandersGRB", + "language": "nl", + "change_over_5000m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.5340641999999995, + 51.421862700000005 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "habi", + "uid": "15671", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #artwork", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-01T15:27:23Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116873429, + "host": "mapcomplete.osm.be", + "theme": "artwork", + "answer": 1, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 7.6340412, + 46.7554728 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 4, + "name": "mass modification" + } + ], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-01T14:28:34Z", + "reviewed_features": [], + "create": 94, + "modify": 236, + "delete": 6, + "area": 0.000183572463149995, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116871277, + "host": "mapcomplete.osm.be", + "move": 213, + "theme": "grb", + "answer": 1, + "import": 9, + "imagery": "osm", + "language": "nl", + "conflation": 68, + "change_within_500m": 9, + "change_within_1000m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.01077555, + 51.114988249999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-01T13:10:11Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116868200, + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 5, + "imagery": "osm", + "language": "nl" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.5719102, + 51.127015 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-01T12:23:54Z", + "reviewed_features": [], + "create": 19, + "modify": 36, + "delete": 0, + "area": 0.0000169902935799801, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116866356, + "host": "mapcomplete.osm.be", + "move": 3, + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 19, + "imagery": "osm", + "language": "nl", + "add-image": 23, + "change_over_5000m": 19, + "change_within_25m": 33, + "change_within_50m": 5, + "change_within_100m": 7, + "move:node/9465980888": "improve_accuracy", + "move:node/9466180750": "improve_accuracy" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.5134892, + 51.22819895 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "pieterpaul", + "uid": "14539037", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-01T11:20:00Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116863788, + "host": "mapcomplete.osm.be", + "theme": "playgrounds", + "answer": 1, + "imagery": "AGIV", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.7424285, + 50.9160986 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #test", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-01T11:15:58Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116863619, + "host": "mapcomplete.osm.be", + "theme": "test", + "answer": 1, + "imagery": "osm", + "language": "nl", + "change_within_25m": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.5112514, + 51.2295137 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-01T10:19:54Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 1, + "area": 0.000289339196450073, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116861180, + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 4, + "imagery": "osm", + "deletion": 1, + "language": "nl", + "deletion:node/9420056262": "duplicate" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.20444105, + 50.92634885 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "habi", + "uid": "15671", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-01T09:54:54Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 5.51764999983124e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116860089, + "host": "mapcomplete.osm.be", + "theme": "trees", + "answer": 3, + "imagery": "osm", + "language": "en", + "change_within_50m": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 7.41637825, + 46.922135749999995 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-01T09:31:33Z", + "reviewed_features": [], + "create": 4, + "modify": 12, + "delete": 0, + "area": 0.0000119820829999795, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116859087, + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 10, + "imagery": "osm", + "language": "nl", + "add-image": 6, + "change_over_5000m": 4, + "change_within_25m": 15, + "change_within_50m": 2, + "move:node/9465521314": "improve_accuracy" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.5077700499999995, + 51.2286787 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Robin van der Linde", + "uid": "5093765", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #cycle_infra", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-01T09:23:09Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116858693, + "host": "mapcomplete.osm.be", + "theme": "cycle_infra", + "answer": 2, + "imagery": "CartoDB.Voyager", + "language": "en", + "change_over_5000m": 1, + "change_within_25m": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 7.3428155, + 53.1637274 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Robin van der Linde", + "uid": "5093765", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-01T09:20:56Z", + "reviewed_features": [], + "create": 2, + "modify": 6, + "delete": 1, + "area": 2.50013719996649e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116858601, + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 12, + "imagery": "CartoDB.Voyager", + "deletion": 1, + "language": "en", + "change_over_5000m": 2, + "change_within_25m": 13, + "deletion:node/5168101073": "disused" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 7.342973, + 53.163731999999996 + ] + } + }, + { + "type": "Feature", + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "art_m_wb", + "uid": "12876924", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #climbing", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-01T06:09:39Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 3.48838469999256e-7, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "id": 116850450, + "host": "mapcomplete.osm.be", + "theme": "climbing", + "answer": 7, + "imagery": "osm", + "language": "en" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.610203349999999, + 51.12703915 + ] + } } ] } \ No newline at end of file diff --git a/Docs/Tools/graphs/Changesets per day (line) in 2022.png b/Docs/Tools/graphs/Changesets per day (line) in 2022.png index 830d50ab29..e97c354269 100644 Binary files a/Docs/Tools/graphs/Changesets per day (line) in 2022.png and b/Docs/Tools/graphs/Changesets per day (line) in 2022.png differ diff --git a/Docs/Tools/graphs/Changesets per day (line).png b/Docs/Tools/graphs/Changesets per day (line).png index 056e772475..5edee5e7d1 100644 Binary files a/Docs/Tools/graphs/Changesets per day (line).png and b/Docs/Tools/graphs/Changesets per day (line).png differ diff --git a/Docs/Tools/graphs/Changesets per host in 2022.png b/Docs/Tools/graphs/Changesets per host in 2022.png index 20990599fe..4aa7ee1d67 100644 Binary files a/Docs/Tools/graphs/Changesets per host in 2022.png and b/Docs/Tools/graphs/Changesets per host in 2022.png differ diff --git a/Docs/Tools/graphs/Changesets per host.png b/Docs/Tools/graphs/Changesets per host.png index 002f9ff6fd..3c1aa5aec0 100644 Binary files a/Docs/Tools/graphs/Changesets per host.png and b/Docs/Tools/graphs/Changesets per host.png differ diff --git a/Docs/Tools/graphs/Changesets per minor version number in 2020.png b/Docs/Tools/graphs/Changesets per minor version number in 2020.png new file mode 100644 index 0000000000..5c7d7fa5e3 Binary files /dev/null and b/Docs/Tools/graphs/Changesets per minor version number in 2020.png differ diff --git a/Docs/Tools/graphs/Changesets per minor version number in 2021.png b/Docs/Tools/graphs/Changesets per minor version number in 2021.png new file mode 100644 index 0000000000..b24b63f700 Binary files /dev/null and b/Docs/Tools/graphs/Changesets per minor version number in 2021.png differ diff --git a/Docs/Tools/graphs/Changesets per minor version number in 2022.png b/Docs/Tools/graphs/Changesets per minor version number in 2022.png new file mode 100644 index 0000000000..cbca95827b Binary files /dev/null and b/Docs/Tools/graphs/Changesets per minor version number in 2022.png differ diff --git a/Docs/Tools/graphs/Changesets per minor version number.png b/Docs/Tools/graphs/Changesets per minor version number.png new file mode 100644 index 0000000000..2a235d925b Binary files /dev/null and b/Docs/Tools/graphs/Changesets per minor version number.png differ diff --git a/Docs/Tools/graphs/Changesets per theme (bar) in 2022.png b/Docs/Tools/graphs/Changesets per theme (bar) in 2022.png index ca2cd74631..229bfd425d 100644 Binary files a/Docs/Tools/graphs/Changesets per theme (bar) in 2022.png and b/Docs/Tools/graphs/Changesets per theme (bar) in 2022.png differ diff --git a/Docs/Tools/graphs/Changesets per theme (bar).png b/Docs/Tools/graphs/Changesets per theme (bar).png index 775b24e178..9551608c23 100644 Binary files a/Docs/Tools/graphs/Changesets per theme (bar).png and b/Docs/Tools/graphs/Changesets per theme (bar).png differ diff --git a/Docs/Tools/graphs/Changesets per theme (pie) in 2022.png b/Docs/Tools/graphs/Changesets per theme (pie) in 2022.png index 6d6085f911..6eaad1871e 100644 Binary files a/Docs/Tools/graphs/Changesets per theme (pie) in 2022.png and b/Docs/Tools/graphs/Changesets per theme (pie) in 2022.png differ diff --git a/Docs/Tools/graphs/Changesets per theme (pie).png b/Docs/Tools/graphs/Changesets per theme (pie).png index f9d06883de..44350c5a19 100644 Binary files a/Docs/Tools/graphs/Changesets per theme (pie).png and b/Docs/Tools/graphs/Changesets per theme (pie).png differ diff --git a/Docs/Tools/graphs/Changesets per theme in 2022.png b/Docs/Tools/graphs/Changesets per theme in 2022.png index 076c3487c8..bb722d8b93 100644 Binary files a/Docs/Tools/graphs/Changesets per theme in 2022.png and b/Docs/Tools/graphs/Changesets per theme in 2022.png differ diff --git a/Docs/Tools/graphs/Changesets per theme.png b/Docs/Tools/graphs/Changesets per theme.png index e0a42092ec..b0c79c3d63 100644 Binary files a/Docs/Tools/graphs/Changesets per theme.png and b/Docs/Tools/graphs/Changesets per theme.png differ diff --git a/Docs/Tools/graphs/Changesets per version number in 2022.png b/Docs/Tools/graphs/Changesets per version number in 2022.png index d16df7935c..e845dc505e 100644 Binary files a/Docs/Tools/graphs/Changesets per version number in 2022.png and b/Docs/Tools/graphs/Changesets per version number in 2022.png differ diff --git a/Docs/Tools/graphs/Changesets per version number.png b/Docs/Tools/graphs/Changesets per version number.png index 01185b4215..e1f546f2f8 100644 Binary files a/Docs/Tools/graphs/Changesets per version number.png and b/Docs/Tools/graphs/Changesets per version number.png differ diff --git a/Docs/Tools/graphs/Contributors per changeset count in 2022.png b/Docs/Tools/graphs/Contributors per changeset count in 2022.png index 58fc0dd65e..b2006bcbe8 100644 Binary files a/Docs/Tools/graphs/Contributors per changeset count in 2022.png and b/Docs/Tools/graphs/Contributors per changeset count in 2022.png differ diff --git a/Docs/Tools/graphs/Contributors per changeset count.png b/Docs/Tools/graphs/Contributors per changeset count.png index 79b0c1183e..a2582788ce 100644 Binary files a/Docs/Tools/graphs/Contributors per changeset count.png and b/Docs/Tools/graphs/Contributors per changeset count.png differ diff --git a/Docs/Tools/graphs/Contributors per day in 2022.png b/Docs/Tools/graphs/Contributors per day in 2022.png index c66e5cc709..4542ae01a7 100644 Binary files a/Docs/Tools/graphs/Contributors per day in 2022.png and b/Docs/Tools/graphs/Contributors per day in 2022.png differ diff --git a/Docs/Tools/graphs/Contributors per day.png b/Docs/Tools/graphs/Contributors per day.png index c2a2dc369b..f364cfa71e 100644 Binary files a/Docs/Tools/graphs/Contributors per day.png and b/Docs/Tools/graphs/Contributors per day.png differ diff --git a/Docs/Tools/graphs/Deletion-changesets per theme in 2022.png b/Docs/Tools/graphs/Deletion-changesets per theme in 2022.png index b578a4d9f2..28b9eeb77b 100644 Binary files a/Docs/Tools/graphs/Deletion-changesets per theme in 2022.png and b/Docs/Tools/graphs/Deletion-changesets per theme in 2022.png differ diff --git a/Docs/Tools/graphs/Deletion-changesets per theme.png b/Docs/Tools/graphs/Deletion-changesets per theme.png index f740b82c69..d94b57cce8 100644 Binary files a/Docs/Tools/graphs/Deletion-changesets per theme.png and b/Docs/Tools/graphs/Deletion-changesets per theme.png differ diff --git a/Docs/Tools/graphs/Empty changesets by date.png b/Docs/Tools/graphs/Empty changesets by date.png index 0663f7768c..15270415cb 100644 Binary files a/Docs/Tools/graphs/Empty changesets by date.png and b/Docs/Tools/graphs/Empty changesets by date.png differ diff --git a/Docs/Tools/stats/stats.2022-1.json b/Docs/Tools/stats/stats.2022-1.json index cbfb1cf0a8..7fe2b8e048 100644 --- a/Docs/Tools/stats/stats.2022-1.json +++ b/Docs/Tools/stats/stats.2022-1.json @@ -1,5 +1,14605 @@ { "features": [ + { + "id": 116841128, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.1074317, + 50.9710588 + ], + [ + 4.4451171, + 50.9710588 + ], + [ + 4.4451171, + 51.1970762 + ], + [ + 3.1074317, + 51.1970762 + ], + [ + 3.1074317, + 50.9710588 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Dampee", + "uid": "2175714", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-31T21:33:07Z", + "reviewed_features": [], + "create": 0, + "modify": 33, + "delete": 0, + "area": 0.302340176125955, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 44, + "imagery": "osm", + "language": "nl" + }, + "id": 116841128 + } + }, + { + "id": 116839950, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 8.6149764, + 50.0945623 + ], + [ + 8.6441637, + 50.0945623 + ], + [ + 8.6441637, + 50.1307304 + ], + [ + 8.6149764, + 50.1307304 + ], + [ + 8.6149764, + 50.0945623 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dekarl", + "uid": "5760", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-31T20:59:37Z", + "reviewed_features": [], + "create": 0, + "modify": 17, + "delete": 0, + "area": 0.00105564918512994, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 25, + "imagery": "osm", + "language": "en" + }, + "id": 116839950 + } + }, + { + "id": 116839830, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -70.5702477, + -33.5923317 + ], + [ + -70.5701539, + -33.5923317 + ], + [ + -70.5701539, + -33.5921641 + ], + [ + -70.5702477, + -33.5921641 + ], + [ + -70.5702477, + -33.5923317 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T20:55:23Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 1.5720880000753e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 4, + "change_within_25m": 4 + }, + "id": 116839830 + } + }, + { + "id": 116838253, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.4047122, + 51.0430522 + ], + [ + 3.4073139, + 51.0430522 + ], + [ + 3.4073139, + 51.0443654 + ], + [ + 3.4047122, + 51.0443654 + ], + [ + 3.4047122, + 51.0430522 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thibaultmol", + "uid": "2916921", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-31T20:07:54Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0.00000341655243999605, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 6, + "imagery": "osm", + "language": "nl" + }, + "id": 116838253 + } + }, + { + "id": 116838205, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.7853766, + 50.8531057 + ], + [ + 2.8291568, + 50.8531057 + ], + [ + 2.8291568, + 50.8592117 + ], + [ + 2.7853766, + 50.8592117 + ], + [ + 2.7853766, + 50.8531057 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T20:05:56Z", + "reviewed_features": [], + "create": 0, + "modify": 17, + "delete": 0, + "area": 0.000267321901200112, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 33, + "imagery": "osm", + "language": "nl" + }, + "id": 116838205 + } + }, + { + "id": 116838028, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.9401234, + 51.086101 + ], + [ + 2.9429903, + 51.086101 + ], + [ + 2.9429903, + 51.0869226 + ], + [ + 2.9401234, + 51.0869226 + ], + [ + 2.9401234, + 51.086101 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T20:00:21Z", + "reviewed_features": [], + "create": 26, + "modify": 9, + "delete": 0, + "area": 0.00000235544504000526, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 8, + "theme": "grb", + "import": 3, + "imagery": "osm", + "language": "en", + "conflation": 2 + }, + "id": 116838028 + } + }, + { + "id": 116835279, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.4943598, + 51.3047207 + ], + [ + 5.6608235, + 51.3047207 + ], + [ + 5.6608235, + 51.3098552 + ], + [ + 5.4943598, + 51.3098552 + ], + [ + 5.4943598, + 51.3047207 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #observation_towers", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T18:40:10Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000854707867650675, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "observation_towers", + "answer": 2, + "imagery": "osm", + "language": "nl", + "change_over_5000m": 1, + "change_within_5000m": 1 + }, + "id": 116835279 + } + }, + { + "id": 116834915, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.6061148, + 42.9635577 + ], + [ + 1.6061148, + 42.9635577 + ], + [ + 1.6061148, + 42.9635577 + ], + [ + 1.6061148, + 42.9635577 + ], + [ + 1.6061148, + 42.9635577 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Albin Gasparetto", + "uid": "1227542", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-31T18:30:10Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 2, + "create": 1, + "imagery": "osm", + "language": "fr" + }, + "id": 116834915 + } + }, + { + "id": 116834751, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.5520864, + 51.3103226 + ], + [ + 5.6210157, + 51.3103226 + ], + [ + 5.6210157, + 51.3493444 + ], + [ + 5.5520864, + 51.3493444 + ], + [ + 5.5520864, + 51.3103226 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T18:25:51Z", + "reviewed_features": [], + "create": 0, + "modify": 18, + "delete": 0, + "area": 0.00268974535874002, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "food", + "answer": 20, + "imagery": "osm", + "language": "nl", + "change_over_5000m": 8, + "change_within_500m": 2, + "change_within_1000m": 10 + }, + "id": 116834751 + } + }, + { + "id": 116834514, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.6084978, + 51.3098577 + ], + [ + 5.6098523, + 51.3098577 + ], + [ + 5.6098523, + 51.3127501 + ], + [ + 5.6084978, + 51.3127501 + ], + [ + 5.6084978, + 51.3098577 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T18:20:32Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 1, + "area": 0.00000391775579999962, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "food", + "answer": 4, + "imagery": "osm", + "deletion": 1, + "language": "nl", + "change_within_1000m": 5, + "deletion:node/2839388468": "het is gesloten" + }, + "id": 116834514 + } + }, + { + "id": 116833812, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.5558934, + 51.3212658 + ], + [ + 5.6364155, + 51.3212658 + ], + [ + 5.6364155, + 51.3276773 + ], + [ + 5.5558934, + 51.3276773 + ], + [ + 5.5558934, + 51.3212658 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #campersite", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T18:02:46Z", + "reviewed_features": [], + "create": 1, + "modify": 6, + "delete": 0, + "area": 0.000516267444149891, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "campersite", + "answer": 13, + "create": 1, + "imagery": "osm", + "language": "nl", + "change_over_5000m": 1, + "change_within_5000m": 13 + }, + "id": 116833812 + } + }, + { + "id": 116833750, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.5510462, + 51.3447623 + ], + [ + 5.5510462, + 51.3447623 + ], + [ + 5.5510462, + 51.3447623 + ], + [ + 5.5510462, + 51.3447623 + ], + [ + 5.5510462, + 51.3447623 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #artwork", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T18:00:57Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 1, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "artwork", + "answer": 1, + "create": 1, + "imagery": "osm", + "deletion": 1, + "language": "nl", + "change_over_5000m": 3, + "deletion:node/9463800980": "testing point" + }, + "id": 116833750 + } + }, + { + "id": 116833592, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.5288583, + 51.335231 + ], + [ + 5.5288583, + 51.335231 + ], + [ + 5.5288583, + 51.335231 + ], + [ + 5.5288583, + 51.335231 + ], + [ + 5.5288583, + 51.335231 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T17:56:59Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "benches", + "answer": 1, + "imagery": "osm", + "language": "nl", + "change_over_5000m": 1 + }, + "id": 116833592 + } + }, + { + "id": 116827153, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.8040893, + 51.5003409 + ], + [ + 5.8040893, + 51.5003409 + ], + [ + 5.8040893, + 51.5003409 + ], + [ + 5.8040893, + 51.5003409 + ], + [ + 5.8040893, + 51.5003409 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #waste_basket", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T14:53:45Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "waste_basket", + "answer": 1, + "imagery": "osm", + "language": "nl", + "change_within_25m": 1 + }, + "id": 116827153 + } + }, + { + "id": 116827127, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.8041537, + 51.5003604 + ], + [ + 5.8041537, + 51.5003604 + ], + [ + 5.8041537, + 51.5003604 + ], + [ + 5.8041537, + 51.5003604 + ], + [ + 5.8041537, + 51.5003604 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T14:53:03Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "benches", + "answer": 2, + "imagery": "osm", + "language": "nl", + "change_within_25m": 2 + }, + "id": 116827127 + } + }, + { + "id": 116826540, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -2.2685068, + 53.4392606 + ], + [ + -2.2582252, + 53.4392606 + ], + [ + -2.2582252, + 53.442754 + ], + [ + -2.2685068, + 53.442754 + ], + [ + -2.2685068, + 53.4392606 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "jay8ea", + "uid": "251482", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #street_lighting", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-31T14:37:37Z", + "reviewed_features": [], + "create": 0, + "modify": 9, + "delete": 0, + "area": 0.0000359177414400359, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "street_lighting", + "answer": 9, + "imagery": "osm", + "language": "en", + "change_within_1000m": 5, + "change_within_5000m": 4 + }, + "id": 116826540 + } + }, + { + "id": 116824801, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.7372814, + 51.5103326 + ], + [ + 5.7399848, + 51.5103326 + ], + [ + 5.7399848, + 51.5156044 + ], + [ + 5.7372814, + 51.5156044 + ], + [ + 5.7372814, + 51.5103326 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #street_lighting", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T13:51:52Z", + "reviewed_features": [], + "create": 2, + "modify": 2, + "delete": 0, + "area": 0.0000142517841200104, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "split": 3, + "theme": "street_lighting", + "answer": 2, + "imagery": "osm", + "language": "nl", + "relation-fix": 1, + "change_within_25m": 3, + "change_within_100m": 1, + "change_within_500m": 1 + }, + "id": 116824801 + } + }, + { + "id": 116821293, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 12.9976952, + 52.010296 + ], + [ + 13.0082739, + 52.010296 + ], + [ + 13.0082739, + 52.0152498 + ], + [ + 12.9976952, + 52.0152498 + ], + [ + 12.9976952, + 52.010296 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Oberfuzzi", + "uid": "14794109", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T12:23:31Z", + "reviewed_features": [], + "create": 2, + "modify": 0, + "delete": 0, + "area": 0.000052404764060028, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "id": 116821293 + } + }, + { + "id": 116816749, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.6791617, + 51.2988118 + ], + [ + 5.6791617, + 51.2988118 + ], + [ + 5.6791617, + 51.2988118 + ], + [ + 5.6791617, + 51.2988118 + ], + [ + 5.6791617, + 51.2988118 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #cafes_and_pubs", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-31T10:41:12Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cafes_and_pubs", + "answer": 2, + "imagery": "osm", + "language": "nl", + "change_over_5000m": 2 + }, + "id": 116816749 + } + }, + { + "id": 116805462, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -71.2803384, + -35.1138347 + ], + [ + -71.2803384, + -35.1138347 + ], + [ + -71.2803384, + -35.1138347 + ], + [ + -71.2803384, + -35.1138347 + ], + [ + -71.2803384, + -35.1138347 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-31T05:30:33Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "id": 116805462 + } + }, + { + "id": 116804502, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 80.0880902, + 12.8245807 + ], + [ + 80.2944591, + 12.8245807 + ], + [ + 80.2944591, + 13.1716324 + ], + [ + 80.0880902, + 13.1716324 + ], + [ + 80.0880902, + 12.8245807 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bponkishore", + "uid": "14062769", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-31T04:47:04Z", + "reviewed_features": [], + "create": 0, + "modify": 59, + "delete": 0, + "area": 0.0716206775721303, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 76, + "imagery": "osm", + "language": "en" + }, + "id": 116804502 + } + }, + { + "id": 116798885, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.3147602, + 51.1178506 + ], + [ + 3.3147602, + 51.1178506 + ], + [ + 3.3147602, + 51.1178506 + ], + [ + 3.3147602, + 51.1178506 + ], + [ + 3.3147602, + 51.1178506 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/seppesantens/mapcomplete-themes/main/walkingnodenetworks/walkingnodenetworks.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T22:31:12Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/seppesantens/mapcomplete-themes/main/walkingnodenetworks/walkingnodenetworks.json", + "answer": 1, + "imagery": "osm", + "language": "en" + }, + "id": 116798885 + } + }, + { + "id": 116798400, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.5572504, + 54.8015724 + ], + [ + -1.3314853, + 54.8015724 + ], + [ + -1.3314853, + 54.9091282 + ], + [ + -1.5572504, + 54.9091282 + ], + [ + -1.5572504, + 54.8015724 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T22:11:07Z", + "reviewed_features": [], + "create": 0, + "modify": 187, + "delete": 0, + "area": 0.02428234594258, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 312, + "imagery": "osm", + "language": "en" + }, + "id": 116798400 + } + }, + { + "id": 116797900, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0133942, + 51.1888303 + ], + [ + 5.0237127, + 51.1888303 + ], + [ + 5.0237127, + 51.1917885 + ], + [ + 5.0133942, + 51.1917885 + ], + [ + 5.0133942, + 51.1888303 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T21:51:09Z", + "reviewed_features": [], + "create": 67, + "modify": 163, + "delete": 2, + "area": 0.0000305241867000207, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 144, + "theme": "grb", + "answer": 1, + "delete": 2, + "import": 7, + "imagery": "osm", + "language": "nl", + "conflation": 36 + }, + "id": 116797900 + } + }, + { + "id": 116794977, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 11.9423304, + 48.0446517 + ], + [ + 11.9423304, + 48.0446517 + ], + [ + 11.9423304, + 48.0446517 + ], + [ + 11.9423304, + 48.0446517 + ], + [ + 11.9423304, + 48.0446517 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Strubbl", + "uid": "536583", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T20:09:57Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "bookcases", + "answer": 3, + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "id": 116794977 + } + }, + { + "id": 116794926, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -85.8709538, + 11.2567941 + ], + [ + -85.8709538, + 11.2567941 + ], + [ + -85.8709538, + 11.2567941 + ], + [ + -85.8709538, + 11.2567941 + ], + [ + -85.8709538, + 11.2567941 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "nickinparadise", + "uid": "2049708", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #cafes_and_pubs", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T20:08:15Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cafes_and_pubs", + "answer": 1, + "create": 1, + "imagery": "osm", + "language": "en" + }, + "id": 116794926 + } + }, + { + "id": 116792994, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3597242, + 50.8655753 + ], + [ + 4.5510388, + 50.8655753 + ], + [ + 4.5510388, + 50.9454527 + ], + [ + 4.3597242, + 50.9454527 + ], + [ + 4.3597242, + 50.8655753 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T19:00:27Z", + "reviewed_features": [], + "create": 5, + "modify": 3, + "delete": 0, + "area": 0.0152817128300388, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 21, + "create": 5, + "imagery": "osm", + "language": "en", + "add-image": 4 + }, + "id": 116792994 + } + }, + { + "id": 116791647, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5332153, + 50.9199404 + ], + [ + 4.5886613, + 50.9199404 + ], + [ + 4.5886613, + 50.9500526 + ], + [ + 4.5332153, + 50.9500526 + ], + [ + 4.5332153, + 50.9199404 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #cyclestreets", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T18:19:38Z", + "reviewed_features": [], + "create": 0, + "modify": 28, + "delete": 0, + "area": 0.00166960104119988, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclestreets", + "answer": 27, + "imagery": "osm", + "language": "en", + "add-image": 2 + }, + "id": 116791647 + } + }, + { + "id": 116790606, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.5417953, + 51.2895524 + ], + [ + 5.6555865, + 51.2895524 + ], + [ + 5.6555865, + 51.3455923 + ], + [ + 5.5417953, + 51.3455923 + ], + [ + 5.5417953, + 51.2895524 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #cafes_and_pubs", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T17:48:56Z", + "reviewed_features": [], + "create": 0, + "modify": 8, + "delete": 0, + "area": 0.00637684746888019, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cafes_and_pubs", + "answer": 9, + "imagery": "osm", + "language": "nl", + "change_over_5000m": 5, + "change_within_5000m": 4 + }, + "id": 116790606 + } + }, + { + "id": 116790432, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.5439407, + 51.3515309 + ], + [ + 5.5439407, + 51.3515309 + ], + [ + 5.5439407, + 51.3515309 + ], + [ + 5.5439407, + 51.3515309 + ], + [ + 5.5439407, + 51.3515309 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T17:43:57Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "hailhydrant", + "answer": 1, + "imagery": "HDM_HOT", + "language": "en", + "change_over_5000m": 1 + }, + "id": 116790432 + } + }, + { + "id": 116790056, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.5650978, + 51.3117729 + ], + [ + 5.6145524, + 51.3117729 + ], + [ + 5.6145524, + 51.3575126 + ], + [ + 5.5650978, + 51.3575126 + ], + [ + 5.5650978, + 51.3117729 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T17:32:57Z", + "reviewed_features": [], + "create": 0, + "modify": 7, + "delete": 0, + "area": 0.00226203856761992, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cyclofix", + "answer": 11, + "imagery": "CartoDB.Voyager", + "language": "nl", + "change_over_5000m": 5, + "change_within_1000m": 6 + }, + "id": 116790056 + } + }, + { + "id": 116789721, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.7290841, + 51.3977743 + ], + [ + 5.7313351, + 51.3977743 + ], + [ + 5.7313351, + 51.3982106 + ], + [ + 5.7290841, + 51.3982106 + ], + [ + 5.7290841, + 51.3977743 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #cyclestreets", + "comments_count": 6, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T17:22:41Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 9.82111299993227e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cyclestreets", + "answer": 1, + "imagery": "osm", + "language": "nl", + "change_over_5000m": 1 + }, + "id": 116789721 + } + }, + { + "id": 116788202, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.6175595, + 51.3171419 + ], + [ + 5.7182389, + 51.3171419 + ], + [ + 5.7182389, + 51.3751073 + ], + [ + 5.6175595, + 51.3751073 + ], + [ + 5.6175595, + 51.3171419 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "r0di", + "uid": "4737001", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T16:43:29Z", + "reviewed_features": [], + "create": 3, + "modify": 2, + "delete": 0, + "area": 0.00583592169276009, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "bookcases", + "answer": 4, + "create": 3, + "imagery": "osm", + "language": "en", + "change_over_5000m": 3, + "change_within_100m": 3, + "change_within_5000m": 1 + }, + "id": 116788202 + } + }, + { + "id": 116784793, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.0074471, + 50.6185318 + ], + [ + 3.0607852, + 50.6185318 + ], + [ + 3.0607852, + 50.6467989 + ], + [ + 3.0074471, + 50.6467989 + ], + [ + 3.0074471, + 50.6185318 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "whatismoss", + "uid": "8427311", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T15:21:31Z", + "reviewed_features": [], + "create": 0, + "modify": 117, + "delete": 0, + "area": 0.00150771340651005, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 166, + "imagery": "osm", + "language": "en" + }, + "id": 116784793 + } + }, + { + "id": 116782141, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.3704001, + 51.07371 + ], + [ + 3.3704001, + 51.07371 + ], + [ + 3.3704001, + 51.07371 + ], + [ + 3.3704001, + 51.07371 + ], + [ + 3.3704001, + 51.07371 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #test", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T14:15:14Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "test", + "answer": 1, + "imagery": "osm", + "language": "en" + }, + "id": 116782141 + } + }, + { + "id": 116781962, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.3715484, + 51.0730973 + ], + [ + 3.3715484, + 51.0730973 + ], + [ + 3.3715484, + 51.0730973 + ], + [ + 3.3715484, + 51.0730973 + ], + [ + 3.3715484, + 51.0730973 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/seppesantens/mapcomplete-themes/main/walkingnodenetworks/walkingnodenetworks.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T14:11:07Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/seppesantens/mapcomplete-themes/main/walkingnodenetworks/walkingnodenetworks.json", + "answer": 1, + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "id": 116781962 + } + }, + { + "id": 116780241, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 80.1712189, + 12.9333113 + ], + [ + 80.2802458, + 12.9333113 + ], + [ + 80.2802458, + 13.0592801 + ], + [ + 80.1712189, + 13.0592801 + ], + [ + 80.1712189, + 12.9333113 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bponkishore", + "uid": "14062769", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T13:33:28Z", + "reviewed_features": [], + "create": 0, + "modify": 71, + "delete": 0, + "area": 0.0137339877607205, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 82, + "imagery": "osm", + "language": "en" + }, + "id": 116780241 + } + }, + { + "id": 116780133, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.352405, + 51.0715945 + ], + [ + 3.3820817, + 51.0715945 + ], + [ + 3.3820817, + 51.0897719 + ], + [ + 3.352405, + 51.0897719 + ], + [ + 3.352405, + 51.0715945 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T13:30:56Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 0.000539445246579971, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "benches", + "answer": 1, + "imagery": "osm", + "language": "en", + "add-image": 5 + }, + "id": 116780133 + } + }, + { + "id": 116779371, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.4409596, + 50.8045511 + ], + [ + 4.4409596, + 50.8045511 + ], + [ + 4.4409596, + 50.8045511 + ], + [ + 4.4409596, + 50.8045511 + ], + [ + 4.4409596, + 50.8045511 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "StefDeGreef", + "uid": "1860737", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T13:13:19Z", + "reviewed_features": [], + "create": 1, + "modify": 6, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 7, + "create": 1, + "imagery": "CartoDB.Voyager", + "language": "fr", + "add-image": 2, + "change_over_5000m": 1, + "change_within_25m": 9 + }, + "id": 116779371 + } + }, + { + "id": 116779137, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3777183, + 51.087442 + ], + [ + 4.3788039, + 51.087442 + ], + [ + 4.3788039, + 51.088092 + ], + [ + 4.3777183, + 51.088092 + ], + [ + 4.3777183, + 51.087442 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T13:06:59Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 7.05640000000658e-7, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 2, + "imagery": "osm", + "language": "en", + "change_within_25m": 2 + }, + "id": 116779137 + } + }, + { + "id": 116772568, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.784886, + 51.1444993 + ], + [ + 4.8299919, + 51.1444993 + ], + [ + 4.8299919, + 51.175776 + ], + [ + 4.784886, + 51.175776 + ], + [ + 4.784886, + 51.1444993 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Stinus_Clasius", + "uid": "1086503", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T10:08:56Z", + "reviewed_features": [], + "create": 246, + "modify": 52, + "delete": 0, + "area": 0.00141076370252995, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 47, + "theme": "grb", + "import": 18, + "imagery": "osm", + "language": "nl", + "conflation": 10 + }, + "id": 116772568 + } + }, + { + "id": 116769631, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.248831, + 50.7412338 + ], + [ + 4.249092, + 50.7412338 + ], + [ + 4.249092, + 50.741326 + ], + [ + 4.248831, + 50.741326 + ], + [ + 4.248831, + 50.7412338 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T08:36:05Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 2.40641999993362e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "bookcases", + "imagery": "osm", + "language": "nl", + "add-image": 2, + "change_within_25m": 1, + "change_within_50m": 2, + "move:node/9246056984": "improve_accuracy" + }, + "id": 116769631 + } + }, + { + "id": 116769153, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 11.7066367, + 48.0343016 + ], + [ + 11.7066367, + 48.0343016 + ], + [ + 11.7066367, + 48.0343016 + ], + [ + 11.7066367, + 48.0343016 + ], + [ + 11.7066367, + 48.0343016 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T08:12:05Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "create": 1, + "imagery": "osm", + "language": "de", + "change_over_5000m": 1 + }, + "id": 116769153 + } + }, + { + "id": 116768596, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 80.1126558, + 12.9190634 + ], + [ + 80.1507779, + 12.9190634 + ], + [ + 80.1507779, + 12.9433911 + ], + [ + 80.1126558, + 12.9433911 + ], + [ + 80.1126558, + 12.9190634 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bponkishore", + "uid": "14062769", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-30T07:45:24Z", + "reviewed_features": [], + "create": 0, + "modify": 37, + "delete": 0, + "area": 0.000927423012169844, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 53, + "imagery": "osm", + "language": "en" + }, + "id": 116768596 + } + }, + { + "id": 116764627, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0121094, + 51.1236717 + ], + [ + 5.1447066, + 51.1236717 + ], + [ + 5.1447066, + 51.1928843 + ], + [ + 5.0121094, + 51.1928843 + ], + [ + 5.0121094, + 51.1236717 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-30T01:44:52Z", + "reviewed_features": [], + "create": 13, + "modify": 49, + "delete": 0, + "area": 0.00917739696472004, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 41, + "theme": "grb", + "answer": 2, + "import": 4, + "imagery": "osm", + "language": "nl", + "conflation": 12 + }, + "id": 116764627 + } + }, + { + "id": 116761076, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.6979891, + 54.7766092 + ], + [ + -1.5450684, + 54.7766092 + ], + [ + -1.5450684, + 54.8804296 + ], + [ + -1.6979891, + 54.8804296 + ], + [ + -1.6979891, + 54.7766092 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-29T22:08:51Z", + "reviewed_features": [], + "create": 0, + "modify": 148, + "delete": 0, + "area": 0.0158762882422795, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 197, + "imagery": "osm", + "language": "en" + }, + "id": 116761076 + } + }, + { + "id": 116756281, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 8.5554829, + 48.8799556 + ], + [ + 8.582401, + 48.8799556 + ], + [ + 8.582401, + 48.917136 + ], + [ + 8.5554829, + 48.917136 + ], + [ + 8.5554829, + 48.8799556 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Dominic Z", + "uid": "56475", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-29T18:54:11Z", + "reviewed_features": [], + "create": 0, + "modify": 97, + "delete": 0, + "area": 0.00100082572523997, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 130, + "imagery": "osm", + "language": "de" + }, + "id": 116756281 + } + }, + { + "id": 116756190, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.7078364, + 54.7909734 + ], + [ + -1.5313943, + 54.7909734 + ], + [ + -1.5313943, + 54.9126821 + ], + [ + -1.7078364, + 54.9126821 + ], + [ + -1.7078364, + 54.7909734 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-29T18:50:44Z", + "reviewed_features": [], + "create": 0, + "modify": 56, + "delete": 0, + "area": 0.0214745386162698, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 76, + "imagery": "osm", + "language": "en" + }, + "id": 116756190 + } + }, + { + "id": 116753063, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.130382, + 50.6924207 + ], + [ + 3.1470037, + 50.6924207 + ], + [ + 3.1470037, + 50.6958358 + ], + [ + 3.130382, + 50.6958358 + ], + [ + 3.130382, + 50.6924207 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "eiryelio", + "uid": "831652", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-29T17:17:25Z", + "reviewed_features": [], + "create": 3, + "modify": 4, + "delete": 0, + "area": 0.0000567647676699667, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 7, + "create": 3, + "imagery": "osm", + "language": "fr" + }, + "id": 116753063 + } + }, + { + "id": 116750828, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2319562, + 51.21206 + ], + [ + 3.2319562, + 51.21206 + ], + [ + 3.2319562, + 51.21206 + ], + [ + 3.2319562, + 51.21206 + ], + [ + 3.2319562, + 51.21206 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-29T16:17:30Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "toilets", + "imagery": "osm", + "language": "en", + "add-image": 1, + "change_within_25m": 1 + }, + "id": 116750828 + } + }, + { + "id": 116749960, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2430643, + 51.2055222 + ], + [ + 3.2430643, + 51.2055222 + ], + [ + 3.2430643, + 51.2055222 + ], + [ + 3.2430643, + 51.2055222 + ], + [ + 3.2430643, + 51.2055222 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 43, + "name": "Invalid key value combination" + } + ], + "tags": [], + "features": [ + { + "url": "node-9458281311", + "osm_id": 9458281311, + "reasons": [ + 43 + ], + "version": 2, + "primary_tags": { + "amenity": "bicycle_wash" + } + } + ], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-29T15:57:26Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cyclofix", + "answer": 1, + "create": 1, + "imagery": "CartoDB.Voyager", + "language": "en", + "add-image": 1, + "change_over_5000m": 1, + "change_within_25m": 2 + }, + "id": 116749960 + } + }, + { + "id": 116748790, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.6792176, + 54.7528824 + ], + [ + -1.5178153, + 54.7528824 + ], + [ + -1.5178153, + 54.956107 + ], + [ + -1.6792176, + 54.956107 + ], + [ + -1.6792176, + 54.7528824 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-29T15:30:21Z", + "reviewed_features": [], + "create": 0, + "modify": 103, + "delete": 0, + "area": 0.0328009178565809, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 134, + "imagery": "osm", + "language": "en" + }, + "id": 116748790 + } + }, + { + "id": 116739093, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 12.9896191, + 52.0080089 + ], + [ + 12.9933233, + 52.0080089 + ], + [ + 12.9933233, + 52.0112943 + ], + [ + 12.9896191, + 52.0112943 + ], + [ + 12.9896191, + 52.0080089 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Oberfuzzi", + "uid": "14794109", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-29T10:56:41Z", + "reviewed_features": [], + "create": 5, + "modify": 4, + "delete": 0, + "area": 0.0000121697786800094, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "id": 116739093 + } + }, + { + "id": 116738609, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.735378, + 54.8381695 + ], + [ + -1.4619575, + 54.8381695 + ], + [ + -1.4619575, + 54.9206347 + ], + [ + -1.735378, + 54.9206347 + ], + [ + -1.735378, + 54.8381695 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-29T10:41:57Z", + "reviewed_features": [], + "create": 0, + "modify": 161, + "delete": 0, + "area": 0.0225476762166004, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 290, + "imagery": "osm", + "language": "en" + }, + "id": 116738609 + } + }, + { + "id": 116735492, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.9361894, + 42.691316 + ], + [ + 2.9361894, + 42.691316 + ], + [ + 2.9361894, + 42.691316 + ], + [ + 2.9361894, + 42.691316 + ], + [ + 2.9361894, + 42.691316 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "LySioS", + "uid": "11579673", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-29T09:10:05Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 5, + "create": 1, + "imagery": "osm", + "language": "fr", + "change_over_5000m": 1, + "change_within_25m": 5 + }, + "id": 116735492 + } + }, + { + "id": 116734074, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2387824, + 50.7363781 + ], + [ + 4.2387824, + 50.7363781 + ], + [ + 4.2387824, + 50.7363781 + ], + [ + 4.2387824, + 50.7363781 + ], + [ + 4.2387824, + 50.7363781 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-29T08:17:40Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 3, + "imagery": "AGIVFlandersGRB", + "language": "nl", + "change_within_5000m": 3 + }, + "id": 116734074 + } + }, + { + "id": 116726369, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.4307197, + 51.3903943 + ], + [ + 3.4307197, + 51.3903943 + ], + [ + 3.4307197, + 51.3903943 + ], + [ + 3.4307197, + 51.3903943 + ], + [ + 3.4307197, + 51.3903943 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 43, + "name": "Invalid key value combination" + } + ], + "tags": [], + "features": [ + { + "url": "node-9456801536", + "osm_id": 9456801536, + "reasons": [ + 43 + ], + "version": 1, + "primary_tags": { + "amenity": "binoculars" + } + } + ], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #binoculars", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-28T22:53:01Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "binoculars", + "create": 1, + "imagery": "osm", + "language": "en", + "change_over_5000m": 1 + }, + "id": 116726369 + } + }, + { + "id": 116723580, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.6401589, + 54.7897947 + ], + [ + -1.5437518, + 54.7897947 + ], + [ + -1.5437518, + 54.8435536 + ], + [ + -1.6401589, + 54.8435536 + ], + [ + -1.6401589, + 54.7897947 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T21:17:33Z", + "reviewed_features": [], + "create": 0, + "modify": 156, + "delete": 0, + "area": 0.00518273964818984, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 225, + "imagery": "osm", + "language": "en" + }, + "id": 116723580 + } + }, + { + "id": 116723289, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3735998, + 50.8593304 + ], + [ + 4.3738626, + 50.8593304 + ], + [ + 4.3738626, + 50.8594985 + ], + [ + 4.3735998, + 50.8594985 + ], + [ + 4.3735998, + 50.8593304 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T21:09:06Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 4.41766800008404e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "playgrounds", + "imagery": "osm", + "language": "en", + "add-image": 2 + }, + "id": 116723289 + } + }, + { + "id": 116722525, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3469627, + 50.8509561 + ], + [ + 4.9945831, + 50.8509561 + ], + [ + 4.9945831, + 51.163388 + ], + [ + 4.3469627, + 51.163388 + ], + [ + 4.3469627, + 50.8509561 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T20:47:17Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.20233727205076, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "food", + "imagery": "osm", + "language": "en", + "add-image": 2 + }, + "id": 116722525 + } + }, + { + "id": 116721473, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.8827524, + 42.6910999 + ], + [ + 2.9013884, + 42.6910999 + ], + [ + 2.9013884, + 42.7004231 + ], + [ + 2.8827524, + 42.7004231 + ], + [ + 2.8827524, + 42.6910999 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "foo_bar_lol", + "uid": "14955867", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T20:13:20Z", + "reviewed_features": [], + "create": 25, + "modify": 30, + "delete": 0, + "area": 0.000173747155200079, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 102, + "create": 25, + "imagery": "osm", + "language": "fr" + }, + "id": 116721473 + } + }, + { + "id": 116721335, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3455241, + 50.8484101 + ], + [ + 4.9947182, + 50.8484101 + ], + [ + 4.9947182, + 51.163405 + ], + [ + 4.3455241, + 51.163405 + ], + [ + 4.3455241, + 50.8484101 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T20:08:28Z", + "reviewed_features": [], + "create": 0, + "modify": 10, + "delete": 0, + "area": 0.204492830610087, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "shops", + "answer": 2, + "imagery": "osm", + "language": "en", + "add-image": 8 + }, + "id": 116721335 + } + }, + { + "id": 116721159, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.3630128, + 50.9594613 + ], + [ + 5.3716709, + 50.9594613 + ], + [ + 5.3716709, + 50.9643398 + ], + [ + 5.3630128, + 50.9643398 + ], + [ + 5.3630128, + 50.9594613 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-28T20:01:30Z", + "reviewed_features": [], + "create": 148, + "modify": 37, + "delete": 0, + "area": 0.0000422385408499707, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 34, + "theme": "grb", + "import": 20, + "imagery": "osm", + "language": "nl", + "conflation": 6, + "change_over_5000m": 20 + }, + "id": 116721159 + } + }, + { + "id": 116720054, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9920505, + 51.1542119 + ], + [ + 4.9934779, + 51.1542119 + ], + [ + 4.9934779, + 51.1550575 + ], + [ + 4.9920505, + 51.1550575 + ], + [ + 4.9920505, + 51.1542119 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T19:20:51Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0.00000120700943999719, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "playgrounds", + "imagery": "osm", + "language": "en", + "add-image": 5 + }, + "id": 116720054 + } + }, + { + "id": 116718826, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2185042, + 51.1969714 + ], + [ + 3.2187007, + 51.1969714 + ], + [ + 3.2187007, + 51.2041342 + ], + [ + 3.2185042, + 51.2041342 + ], + [ + 3.2185042, + 51.1969714 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #http://127.0.0.1:8080/assets/themes/bicycle_rental/bicycle_rental.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-28T18:35:50Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0.00000140749019999876, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "127.0.0.1:1234", + "theme": "http://127.0.0.1:8080/assets/themes/bicycle_rental/bicycle_rental.json", + "answer": 4, + "imagery": "osm", + "language": "nl" + }, + "id": 116718826 + } + }, + { + "id": 116713659, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2227347, + 51.2227335 + ], + [ + 3.2227347, + 51.2227335 + ], + [ + 3.2227347, + 51.2227335 + ], + [ + 3.2227347, + 51.2227335 + ], + [ + 3.2227347, + 51.2227335 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Arickx", + "uid": "9282195", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/xliving/xliving.github.io/main/OSM/amenity-recycling/recycling-organic/mapcomplete.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-28T16:07:13Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/xliving/xliving.github.io/main/OSM/amenity-recycling/recycling-organic/mapcomplete.json", + "answer": 1, + "imagery": "osm", + "language": "nl" + }, + "id": 116713659 + } + }, + { + "id": 116713573, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3841138, + 50.8535591 + ], + [ + 4.3908212, + 50.8535591 + ], + [ + 4.3908212, + 50.867894 + ], + [ + 4.3841138, + 50.867894 + ], + [ + 4.3841138, + 50.8535591 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T16:05:29Z", + "reviewed_features": [], + "create": 3, + "modify": 9, + "delete": 0, + "area": 0.0000961499082600199, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 12, + "create": 3, + "imagery": "CartoDB.Voyager", + "language": "en", + "add-image": 4 + }, + "id": 116713573 + } + }, + { + "id": 116711729, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -70.570204, + -33.5923862 + ], + [ + -70.5699124, + -33.5923862 + ], + [ + -70.5699124, + -33.5921006 + ], + [ + -70.570204, + -33.5921006 + ], + [ + -70.570204, + -33.5923862 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-28T15:18:31Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 8.3280959998577e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 4, + "change_within_25m": 2, + "change_within_500m": 2 + }, + "id": 116711729 + } + }, + { + "id": 116710319, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2130557, + 51.2262186 + ], + [ + 3.2130557, + 51.2262186 + ], + [ + 3.2130557, + 51.2262186 + ], + [ + 3.2130557, + 51.2262186 + ], + [ + 3.2130557, + 51.2262186 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-28T14:42:38Z", + "reviewed_features": [], + "create": 1, + "modify": 5, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cyclofix", + "answer": 7, + "create": 1, + "imagery": "CartoDB.Voyager", + "language": "nl", + "add-image": 2, + "change_over_5000m": 1, + "change_within_25m": 9 + }, + "id": 116710319 + } + }, + { + "id": 116710083, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2082813, + 51.2228286 + ], + [ + 3.2122886, + 51.2228286 + ], + [ + 3.2122886, + 51.2254539 + ], + [ + 3.2082813, + 51.2254539 + ], + [ + 3.2082813, + 51.2228286 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-28T14:36:03Z", + "reviewed_features": [], + "create": 0, + "modify": 11, + "delete": 0, + "area": 0.0000105203646899932, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "etymology", + "answer": 10, + "imagery": "osm", + "language": "nl", + "add-image": 2, + "change_within_50m": 2, + "change_within_100m": 6, + "change_within_500m": 4 + }, + "id": 116710083 + } + }, + { + "id": 116704794, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.450733, + 51.0860489 + ], + [ + 3.450733, + 51.0860489 + ], + [ + 3.450733, + 51.0860489 + ], + [ + 3.450733, + 51.0860489 + ], + [ + 3.450733, + 51.0860489 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T11:59:25Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "benches", + "imagery": "osm", + "language": "nl", + "add-image": 1 + }, + "id": 116704794 + } + }, + { + "id": 116701187, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3615407, + 50.8655084 + ], + [ + 4.3615407, + 50.8655084 + ], + [ + 4.3615407, + 50.8655084 + ], + [ + 4.3615407, + 50.8655084 + ], + [ + 4.3615407, + 50.8655084 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T10:25:01Z", + "reviewed_features": [], + "create": 1, + "modify": 4, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "benches", + "answer": 5, + "create": 1, + "imagery": "AGIV", + "language": "en", + "add-image": 1 + }, + "id": 116701187 + } + }, + { + "id": 116699921, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3660282, + 50.8648087 + ], + [ + 4.3887358, + 50.8648087 + ], + [ + 4.3887358, + 50.8683792 + ], + [ + 4.3660282, + 50.8683792 + ], + [ + 4.3660282, + 50.8648087 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T09:50:53Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0.00008107748580005, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "shops", + "imagery": "osm", + "language": "en", + "add-image": 4 + }, + "id": 116699921 + } + }, + { + "id": 116699600, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3599884, + 50.8648448 + ], + [ + 4.3787391, + 50.8648448 + ], + [ + 4.3787391, + 50.868318 + ], + [ + 4.3599884, + 50.868318 + ], + [ + 4.3599884, + 50.8648448 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T09:42:19Z", + "reviewed_features": [], + "create": 5, + "modify": 11, + "delete": 0, + "area": 0.0000651249312400366, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 28, + "create": 5, + "imagery": "AGIV", + "language": "en", + "add-image": 6 + }, + "id": 116699600 + } + }, + { + "id": 116697144, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2029671, + 50.9144947 + ], + [ + 4.2036671, + 50.9144947 + ], + [ + 4.2036671, + 50.9148684 + ], + [ + 4.2029671, + 50.9148684 + ], + [ + 4.2029671, + 50.9144947 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T08:38:40Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 2.61590000002776e-7, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 2, + "imagery": "osm", + "language": "nl" + }, + "id": 116697144 + } + }, + { + "id": 116694883, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 11.8054533, + 48.0177319 + ], + [ + 11.8069527, + 48.0177319 + ], + [ + 11.8069527, + 48.0185778 + ], + [ + 11.8054533, + 48.0185778 + ], + [ + 11.8054533, + 48.0177319 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-28T07:24:53Z", + "reviewed_features": [], + "create": 6, + "modify": 0, + "delete": 0, + "area": 0.00000126834246000256, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "answer": 3, + "create": 6, + "imagery": "osm", + "language": "de", + "change_over_5000m": 6, + "change_within_25m": 3 + }, + "id": 116694883 + } + }, + { + "id": 116687884, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2184221, + 51.1949136 + ], + [ + 3.2219307, + 51.1949136 + ], + [ + 3.2219307, + 51.1975691 + ], + [ + 3.2184221, + 51.1975691 + ], + [ + 3.2184221, + 51.1949136 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-28T01:40:12Z", + "reviewed_features": [], + "create": 0, + "modify": 8, + "delete": 0, + "area": 0.00000931708730001056, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "etymology", + "answer": 11, + "imagery": "osm", + "language": "nl", + "change_within_5000m": 11 + }, + "id": 116687884 + } + }, + { + "id": 116687814, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2185527, + 51.1968089 + ], + [ + 3.2187426, + 51.1968089 + ], + [ + 3.2187426, + 51.1969714 + ], + [ + 3.2185527, + 51.1969714 + ], + [ + 3.2185527, + 51.1968089 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #http://127.0.0.1:8080/assets/themes/bicycle_rental/bicycle_rental.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-28T01:36:42Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 3.08587500003621e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "127.0.0.1:1234", + "theme": "http://127.0.0.1:8080/assets/themes/bicycle_rental/bicycle_rental.json", + "answer": 5, + "imagery": "osm", + "language": "nl", + "change_within_5000m": 5 + }, + "id": 116687814 + } + }, + { + "id": 116686782, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 0.1102563, + 38.8326383 + ], + [ + 0.1162386, + 38.8326383 + ], + [ + 0.1162386, + 38.8383071 + ], + [ + 0.1102563, + 38.8383071 + ], + [ + 0.1102563, + 38.8326383 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "paunofu", + "uid": "13779940", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/wherethesidewalkshavenoname.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-28T00:25:54Z", + "reviewed_features": [], + "create": 0, + "modify": 7, + "delete": 0, + "area": 0.0000339124622400134, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/yopaseopor/mcquests/master/wherethesidewalkshavenoname.json", + "answer": 9, + "imagery": "osm", + "language": "en" + }, + "id": 116686782 + } + }, + { + "id": 116685572, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2227347, + 51.2227335 + ], + [ + 3.2227347, + 51.2227335 + ], + [ + 3.2227347, + 51.2227335 + ], + [ + 3.2227347, + 51.2227335 + ], + [ + 3.2227347, + 51.2227335 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/xliving/xliving.github.io/main/OSM/amenity-recycling/recycling-organic/mapcomplete.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-27T23:09:14Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/xliving/xliving.github.io/main/OSM/amenity-recycling/recycling-organic/mapcomplete.json", + "answer": 1, + "imagery": "osm", + "language": "nl", + "change_within_5000m": 1 + }, + "id": 116685572 + } + }, + { + "id": 116683137, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.6432092, + 51.3465703 + ], + [ + 4.6841909, + 51.3465703 + ], + [ + 4.6841909, + 51.3524972 + ], + [ + 4.6432092, + 51.3524972 + ], + [ + 4.6432092, + 51.3465703 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Stinus_Clasius", + "uid": "1086503", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-27T21:27:21Z", + "reviewed_features": [], + "create": 121, + "modify": 11, + "delete": 0, + "area": 0.000242894437729942, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 9, + "theme": "grb", + "import": 12, + "imagery": "osm", + "language": "nl", + "conflation": 4 + }, + "id": 116683137 + } + }, + { + "id": 116675422, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2316612, + 50.7323588 + ], + [ + 4.2387824, + 50.7323588 + ], + [ + 4.2387824, + 50.736384 + ], + [ + 4.2316612, + 50.736384 + ], + [ + 4.2316612, + 50.7323588 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-27T17:16:16Z", + "reviewed_features": [], + "create": 4, + "modify": 2, + "delete": 0, + "area": 0.0000286642542400079, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 10, + "create": 4, + "imagery": "AGIV", + "language": "nl", + "change_over_5000m": 4, + "change_within_5000m": 10 + }, + "id": 116675422 + } + }, + { + "id": 116670817, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.2624987, + 50.1557237 + ], + [ + 5.2657507, + 50.1557237 + ], + [ + 5.2657507, + 50.15945 + ], + [ + 5.2624987, + 50.15945 + ], + [ + 5.2624987, + 50.1557237 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-27T15:06:36Z", + "reviewed_features": [], + "create": 98, + "modify": 10, + "delete": 0, + "area": 0.0000121179275999887, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 8, + "theme": "grb", + "import": 13, + "imagery": "osm", + "language": "en", + "conflation": 4, + "change_over_5000m": 11 + }, + "id": 116670817 + } + }, + { + "id": 116666480, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -72.1031394, + -36.6072722 + ], + [ + -72.1031394, + -36.6072722 + ], + [ + -72.1031394, + -36.6072722 + ], + [ + -72.1031394, + -36.6072722 + ], + [ + -72.1031394, + -36.6072722 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-27T13:14:47Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 1 + }, + "id": 116666480 + } + }, + { + "id": 116656004, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 12.9965392, + 52.0070843 + ], + [ + 12.998119, + 52.0070843 + ], + [ + 12.998119, + 52.0102906 + ], + [ + 12.9965392, + 52.0102906 + ], + [ + 12.9965392, + 52.0070843 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Oberfuzzi", + "uid": "14794109", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-27T09:11:23Z", + "reviewed_features": [], + "create": 4, + "modify": 5, + "delete": 0, + "area": 0.00000506531273999234, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "id": 116656004 + } + }, + { + "id": 116646267, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -70.5698801, + -33.5924147 + ], + [ + -70.569744, + -33.5924147 + ], + [ + -70.569744, + -33.5923804 + ], + [ + -70.5698801, + -33.5923804 + ], + [ + -70.5698801, + -33.5924147 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-27T03:42:47Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 4.6682299996363e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 2, + "change_within_25m": 2 + }, + "id": 116646267 + } + }, + { + "id": 116645369, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -70.5697582, + -33.5927064 + ], + [ + -70.5697582, + -33.5927064 + ], + [ + -70.5697582, + -33.5927064 + ], + [ + -70.5697582, + -33.5927064 + ], + [ + -70.5697582, + -33.5927064 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-27T02:32:46Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 1, + "change_within_50m": 1 + }, + "id": 116645369 + } + }, + { + "id": 116642455, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9438307, + 51.1762061 + ], + [ + 4.9442393, + 51.1762061 + ], + [ + 4.9442393, + 51.1769444 + ], + [ + 4.9438307, + 51.1769444 + ], + [ + 4.9438307, + 51.1762061 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-26T23:10:18Z", + "reviewed_features": [], + "create": 10, + "modify": 11, + "delete": 0, + "area": 3.01669379997268e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 10, + "theme": "grb", + "import": 1, + "imagery": "osm", + "language": "nl", + "conflation": 2 + }, + "id": 116642455 + } + }, + { + "id": 116639191, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -82.73682, + 42.6813272 + ], + [ + -82.73682, + 42.6813272 + ], + [ + -82.73682, + 42.6813272 + ], + [ + -82.73682, + 42.6813272 + ], + [ + -82.73682, + 42.6813272 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "nutsd02440", + "uid": "14948432", + "editor": "MapComplete 0.15.0-rc-1", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-26T21:10:49Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "surveillance", + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "id": 116639191 + } + }, + { + "id": 116638996, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.6050693, + 52.287768 + ], + [ + -1.6050693, + 52.287768 + ], + [ + -1.6050693, + 52.287768 + ], + [ + -1.6050693, + 52.287768 + ], + [ + -1.6050693, + 52.287768 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "RobJN", + "uid": "411244", + "editor": "MapComplete 0.15.0", + "comment": "Adding data with #MapComplete for theme #uk_addresses", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-26T21:03:45Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "uk_addresses", + "import": 1, + "imagery": "osm", + "language": "en", + "change_over_5000m": 1 + }, + "id": 116638996 + } + }, + { + "id": 116632831, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -70.5701008, + -33.5922799 + ], + [ + -70.5701008, + -33.5922799 + ], + [ + -70.5701008, + -33.5922799 + ], + [ + -70.5701008, + -33.5922799 + ], + [ + -70.5701008, + -33.5922799 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-26T18:04:09Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 1 + }, + "id": 116632831 + } + }, + { + "id": 116630080, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.4230499, + 50.8238691 + ], + [ + 4.4230499, + 50.8238691 + ], + [ + 4.4230499, + 50.8238691 + ], + [ + 4.4230499, + 50.8238691 + ], + [ + 4.4230499, + 50.8238691 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "StefDeGreef", + "uid": "1860737", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-26T16:54:11Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 4, + "create": 1, + "imagery": "CartoDB.Voyager", + "language": "fr", + "add-image": 1, + "change_over_5000m": 1, + "change_within_25m": 5 + }, + "id": 116630080 + } + }, + { + "id": 116623879, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 14.7200229, + 51.951571 + ], + [ + 14.7200229, + 51.951571 + ], + [ + 14.7200229, + 51.951571 + ], + [ + 14.7200229, + 51.951571 + ], + [ + 14.7200229, + 51.951571 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "sebkur", + "uid": "22917", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-26T13:55:23Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "id": 116623879 + } + }, + { + "id": 116617025, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 14.7115136, + 51.9524487 + ], + [ + 14.7131644, + 51.9524487 + ], + [ + 14.7131644, + 51.953941 + ], + [ + 14.7115136, + 51.953941 + ], + [ + 14.7115136, + 51.9524487 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "sebkur", + "uid": "22917", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-26T10:31:44Z", + "reviewed_features": [], + "create": 3, + "modify": 2, + "delete": 0, + "area": 0.0000024634888400043, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "id": 116617025 + } + }, + { + "id": 116614780, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 7.4343939, + 46.942024 + ], + [ + 7.4343939, + 46.942024 + ], + [ + 7.4343939, + 46.942024 + ], + [ + 7.4343939, + 46.942024 + ], + [ + 7.4343939, + 46.942024 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "habi", + "uid": "15671", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-26T09:24:21Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "answer": 3, + "imagery": "osm", + "language": "en", + "change_within_25m": 3 + }, + "id": 116614780 + } + }, + { + "id": 116607298, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -70.569634, + -33.5932112 + ], + [ + -70.5694689, + -33.5932112 + ], + [ + -70.5694689, + -33.5925353 + ], + [ + -70.569634, + -33.5925353 + ], + [ + -70.569634, + -33.5932112 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-26T02:19:01Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 1.11591089992536e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "create": 1, + "imagery": "cyclosm", + "language": "en", + "add-image": 4 + }, + "id": 116607298 + } + }, + { + "id": 116602785, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0061913, + 51.124716 + ], + [ + 5.0068622, + 51.124716 + ], + [ + 5.0068622, + 51.1255242 + ], + [ + 5.0061913, + 51.1255242 + ], + [ + 5.0061913, + 51.124716 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-25T21:45:41Z", + "reviewed_features": [], + "create": 28, + "modify": 8, + "delete": 0, + "area": 5.42221380000553e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 4, + "theme": "grb", + "answer": 3, + "import": 4, + "imagery": "osm", + "language": "nl", + "conflation": 2 + }, + "id": 116602785 + } + }, + { + "id": 116598894, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 12.3552712, + 51.3739868 + ], + [ + 12.3578393, + 51.3739868 + ], + [ + 12.3578393, + 51.3775911 + ], + [ + 12.3552712, + 51.3775911 + ], + [ + 12.3552712, + 51.3739868 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "febutix", + "uid": "14929311", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-25T19:26:17Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 0.00000925620282999628, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "playgrounds", + "answer": 6, + "imagery": "osm", + "language": "en" + }, + "id": 116598894 + } + }, + { + "id": 116598670, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.4076949, + 50.9022336 + ], + [ + 3.4076949, + 50.9022336 + ], + [ + 3.4076949, + 50.9022336 + ], + [ + 3.4076949, + 50.9022336 + ], + [ + 3.4076949, + 50.9022336 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-25T19:19:22Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 4, + "imagery": "CartoDB.Voyager", + "language": "en" + }, + "id": 116598670 + } + }, + { + "id": 116598337, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 8.592121, + 48.8892858 + ], + [ + 8.6173889, + 48.8892858 + ], + [ + 8.6173889, + 48.8979746 + ], + [ + 8.592121, + 48.8979746 + ], + [ + 8.592121, + 48.8892858 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Dominic Z", + "uid": "56475", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-25T19:08:20Z", + "reviewed_features": [], + "create": 0, + "modify": 53, + "delete": 0, + "area": 0.000219547729519855, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 69, + "imagery": "osm", + "language": "de", + "change_within_100m": 1, + "change_within_500m": 39, + "change_within_1000m": 23, + "change_within_5000m": 6 + }, + "id": 116598337 + } + }, + { + "id": 116596008, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.5891813, + 45.3683276 + ], + [ + 5.590785, + 45.3683276 + ], + [ + 5.590785, + 45.3687688 + ], + [ + 5.5891813, + 45.3687688 + ], + [ + 5.5891813, + 45.3683276 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Eric Royer", + "uid": "12137407", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-25T18:02:19Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 7.07552439995965e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "food", + "answer": 4, + "imagery": "osm", + "language": "en" + }, + "id": 116596008 + } + }, + { + "id": 116587243, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2356747, + 50.7318342 + ], + [ + 4.2373026, + 50.7318342 + ], + [ + 4.2373026, + 50.7364498 + ], + [ + 4.2356747, + 50.7364498 + ], + [ + 4.2356747, + 50.7318342 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #aed_brugge", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-25T14:06:53Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 0.00000751373524000127, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "aed_brugge", + "answer": 4, + "imagery": "HDM_HOT", + "language": "nl" + }, + "id": 116587243 + } + }, + { + "id": 116586469, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -58.6677955, + -34.6600686 + ], + [ + -58.6451033, + -34.6600686 + ], + [ + -58.6451033, + -34.6530481 + ], + [ + -58.6677955, + -34.6530481 + ], + [ + -58.6677955, + -34.6600686 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "AgusQui", + "uid": "331218", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/AgusQui/MapCompleteRailway/main/Signals", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-25T13:47:08Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000159310590100029, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/AgusQui/MapCompleteRailway/main/Signals", + "answer": 2, + "imagery": "osm", + "language": "es", + "change_within_50m": 1, + "change_within_100m": 1 + }, + "id": 116586469 + } + }, + { + "id": 116584832, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.0354918, + 50.8911597 + ], + [ + 4.0354918, + 50.8911597 + ], + [ + 4.0354918, + 50.8911597 + ], + [ + 4.0354918, + 50.8911597 + ], + [ + 4.0354918, + 50.8911597 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Erin76", + "uid": "8982454", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #openwindpowermap", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-25T13:03:11Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "openwindpowermap", + "answer": 1, + "imagery": "CartoDB.Positron", + "language": "en" + }, + "id": 116584832 + } + }, + { + "id": 116584318, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -58.530041, + -34.5749912 + ], + [ + -58.5300002, + -34.5749912 + ], + [ + -58.5300002, + -34.5749591 + ], + [ + -58.530041, + -34.5749591 + ], + [ + -58.530041, + -34.5749912 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "AgusQui", + "uid": "331218", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/AgusQui/MapCompleteRailway/main/railway", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-25T12:48:50Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 1.30967999973559e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/AgusQui/MapCompleteRailway/main/railway", + "answer": 12, + "imagery": "osm", + "language": "en", + "change_over_5000m": 7, + "change_within_25m": 1, + "change_within_50m": 4 + }, + "id": 116584318 + } + }, + { + "id": 116573101, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 6.6549594, + 53.0802091 + ], + [ + 6.6706556, + 53.0802091 + ], + [ + 6.6706556, + 53.0912318 + ], + [ + 6.6549594, + 53.0912318 + ], + [ + 6.6549594, + 53.0802091 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "tiptracks", + "uid": "513840", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-25T07:59:25Z", + "reviewed_features": [], + "create": 0, + "modify": 56, + "delete": 0, + "area": 0.000173014503740079, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 85, + "imagery": "osm", + "language": "nl" + }, + "id": 116573101 + } + }, + { + "id": 116565413, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -121.9220086, + 37.7914943 + ], + [ + -121.9218835, + 37.7914943 + ], + [ + -121.9218835, + 37.7915708 + ], + [ + -121.9220086, + 37.7915708 + ], + [ + -121.9220086, + 37.7914943 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "omnibeet", + "uid": "10145113", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-25T02:20:20Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 9.57015000004629e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 2, + "imagery": "osm", + "language": "en" + }, + "id": 116565413 + } + }, + { + "id": 116565370, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3683341, + 51.3318233 + ], + [ + 4.3683341, + 51.3318233 + ], + [ + 4.3683341, + 51.3318233 + ], + [ + 4.3683341, + 51.3318233 + ], + [ + 4.3683341, + 51.3318233 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-alpha-2", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-25T02:16:00Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "toerisme_vlaanderen", + "import": 1, + "imagery": "osm", + "language": "nl", + "change_over_5000m": 1 + }, + "id": 116565370 + } + }, + { + "id": 116561818, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9817454, + 51.1802861 + ], + [ + 4.9887532, + 51.1802861 + ], + [ + 4.9887532, + 51.1892208 + ], + [ + 4.9817454, + 51.1892208 + ], + [ + 4.9817454, + 51.1802861 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T22:32:21Z", + "reviewed_features": [], + "create": 43, + "modify": 107, + "delete": 13, + "area": 0.0000626125906600265, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 91, + "theme": "grb", + "delete": 13, + "import": 6, + "imagery": "AGIV", + "language": "nl", + "conflation": 32, + "change_over_5000m": 6 + }, + "id": 116561818 + } + }, + { + "id": 116561728, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.6026647, + 54.8810651 + ], + [ + -1.5605809, + 54.8810651 + ], + [ + -1.5605809, + 54.9218897 + ], + [ + -1.6026647, + 54.9218897 + ], + [ + -1.6026647, + 54.8810651 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-24T22:29:11Z", + "reviewed_features": [], + "create": 0, + "modify": 80, + "delete": 0, + "area": 0.00171805430148003, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 111, + "imagery": "osm", + "language": "en" + }, + "id": 116561728 + } + }, + { + "id": 116561651, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9848304, + 51.1822695 + ], + [ + 4.9931065, + 51.1822695 + ], + [ + 4.9931065, + 51.1834216 + ], + [ + 4.9848304, + 51.1834216 + ], + [ + 4.9848304, + 51.1822695 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T22:25:47Z", + "reviewed_features": [], + "create": 37, + "modify": 26, + "delete": 1, + "area": 0.00000953489481004836, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 21, + "theme": "grb", + "delete": 1, + "import": 4, + "imagery": "osm", + "language": "nl", + "conflation": 10, + "change_over_5000m": 4 + }, + "id": 116561651 + } + }, + { + "id": 116556239, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 6.674452, + 53.0615801 + ], + [ + 6.703156, + 53.0615801 + ], + [ + 6.703156, + 53.09712 + ], + [ + 6.674452, + 53.09712 + ], + [ + 6.674452, + 53.0615801 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "tiptracks", + "uid": "513840", + "editor": "MapComplete 0.14.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T19:39:16Z", + "reviewed_features": [], + "create": 0, + "modify": 63, + "delete": 0, + "area": 0.0010201372895999, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 87, + "imagery": "osm", + "language": "nl", + "change_within_500m": 13, + "change_within_1000m": 21, + "change_within_5000m": 53 + }, + "id": 116556239 + } + }, + { + "id": 116545513, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -70.5432598, + -33.44287 + ], + [ + -70.5432525, + -33.44287 + ], + [ + -70.5432525, + -33.4428375 + ], + [ + -70.5432598, + -33.4428375 + ], + [ + -70.5432598, + -33.44287 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "RNoerr", + "uid": "14846404", + "editor": "MapComplete 0.14.3", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-24T15:21:25Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 2.37250000203903e-10, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "trees", + "create": 1, + "imagery": "cyclosm", + "language": "en", + "add-image": 1, + "move:node/9444973776": "improve_accuracy" + }, + "id": 116545513 + } + }, + { + "id": 116544521, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 20.1317526, + 46.2414689 + ], + [ + 20.1345655, + 46.2414689 + ], + [ + 20.1345655, + 46.2428164 + ], + [ + 20.1317526, + 46.2428164 + ], + [ + 20.1317526, + 46.2414689 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "GBAB", + "uid": "3335899", + "editor": "MapComplete 0.14.3", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-24T14:52:19Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0.00000379038275000676, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 1, + "imagery": "osm", + "language": "en" + }, + "id": 116544521 + } + }, + { + "id": 116542645, + "type": "Feature", + "geometry": null, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.3", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T13:55:37Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 0, + "area": null, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 1, + "change_within_5000m": 1 + }, + "id": 116542645 + } + }, + { + "id": 116542643, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.2476759, + -39.8157794 + ], + [ + -73.2476759, + -39.8157794 + ], + [ + -73.2476759, + -39.8157794 + ], + [ + -73.2476759, + -39.8157794 + ], + [ + -73.2476759, + -39.8157794 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.3", + "comment": "Adding data with #MapComplete for theme #test", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T13:55:37Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "test", + "answer": 1, + "imagery": "cyclosm", + "language": "en", + "change_within_5000m": 1 + }, + "id": 116542643 + } + }, + { + "id": 116542587, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.247264, + -39.8152969 + ], + [ + -73.2447205, + -39.8152969 + ], + [ + -73.2447205, + -39.8136088 + ], + [ + -73.247264, + -39.8136088 + ], + [ + -73.247264, + -39.8152969 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.3", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T13:54:10Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.00000429368235000938, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 2, + "change_within_1000m": 1, + "change_within_5000m": 1 + }, + "id": 116542587 + } + }, + { + "id": 116539369, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.2332317, + -39.8429595 + ], + [ + -73.2326338, + -39.8429595 + ], + [ + -73.2326338, + -39.8428138 + ], + [ + -73.2332317, + -39.8428138 + ], + [ + -73.2332317, + -39.8429595 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.3", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T12:25:58Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 8.71140299987843e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 3, + "change_over_5000m": 1, + "change_within_50m": 1 + }, + "id": 116539369 + } + }, + { + "id": 116538531, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.1241237, + 51.2236943 + ], + [ + 4.1241237, + 51.2236943 + ], + [ + 4.1241237, + 51.2236943 + ], + [ + 4.1241237, + 51.2236943 + ], + [ + 4.1241237, + 51.2236943 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.14.3", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T12:05:51Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 4, + "create": 1, + "imagery": "osm", + "language": "en", + "change_over_5000m": 5 + }, + "id": 116538531 + } + }, + { + "id": 116537976, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.1222916, + 51.221759 + ], + [ + 4.1232119, + 51.221759 + ], + [ + 4.1232119, + 51.2222118 + ], + [ + 4.1222916, + 51.2222118 + ], + [ + 4.1222916, + 51.221759 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.14.3", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T11:51:01Z", + "reviewed_features": [], + "create": 86, + "modify": 0, + "delete": 0, + "area": 4.16711839998382e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 7, + "imagery": "osm", + "language": "en", + "change_over_5000m": 7 + }, + "id": 116537976 + } + }, + { + "id": 116537847, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.1359417, + 51.1633418 + ], + [ + 4.1380141, + 51.1633418 + ], + [ + 4.1380141, + 51.1649935 + ], + [ + 4.1359417, + 51.1649935 + ], + [ + 4.1359417, + 51.1633418 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.14.3", + "comment": "Adding data with #MapComplete for theme #cyclestreets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T11:47:44Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0.00000342298308000794, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclestreets", + "answer": 1, + "imagery": "osm", + "language": "en", + "change_over_5000m": 1 + }, + "id": 116537847 + } + }, + { + "id": 116535808, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9861882, + 51.1799997 + ], + [ + 4.9890463, + 51.1799997 + ], + [ + 4.9890463, + 51.1809777 + ], + [ + 4.9861882, + 51.1809777 + ], + [ + 4.9861882, + 51.1799997 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.0-alpha-2", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-24T10:55:34Z", + "reviewed_features": [], + "create": 36, + "modify": 155, + "delete": 4, + "area": 0.00000279522179998971, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "move": 136, + "path": "mc/develop/", + "theme": "grb", + "delete": 4, + "import": 4, + "imagery": "AGIV", + "language": "nl", + "conflation": 38, + "change_over_5000m": 2 + }, + "id": 116535808 + } + }, + { + "id": 116519085, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 13.5241815, + 49.2290904 + ], + [ + 13.5241815, + 49.2290904 + ], + [ + 13.5241815, + 49.2290904 + ], + [ + 13.5241815, + 49.2290904 + ], + [ + 13.5241815, + 49.2290904 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.14.2", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-24T00:16:51Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "food", + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "id": 116519085 + } + }, + { + "id": 116519038, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 13.5210822, + 49.232824 + ], + [ + 13.5213358, + 49.232824 + ], + [ + 13.5213358, + 49.2332194 + ], + [ + 13.5210822, + 49.2332194 + ], + [ + 13.5210822, + 49.232824 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.14.2", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-24T00:13:50Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 1.00273440000094e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "shops", + "imagery": "osm", + "language": "en", + "add-image": 4 + }, + "id": 116519038 + } + }, + { + "id": 116517846, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 13.5230886, + 49.2278564 + ], + [ + 13.5241967, + 49.2278564 + ], + [ + 13.5241967, + 49.2316215 + ], + [ + 13.5230886, + 49.2316215 + ], + [ + 13.5230886, + 49.2278564 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-23T22:57:30Z", + "reviewed_features": [], + "create": 2, + "modify": 3, + "delete": 0, + "area": 0.00000417210731000175, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "benches", + "create": 2, + "imagery": "osm", + "language": "en", + "add-image": 3 + }, + "id": 116517846 + } + }, + { + "id": 116517297, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -58.6977179, + -34.6656855 + ], + [ + -58.6977179, + -34.6656855 + ], + [ + -58.6977179, + -34.6656855 + ], + [ + -58.6977179, + -34.6656855 + ], + [ + -58.6977179, + -34.6656855 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "AgusQui", + "uid": "331218", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #cycle_infra", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-23T22:32:49Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cycle_infra", + "answer": 2, + "imagery": "CartoDB.Voyager", + "language": "en", + "change_over_5000m": 2 + }, + "id": 116517297 + } + }, + { + "id": 116516938, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -58.4244061, + -34.6110649 + ], + [ + -58.4244061, + -34.6110649 + ], + [ + -58.4244061, + -34.6110649 + ], + [ + -58.4244061, + -34.6110649 + ], + [ + -58.4244061, + -34.6110649 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "AgusQui", + "uid": "331218", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/AgusQui/MapCompleteRailway/main/Signals", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-23T22:15:53Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/AgusQui/MapCompleteRailway/main/Signals", + "answer": 3, + "imagery": "osm", + "language": "es", + "change_within_25m": 3 + }, + "id": 116516938 + } + }, + { + "id": 116515172, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.7399364, + 51.4081442 + ], + [ + 4.7405966, + 51.4081442 + ], + [ + 4.7405966, + 51.4091939 + ], + [ + 4.7399364, + 51.4091939 + ], + [ + 4.7399364, + 51.4081442 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Stinus_Clasius", + "uid": "1086503", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-23T21:08:30Z", + "reviewed_features": [], + "create": 21, + "modify": 21, + "delete": 0, + "area": 6.93011939996776e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 16, + "theme": "grb", + "answer": 3, + "import": 3, + "imagery": "osm", + "language": "nl", + "conflation": 6 + }, + "id": 116515172 + } + }, + { + "id": 116511833, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.2331325, + -39.8432108 + ], + [ + -73.2324705, + -39.8432108 + ], + [ + -73.2324705, + -39.8427268 + ], + [ + -73.2331325, + -39.8427268 + ], + [ + -73.2331325, + -39.8432108 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-23T19:13:53Z", + "reviewed_features": [], + "create": 0, + "modify": 10, + "delete": 0, + "area": 3.2040799999588e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "osm", + "language": "en", + "add-image": 10, + "change_over_5000m": 8 + }, + "id": 116511833 + } + }, + { + "id": 116506336, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.1947952, + 51.1763651 + ], + [ + 3.1947952, + 51.1763651 + ], + [ + 3.1947952, + 51.1763651 + ], + [ + 3.1947952, + 51.1763651 + ], + [ + 3.1947952, + 51.1763651 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-23T16:26:27Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "benches", + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "id": 116506336 + } + }, + { + "id": 116505950, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.1935534, + 51.1766935 + ], + [ + 3.1970289, + 51.1766935 + ], + [ + 3.1970289, + 51.1791967 + ], + [ + 3.1935534, + 51.1791967 + ], + [ + 3.1935534, + 51.1766935 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-23T16:17:53Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0.0000086998715999985, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 2, + "imagery": "CartoDB.Voyager", + "language": "en", + "add-image": 1 + }, + "id": 116505950 + } + }, + { + "id": 116504080, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.4583239, + 51.0217399 + ], + [ + 4.4584737, + 51.0217399 + ], + [ + 4.4584737, + 51.0217709 + ], + [ + 4.4583239, + 51.0217709 + ], + [ + 4.4583239, + 51.0217399 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-23T15:33:43Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 4.64379999998317e-9, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "toerisme_vlaanderen", + "answer": 5, + "create": 1, + "imagery": "AGIV", + "language": "nl", + "change_over_5000m": 1, + "change_within_25m": 6, + "move:node/9442452056": "improve_accuracy" + }, + "id": 116504080 + } + }, + { + "id": 116503101, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 14.6257214, + 51.7363413 + ], + [ + 14.6292209, + 51.7363413 + ], + [ + 14.6292209, + 51.7418499 + ], + [ + 14.6257214, + 51.7418499 + ], + [ + 14.6257214, + 51.7363413 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "sebkur", + "uid": "22917", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-23T15:08:30Z", + "reviewed_features": [], + "create": 6, + "modify": 6, + "delete": 0, + "area": 0.0000192773456999972, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "id": 116503101 + } + }, + { + "id": 116501463, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.4575892, + 51.020284 + ], + [ + 4.4591655, + 51.020284 + ], + [ + 4.4591655, + 51.0219629 + ], + [ + 4.4575892, + 51.0219629 + ], + [ + 4.4575892, + 51.020284 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-23T14:25:12Z", + "reviewed_features": [], + "create": 1, + "modify": 7, + "delete": 1, + "area": 0.00000264645007000264, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 13, + "create": 1, + "imagery": "AGIV", + "deletion": 1, + "language": "nl", + "change_over_5000m": 1, + "change_within_25m": 7, + "change_within_50m": 6, + "change_within_500m": 1, + "deletion:node/8572587333": "disused" + }, + "id": 116501463 + } + }, + { + "id": 116491728, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.5779165, + 54.8679937 + ], + [ + -1.5605582, + 54.8679937 + ], + [ + -1.5605582, + 54.9019408 + ], + [ + -1.5779165, + 54.9019408 + ], + [ + -1.5779165, + 54.8679937 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-23T09:46:08Z", + "reviewed_features": [], + "create": 0, + "modify": 51, + "delete": 0, + "area": 0.000589263945929979, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 78, + "imagery": "osm", + "language": "en" + }, + "id": 116491728 + } + }, + { + "id": 116491069, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.4576786, + 50.9611019 + ], + [ + 4.4577128, + 50.9611019 + ], + [ + 4.4577128, + 50.961121 + ], + [ + 4.4576786, + 50.961121 + ], + [ + 4.4576786, + 50.9611019 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "StefDeGreef", + "uid": "1860737", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-23T09:21:51Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 6.53219999857112e-10, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "cyclofix", + "answer": 3, + "imagery": "CartoDB.Voyager", + "language": "fr", + "add-image": 1, + "change_within_25m": 5, + "move:node/7634798362": "improve_accuracy" + }, + "id": 116491069 + } + }, + { + "id": 116488734, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.7972281, + 51.0930716 + ], + [ + 5.8277247, + 51.0930716 + ], + [ + 5.8277247, + 51.0968515 + ], + [ + 5.7972281, + 51.0968515 + ], + [ + 5.7972281, + 51.0930716 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Mich4711", + "uid": "12764098", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #cycle_infra", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-23T07:03:23Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 0.000115274098339935, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cycle_infra", + "answer": 12, + "imagery": "CartoDB.Voyager", + "language": "nl" + }, + "id": 116488734 + } + }, + { + "id": 116477825, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.3147745, + 51.0856325 + ], + [ + 3.4185482, + 51.0856325 + ], + [ + 3.4185482, + 51.1160687 + ], + [ + 3.3147745, + 51.1160687 + ], + [ + 3.3147745, + 51.0856325 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/seppesantens/MapComplete-Themes/main/cyclenodenetworks/cyclenodenetworks.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-22T19:30:09Z", + "reviewed_features": [], + "create": 0, + "modify": 10, + "delete": 0, + "area": 0.00315847708793968, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/seppesantens/MapComplete-Themes/main/cyclenodenetworks/cyclenodenetworks.json", + "answer": 10, + "imagery": "osm", + "language": "en" + }, + "id": 116477825 + } + }, + { + "id": 116477778, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.3114346, + 51.105527 + ], + [ + 3.3145259, + 51.105527 + ], + [ + 3.3145259, + 51.1075528 + ], + [ + 3.3114346, + 51.1075528 + ], + [ + 3.3114346, + 51.105527 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #nature", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-22T19:26:42Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.00000626235553999491, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "nature", + "imagery": "osm", + "language": "nl", + "add-image": 2 + }, + "id": 116477778 + } + }, + { + "id": 116477697, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.3195172, + 51.1152861 + ], + [ + 3.3195172, + 51.1152861 + ], + [ + 3.3195172, + 51.1152861 + ], + [ + 3.3195172, + 51.1152861 + ], + [ + 3.3195172, + 51.1152861 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #postboxes", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-22T19:22:38Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "postboxes", + "imagery": "CartoDB.Voyager", + "language": "en", + "add-image": 1 + }, + "id": 116477697 + } + }, + { + "id": 116477554, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.3110784, + 51.1131436 + ], + [ + 3.3110784, + 51.1131436 + ], + [ + 3.3110784, + 51.1131436 + ], + [ + 3.3110784, + 51.1131436 + ], + [ + 3.3110784, + 51.1131436 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #artwork", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-22T19:17:14Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "artwork", + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "id": 116477554 + } + }, + { + "id": 116477552, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.1227752, + 51.2193539 + ], + [ + 4.1251972, + 51.2193539 + ], + [ + 4.1251972, + 51.2223223 + ], + [ + 4.1227752, + 51.2223223 + ], + [ + 4.1227752, + 51.2193539 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-alpha-1", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-22T19:17:02Z", + "reviewed_features": [], + "create": 2, + "modify": 9, + "delete": 0, + "area": 0.00000718946479999856, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "move": 1, + "path": "mc/develop/", + "theme": "food", + "answer": 10, + "create": 2, + "imagery": "osm", + "language": "en", + "add-image": 1, + "change_over_5000m": 2, + "change_within_25m": 12, + "move:node/9439916874": "improve_accuracy" + }, + "id": 116477552 + } + }, + { + "id": 116477462, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.1226913, + 51.2222942 + ], + [ + 4.1231411, + 51.2222942 + ], + [ + 4.1231411, + 51.222552 + ], + [ + 4.1226913, + 51.222552 + ], + [ + 4.1226913, + 51.2222942 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-alpha-1", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-22T19:13:45Z", + "reviewed_features": [], + "create": 9, + "modify": 5, + "delete": 0, + "area": 1.15958440000032e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "move": 4, + "path": "mc/develop/", + "theme": "grb", + "import": 1, + "imagery": "osm", + "language": "en", + "conflation": 2, + "change_within_50m": 1 + }, + "id": 116477462 + } + }, + { + "id": 116475963, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.3088642, + 51.1027881 + ], + [ + 3.3252677, + 51.1027881 + ], + [ + 3.3252677, + 51.1179415 + ], + [ + 3.3088642, + 51.1179415 + ], + [ + 3.3088642, + 51.1027881 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/seppesantens/mapcomplete-themes/main/walkingnodenetworks/walkingnodenetworks.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-22T18:16:40Z", + "reviewed_features": [], + "create": 0, + "modify": 19, + "delete": 0, + "area": 0.000248568796900044, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/seppesantens/mapcomplete-themes/main/walkingnodenetworks/walkingnodenetworks.json", + "answer": 15, + "imagery": "osm", + "language": "en", + "add-image": 6 + }, + "id": 116475963 + } + }, + { + "id": 116474641, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.1227752, + 51.2223189 + ], + [ + 4.1227752, + 51.2223189 + ], + [ + 4.1227752, + 51.2223189 + ], + [ + 4.1227752, + 51.2223189 + ], + [ + 4.1227752, + 51.2223189 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-alpha-1", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-22T17:34:40Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "food", + "answer": 5, + "create": 1, + "imagery": "osm", + "language": "en", + "change_over_5000m": 1, + "change_within_25m": 5 + }, + "id": 116474641 + } + }, + { + "id": 116473925, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.3541679, + 51.1054843 + ], + [ + 3.3541679, + 51.1054843 + ], + [ + 3.3541679, + 51.1054843 + ], + [ + 3.3541679, + 51.1054843 + ], + [ + 3.3541679, + 51.1054843 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-22T17:13:40Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "benches", + "answer": 1, + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "id": 116473925 + } + }, + { + "id": 116461006, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.876773, + 51.0710463 + ], + [ + 4.876773, + 51.0710463 + ], + [ + 4.876773, + 51.0710463 + ], + [ + 4.876773, + 51.0710463 + ], + [ + 4.876773, + 51.0710463 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Frans_Napaters", + "uid": "3574538", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 2, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-22T10:47:57Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "aed", + "create": 1, + "imagery": "osm", + "language": "nl" + }, + "id": 116461006 + } + }, + { + "id": 116457152, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.941156, + 42.702383 + ], + [ + 2.941156, + 42.702383 + ], + [ + 2.941156, + 42.702383 + ], + [ + 2.941156, + 42.702383 + ], + [ + 2.941156, + 42.702383 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "LySioS", + "uid": "11579673", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-22T08:08:25Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 3, + "imagery": "osm", + "language": "fr", + "change_within_5000m": 3 + }, + "id": 116457152 + } + }, + { + "id": 116453646, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 130.5694434, + 31.765696 + ], + [ + 130.5694434, + 31.765696 + ], + [ + 130.5694434, + 31.765696 + ], + [ + 130.5694434, + 31.765696 + ], + [ + 130.5694434, + 31.765696 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-22T03:04:55Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 1 + }, + "id": 116453646 + } + }, + { + "id": 116449226, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.941156, + 42.702383 + ], + [ + 2.941156, + 42.702383 + ], + [ + 2.941156, + 42.702383 + ], + [ + 2.941156, + 42.702383 + ], + [ + 2.941156, + 42.702383 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "LySioS", + "uid": "11579673", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-21T22:01:27Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "create": 1, + "imagery": "osm", + "language": "fr" + }, + "id": 116449226 + } + }, + { + "id": 116446646, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -70.688579, + -33.544727 + ], + [ + -70.688579, + -33.544727 + ], + [ + -70.688579, + -33.544727 + ], + [ + -70.688579, + -33.544727 + ], + [ + -70.688579, + -33.544727 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-21T20:33:28Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "osm", + "language": "en", + "add-image": 1, + "change_within_500m": 1 + }, + "id": 116446646 + } + }, + { + "id": 116442724, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.588913, + 45.3660248 + ], + [ + 5.5941952, + 45.3660248 + ], + [ + 5.5941952, + 45.367377 + ], + [ + 5.588913, + 45.367377 + ], + [ + 5.588913, + 45.3660248 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Eric Royer", + "uid": "12137407", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-21T18:14:59Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.00000714259083999707, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "food", + "answer": 2, + "imagery": "osm", + "language": "en" + }, + "id": 116442724 + } + }, + { + "id": 116438284, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 14.1654471, + 52.3963101 + ], + [ + 14.1691576, + 52.3963101 + ], + [ + 14.1691576, + 52.4055509 + ], + [ + 14.1654471, + 52.4055509 + ], + [ + 14.1654471, + 52.3963101 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Casi1980", + "uid": "13989376", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-21T16:13:53Z", + "reviewed_features": [], + "create": 5, + "modify": 0, + "delete": 0, + "area": 0.0000342879884000059, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "id": 116438284 + } + }, + { + "id": 116437063, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 17.402716, + 52.0871765 + ], + [ + 17.402716, + 52.0871765 + ], + [ + 17.402716, + 52.0871765 + ], + [ + 17.402716, + 52.0871765 + ], + [ + 17.402716, + 52.0871765 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Redssu", + "uid": "13639663", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #parkings", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-21T15:44:01Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 1, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "parkings", + "create": 1, + "imagery": "Geoportal2-PL-aerial_image_WMTS", + "deletion": 1, + "language": "en", + "deletion:node/9437251385": "testing point" + }, + "id": 116437063 + } + }, + { + "id": 116431524, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 11.8764219, + 47.9889721 + ], + [ + 11.8770696, + 47.9889721 + ], + [ + 11.8770696, + 47.9894352 + ], + [ + 11.8764219, + 47.9894352 + ], + [ + 11.8764219, + 47.9889721 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-21T13:19:01Z", + "reviewed_features": [], + "create": 2, + "modify": 0, + "delete": 0, + "area": 2.99949870002994e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "create": 2, + "imagery": "osm", + "language": "de", + "change_over_5000m": 1 + }, + "id": 116431524 + } + }, + { + "id": 116418875, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.9344353, + 47.5192619 + ], + [ + 1.934966, + 47.5192619 + ], + [ + 1.934966, + 47.519825 + ], + [ + 1.9344353, + 47.519825 + ], + [ + 1.9344353, + 47.5192619 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #campersite", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-21T08:41:49Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 2.98837170000368e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "campersite", + "answer": 4, + "imagery": "osm", + "language": "en", + "add-image": 2, + "change_within_25m": 6 + }, + "id": 116418875 + } + }, + { + "id": 116417325, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 11.7917955, + 48.0038767 + ], + [ + 11.7917955, + 48.0038767 + ], + [ + 11.7917955, + 48.0038767 + ], + [ + 11.7917955, + 48.0038767 + ], + [ + 11.7917955, + 48.0038767 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-21T08:04:56Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "create": 1, + "imagery": "osm", + "language": "de", + "change_over_5000m": 1 + }, + "id": 116417325 + } + }, + { + "id": 116416417, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.8407651, + 51.1844879 + ], + [ + 4.8407651, + 51.1844879 + ], + [ + 4.8407651, + 51.1844879 + ], + [ + 4.8407651, + 51.1844879 + ], + [ + 4.8407651, + 51.1844879 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Frans_Napaters", + "uid": "3574538", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-21T07:45:01Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 5, + "imagery": "CartoDB.Voyager", + "language": "nl" + }, + "id": 116416417 + } + }, + { + "id": 116409050, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2211101, + 51.2165519 + ], + [ + 3.2211101, + 51.2165519 + ], + [ + 3.2211101, + 51.2165519 + ], + [ + 3.2211101, + 51.2165519 + ], + [ + 3.2211101, + 51.2165519 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.0-alpha", + "comment": "Adding data with #MapComplete for theme #entrances", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-21T02:38:05Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "127.0.0.1:1234", + "theme": "entrances", + "create": 2, + "imagery": "osm", + "language": "en" + }, + "id": 116409050 + } + }, + { + "id": 116387905, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 79.4831278, + 11.6086153 + ], + [ + 79.4885951, + 11.6086153 + ], + [ + 79.4885951, + 11.6105775 + ], + [ + 79.4831278, + 11.6105775 + ], + [ + 79.4831278, + 11.6086153 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bponkishore", + "uid": "14062769", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-20T14:20:21Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000010727936059982, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 2, + "imagery": "osm", + "language": "en" + }, + "id": 116387905 + } + }, + { + "id": 116387718, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 79.4922559, + 11.6105652 + ], + [ + 79.493754, + 11.6105652 + ], + [ + 79.493754, + 11.6110157 + ], + [ + 79.4922559, + 11.6110157 + ], + [ + 79.4922559, + 11.6105652 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bponkishore", + "uid": "14062769", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-20T14:15:01Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 6.74894049995624e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 1, + "imagery": "osm", + "language": "en" + }, + "id": 116387718 + } + }, + { + "id": 116387593, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 79.4885869, + 11.6069151 + ], + [ + 79.4952361, + 11.6069151 + ], + [ + 79.4952361, + 11.6147643 + ], + [ + 79.4885869, + 11.6147643 + ], + [ + 79.4885869, + 11.6069151 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bponkishore", + "uid": "14062769", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-20T14:11:53Z", + "reviewed_features": [], + "create": 0, + "modify": 7, + "delete": 0, + "area": 0.0000521909006399796, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 8, + "imagery": "osm", + "language": "en" + }, + "id": 116387593 + } + }, + { + "id": 116387099, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 79.4739775, + 11.6126571 + ], + [ + 79.4966847, + 11.6126571 + ], + [ + 79.4966847, + 11.6194243 + ], + [ + 79.4739775, + 11.6194243 + ], + [ + 79.4739775, + 11.6126571 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bponkishore", + "uid": "14062769", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-20T13:56:54Z", + "reviewed_features": [], + "create": 0, + "modify": 10, + "delete": 0, + "area": 0.000153664163840007, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 10, + "imagery": "osm", + "language": "en" + }, + "id": 116387099 + } + }, + { + "id": 116379703, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.8407651, + 51.1844879 + ], + [ + 4.8407651, + 51.1844879 + ], + [ + 4.8407651, + 51.1844879 + ], + [ + 4.8407651, + 51.1844879 + ], + [ + 4.8407651, + 51.1844879 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Frans_Napaters", + "uid": "3574538", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-20T10:48:08Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "create": 1, + "imagery": "CartoDB.Voyager", + "language": "nl", + "change_over_5000m": 1 + }, + "id": 116379703 + } + }, + { + "id": 116378559, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -71.195637, + -33.6505166 + ], + [ + -71.1333362, + -33.6505166 + ], + [ + -71.1333362, + -33.403906 + ], + [ + -71.195637, + -33.403906 + ], + [ + -71.195637, + -33.6505166 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Camilo Nuñez Castro", + "uid": "5143819", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-20T10:23:50Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0.0153640376684809, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "answer": 3, + "imagery": "HDM_HOT", + "language": "en" + }, + "id": 116378559 + } + }, + { + "id": 116377738, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.9138955, + 43.557006 + ], + [ + 2.9138955, + 43.557006 + ], + [ + 2.9138955, + 43.557006 + ], + [ + 2.9138955, + 43.557006 + ], + [ + 2.9138955, + 43.557006 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-20T10:04:57Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 2, + "imagery": "osm", + "language": "en", + "change_within_25m": 2 + }, + "id": 116377738 + } + }, + { + "id": 116377734, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.9138955, + 43.557006 + ], + [ + 2.9138955, + 43.557006 + ], + [ + 2.9138955, + 43.557006 + ], + [ + 2.9138955, + 43.557006 + ], + [ + 2.9138955, + 43.557006 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-20T10:04:52Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 4, + "create": 1, + "imagery": "osm", + "language": "en", + "change_over_5000m": 1, + "change_within_25m": 4 + }, + "id": 116377734 + } + }, + { + "id": 116376644, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.8438334, + 51.1846001 + ], + [ + 4.8438334, + 51.1846001 + ], + [ + 4.8438334, + 51.1846001 + ], + [ + 4.8438334, + 51.1846001 + ], + [ + 4.8438334, + 51.1846001 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Frans_Napaters", + "uid": "3574538", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #waste_basket", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-20T09:38:11Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "waste_basket", + "answer": 2, + "create": 1, + "imagery": "osm", + "language": "nl", + "change_over_5000m": 1, + "change_within_50m": 2 + }, + "id": 116376644 + } + }, + { + "id": 116376152, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.8413405, + 51.1844432 + ], + [ + 4.8413405, + 51.1844432 + ], + [ + 4.8413405, + 51.1844432 + ], + [ + 4.8413405, + 51.1844432 + ], + [ + 4.8413405, + 51.1844432 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Frans_Napaters", + "uid": "3574538", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-20T09:26:32Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "benches", + "imagery": "osm", + "language": "nl", + "add-image": 1, + "change_within_50m": 1 + }, + "id": 116376152 + } + }, + { + "id": 116361219, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.6998679, + 51.5517728 + ], + [ + -1.6996553, + 51.5517728 + ], + [ + -1.6996553, + 51.5518835 + ], + [ + -1.6998679, + 51.5518835 + ], + [ + -1.6998679, + 51.5517728 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Welshie", + "uid": "508", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #uk_addresses", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T22:24:42Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 2.35348200000993e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "uk_addresses", + "answer": 2, + "imagery": "osm", + "language": "en" + }, + "id": 116361219 + } + }, + { + "id": 116359563, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.2504984, + -39.8117083 + ], + [ + -73.2473714, + -39.8117083 + ], + [ + -73.2473714, + -39.8110068 + ], + [ + -73.2504984, + -39.8110068 + ], + [ + -73.2504984, + -39.8117083 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-19T21:27:48Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.00000219359049998863, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 3, + "change_within_1000m": 3 + }, + "id": 116359563 + } + }, + { + "id": 116356310, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.5917692, + 45.3589909 + ], + [ + 5.5921931, + 45.3589909 + ], + [ + 5.5921931, + 45.3592548 + ], + [ + 5.5917692, + 45.3592548 + ], + [ + 5.5917692, + 45.3589909 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Eric Royer", + "uid": "12137407", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T19:46:59Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 1.11867210000184e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "food", + "answer": 4, + "imagery": "osm", + "language": "en" + }, + "id": 116356310 + } + }, + { + "id": 116353102, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -2.4147242, + 51.5404679 + ], + [ + -2.4145356, + 51.5404679 + ], + [ + -2.4145356, + 51.5406824 + ], + [ + -2.4147242, + 51.5406824 + ], + [ + -2.4147242, + 51.5404679 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "spelledwrongdotuk", + "uid": "12198029", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T18:01:59Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 4.04546999997997e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "shops", + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "id": 116353102 + } + }, + { + "id": 116350440, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -60.733924, + -32.9754719 + ], + [ + -60.7012889, + -32.9754719 + ], + [ + -60.7012889, + -32.9343606 + ], + [ + -60.733924, + -32.9343606 + ], + [ + -60.733924, + -32.9754719 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #observation_towers", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T16:47:40Z", + "reviewed_features": [], + "create": 0, + "modify": 19, + "delete": 0, + "area": 0.00134167138663015, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "observation_towers", + "answer": 22, + "imagery": "osm", + "language": "en" + }, + "id": 116350440 + } + }, + { + "id": 116350272, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -60.8128564, + -32.9191204 + ], + [ + -60.8128564, + -32.9191204 + ], + [ + -60.8128564, + -32.9191204 + ], + [ + -60.8128564, + -32.9191204 + ], + [ + -60.8128564, + -32.9191204 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #entrances", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T16:43:12Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "entrances", + "answer": 2, + "imagery": "osm", + "language": "en" + }, + "id": 116350272 + } + }, + { + "id": 116350132, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -60.8117142, + -32.9183401 + ], + [ + -60.8115765, + -32.9183401 + ], + [ + -60.8115765, + -32.9181793 + ], + [ + -60.8117142, + -32.9181793 + ], + [ + -60.8117142, + -32.9183401 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #cafes_and_pubs", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T16:38:58Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 2.21421599998492e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cafes_and_pubs", + "answer": 3, + "imagery": "osm", + "language": "en" + }, + "id": 116350132 + } + }, + { + "id": 116350004, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -60.8075963, + -32.9118752 + ], + [ + -60.8075963, + -32.9118752 + ], + [ + -60.8075963, + -32.9118752 + ], + [ + -60.8075963, + -32.9118752 + ], + [ + -60.8075963, + -32.9118752 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T16:35:53Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "benches", + "answer": 1, + "imagery": "osm", + "language": "en" + }, + "id": 116350004 + } + }, + { + "id": 116349812, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -60.8102045, + -32.9180053 + ], + [ + -60.8102045, + -32.9180053 + ], + [ + -60.8102045, + -32.9180053 + ], + [ + -60.8102045, + -32.9180053 + ], + [ + -60.8102045, + -32.9180053 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T16:30:58Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 2, + "imagery": "osm", + "language": "en" + }, + "id": 116349812 + } + }, + { + "id": 116349573, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -60.8204614, + -32.9341412 + ], + [ + -60.8031753, + -32.9341412 + ], + [ + -60.8031753, + -32.9225001 + ], + [ + -60.8204614, + -32.9225001 + ], + [ + -60.8204614, + -32.9341412 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #charging_stations", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T16:24:53Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000201229218709971, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "charging_stations", + "answer": 3, + "imagery": "CartoDB.Voyager", + "language": "en" + }, + "id": 116349573 + } + }, + { + "id": 116346307, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.9968427, + 42.8927249 + ], + [ + 2.9968427, + 42.8927249 + ], + [ + 2.9968427, + 42.8927249 + ], + [ + 2.9968427, + 42.8927249 + ], + [ + 2.9968427, + 42.8927249 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #campersite", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-19T15:01:58Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "campersite", + "answer": 4, + "create": 1, + "imagery": "osm", + "language": "en", + "change_over_5000m": 5 + }, + "id": 116346307 + } + }, + { + "id": 116343902, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 11.3954282, + 44.5057106 + ], + [ + 11.3954347, + 44.5057106 + ], + [ + 11.3954347, + 44.505757 + ], + [ + 11.3954282, + 44.505757 + ], + [ + 11.3954282, + 44.5057106 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "WinstonSmith", + "uid": "36030", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-19T13:55:39Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 3.01599999994786e-10, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "cyclofix", + "answer": 5, + "create": 1, + "imagery": "CartoDB.Voyager", + "language": "en", + "change_over_5000m": 1, + "change_within_25m": 6, + "move:node/9431075016": "improve_accuracy" + }, + "id": 116343902 + } + }, + { + "id": 116343730, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -71.6127057, + -33.5828149 + ], + [ + -71.6127057, + -33.5828149 + ], + [ + -71.6127057, + -33.5828149 + ], + [ + -71.6127057, + -33.5828149 + ], + [ + -71.6127057, + -33.5828149 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T13:50:57Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 1 + }, + "id": 116343730 + } + }, + { + "id": 116336052, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.6120027, + 42.3854559 + ], + [ + 2.6120027, + 42.3854559 + ], + [ + 2.6120027, + 42.3854559 + ], + [ + 2.6120027, + 42.3854559 + ], + [ + 2.6120027, + 42.3854559 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-19T10:45:00Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "shops", + "answer": 2, + "imagery": "osm", + "language": "en", + "change_within_25m": 2 + }, + "id": 116336052 + } + }, + { + "id": 116335626, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.6151991, + 42.3833737 + ], + [ + 2.6151991, + 42.3833737 + ], + [ + 2.6151991, + 42.3833737 + ], + [ + 2.6151991, + 42.3833737 + ], + [ + 2.6151991, + 42.3833737 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-19T10:35:19Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 6, + "create": 1, + "imagery": "osm", + "language": "en", + "add-image": 1, + "change_over_5000m": 1, + "change_within_50m": 7 + }, + "id": 116335626 + } + }, + { + "id": 116335294, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.6160606, + 42.3832823 + ], + [ + 2.6160606, + 42.3832823 + ], + [ + 2.6160606, + 42.3832823 + ], + [ + 2.6160606, + 42.3832823 + ], + [ + 2.6160606, + 42.3832823 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #campersite", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-19T10:28:03Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "campersite", + "answer": 5, + "create": 1, + "imagery": "osm", + "language": "en", + "add-image": 1, + "change_over_5000m": 1, + "change_within_25m": 6 + }, + "id": 116335294 + } + }, + { + "id": 116327686, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 11.7968541, + 47.9961646 + ], + [ + 11.7989583, + 47.9961646 + ], + [ + 11.7989583, + 47.9985608 + ], + [ + 11.7968541, + 47.9985608 + ], + [ + 11.7968541, + 47.9961646 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-19T07:10:54Z", + "reviewed_features": [], + "create": 6, + "modify": 0, + "delete": 0, + "area": 0.00000504208404000317, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "create": 6, + "imagery": "osm", + "language": "de", + "change_over_5000m": 6 + }, + "id": 116327686 + } + }, + { + "id": 116322023, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -44.9052229, + -20.1596832 + ], + [ + -44.8990978, + -20.1596832 + ], + [ + -44.8990978, + -20.1431644 + ], + [ + -44.9052229, + -20.1431644 + ], + [ + -44.9052229, + -20.1596832 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "c_cesar", + "uid": "12078598", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #street_lighting", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-19T02:56:44Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000101179301879975, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "street_lighting", + "answer": 2, + "imagery": "osm", + "language": "en" + }, + "id": 116322023 + } + }, + { + "id": 116315097, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2009866, + 50.910119 + ], + [ + 4.4300828, + 50.910119 + ], + [ + 4.4300828, + 51.0639441 + ], + [ + 4.2009866, + 51.0639441 + ], + [ + 4.2009866, + 50.910119 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-18T20:28:48Z", + "reviewed_features": [], + "create": 2, + "modify": 16, + "delete": 0, + "area": 0.0352407458746197, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 23, + "create": 2, + "imagery": "osm", + "language": "nl" + }, + "id": 116315097 + } + }, + { + "id": 116310179, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -78.6198627, + 26.5213718 + ], + [ + -78.6144907, + 26.5213718 + ], + [ + -78.6144907, + 26.5240728 + ], + [ + -78.6198627, + 26.5240728 + ], + [ + -78.6198627, + 26.5213718 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "InsertUser", + "uid": "89098", + "editor": "MapComplete 0.14.1", + "comment": "Adding data with #MapComplete for theme #street_lighting", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-18T18:02:57Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0.000014509771999975, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "street_lighting", + "answer": 1, + "imagery": "osm", + "language": "en", + "change_within_5000m": 1 + }, + "id": 116310179 + } + }, + { + "id": 116308236, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 13.8111556, + 52.8245416 + ], + [ + 13.8111556, + 52.8245416 + ], + [ + 13.8111556, + 52.8245416 + ], + [ + 13.8111556, + 52.8245416 + ], + [ + 13.8111556, + 52.8245416 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Brandoberinspektor Erdmann", + "uid": "13364061", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-18T17:12:40Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "id": 116308236 + } + }, + { + "id": 116307538, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 8.31451, + 49.6111974 + ], + [ + 8.31451, + 49.6111974 + ], + [ + 8.31451, + 49.6111974 + ], + [ + 8.31451, + 49.6111974 + ], + [ + 8.31451, + 49.6111974 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Emilius123", + "uid": "13874704", + "editor": "MapComplete 0.14.0", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-18T16:54:19Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 3, + "imagery": "osm", + "language": "de" + }, + "id": 116307538 + } + }, + { + "id": 116307441, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.6632915, + 48.2497405 + ], + [ + -1.6632915, + 48.2497405 + ], + [ + -1.6632915, + 48.2497405 + ], + [ + -1.6632915, + 48.2497405 + ], + [ + -1.6632915, + 48.2497405 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "H@mlet", + "uid": "691314", + "editor": "MapComplete 0.14.0", + "comment": "Adding data with #MapComplete for theme #maps", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-18T16:51:45Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 1, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "maps", + "answer": 2, + "create": 1, + "imagery": "osm", + "deletion": 1, + "language": "en", + "deletion:node/9428929578": "testing point" + }, + "id": 116307441 + } + }, + { + "id": 116307009, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.4123378, + 50.7928342 + ], + [ + 4.4126717, + 50.7928342 + ], + [ + 4.4126717, + 50.7928376 + ], + [ + 4.4123378, + 50.7928376 + ], + [ + 4.4123378, + 50.7928342 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "StefDeGreef", + "uid": "1860737", + "editor": "MapComplete 0.14.0", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-18T16:39:34Z", + "reviewed_features": [], + "create": 1, + "modify": 6, + "delete": 1, + "area": 1.13525999902947e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 2, + "theme": "cyclofix", + "answer": 7, + "create": 1, + "imagery": "CartoDB.Voyager", + "deletion": 1, + "language": "fr", + "add-image": 2, + "change_over_5000m": 1, + "change_within_25m": 12, + "move:node/9428878139": "improve_accuracy", + "deletion:node/2895132452": "mauvaise catégorie" + }, + "id": 116307009 + } + }, + { + "id": 116302996, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -71.60132, + -33.0506821 + ], + [ + -71.60132, + -33.0506821 + ], + [ + -71.60132, + -33.0506821 + ], + [ + -71.60132, + -33.0506821 + ], + [ + -71.60132, + -33.0506821 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.0", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-18T15:01:18Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 1 + }, + "id": 116302996 + } + }, + { + "id": 116302086, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.2254687, + 41.1775402 + ], + [ + -73.2254687, + 41.1775402 + ], + [ + -73.2254687, + 41.1775402 + ], + [ + -73.2254687, + 41.1775402 + ], + [ + -73.2254687, + 41.1775402 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "redsteakraw", + "uid": "139856", + "editor": "MapComplete 0.14.0", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-18T14:39:27Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "shops", + "create": 1, + "imagery": "osm", + "language": "en", + "change_over_5000m": 1 + }, + "id": 116302086 + } + }, + { + "id": 116301008, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.1960648, + 51.2470046 + ], + [ + 3.2034968, + 51.2470046 + ], + [ + 3.2034968, + 51.2491122 + ], + [ + 3.1960648, + 51.2491122 + ], + [ + 3.1960648, + 51.2470046 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.14.0", + "comment": "Adding data with #MapComplete for theme #charging_stations", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-18T14:12:49Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.0000156636832000166, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "charging_stations", + "answer": 2, + "imagery": "CartoDB.Voyager", + "language": "en", + "change_within_5000m": 2 + }, + "id": 116301008 + } + }, + { + "id": 116297063, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.4169574, + 50.9409251 + ], + [ + 5.4349677, + 50.9409251 + ], + [ + 5.4349677, + 50.9477931 + ], + [ + 5.4169574, + 50.9477931 + ], + [ + 5.4169574, + 50.9409251 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.14.0", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-18T12:30:33Z", + "reviewed_features": [], + "create": 493, + "modify": 24, + "delete": 0, + "area": 0.000123694740399945, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 12, + "theme": "grb", + "answer": 12, + "import": 70, + "imagery": "osm", + "language": "nl", + "conflation": 6, + "change_over_5000m": 31 + }, + "id": 116297063 + } + }, + { + "id": 116288326, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 12.9979688, + 52.0042014 + ], + [ + 12.9979688, + 52.0042014 + ], + [ + 12.9979688, + 52.0042014 + ], + [ + 12.9979688, + 52.0042014 + ], + [ + 12.9979688, + 52.0042014 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Oberfuzzi", + "uid": "14794109", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-18T09:11:57Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "id": 116288326 + } + }, + { + "id": 116286179, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -7.9977143, + 37.0978991 + ], + [ + -7.9976405, + 37.0978991 + ], + [ + -7.9976405, + 37.097959 + ], + [ + -7.9977143, + 37.097959 + ], + [ + -7.9977143, + 37.0978991 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Alexmol", + "uid": "347293", + "editor": "MapComplete 0.14.0", + "comment": "Adding data with #MapComplete for theme #charging_stations", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-18T08:18:34Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 4.42062000027127e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "charging_stations", + "answer": 3, + "imagery": "CartoDB.Voyager", + "language": "en" + }, + "id": 116286179 + } + }, + { + "id": 116284120, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 11.7931433, + 47.995838 + ], + [ + 11.7962775, + 47.995838 + ], + [ + 11.7962775, + 48.0012654 + ], + [ + 11.7931433, + 48.0012654 + ], + [ + 11.7931433, + 47.995838 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.14.0", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-18T07:26:13Z", + "reviewed_features": [], + "create": 8, + "modify": 0, + "delete": 0, + "area": 0.0000170105570800058, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "create": 8, + "imagery": "osm", + "language": "de", + "change_over_5000m": 8 + }, + "id": 116284120 + } + }, + { + "id": 116276269, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -72.9851162, + -41.3135271 + ], + [ + -72.9837516, + -41.3135271 + ], + [ + -72.9837516, + -41.3133499 + ], + [ + -72.9851162, + -41.3133499 + ], + [ + -72.9851162, + -41.3135271 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.14.0", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-18T00:26:29Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 2.4180712000211e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 10 + }, + "id": 116276269 + } + }, + { + "id": 116272308, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -60.819202, + -32.9204343 + ], + [ + -60.8154808, + -32.9204343 + ], + [ + -60.8154808, + -32.9109769 + ], + [ + -60.819202, + -32.9109769 + ], + [ + -60.819202, + -32.9204343 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-17T21:19:15Z", + "reviewed_features": [], + "create": 0, + "modify": 13, + "delete": 0, + "area": 0.0000351928768799252, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 16, + "imagery": "osm", + "language": "en" + }, + "id": 116272308 + } + }, + { + "id": 116269302, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.2328472, + -39.842709 + ], + [ + -73.2326268, + -39.842709 + ], + [ + -73.2326268, + -39.8412373 + ], + [ + -73.2328472, + -39.8412373 + ], + [ + -73.2328472, + -39.842709 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #test", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-17T19:49:35Z", + "reviewed_features": [], + "create": 0, + "modify": 9, + "delete": 0, + "area": 3.24362679983325e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "test", + "answer": 1, + "imagery": "cyclosm", + "language": "en", + "add-image": 8 + }, + "id": 116269302 + } + }, + { + "id": 116265873, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -60.8137139, + -32.9179015 + ], + [ + -60.8061514, + -32.9179015 + ], + [ + -60.8061514, + -32.9163679 + ], + [ + -60.8137139, + -32.9163679 + ], + [ + -60.8137139, + -32.9179015 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #cycle_infra", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-17T18:04:59Z", + "reviewed_features": [], + "create": 0, + "modify": 18, + "delete": 0, + "area": 0.0000115978500000235, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cycle_infra", + "answer": 25, + "imagery": "CartoDB.Voyager", + "language": "en" + }, + "id": 116265873 + } + }, + { + "id": 116265476, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -60.8250633, + -32.9294005 + ], + [ + -60.8116288, + -32.9294005 + ], + [ + -60.8116288, + -32.9204343 + ], + [ + -60.8250633, + -32.9204343 + ], + [ + -60.8250633, + -32.9294005 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-17T17:54:01Z", + "reviewed_features": [], + "create": 0, + "modify": 24, + "delete": 0, + "area": 0.000120456413900002, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 47, + "imagery": "osm", + "language": "en" + }, + "id": 116265476 + } + }, + { + "id": 116265413, + "type": "Feature", + "geometry": null, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-17T17:52:30Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 0, + "area": null, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "playgrounds", + "answer": 1, + "imagery": "osm", + "language": "en" + }, + "id": 116265413 + } + }, + { + "id": 116260926, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.9305393, + 41.7178086 + ], + [ + 2.9312512, + 41.7178086 + ], + [ + 2.9312512, + 41.7181359 + ], + [ + 2.9305393, + 41.7181359 + ], + [ + 2.9305393, + 41.7178086 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-17T16:06:04Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 2.33004870001592e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 5, + "create": 2, + "imagery": "osm", + "language": "en", + "add-image": 1, + "change_within_25m": 8 + }, + "id": 116260926 + } + }, + { + "id": 116259129, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.9338675, + 41.7155799 + ], + [ + 2.9338675, + 41.7155799 + ], + [ + 2.9338675, + 41.7155799 + ], + [ + 2.9338675, + 41.7155799 + ], + [ + 2.9338675, + 41.7155799 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-17T15:22:06Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 7, + "create": 1, + "imagery": "PNOA-Spain-TMS", + "language": "en", + "change_over_5000m": 1, + "change_within_25m": 7 + }, + "id": 116259129 + } + }, + { + "id": 116258551, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -60.8110097, + -32.921969 + ], + [ + -60.8068714, + -32.921969 + ], + [ + -60.8068714, + -32.9152696 + ], + [ + -60.8110097, + -32.9152696 + ], + [ + -60.8110097, + -32.921969 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "mweper", + "uid": "1311281", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-17T15:05:38Z", + "reviewed_features": [], + "create": 0, + "modify": 11, + "delete": 0, + "area": 0.0000277241270199868, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 19, + "imagery": "osm", + "language": "en" + }, + "id": 116258551 + } + }, + { + "id": 116257758, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.9332367, + 41.7201447 + ], + [ + 2.9332367, + 41.7201447 + ], + [ + 2.9332367, + 41.7201447 + ], + [ + 2.9332367, + 41.7201447 + ], + [ + 2.9332367, + 41.7201447 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-17T14:46:27Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 4, + "imagery": "osm", + "language": "en", + "add-image": 1, + "change_within_25m": 3, + "change_within_50m": 2 + }, + "id": 116257758 + } + }, + { + "id": 116253168, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.7877593, + 41.6692173 + ], + [ + 2.7877593, + 41.6692173 + ], + [ + 2.7877593, + 41.6692173 + ], + [ + 2.7877593, + 41.6692173 + ], + [ + 2.7877593, + 41.6692173 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-17T12:46:23Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 1, + "imagery": "PNOA-Spain-TMS", + "language": "en", + "change_within_25m": 1 + }, + "id": 116253168 + } + }, + { + "id": 116252714, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2091674, + 51.187922 + ], + [ + 3.20933, + 51.187922 + ], + [ + 3.20933, + 51.18804 + ], + [ + 3.2091674, + 51.18804 + ], + [ + 3.2091674, + 51.187922 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.14.0-rc-1", + "comment": "Adding data with #MapComplete for theme #fritures", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-17T12:35:35Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 1.91868000000708e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "fritures", + "answer": 7, + "imagery": "osm", + "language": "en" + }, + "id": 116252714 + } + }, + { + "id": 116251861, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.0507767, + 50.6391744 + ], + [ + 3.0613902, + 50.6391744 + ], + [ + 3.0613902, + 50.6485277 + ], + [ + 3.0507767, + 50.6485277 + ], + [ + 3.0507767, + 50.6391744 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "whatismoss", + "uid": "8427311", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-17T12:12:53Z", + "reviewed_features": [], + "create": 0, + "modify": 19, + "delete": 0, + "area": 0.0000992712495500068, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 29, + "imagery": "osm", + "language": "en" + }, + "id": 116251861 + } + }, + { + "id": 116247427, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.7375334, + 51.3886987 + ], + [ + 4.7385366, + 51.3886987 + ], + [ + 4.7385366, + 51.3894895 + ], + [ + 4.7375334, + 51.3894895 + ], + [ + 4.7375334, + 51.3886987 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Stinus_Clasius", + "uid": "1086503", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-17T10:29:47Z", + "reviewed_features": [], + "create": 31, + "modify": 0, + "delete": 0, + "area": 7.93330560003959e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 4, + "imagery": "osm", + "language": "nl" + }, + "id": 116247427 + } + }, + { + "id": 116245840, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 78.1197721, + 9.9251855 + ], + [ + 78.1197721, + 9.9251855 + ], + [ + 78.1197721, + 9.9251855 + ], + [ + 78.1197721, + 9.9251855 + ], + [ + 78.1197721, + 9.9251855 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "divyaboomi", + "uid": "14872477", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-17T09:48:47Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "aed", + "create": 1, + "imagery": "osm", + "language": "en", + "change_over_5000m": 1 + }, + "id": 116245840 + } + }, + { + "id": 116244201, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.6668086, + 41.3225334 + ], + [ + 2.6862459, + 41.3225334 + ], + [ + 2.6862459, + 41.6223035 + ], + [ + 1.6668086, + 41.6223035 + ], + [ + 1.6668086, + 41.3225334 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #campersite", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-17T09:08:04Z", + "reviewed_features": [], + "create": 2, + "modify": 6, + "delete": 0, + "area": 0.305596821364734, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "campersite", + "answer": 12, + "create": 2, + "imagery": "osm", + "language": "en", + "add-image": 1, + "change_over_5000m": 3, + "change_within_25m": 4, + "change_within_50m": 8 + }, + "id": 116244201 + } + }, + { + "id": 116236409, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -5.6804882, + 40.9654234 + ], + [ + -5.6619124, + 40.9654234 + ], + [ + -5.6619124, + 40.9757994 + ], + [ + -5.6804882, + 40.9757994 + ], + [ + -5.6804882, + 40.9654234 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "sanchi", + "uid": "170106", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-17T04:53:31Z", + "reviewed_features": [], + "create": 0, + "modify": 20, + "delete": 0, + "area": 0.000192742500800013, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 37, + "imagery": "osm", + "language": "en" + }, + "id": 116236409 + } + }, + { + "id": 116231990, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -5.6808231, + 40.9699703 + ], + [ + -5.673828, + 40.9699703 + ], + [ + -5.673828, + 40.9719892 + ], + [ + -5.6808231, + 40.9719892 + ], + [ + -5.6808231, + 40.9699703 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "sanchi", + "uid": "170106", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-16T23:24:25Z", + "reviewed_features": [], + "create": 0, + "modify": 9, + "delete": 0, + "area": 0.0000141224073900198, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 24, + "imagery": "osm", + "language": "en" + }, + "id": 116231990 + } + }, + { + "id": 116230459, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -72.9840192, + -41.3133377 + ], + [ + -72.9840192, + -41.3133377 + ], + [ + -72.9840192, + -41.3133377 + ], + [ + -72.9840192, + -41.3133377 + ], + [ + -72.9840192, + -41.3133377 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-16T22:06:07Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "imagery": "cyclosm", + "language": "en", + "add-image": 1, + "change_within_5000m": 1 + }, + "id": 116230459 + } + }, + { + "id": 116229030, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.4236539, + 50.9402942 + ], + [ + 5.4346849, + 50.9402942 + ], + [ + 5.4346849, + 50.946538 + ], + [ + 5.4236539, + 50.946538 + ], + [ + 5.4236539, + 50.9402942 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-16T21:05:16Z", + "reviewed_features": [], + "create": 900, + "modify": 1, + "delete": 0, + "area": 0.0000688753578000003, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "grb", + "answer": 1, + "import": 88, + "imagery": "AGIV", + "language": "nl" + }, + "id": 116229030 + } + }, + { + "id": 116227831, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -70.6123594, + -33.4588056 + ], + [ + -70.6123594, + -33.4588056 + ], + [ + -70.6123594, + -33.4588056 + ], + [ + -70.6123594, + -33.4588056 + ], + [ + -70.6123594, + -33.4588056 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Angel Spotorno", + "uid": "680374", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-16T20:15:16Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "create": 1, + "imagery": "osm", + "language": "en" + }, + "id": 116227831 + } + }, + { + "id": 116221498, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.6887201, + 41.6219427 + ], + [ + 2.6895374, + 41.6219427 + ], + [ + 2.6895374, + 41.6227264 + ], + [ + 2.6887201, + 41.6227264 + ], + [ + 2.6887201, + 41.6219427 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #campersite", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-16T16:48:16Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 6.40518009999607e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "campersite", + "answer": 7, + "imagery": "osm", + "language": "en", + "change_over_5000m": 7 + }, + "id": 116221498 + } + }, + { + "id": 116220610, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.9887022, + 49.998414 + ], + [ + 5.9887022, + 49.998414 + ], + [ + 5.9887022, + 49.998414 + ], + [ + 5.9887022, + 49.998414 + ], + [ + 5.9887022, + 49.998414 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "ClarissaWAM", + "uid": "13745921", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-16T16:23:38Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "bookcases", + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "id": 116220610 + } + }, + { + "id": 116220534, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.9887022, + 49.998414 + ], + [ + 5.9887022, + 49.998414 + ], + [ + 5.9887022, + 49.998414 + ], + [ + 5.9887022, + 49.998414 + ], + [ + 5.9887022, + 49.998414 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "ClarissaWAM", + "uid": "13745921", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-16T16:21:19Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "bookcases", + "answer": 1, + "create": 1, + "imagery": "osm", + "language": "en", + "add-image": 1 + }, + "id": 116220534 + } + }, + { + "id": 116219481, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 11.8073751, + 48.0053644 + ], + [ + 11.8438719, + 48.0053644 + ], + [ + 11.8438719, + 48.025151 + ], + [ + 11.8073751, + 48.025151 + ], + [ + 11.8073751, + 48.0053644 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-16T15:53:58Z", + "reviewed_features": [], + "create": 9, + "modify": 0, + "delete": 0, + "area": 0.000722147582880123, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "answer": 2, + "create": 9, + "imagery": "Mapbox", + "language": "de", + "change_over_5000m": 9, + "change_within_25m": 1, + "change_within_50m": 1 + }, + "id": 116219481 + } + }, + { + "id": 116216583, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.6050693, + 52.287768 + ], + [ + -1.6050693, + 52.287768 + ], + [ + -1.6050693, + 52.287768 + ], + [ + -1.6050693, + 52.287768 + ], + [ + -1.6050693, + 52.287768 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "RobJN", + "uid": "411244", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #uk_addresses", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-16T14:41:15Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "uk_addresses", + "import": 1, + "imagery": "osm", + "language": "en", + "change_over_5000m": 1 + }, + "id": 116216583 + } + }, + { + "id": 116216334, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0014962, + 50.9404326 + ], + [ + 5.4256049, + 50.9404326 + ], + [ + 5.4256049, + 51.1628889 + ], + [ + 5.0014962, + 51.1628889 + ], + [ + 5.0014962, + 50.9404326 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-01-16T14:35:24Z", + "reviewed_features": [], + "create": 470, + "modify": 100, + "delete": 0, + "area": 0.0943456521998089, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 98, + "theme": "grb", + "import": 47, + "language": "nl", + "conflation": 4 + }, + "id": 116216334 + } + }, + { + "id": 116210098, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0117371, + 51.1267423 + ], + [ + 5.0117371, + 51.1267423 + ], + [ + 5.0117371, + 51.1267423 + ], + [ + 5.0117371, + 51.1267423 + ], + [ + 5.0117371, + 51.1267423 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-16T11:28:10Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 5, + "imagery": "osm", + "language": "nl", + "change_within_1000m": 5 + }, + "id": 116210098 + } + }, + { + "id": 116204074, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.4192089, + 50.7916897 + ], + [ + 4.4201768, + 50.7916897 + ], + [ + 4.4201768, + 50.8000429 + ], + [ + 4.4192089, + 50.8000429 + ], + [ + 4.4192089, + 50.7916897 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "StefDeGreef", + "uid": "1860737", + "editor": "MapComplete 0.13.1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-01-16T06:06:30Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 0.00000808506228000206, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 5, + "imagery": "CartoDB.Voyager", + "language": "fr", + "change_within_5000m": 5 + }, + "id": 116204074 + } + }, { "id": 116200037, "type": "Feature", diff --git a/Docs/Tools/stats/stats.2022-2.json b/Docs/Tools/stats/stats.2022-2.json new file mode 100644 index 0000000000..e4f90e4f01 --- /dev/null +++ b/Docs/Tools/stats/stats.2022-2.json @@ -0,0 +1,23410 @@ +{ + "features": [ + { + "id": 117457096, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 0.0162016, + 38.8494188 + ], + [ + 0.0163551, + 38.8494188 + ], + [ + 0.0163551, + 38.8496073 + ], + [ + 0.0162016, + 38.8496073 + ], + [ + 0.0162016, + 38.8494188 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "paunofu", + "uid": "13779940", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #policia", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-16T02:04:06Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 2.89347500000227e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "policia", + "answer": 1, + "locale": "es", + "imagery": "osm" + }, + "id": 117457096 + } + }, + { + "id": 117453659, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.7146612, + 41.2210967 + ], + [ + 1.7313976, + 41.2210967 + ], + [ + 1.7313976, + 41.2219279 + ], + [ + 1.7146612, + 41.2219279 + ], + [ + 1.7146612, + 41.2210967 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "hortacalaf", + "uid": "14495457", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T22:26:09Z", + "reviewed_features": [], + "create": 0, + "modify": 9, + "delete": 0, + "area": 0.000013911295680006, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "answer": 17, + "locale": "es", + "imagery": "osm" + }, + "id": 117453659 + } + }, + { + "id": 117452493, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -0.125785, + 38.9243329 + ], + [ + -0.1251229, + 38.9243329 + ], + [ + -0.1251229, + 38.9248805 + ], + [ + -0.125785, + 38.9248805 + ], + [ + -0.125785, + 38.9243329 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "yopaseopor", + "uid": "500572", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #policia", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T21:41:05Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 3.62565959998223e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "policia", + "answer": 1, + "locale": "es", + "imagery": "osm" + }, + "id": 117452493 + } + }, + { + "id": 117449421, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.5898884, + 54.6954026 + ], + [ + -1.5839008, + 54.6954026 + ], + [ + -1.5839008, + 54.7028354 + ], + [ + -1.5898884, + 54.7028354 + ], + [ + -1.5898884, + 54.6954026 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T19:49:54Z", + "reviewed_features": [], + "create": 0, + "modify": 13, + "delete": 0, + "area": 0.0000445046332799785, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 14, + "locale": "en", + "imagery": "osm" + }, + "id": 117449421 + } + }, + { + "id": 117449082, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9863369, + 51.1217288 + ], + [ + 5.0341982, + 51.1217288 + ], + [ + 5.0341982, + 51.1608324 + ], + [ + 4.9863369, + 51.1608324 + ], + [ + 4.9863369, + 51.1217288 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T19:37:59Z", + "reviewed_features": [], + "create": 34, + "modify": 96, + "delete": 0, + "area": 0.00187154913067983, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 86, + "theme": "grb", + "answer": 4, + "import": 3, + "locale": "nl", + "imagery": "osm", + "conflation": 18 + }, + "id": 117449082 + } + }, + { + "id": 117448329, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0775303, + 50.7427874 + ], + [ + 5.0951479, + 50.7427874 + ], + [ + 5.0951479, + 50.7670678 + ], + [ + 5.0775303, + 50.7670678 + ], + [ + 5.0775303, + 50.7427874 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 2, + "name": "possible import" + }, + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "JensTi", + "uid": "57212", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T19:10:19Z", + "reviewed_features": [], + "create": 2792, + "modify": 9, + "delete": 0, + "area": 0.000427762375040024, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "grb", + "answer": 9, + "import": 339, + "locale": "nl", + "imagery": "AGIVFlandersGRB" + }, + "id": 117448329 + } + }, + { + "id": 117446527, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.1052174, + 41.5009926 + ], + [ + 2.2098568, + 41.5009926 + ], + [ + 2.2098568, + 41.5375652 + ], + [ + 2.1052174, + 41.5375652 + ], + [ + 2.1052174, + 41.5009926 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Moisès", + "uid": "12884230", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T18:08:40Z", + "reviewed_features": [], + "create": 0, + "modify": 9, + "delete": 0, + "area": 0.00382693492044069, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "answer": 11, + "locale": "ca", + "imagery": "osm" + }, + "id": 117446527 + } + }, + { + "id": 117441334, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 8.0500179, + 52.2456512 + ], + [ + 8.0500179, + 52.2456512 + ], + [ + 8.0500179, + 52.2456512 + ], + [ + 8.0500179, + 52.2456512 + ], + [ + 8.0500179, + 52.2456512 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "wanderruderer", + "uid": "352135", + "editor": "MapComplete 0.16.0", + "comment": "Adding data with #MapComplete for theme #cycle_infra", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T15:36:20Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cycle_infra", + "answer": 1, + "locale": "de", + "imagery": "CartoDB.Voyager", + "change_within_50m": 1 + }, + "id": 117441334 + } + }, + { + "id": 117440772, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 6.6372786, + 43.4425033 + ], + [ + 6.6403065, + 43.4425033 + ], + [ + 6.6403065, + 43.444198 + ], + [ + 6.6372786, + 43.444198 + ], + [ + 6.6372786, + 43.4425033 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Lenezir", + "uid": "299539", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T15:19:16Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 0.00000513138213000518, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "bookcases", + "answer": 6, + "locale": "fr", + "imagery": "osm", + "change_within_5000m": 6 + }, + "id": 117440772 + } + }, + { + "id": 117439419, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 11.7883325, + 53.0267663 + ], + [ + 11.7883325, + 53.0267663 + ], + [ + 11.7883325, + 53.0267663 + ], + [ + 11.7883325, + 53.0267663 + ], + [ + 11.7883325, + 53.0267663 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "micjoe", + "uid": "15079427", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T14:42:15Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "EsriWorldImagery", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "id": 117439419 + } + }, + { + "id": 117438314, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.7182358, + 51.0537752 + ], + [ + 3.7182358, + 51.0537752 + ], + [ + 3.7182358, + 51.0537752 + ], + [ + 3.7182358, + 51.0537752 + ], + [ + 3.7182358, + 51.0537752 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T14:15:27Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "shops", + "answer": 1, + "locale": "en", + "imagery": "osm", + "change_within_25m": 1 + }, + "id": 117438314 + } + }, + { + "id": 117436964, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -0.1194025, + 38.6475892 + ], + [ + 0.030232, + 38.6475892 + ], + [ + 0.030232, + 38.844383 + ], + [ + -0.1194025, + 38.844383 + ], + [ + -0.1194025, + 38.6475892 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "paunofu", + "uid": "13779940", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #policia", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T13:38:32Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 0.0294471418661003, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "policia", + "answer": 5, + "create": 1, + "locale": "es", + "imagery": "osm" + }, + "id": 117436964 + } + }, + { + "id": 117436594, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.9940041, + 51.2167584 + ], + [ + 2.9955303, + 51.2167584 + ], + [ + 2.9955303, + 51.2196136 + ], + [ + 2.9940041, + 51.2196136 + ], + [ + 2.9940041, + 51.2167584 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T13:28:18Z", + "reviewed_features": [], + "create": 7, + "modify": 17, + "delete": 0, + "area": 0.00000435760623999802, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 16, + "theme": "grb", + "import": 1, + "locale": "nl", + "imagery": "osm", + "conflation": 2, + "change_over_5000m": 1 + }, + "id": 117436594 + } + }, + { + "id": 117436337, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.7251733, + 51.0537177 + ], + [ + 3.7251733, + 51.0537177 + ], + [ + 3.7251733, + 51.0537177 + ], + [ + 3.7251733, + 51.0537177 + ], + [ + 3.7251733, + 51.0537177 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T13:21:07Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toilets", + "create": 1, + "locale": "en", + "imagery": "osm", + "change_over_5000m": 1 + }, + "id": 117436337 + } + }, + { + "id": 117435799, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.7041469, + 51.0508861 + ], + [ + 3.7041469, + 51.0508861 + ], + [ + 3.7041469, + 51.0508861 + ], + [ + 3.7041469, + 51.0508861 + ], + [ + 3.7041469, + 51.0508861 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.16.0", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T13:06:12Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "shops", + "answer": 1, + "locale": "en", + "imagery": "osm" + }, + "id": 117435799 + } + }, + { + "id": 117435769, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 0.9065032, + 41.1368577 + ], + [ + 0.9110071, + 41.1368577 + ], + [ + 0.9110071, + 41.1385954 + ], + [ + 0.9065032, + 41.1385954 + ], + [ + 0.9065032, + 41.1368577 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "ecabre4", + "uid": "554769", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #street_lighting", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T13:05:22Z", + "reviewed_features": [], + "create": 0, + "modify": 22, + "delete": 0, + "area": 0.0000078264270299983, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "street_lighting", + "answer": 23, + "locale": "en", + "imagery": "osm" + }, + "id": 117435769 + } + }, + { + "id": 117435681, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 0.9083937, + 41.1344916 + ], + [ + 0.9271422, + 41.1344916 + ], + [ + 0.9271422, + 41.1459559 + ], + [ + 0.9083937, + 41.1459559 + ], + [ + 0.9083937, + 41.1344916 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "ecabre4", + "uid": "554769", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #sport_pitches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T13:02:31Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000214938428550002, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "sport_pitches", + "answer": 4, + "locale": "en", + "imagery": "osm" + }, + "id": 117435681 + } + }, + { + "id": 117435353, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 0.9086753, + 41.1375131 + ], + [ + 0.9100117, + 41.1375131 + ], + [ + 0.9100117, + 41.1389005 + ], + [ + 0.9086753, + 41.1389005 + ], + [ + 0.9086753, + 41.1375131 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "ecabre4", + "uid": "554769", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T12:53:47Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.00000185412135999829, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "id": 117435353 + } + }, + { + "id": 117435150, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.7041469, + 51.0508861 + ], + [ + 3.7041469, + 51.0508861 + ], + [ + 3.7041469, + 51.0508861 + ], + [ + 3.7041469, + 51.0508861 + ], + [ + 3.7041469, + 51.0508861 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.16.0", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T12:48:52Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "shops", + "answer": 1, + "locale": "en", + "imagery": "osm", + "add-image": 1, + "change_within_25m": 2 + }, + "id": 117435150 + } + }, + { + "id": 117435015, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 0.9077338, + 41.1364911 + ], + [ + 0.9106379, + 41.1364911 + ], + [ + 0.9106379, + 41.137431 + ], + [ + 0.9077338, + 41.137431 + ], + [ + 0.9077338, + 41.1364911 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 42, + "name": "Invalid tag modification" + } + ], + "tags": [], + "features": [ + { + "url": "node-7113286712", + "name": "Font Vella", + "osm_id": 7113286712, + "reasons": [ + 42 + ], + "version": 4, + "primary_tags": { + "amenity": "drinking_water" + } + } + ], + "user": "ecabre4", + "uid": "554769", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #drinking_water", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T12:46:06Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 0.0000027295635899964, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "drinking_water", + "answer": 5, + "locale": "en", + "imagery": "CartoDB.Voyager" + }, + "id": 117435015 + } + }, + { + "id": 117434904, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 0.9090906, + 41.1383502 + ], + [ + 0.9090906, + 41.1383502 + ], + [ + 0.9090906, + 41.1383502 + ], + [ + 0.9090906, + 41.1383502 + ], + [ + 0.9090906, + 41.1383502 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "ecabre4", + "uid": "554769", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #cafes_and_pubs", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T12:44:00Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cafes_and_pubs", + "answer": 3, + "locale": "en", + "imagery": "osm" + }, + "id": 117434904 + } + }, + { + "id": 117434769, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.0921566, + 41.3943477 + ], + [ + 1.0921566, + 41.3943477 + ], + [ + 1.0921566, + 41.3943477 + ], + [ + 1.0921566, + 41.3943477 + ], + [ + 1.0921566, + 41.3943477 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "ecabre4", + "uid": "554769", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T12:40:18Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 4, + "create": 1, + "locale": "en", + "imagery": "osm" + }, + "id": 117434769 + } + }, + { + "id": 117432037, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3303544, + 51.1219586 + ], + [ + 4.3379812, + 51.1219586 + ], + [ + 4.3379812, + 51.1315694 + ], + [ + 4.3303544, + 51.1315694 + ], + [ + 4.3303544, + 51.1219586 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T11:33:46Z", + "reviewed_features": [], + "create": 0, + "modify": 18, + "delete": 0, + "area": 0.0000732996494399763, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 20, + "locale": "nl", + "imagery": "osm" + }, + "id": 117432037 + } + }, + { + "id": 117429886, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 12.9978749, + 52.0178661 + ], + [ + 12.9978749, + 52.0178661 + ], + [ + 12.9978749, + 52.0178661 + ], + [ + 12.9978749, + 52.0178661 + ], + [ + 12.9978749, + 52.0178661 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Oberfuzzi", + "uid": "14794109", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T10:39:12Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "id": 117429886 + } + }, + { + "id": 117428420, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3865544, + 51.0771235 + ], + [ + 4.406313, + 51.0771235 + ], + [ + 4.406313, + 51.1117802 + ], + [ + 4.3865544, + 51.1117802 + ], + [ + 4.3865544, + 51.0771235 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T10:01:35Z", + "reviewed_features": [], + "create": 0, + "modify": 26, + "delete": 0, + "area": 0.000684767872619997, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 29, + "locale": "nl", + "imagery": "osm" + }, + "id": 117428420 + } + }, + { + "id": 117427613, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.8052089, + 44.1328896 + ], + [ + 4.8142873, + 44.1328896 + ], + [ + 4.8142873, + 44.1370722 + ], + [ + 4.8052089, + 44.1370722 + ], + [ + 4.8052089, + 44.1328896 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "JLZIMMERMANN", + "uid": "188930", + "editor": "MapComplete 0.16.0", + "comment": "Adding data with #MapComplete for theme #entrances", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T09:43:51Z", + "reviewed_features": [], + "create": 0, + "modify": 29, + "delete": 0, + "area": 0.00003797131584, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "entrances", + "answer": 22, + "locale": "en", + "imagery": "osm", + "add-image": 10, + "change_within_25m": 32 + }, + "id": 117427613 + } + }, + { + "id": 117427236, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.7781999, + 39.6470007 + ], + [ + 2.7781999, + 39.6470007 + ], + [ + 2.7781999, + 39.6470007 + ], + [ + 2.7781999, + 39.6470007 + ], + [ + 2.7781999, + 39.6470007 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "benetj", + "uid": "2353661", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T09:35:09Z", + "reviewed_features": [], + "create": 0, + "modify": 27, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "answer": 32, + "locale": "ca", + "imagery": "osm" + }, + "id": 117427236 + } + }, + { + "id": 117427140, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.8198981, + 44.1290616 + ], + [ + 4.8198981, + 44.1290616 + ], + [ + 4.8198981, + 44.1290616 + ], + [ + 4.8198981, + 44.1290616 + ], + [ + 4.8198981, + 44.1290616 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "JLZIMMERMANN", + "uid": "188930", + "editor": "MapComplete 0.16.0", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T09:33:04Z", + "reviewed_features": [], + "create": 1, + "modify": 4, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "benches", + "answer": 6, + "create": 1, + "locale": "fr", + "imagery": "osm", + "add-image": 1, + "change_over_5000m": 1, + "change_within_25m": 7 + }, + "id": 117427140 + } + }, + { + "id": 117426633, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 8.0500179, + 52.2456512 + ], + [ + 8.0500179, + 52.2456512 + ], + [ + 8.0500179, + 52.2456512 + ], + [ + 8.0500179, + 52.2456512 + ], + [ + 8.0500179, + 52.2456512 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "wanderruderer", + "uid": "352135", + "editor": "MapComplete 0.16.0", + "comment": "Adding data with #MapComplete for theme #cycle_infra", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T09:19:54Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cycle_infra", + "answer": 3, + "locale": "de", + "imagery": "CartoDB.Voyager" + }, + "id": 117426633 + } + }, + { + "id": 117426593, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.2093785, + 41.5190465 + ], + [ + 2.2325186, + 41.5190465 + ], + [ + 2.2325186, + 41.5375652 + ], + [ + 2.2093785, + 41.5375652 + ], + [ + 2.2093785, + 41.5190465 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Moisès", + "uid": "12884230", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T09:18:45Z", + "reviewed_features": [], + "create": 0, + "modify": 20, + "delete": 0, + "area": 0.000428524569870031, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "answer": 30, + "locale": "ca", + "imagery": "osm" + }, + "id": 117426593 + } + }, + { + "id": 117426389, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5878403, + 52.0747411 + ], + [ + 4.5878403, + 52.0747411 + ], + [ + 4.5878403, + 52.0747411 + ], + [ + 4.5878403, + 52.0747411 + ], + [ + 4.5878403, + 52.0747411 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "annuel", + "uid": "14551226", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #wandelknooppunten", + "comments_count": 1, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T09:14:01Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "wandelknooppunten", + "answer": 1, + "locale": "en", + "imagery": "osm" + }, + "id": 117426389 + } + }, + { + "id": 117426122, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 0.9090663, + 41.1373439 + ], + [ + 0.9092853, + 41.1373439 + ], + [ + 0.9092853, + 41.1384455 + ], + [ + 0.9090663, + 41.1384455 + ], + [ + 0.9090663, + 41.1373439 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "ecabre4", + "uid": "554769", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T09:07:04Z", + "reviewed_features": [], + "create": 2, + "modify": 4, + "delete": 0, + "area": 2.41250400001165e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 6, + "create": 3, + "locale": "en", + "imagery": "osm" + }, + "id": 117426122 + } + }, + { + "id": 117425181, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 13.9942485, + 52.0905094 + ], + [ + 14.024241, + 52.0905094 + ], + [ + 14.024241, + 52.0913564 + ], + [ + 13.9942485, + 52.0913564 + ], + [ + 13.9942485, + 52.0905094 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "LFFMH", + "uid": "14449743", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T08:43:42Z", + "reviewed_features": [], + "create": 2, + "modify": 0, + "delete": 0, + "area": 0.0000254036475000084, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "id": 117425181 + } + }, + { + "id": 117424772, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 0.9082593, + 41.1380018 + ], + [ + 0.9092812, + 41.1380018 + ], + [ + 0.9092812, + 41.1385353 + ], + [ + 0.9082593, + 41.1385353 + ], + [ + 0.9082593, + 41.1380018 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "ecabre4", + "uid": "554769", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T08:33:38Z", + "reviewed_features": [], + "create": 0, + "modify": 8, + "delete": 0, + "area": 5.45183650003151e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "benches", + "answer": 8, + "locale": "en", + "imagery": "osm" + }, + "id": 117424772 + } + }, + { + "id": 117424226, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.6053041, + 42.9629913 + ], + [ + 1.6087275, + 42.9629913 + ], + [ + 1.6087275, + 42.9674827 + ], + [ + 1.6053041, + 42.9674827 + ], + [ + 1.6053041, + 42.9629913 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "anticamfoix", + "uid": "15042359", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T08:19:24Z", + "reviewed_features": [], + "create": 2, + "modify": 5, + "delete": 0, + "area": 0.0000153758587599979, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 9, + "create": 4, + "locale": "fr", + "imagery": "osm" + }, + "id": 117424226 + } + }, + { + "id": 117422010, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 13.6825596, + 51.060074 + ], + [ + 13.6825596, + 51.060074 + ], + [ + 13.6825596, + 51.060074 + ], + [ + 13.6825596, + 51.060074 + ], + [ + 13.6825596, + 51.060074 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "brust84", + "uid": "1225756", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-15T07:23:07Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "answer": 1, + "create": 1, + "locale": "en", + "imagery": "GEOSN-DOP-RGB", + "change_over_5000m": 1, + "change_within_25m": 1 + }, + "id": 117422010 + } + }, + { + "id": 117422006, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.17293, + 41.3926073 + ], + [ + 2.1738067, + 41.3926073 + ], + [ + 2.1738067, + 41.39311 + ], + [ + 2.17293, + 41.39311 + ], + [ + 2.17293, + 41.3926073 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pol Rojas", + "uid": "12632106", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T07:23:03Z", + "reviewed_features": [], + "create": 0, + "modify": 11, + "delete": 0, + "area": 4.4071708999864e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 13, + "locale": "en", + "imagery": "CartoDB.Voyager" + }, + "id": 117422006 + } + }, + { + "id": 117421559, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.7717385, + 39.6509155 + ], + [ + 2.7717385, + 39.6509155 + ], + [ + 2.7717385, + 39.6509155 + ], + [ + 2.7717385, + 39.6509155 + ], + [ + 2.7717385, + 39.6509155 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "benetj", + "uid": "2353661", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T07:10:38Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "food", + "answer": 1, + "create": 1, + "locale": "en", + "imagery": "osm" + }, + "id": 117421559 + } + }, + { + "id": 117421407, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.8288869, + 44.0578503 + ], + [ + 4.8394489, + 44.0578503 + ], + [ + 4.8394489, + 44.0625519 + ], + [ + 4.8288869, + 44.0625519 + ], + [ + 4.8288869, + 44.0578503 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joseph83", + "uid": "10732704", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #street_lighting", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T07:06:30Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 0.0000496582992000451, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "street_lighting", + "answer": 6, + "locale": "en", + "imagery": "osm" + }, + "id": 117421407 + } + }, + { + "id": 117421351, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.1197808, + 41.3858675 + ], + [ + 2.1197808, + 41.3858675 + ], + [ + 2.1197808, + 41.3858675 + ], + [ + 2.1197808, + 41.3858675 + ], + [ + 2.1197808, + 41.3858675 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pol Rojas", + "uid": "12632106", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T07:04:54Z", + "reviewed_features": [], + "create": 0, + "modify": 14, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "answer": 18, + "locale": "ca", + "imagery": "osm" + }, + "id": 117421351 + } + }, + { + "id": 117414634, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 0.0872095, + 38.8366227 + ], + [ + 0.0878291, + 38.8366227 + ], + [ + 0.0878291, + 38.8369194 + ], + [ + 0.0872095, + 38.8369194 + ], + [ + 0.0872095, + 38.8366227 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "paunofu", + "uid": "13779940", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #Comisaria", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T00:20:12Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 1.83835319999886e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "Comisaria", + "answer": 1, + "locale": "ca", + "imagery": "osm" + }, + "id": 117414634 + } + }, + { + "id": 117414389, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.999034, + 51.1630267 + ], + [ + 5.0014768, + 51.1630267 + ], + [ + 5.0014768, + 51.1646599 + ], + [ + 4.999034, + 51.1646599 + ], + [ + 4.999034, + 51.1630267 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-15T00:01:13Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0.00000398958095998377, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 2, + "locale": "nl", + "imagery": "osm" + }, + "id": 117414389 + } + }, + { + "id": 117413850, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 0.1163489, + 38.8326918 + ], + [ + 0.1163489, + 38.8326918 + ], + [ + 0.1163489, + 38.8326918 + ], + [ + 0.1163489, + 38.8326918 + ], + [ + 0.1163489, + 38.8326918 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "paunofu", + "uid": "13779940", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T23:23:25Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "answer": 3, + "create": 1, + "locale": "en", + "imagery": "PNOA-Spain-TMS" + }, + "id": 117413850 + } + }, + { + "id": 117413266, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -0.0017865, + 38.8223971 + ], + [ + 0.1051384, + 38.8223971 + ], + [ + 0.1051384, + 38.8403364 + ], + [ + -0.0017865, + 38.8403364 + ], + [ + -0.0017865, + 38.8223971 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "paunofu", + "uid": "13779940", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T22:48:53Z", + "reviewed_features": [], + "create": 0, + "modify": 24, + "delete": 0, + "area": 0.00191815785856944, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "answer": 32, + "locale": "es", + "imagery": "osm" + }, + "id": 117413266 + } + }, + { + "id": 117412442, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.871981, + 54.8387131 + ], + [ + -1.822356, + 54.8387131 + ], + [ + -1.822356, + 54.8728039 + ], + [ + -1.871981, + 54.8728039 + ], + [ + -1.871981, + 54.8387131 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T22:09:13Z", + "reviewed_features": [], + "create": 0, + "modify": 19, + "delete": 0, + "area": 0.00169175595000006, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 22, + "locale": "en", + "imagery": "osm" + }, + "id": 117412442 + } + }, + { + "id": 117410571, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 10.7262724, + 50.9420788 + ], + [ + 10.751086, + 50.9420788 + ], + [ + 10.751086, + 50.9461376 + ], + [ + 10.7262724, + 50.9461376 + ], + [ + 10.7262724, + 50.9420788 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "complete_gth", + "uid": "9837674", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #street_lighting", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T20:56:40Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000100713439680076, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "street_lighting", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "id": 117410571 + } + }, + { + "id": 117410300, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -3.5713944, + 37.1343799 + ], + [ + -3.5713944, + 37.1343799 + ], + [ + -3.5713944, + 37.1343799 + ], + [ + -3.5713944, + 37.1343799 + ], + [ + -3.5713944, + 37.1343799 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "alex_lofi", + "uid": "6816316", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T20:47:39Z", + "reviewed_features": [], + "create": 0, + "modify": 10, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "answer": 15, + "locale": "es", + "imagery": "osm", + "change_within_500m": 15 + }, + "id": 117410300 + } + }, + { + "id": 117410026, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3450184, + 50.8483176 + ], + [ + 4.3721066, + 50.8483176 + ], + [ + 4.3721066, + 50.8485536 + ], + [ + 4.3450184, + 50.8485536 + ], + [ + 4.3450184, + 50.8483176 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T20:38:37Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0.00000639281520002758, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 1, + "locale": "en", + "imagery": "CartoDB.Voyager", + "add-image": 2 + }, + "id": 117410026 + } + }, + { + "id": 117409761, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.2191619, + 41.4438142 + ], + [ + 2.2196387, + 41.4438142 + ], + [ + 2.2196387, + 41.4442596 + ], + [ + 2.2191619, + 41.4442596 + ], + [ + 2.2191619, + 41.4438142 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Jose Luis Infante", + "uid": "126203", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T20:31:24Z", + "reviewed_features": [], + "create": 0, + "modify": 7, + "delete": 0, + "area": 2.12366720001794e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "answer": 10, + "locale": "ca", + "imagery": "osm", + "change_within_1000m": 10 + }, + "id": 117409761 + } + }, + { + "id": 117409709, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -0.8997309, + 41.6404171 + ], + [ + -0.7970211, + 41.6404171 + ], + [ + -0.7970211, + 41.7622752 + ], + [ + -0.8997309, + 41.7622752 + ], + [ + -0.8997309, + 41.6404171 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "msevilla00", + "uid": "240498", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T20:29:40Z", + "reviewed_features": [], + "create": 5, + "modify": 2, + "delete": 0, + "area": 0.0125160210793797, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 3, + "create": 5, + "locale": "en", + "imagery": "osm" + }, + "id": 117409709 + } + }, + { + "id": 117408885, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.6053041, + 42.9611964 + ], + [ + 1.6089606, + 42.9611964 + ], + [ + 1.6089606, + 42.9677257 + ], + [ + 1.6053041, + 42.9677257 + ], + [ + 1.6053041, + 42.9611964 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "anticamfoix", + "uid": "15042359", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T20:03:54Z", + "reviewed_features": [], + "create": 8, + "modify": 16, + "delete": 0, + "area": 0.0000238743854500156, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 25, + "create": 15, + "locale": "fr", + "imagery": "osm" + }, + "id": 117408885 + } + }, + { + "id": 117408538, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.2100316, + 41.4437324 + ], + [ + 2.2106133, + 41.4437324 + ], + [ + 2.2106133, + 41.4441833 + ], + [ + 2.2100316, + 41.4441833 + ], + [ + 2.2100316, + 41.4437324 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "jqngarcia", + "uid": "5126253", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T19:52:58Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 2.62288529998133e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "answer": 1, + "locale": "ca", + "imagery": "osm", + "change_within_500m": 1 + }, + "id": 117408538 + } + }, + { + "id": 117408411, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -0.7971125, + 41.7622362 + ], + [ + -0.7971125, + 41.7622362 + ], + [ + -0.7971125, + 41.7622362 + ], + [ + -0.7971125, + 41.7622362 + ], + [ + -0.7971125, + 41.7622362 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "msevilla00", + "uid": "240498", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T19:48:19Z", + "reviewed_features": [], + "create": 0, + "modify": 20, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "answer": 25, + "locale": "es", + "imagery": "osm" + }, + "id": 117408411 + } + }, + { + "id": 117408081, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -0.8985463, + 41.6400661 + ], + [ + -0.8977531, + 41.6400661 + ], + [ + -0.8977531, + 41.6405838 + ], + [ + -0.8985463, + 41.6405838 + ], + [ + -0.8985463, + 41.6400661 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Robot8A", + "uid": "393359", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T19:37:35Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 4.10639640002543e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "answer": 2, + "locale": "es", + "imagery": "osm" + }, + "id": 117408081 + } + }, + { + "id": 117407110, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.0998289, + 41.1536636 + ], + [ + 1.1003397, + 41.1536636 + ], + [ + 1.1003397, + 41.1545752 + ], + [ + 1.0998289, + 41.1545752 + ], + [ + 1.0998289, + 41.1536636 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "ecabre4", + "uid": "554769", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T19:09:14Z", + "reviewed_features": [], + "create": 0, + "modify": 15, + "delete": 0, + "area": 4.65645279997226e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "answer": 25, + "locale": "es", + "imagery": "osm" + }, + "id": 117407110 + } + }, + { + "id": 117406747, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 0.1047871, + 38.8400339 + ], + [ + 0.1051384, + 38.8400339 + ], + [ + 0.1051384, + 38.8403364 + ], + [ + 0.1047871, + 38.8403364 + ], + [ + 0.1047871, + 38.8400339 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "paunofu", + "uid": "13779940", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T18:59:54Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 1.06268249998789e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "answer": 3, + "locale": "es", + "imagery": "osm", + "change_within_1000m": 3 + }, + "id": 117406747 + } + }, + { + "id": 117406606, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.8121879, + 41.235172 + ], + [ + 1.8121879, + 41.235172 + ], + [ + 1.8121879, + 41.235172 + ], + [ + 1.8121879, + 41.235172 + ], + [ + 1.8121879, + 41.235172 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "hortacalaf", + "uid": "14495457", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T18:58:12Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/yopaseopor/mcquests/master/libraries.json", + "answer": 5, + "locale": "es", + "imagery": "osm" + }, + "id": 117406606 + } + }, + { + "id": 117404833, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.7000252, + 46.5786112 + ], + [ + 5.7007987, + 46.5786112 + ], + [ + 5.7007987, + 46.5796511 + ], + [ + 5.7000252, + 46.5796511 + ], + [ + 5.7000252, + 46.5786112 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "lmagreault", + "uid": "260065", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T18:21:50Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 8.04362650001831e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "benches", + "answer": 2, + "locale": "en", + "imagery": "osm", + "change_within_500m": 2 + }, + "id": 117404833 + } + }, + { + "id": 117399314, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -4.3557355, + 47.7970956 + ], + [ + -4.354866, + 47.7970956 + ], + [ + -4.354866, + 47.7977109 + ], + [ + -4.3557355, + 47.7977109 + ], + [ + -4.3557355, + 47.7970956 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "TedScouGV", + "uid": "75300", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T15:51:26Z", + "reviewed_features": [], + "create": 0, + "modify": 7, + "delete": 0, + "area": 5.35003349999433e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 7, + "locale": "en", + "imagery": "osm", + "add-image": 1 + }, + "id": 117399314 + } + }, + { + "id": 117397830, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 13.9430156, + 51.9957185 + ], + [ + 14.0680361, + 51.9957185 + ], + [ + 14.0680361, + 52.06043 + ], + [ + 13.9430156, + 52.06043 + ], + [ + 13.9430156, + 51.9957185 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "LFFMH", + "uid": "14449743", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T15:12:29Z", + "reviewed_features": [], + "create": 27, + "modify": 30, + "delete": 0, + "area": 0.00809026408574927, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "id": 117397830 + } + }, + { + "id": 117397579, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 11.0224934, + 49.5839825 + ], + [ + 11.0299669, + 49.5839825 + ], + [ + 11.0299669, + 49.5927118 + ], + [ + 11.0224934, + 49.5927118 + ], + [ + 11.0224934, + 49.5839825 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "womped", + "uid": "1880469", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #climbing", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T15:05:58Z", + "reviewed_features": [], + "create": 0, + "modify": 8, + "delete": 0, + "area": 0.0000652384235499885, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "climbing", + "answer": 10, + "locale": "en", + "imagery": "osm" + }, + "id": 117397579 + } + }, + { + "id": 117396671, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.8090181, + 43.9481107 + ], + [ + 4.8090181, + 43.9481107 + ], + [ + 4.8090181, + 43.9481107 + ], + [ + 4.8090181, + 43.9481107 + ], + [ + 4.8090181, + 43.9481107 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "cabinetcourbi", + "uid": "6231864", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T14:43:08Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "food", + "answer": 1, + "locale": "en", + "imagery": "osm" + }, + "id": 117396671 + } + }, + { + "id": 117396402, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 8.5447577, + 47.0497303 + ], + [ + 8.5447577, + 47.0497303 + ], + [ + 8.5447577, + 47.0497303 + ], + [ + 8.5447577, + 47.0497303 + ], + [ + 8.5447577, + 47.0497303 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "cbeddow", + "uid": "2611295", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #cafes_and_pubs", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T14:36:26Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cafes_and_pubs", + "create": 1, + "locale": "en", + "imagery": "osm", + "change_over_5000m": 1 + }, + "id": 117396402 + } + }, + { + "id": 117395644, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.8092148, + 43.9474749 + ], + [ + 4.8092148, + 43.9474749 + ], + [ + 4.8092148, + 43.9474749 + ], + [ + 4.8092148, + 43.9474749 + ], + [ + 4.8092148, + 43.9474749 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "JLZIMMERMANN", + "uid": "188930", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #facadegardens", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T14:19:05Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "facadegardens", + "answer": 3, + "create": 1, + "locale": "fr", + "imagery": "osm" + }, + "id": 117395644 + } + }, + { + "id": 117394914, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.7455652, + 44.0951958 + ], + [ + 4.7465028, + 44.0951958 + ], + [ + 4.7465028, + 44.0961663 + ], + [ + 4.7455652, + 44.0961663 + ], + [ + 4.7455652, + 44.0951958 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joseph83", + "uid": "10732704", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #street_lighting", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T14:01:17Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 9.09940800001334e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "street_lighting", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "id": 117394914 + } + }, + { + "id": 117393993, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.2493381, + -39.8101576 + ], + [ + -73.2493381, + -39.8101576 + ], + [ + -73.2493381, + -39.8101576 + ], + [ + -73.2493381, + -39.8101576 + ], + [ + -73.2493381, + -39.8101576 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T13:37:14Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "locale": "en", + "imagery": "cyclosm", + "add-image": 1 + }, + "id": 117393993 + } + }, + { + "id": 117393848, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.7303816, + 44.0920472 + ], + [ + 4.9117337, + 44.0920472 + ], + [ + 4.9117337, + 44.1365206 + ], + [ + 4.7303816, + 44.1365206 + ], + [ + 4.7303816, + 44.0920472 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joseph83", + "uid": "10732704", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #street_lighting", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T13:32:49Z", + "reviewed_features": [], + "create": 4, + "modify": 18, + "delete": 0, + "area": 0.0080653444841389, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "split": 5, + "theme": "street_lighting", + "answer": 16, + "locale": "en", + "imagery": "osm", + "relation-fix": 1 + }, + "id": 117393848 + } + }, + { + "id": 117393533, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2296818, + 51.0595316 + ], + [ + 3.7098545, + 51.0595316 + ], + [ + 3.7098545, + 51.2205212 + ], + [ + 3.2296818, + 51.2205212 + ], + [ + 3.2296818, + 51.0595316 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #scales", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T13:24:36Z", + "reviewed_features": [], + "create": 2, + "modify": 2, + "delete": 0, + "area": 0.0773028109039203, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "scales", + "answer": 2, + "create": 2, + "locale": "en", + "imagery": "osm", + "add-image": 2 + }, + "id": 117393533 + } + }, + { + "id": 117393391, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.8109643, + 44.1372512 + ], + [ + 4.8109643, + 44.1372512 + ], + [ + 4.8109643, + 44.1372512 + ], + [ + 4.8109643, + 44.1372512 + ], + [ + 4.8109643, + 44.1372512 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joseph83", + "uid": "10732704", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T13:19:51Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "food", + "answer": 4, + "locale": "en", + "imagery": "osm" + }, + "id": 117393391 + } + }, + { + "id": 117392902, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.8092463, + 44.1279604 + ], + [ + 4.821585, + 44.1279604 + ], + [ + 4.821585, + 44.1354172 + ], + [ + 4.8092463, + 44.1354172 + ], + [ + 4.8092463, + 44.1279604 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "JLZIMMERMANN", + "uid": "188930", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T13:05:44Z", + "reviewed_features": [], + "create": 0, + "modify": 8, + "delete": 0, + "area": 0.0000920072181599986, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "benches", + "answer": 11, + "locale": "fr", + "imagery": "osm", + "add-image": 1, + "change_within_25m": 4, + "change_within_1000m": 2, + "change_within_5000m": 6 + }, + "id": 117392902 + } + }, + { + "id": 117392861, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3991162, + 51.0999482 + ], + [ + 4.4074635, + 51.0999482 + ], + [ + 4.4074635, + 51.104009 + ], + [ + 4.3991162, + 51.104009 + ], + [ + 4.3991162, + 51.0999482 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T13:04:11Z", + "reviewed_features": [], + "create": 0, + "modify": 17, + "delete": 0, + "area": 0.0000338967158399833, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 18, + "locale": "nl", + "imagery": "osm" + }, + "id": 117392861 + } + }, + { + "id": 117387639, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.8041136, + 44.1362959 + ], + [ + 4.8041136, + 44.1362959 + ], + [ + 4.8041136, + 44.1362959 + ], + [ + 4.8041136, + 44.1362959 + ], + [ + 4.8041136, + 44.1362959 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "cabinetcourbi", + "uid": "6231864", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #entrances", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T10:50:04Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "entrances", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "id": 117387639 + } + }, + { + "id": 117385529, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -3.6189493, + 37.1803457 + ], + [ + -3.6063303, + 37.1803457 + ], + [ + -3.6063303, + 37.1896378 + ], + [ + -3.6189493, + 37.1896378 + ], + [ + -3.6189493, + 37.1803457 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pipeton", + "uid": "11969052", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T09:54:28Z", + "reviewed_features": [], + "create": 0, + "modify": 15, + "delete": 0, + "area": 0.00011725700990004, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 18, + "locale": "en", + "imagery": "osm" + }, + "id": 117385529 + } + }, + { + "id": 117381876, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2273985, + 50.9308739 + ], + [ + 4.2273985, + 50.9308739 + ], + [ + 4.2273985, + 50.9308739 + ], + [ + 4.2273985, + 50.9308739 + ], + [ + 4.2273985, + 50.9308739 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #entrances", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-14T08:20:49Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "entrances", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "id": 117381876 + } + }, + { + "id": 117374161, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0614534, + 51.1419182 + ], + [ + 5.0614534, + 51.1419182 + ], + [ + 5.0614534, + 51.1419182 + ], + [ + 5.0614534, + 51.1419182 + ], + [ + 5.0614534, + 51.1419182 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #nature", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T02:09:42Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "nature", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "change_within_50m": 1 + }, + "id": 117374161 + } + }, + { + "id": 117374142, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0614835, + 51.1418862 + ], + [ + 5.0614835, + 51.1418862 + ], + [ + 5.0614835, + 51.1418862 + ], + [ + 5.0614835, + 51.1418862 + ], + [ + 5.0614835, + 51.1418862 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T02:06:25Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "change_within_50m": 1 + }, + "id": 117374142 + } + }, + { + "id": 117374038, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0518856, + 51.1191934 + ], + [ + 5.1390373, + 51.1191934 + ], + [ + 5.1390373, + 51.1378128 + ], + [ + 5.0518856, + 51.1378128 + ], + [ + 5.0518856, + 51.1191934 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T01:55:12Z", + "reviewed_features": [], + "create": 0, + "modify": 13, + "delete": 0, + "area": 0.00162271236297987, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 16, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 4, + "change_within_5000m": 12 + }, + "id": 117374038 + } + }, + { + "id": 117374015, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0766775, + 51.1302271 + ], + [ + 5.077919, + 51.1302271 + ], + [ + 5.077919, + 51.1305728 + ], + [ + 5.0766775, + 51.1305728 + ], + [ + 5.0766775, + 51.1302271 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-14T01:52:26Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 4.29186550004931e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "change_within_5000m": 1 + }, + "id": 117374015 + } + }, + { + "id": 117371343, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 10.7315329, + 50.9445605 + ], + [ + 10.7315329, + 50.9445605 + ], + [ + 10.7315329, + 50.9445605 + ], + [ + 10.7315329, + 50.9445605 + ], + [ + 10.7315329, + 50.9445605 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "complete_gth", + "uid": "9837674", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T22:27:05Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 5, + "locale": "de", + "imagery": "CartoDB.Voyager" + }, + "id": 117371343 + } + }, + { + "id": 117370208, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2356964, + 50.7318568 + ], + [ + 4.2356964, + 50.7318568 + ], + [ + 4.2356964, + 50.7318568 + ], + [ + 4.2356964, + 50.7318568 + ], + [ + 4.2356964, + 50.7318568 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #entrances", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-13T21:32:38Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "entrances", + "answer": 2, + "locale": "en", + "imagery": "osm", + "change_within_5000m": 2 + }, + "id": 117370208 + } + }, + { + "id": 117369597, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 10.6725639, + 50.9294479 + ], + [ + 10.7323971, + 50.9294479 + ], + [ + 10.7323971, + 50.9677114 + ], + [ + 10.6725639, + 50.9677114 + ], + [ + 10.6725639, + 50.9294479 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 87, + "name": "Irrelevant tags on highway" + } + ], + "tags": [], + "features": [ + { + "url": "way-177394410", + "name": "Robert-Koch-Straße", + "osm_id": 177394410, + "reasons": [ + 87 + ], + "version": 3, + "primary_tags": { + "highway": "residential" + } + } + ], + "user": "complete_gth", + "uid": "9837674", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T21:14:43Z", + "reviewed_features": [], + "create": 0, + "modify": 152, + "delete": 0, + "area": 0.00228942764819996, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 233, + "locale": "de", + "imagery": "osm" + }, + "id": 117369597 + } + }, + { + "id": 117367225, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.5752106, + 54.6886895 + ], + [ + -1.2297228, + 54.6886895 + ], + [ + -1.2297228, + 54.8134828 + ], + [ + -1.5752106, + 54.8134828 + ], + [ + -1.5752106, + 54.6886895 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T19:49:25Z", + "reviewed_features": [], + "create": 0, + "modify": 63, + "delete": 0, + "area": 0.0431145626717401, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "etymology", + "answer": 78, + "locale": "en", + "imagery": "osm" + }, + "id": 117367225 + } + }, + { + "id": 117365388, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.4794074, + 51.0276134 + ], + [ + 4.4794074, + 51.0276134 + ], + [ + 4.4794074, + 51.0276134 + ], + [ + 4.4794074, + 51.0276134 + ], + [ + 4.4794074, + 51.0276134 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "philippec", + "uid": "76884", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-13T18:42:44Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toilets", + "locale": "en", + "imagery": "osm", + "add-image": 4 + }, + "id": 117365388 + } + }, + { + "id": 117365307, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.482333, + 51.028025 + ], + [ + 4.482333, + 51.028025 + ], + [ + 4.482333, + 51.028025 + ], + [ + 4.482333, + 51.028025 + ], + [ + 4.482333, + 51.028025 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "philippec", + "uid": "76884", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-13T18:40:07Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "add-image": 1 + }, + "id": 117365307 + } + }, + { + "id": 117360267, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -3.6244448, + 37.172594 + ], + [ + -3.5973635, + 37.172594 + ], + [ + -3.5973635, + 37.1957839 + ], + [ + -3.6244448, + 37.1957839 + ], + [ + -3.6244448, + 37.172594 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pipeton", + "uid": "11969052", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T16:10:24Z", + "reviewed_features": [], + "create": 0, + "modify": 14, + "delete": 0, + "area": 0.000628012638870147, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 17, + "locale": "en", + "imagery": "osm" + }, + "id": 117360267 + } + }, + { + "id": 117359158, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.1964027, + 51.219974 + ], + [ + 4.4208718, + 51.219974 + ], + [ + 4.4208718, + 51.2248203 + ], + [ + 3.1964027, + 51.2248203 + ], + [ + 3.1964027, + 51.219974 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Hopperpop", + "uid": "3664604", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/Hopperpop/OpenAsianMap/main/OpenAsianMap.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T15:44:03Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 0.00593414459932629, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/Hopperpop/OpenAsianMap/main/OpenAsianMap.json", + "answer": 5, + "locale": "en", + "imagery": "osm" + }, + "id": 117359158 + } + }, + { + "id": 117357944, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.8671393, + 51.131753 + ], + [ + 4.8679609, + 51.131753 + ], + [ + 4.8679609, + 51.1323259 + ], + [ + 4.8671393, + 51.1323259 + ], + [ + 4.8671393, + 51.131753 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Frans_Napaters", + "uid": "3574538", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-13T15:13:32Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 4.70694639995571e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "playgrounds", + "answer": 3, + "locale": "nl", + "imagery": "osm", + "change_within_5000m": 3 + }, + "id": 117357944 + } + }, + { + "id": 117357360, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.5924856, + 54.5530219 + ], + [ + -1.2740745, + 54.5530219 + ], + [ + -1.2740745, + 54.8775568 + ], + [ + -1.5924856, + 54.8775568 + ], + [ + -1.5924856, + 54.5530219 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T14:58:58Z", + "reviewed_features": [], + "create": 0, + "modify": 107, + "delete": 0, + "area": 0.103335514497391, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "etymology", + "answer": 155, + "locale": "en", + "imagery": "osm" + }, + "id": 117357360 + } + }, + { + "id": 117356419, + "type": "Feature", + "geometry": null, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-13T14:35:43Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 0, + "area": null, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "change_within_25m": 1 + }, + "id": 117356419 + } + }, + { + "id": 117356414, + "type": "Feature", + "geometry": null, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-13T14:35:38Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 0, + "area": null, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "change_within_25m": 1 + }, + "id": 117356414 + } + }, + { + "id": 117356409, + "type": "Feature", + "geometry": null, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-13T14:35:28Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 0, + "area": null, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 2, + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "change_within_25m": 3 + }, + "id": 117356409 + } + }, + { + "id": 117356403, + "type": "Feature", + "geometry": null, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-13T14:35:16Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 0, + "area": null, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 2, + "locale": "nl", + "imagery": "osm", + "change_within_25m": 2 + }, + "id": 117356403 + } + }, + { + "id": 117356337, + "type": "Feature", + "geometry": null, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-13T14:32:59Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 0, + "area": null, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "change_within_25m": 1 + }, + "id": 117356337 + } + }, + { + "id": 117356318, + "type": "Feature", + "geometry": null, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-13T14:32:40Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 0, + "area": null, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "change_within_25m": 1 + }, + "id": 117356318 + } + }, + { + "id": 117356304, + "type": "Feature", + "geometry": null, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-13T14:32:11Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 0, + "area": null, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "change_within_25m": 1 + }, + "id": 117356304 + } + }, + { + "id": 117356301, + "type": "Feature", + "geometry": null, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-13T14:32:02Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 0, + "area": null, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 2, + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "change_within_25m": 3 + }, + "id": 117356301 + } + }, + { + "id": 117356151, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.1083015, + 50.9184127 + ], + [ + 4.1083015, + 50.9184127 + ], + [ + 4.1083015, + 50.9184127 + ], + [ + 4.1083015, + 50.9184127 + ], + [ + 4.1083015, + 50.9184127 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-13T14:28:14Z", + "reviewed_features": [], + "create": 1, + "modify": 4, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 5, + "create": 1, + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "change_over_5000m": 1, + "change_within_25m": 6 + }, + "id": 117356151 + } + }, + { + "id": 117354491, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.4812135, + 50.982616 + ], + [ + 4.5107567, + 50.982616 + ], + [ + 4.5107567, + 51.0292047 + ], + [ + 4.4812135, + 51.0292047 + ], + [ + 4.4812135, + 50.982616 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "philippec", + "uid": "76884", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-13T13:43:24Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 0.00137637928184003, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 8, + "locale": "nl", + "imagery": "osm", + "change_within_5000m": 1 + }, + "id": 117354491 + } + }, + { + "id": 117354388, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 8.0059036, + 52.2450926 + ], + [ + 8.0059036, + 52.2450926 + ], + [ + 8.0059036, + 52.2450926 + ], + [ + 8.0059036, + 52.2450926 + ], + [ + 8.0059036, + 52.2450926 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "wanderruderer", + "uid": "352135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #cycle_infra", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T13:40:20Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cycle_infra", + "answer": 2, + "locale": "de", + "imagery": "CartoDB.Voyager" + }, + "id": 117354388 + } + }, + { + "id": 117354149, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.59797, + 54.8547655 + ], + [ + -1.5737377, + 54.8547655 + ], + [ + -1.5737377, + 54.9247252 + ], + [ + -1.59797, + 54.9247252 + ], + [ + -1.59797, + 54.8547655 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T13:34:59Z", + "reviewed_features": [], + "create": 0, + "modify": 10, + "delete": 0, + "area": 0.00169528443830996, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "etymology", + "answer": 14, + "locale": "en", + "imagery": "osm" + }, + "id": 117354149 + } + }, + { + "id": 117354018, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 8.0052732, + 52.2448956 + ], + [ + 8.0056911, + 52.2448956 + ], + [ + 8.0056911, + 52.245076 + ], + [ + 8.0052732, + 52.245076 + ], + [ + 8.0052732, + 52.2448956 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + }, + { + "id": 42, + "name": "Invalid tag modification" + } + ], + "tags": [], + "features": [ + { + "url": "way-642622181", + "name": "Kinderspielplatz im Dütetal", + "osm_id": 642622181, + "reasons": [ + 42 + ], + "version": 6, + "primary_tags": {} + } + ], + "user": "wanderruderer", + "uid": "352135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T13:31:17Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 7.53891599991806e-8, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "playgrounds", + "answer": 6, + "locale": "de", + "imagery": "osm", + "soft-delete": 1, + "soft-delete:way/642622181": "duplicate" + }, + "id": 117354018 + } + }, + { + "id": 117353930, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 8.005439, + 52.2449605 + ], + [ + 8.005439, + 52.2449605 + ], + [ + 8.005439, + 52.2449605 + ], + [ + 8.005439, + 52.2449605 + ], + [ + 8.005439, + 52.2449605 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "wanderruderer", + "uid": "352135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T13:28:32Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "benches", + "answer": 7, + "create": 1, + "locale": "de", + "imagery": "osm" + }, + "id": 117353930 + } + }, + { + "id": 117350688, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.0566118, + 51.268894 + ], + [ + 1.0566118, + 51.268894 + ], + [ + 1.0566118, + 51.268894 + ], + [ + 1.0566118, + 51.268894 + ], + [ + 1.0566118, + 51.268894 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Gregory Williams", + "uid": "7037", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #uk_addresses", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T11:50:29Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "uk_addresses", + "import": 1, + "locale": "en", + "imagery": "osm" + }, + "id": 117350688 + } + }, + { + "id": 117346566, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.8658723, + 54.8141396 + ], + [ + -1.500708, + 54.8141396 + ], + [ + -1.500708, + 54.8440043 + ], + [ + -1.8658723, + 54.8440043 + ], + [ + -1.8658723, + 54.8141396 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T09:43:13Z", + "reviewed_features": [], + "create": 0, + "modify": 15, + "delete": 0, + "area": 0.0109055222702116, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 16, + "locale": "en", + "imagery": "osm" + }, + "id": 117346566 + } + }, + { + "id": 117344110, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 8.0495579, + 52.2553818 + ], + [ + 8.0495579, + 52.2553818 + ], + [ + 8.0495579, + 52.2553818 + ], + [ + 8.0495579, + 52.2553818 + ], + [ + 8.0495579, + 52.2553818 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "wanderruderer", + "uid": "352135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #cycle_infra", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-13T07:51:10Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cycle_infra", + "answer": 2, + "locale": "de", + "imagery": "CartoDB.Voyager" + }, + "id": 117344110 + } + }, + { + "id": 117338550, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.7146612, + 41.2214721 + ], + [ + 1.7150978, + 41.2214721 + ], + [ + 1.7150978, + 41.2219279 + ], + [ + 1.7146612, + 41.2219279 + ], + [ + 1.7146612, + 41.2214721 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "yopaseopor", + "uid": "500572", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #libraries", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T23:11:24Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 1.99002279998791e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "libraries", + "answer": 1, + "locale": "es", + "imagery": "osm" + }, + "id": 117338550 + } + }, + { + "id": 117338381, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.8732731, + 54.8352837 + ], + [ + -1.8615141, + 54.8352837 + ], + [ + -1.8615141, + 54.8415554 + ], + [ + -1.8732731, + 54.8415554 + ], + [ + -1.8732731, + 54.8352837 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T23:04:31Z", + "reviewed_features": [], + "create": 0, + "modify": 16, + "delete": 0, + "area": 0.0000737489202999912, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 16, + "locale": "en", + "imagery": "osm" + }, + "id": 117338381 + } + }, + { + "id": 117338372, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.008373, + 50.8387981 + ], + [ + 4.0091133, + 50.8387981 + ], + [ + 4.0091133, + 50.8390318 + ], + [ + 4.008373, + 50.8390318 + ], + [ + 4.008373, + 50.8387981 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T23:03:58Z", + "reviewed_features": [], + "create": 3, + "modify": 8, + "delete": 0, + "area": 1.73008110001977e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 14, + "create": 3, + "locale": "nl", + "imagery": "CartoDB.Voyager", + "add-image": 3, + "change_over_5000m": 20 + }, + "id": 117338372 + } + }, + { + "id": 117338341, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.9727818, + 50.8137419 + ], + [ + 3.9727818, + 50.8137419 + ], + [ + 3.9727818, + 50.8137419 + ], + [ + 3.9727818, + 50.8137419 + ], + [ + 3.9727818, + 50.8137419 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #charging_stations", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T23:02:33Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "charging_stations", + "answer": 2, + "locale": "nl", + "imagery": "CartoDB.Voyager", + "change_over_5000m": 2 + }, + "id": 117338341 + } + }, + { + "id": 117336229, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.9727818, + 50.8137419 + ], + [ + 3.9727818, + 50.8137419 + ], + [ + 3.9727818, + 50.8137419 + ], + [ + 3.9727818, + 50.8137419 + ], + [ + 3.9727818, + 50.8137419 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #charging_stations", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T21:19:41Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "charging_stations", + "answer": 4, + "locale": "nl", + "imagery": "AGIVFlandersGRB", + "change_within_100m": 4 + }, + "id": 117336229 + } + }, + { + "id": 117336171, + "type": "Feature", + "geometry": null, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T21:16:41Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 0, + "area": null, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 5, + "locale": "nl", + "imagery": "AGIVFlandersGRB", + "add-image": 2, + "change_within_5000m": 7 + }, + "id": 117336171 + } + }, + { + "id": 117336170, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.249092, + 50.7412338 + ], + [ + 4.249092, + 50.7412338 + ], + [ + 4.249092, + 50.7412338 + ], + [ + 4.249092, + 50.7412338 + ], + [ + 4.249092, + 50.7412338 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T21:16:41Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "bookcases", + "locale": "nl", + "imagery": "AGIVFlandersGRB", + "add-image": 1, + "change_within_25m": 1, + "change_within_50m": 1, + "move:node/9246056984": "improve_accuracy" + }, + "id": 117336170 + } + }, + { + "id": 117336169, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.9727818, + 50.8137419 + ], + [ + 3.9727818, + 50.8137419 + ], + [ + 3.9727818, + 50.8137419 + ], + [ + 3.9727818, + 50.8137419 + ], + [ + 3.9727818, + 50.8137419 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #charging_stations", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T21:16:41Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "charging_stations", + "answer": 1, + "create": 1, + "locale": "nl", + "imagery": "AGIVFlandersGRB", + "add-image": 1, + "change_over_5000m": 1, + "change_within_100m": 2 + }, + "id": 117336169 + } + }, + { + "id": 117335842, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2431303, + 51.2060932 + ], + [ + 3.2431303, + 51.2060932 + ], + [ + 3.2431303, + 51.2060932 + ], + [ + 3.2431303, + 51.2060932 + ], + [ + 3.2431303, + 51.2060932 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #climbing", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T21:03:46Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "climbing", + "answer": 2, + "locale": "en", + "imagery": "osm", + "change_within_100m": 2 + }, + "id": 117335842 + } + }, + { + "id": 117335595, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.469936, + 51.4256114 + ], + [ + 5.47569, + 51.4256114 + ], + [ + 5.47569, + 51.4374715 + ], + [ + 5.469936, + 51.4374715 + ], + [ + 5.469936, + 51.4256114 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T20:53:30Z", + "reviewed_features": [], + "create": 0, + "modify": 17, + "delete": 0, + "area": 0.0000682430154000047, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 25, + "locale": "nl", + "imagery": "osm" + }, + "id": 117335595 + } + }, + { + "id": 117335414, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9794904, + 51.2036087 + ], + [ + 4.9822531, + 51.2036087 + ], + [ + 4.9822531, + 51.2043205 + ], + [ + 4.9794904, + 51.2043205 + ], + [ + 4.9794904, + 51.2036087 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T20:45:32Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 0.00000196648986001323, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "bookcases", + "answer": 7, + "locale": "nl", + "imagery": "osm", + "add-image": 3 + }, + "id": 117335414 + } + }, + { + "id": 117334399, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3705808, + 50.858798 + ], + [ + 4.3705808, + 50.858798 + ], + [ + 4.3705808, + 50.858798 + ], + [ + 4.3705808, + 50.858798 + ], + [ + 4.3705808, + 50.858798 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #artwork", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T20:03:51Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "artwork", + "answer": 1, + "locale": "en", + "imagery": "osm", + "add-image": 2 + }, + "id": 117334399 + } + }, + { + "id": 117331601, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.5929975, + 54.7944406 + ], + [ + -1.5901785, + 54.7944406 + ], + [ + -1.5901785, + 54.796181 + ], + [ + -1.5929975, + 54.796181 + ], + [ + -1.5929975, + 54.7944406 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T18:21:04Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.00000490618759998795, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "id": 117331601 + } + }, + { + "id": 117331164, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.6593589, + 51.058661 + ], + [ + 4.4166433, + 51.058661 + ], + [ + 4.4166433, + 51.1985802 + ], + [ + 2.6593589, + 51.1985802 + ], + [ + 2.6593589, + 51.058661 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T18:06:16Z", + "reviewed_features": [], + "create": 0, + "modify": 100, + "delete": 0, + "area": 0.245877827420482, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 126, + "locale": "nl", + "imagery": "osm" + }, + "id": 117331164 + } + }, + { + "id": 117329143, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2053054, + 50.9045053 + ], + [ + 4.2053054, + 50.9045053 + ], + [ + 4.2053054, + 50.9045053 + ], + [ + 4.2053054, + 50.9045053 + ], + [ + 4.2053054, + 50.9045053 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T16:58:56Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 4, + "create": 1, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 1, + "change_within_25m": 4 + }, + "id": 117329143 + } + }, + { + "id": 117327859, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0603586, + 51.1418862 + ], + [ + 5.0614835, + 51.1418862 + ], + [ + 5.0614835, + 51.1432152 + ], + [ + 5.0603586, + 51.1432152 + ], + [ + 5.0603586, + 51.1418862 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T16:22:27Z", + "reviewed_features": [], + "create": 1, + "modify": 5, + "delete": 0, + "area": 0.00000149499209999784, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "toerisme_vlaanderen", + "answer": 12, + "create": 1, + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "change_over_5000m": 1, + "change_within_25m": 7, + "change_within_500m": 7, + "move:node/1708952679": "improve_accuracy" + }, + "id": 117327859 + } + }, + { + "id": 117327088, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.9755501, + 51.200799 + ], + [ + 2.9755501, + 51.200799 + ], + [ + 2.9755501, + 51.200799 + ], + [ + 2.9755501, + 51.200799 + ], + [ + 2.9755501, + 51.200799 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Hopperpop", + "uid": "3664604", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #fritures", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T16:04:19Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "fritures", + "answer": 3, + "create": 1, + "locale": "nl", + "imagery": "AGIV" + }, + "id": 117327088 + } + }, + { + "id": 117325641, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2716301, + 50.8312905 + ], + [ + 4.421836, + 50.8312905 + ], + [ + 4.421836, + 51.2190863 + ], + [ + 3.2716301, + 51.2190863 + ], + [ + 3.2716301, + 50.8312905 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T15:24:43Z", + "reviewed_features": [], + "create": 0, + "modify": 87, + "delete": 0, + "area": 0.446045017155219, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 118, + "locale": "en", + "imagery": "osm" + }, + "id": 117325641 + } + }, + { + "id": 117325420, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.6057565, + 52.287768 + ], + [ + -1.6050693, + 52.287768 + ], + [ + -1.6050693, + 52.2879334 + ], + [ + -1.6057565, + 52.2879334 + ], + [ + -1.6057565, + 52.287768 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "RobJN", + "uid": "411244", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #uk_addresses", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T15:19:27Z", + "reviewed_features": [], + "create": 6, + "modify": 3, + "delete": 0, + "area": 1.1366288000014e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "uk_addresses", + "answer": 13, + "import": 6, + "locale": "en", + "imagery": "osm", + "change_over_5000m": 5, + "change_within_25m": 7, + "change_within_50m": 4 + }, + "id": 117325420 + } + }, + { + "id": 117323869, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.389842, + 51.0924857 + ], + [ + 3.389842, + 51.0924857 + ], + [ + 3.389842, + 51.0924857 + ], + [ + 3.389842, + 51.0924857 + ], + [ + 3.389842, + 51.0924857 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #nature", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T14:38:09Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "nature", + "locale": "en", + "imagery": "osm", + "add-image": 1 + }, + "id": 117323869 + } + }, + { + "id": 117323851, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.3896566, + 51.0928654 + ], + [ + 3.3896566, + 51.0928654 + ], + [ + 3.3896566, + 51.0928654 + ], + [ + 3.3896566, + 51.0928654 + ], + [ + 3.3896566, + 51.0928654 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T14:37:37Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "benches", + "locale": "en", + "imagery": "osm", + "add-image": 1 + }, + "id": 117323851 + } + }, + { + "id": 117321792, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.0478948, + 50.9115886 + ], + [ + 4.1419483, + 50.9115886 + ], + [ + 4.1419483, + 50.9348498 + ], + [ + 4.0478948, + 50.9348498 + ], + [ + 4.0478948, + 50.9115886 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T13:38:15Z", + "reviewed_features": [], + "create": 0, + "modify": 70, + "delete": 0, + "area": 0.00218779727420004, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 95, + "locale": "nl", + "imagery": "osm" + }, + "id": 117321792 + } + }, + { + "id": 117319351, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.5714734, + 54.6501082 + ], + [ + -1.3935699, + 54.6501082 + ], + [ + -1.3935699, + 54.8711966 + ], + [ + -1.5714734, + 54.8711966 + ], + [ + -1.5714734, + 54.6501082 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T12:25:16Z", + "reviewed_features": [], + "create": 0, + "modify": 67, + "delete": 0, + "area": 0.0393324001693999, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 91, + "locale": "en", + "imagery": "osm" + }, + "id": 117319351 + } + }, + { + "id": 117318921, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.4802151, + 51.028069 + ], + [ + 4.4824346, + 51.028069 + ], + [ + 4.4824346, + 51.0334619 + ], + [ + 4.4802151, + 51.0334619 + ], + [ + 4.4802151, + 51.028069 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "philippec", + "uid": "76884", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T12:12:05Z", + "reviewed_features": [], + "create": 2, + "modify": 1, + "delete": 0, + "area": 0.0000119695415499967, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 5, + "create": 2, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 2, + "change_within_5000m": 5 + }, + "id": 117318921 + } + }, + { + "id": 117318583, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.1785784, + 50.8926614 + ], + [ + 4.1885585, + 50.8926614 + ], + [ + 4.1885585, + 50.9111978 + ], + [ + 4.1785784, + 50.9111978 + ], + [ + 4.1785784, + 50.8926614 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T11:59:40Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 0.000184995125639949, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 7, + "create": 1, + "locale": "nl", + "imagery": "osm" + }, + "id": 117318583 + } + }, + { + "id": 117316426, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0101024, + 51.1280572 + ], + [ + 5.0101024, + 51.1280572 + ], + [ + 5.0101024, + 51.1280572 + ], + [ + 5.0101024, + 51.1280572 + ], + [ + 5.0101024, + 51.1280572 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T10:51:15Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "bookcases", + "answer": 2, + "locale": "nl", + "imagery": "osm", + "change_within_50m": 2 + }, + "id": 117316426 + } + }, + { + "id": 117315711, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.73588, + 51.1301988 + ], + [ + 3.7993656, + 51.1301988 + ], + [ + 3.7993656, + 51.1998874 + ], + [ + 3.73588, + 51.1998874 + ], + [ + 3.73588, + 51.1301988 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T10:26:11Z", + "reviewed_features": [], + "create": 0, + "modify": 10, + "delete": 0, + "area": 0.00442422258415994, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 14, + "locale": "nl", + "imagery": "osm" + }, + "id": 117315711 + } + }, + { + "id": 117314758, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2225528, + 50.9298766 + ], + [ + 4.2230963, + 50.9298766 + ], + [ + 4.2230963, + 50.9302263 + ], + [ + 4.2225528, + 50.9302263 + ], + [ + 4.2225528, + 50.9298766 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-12T09:56:01Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 1.90061950000558e-7, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "change_within_25m": 2 + }, + "id": 117314758 + } + }, + { + "id": 117307299, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 8.4067009, + 49.0058082 + ], + [ + 8.4067009, + 49.0058082 + ], + [ + 8.4067009, + 49.0058082 + ], + [ + 8.4067009, + 49.0058082 + ], + [ + 8.4067009, + 49.0058082 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "k4pl4n", + "uid": "11229531", + "editor": "MapComplete 0.2.3a", + "comment": "Adding data with #MapComplete for theme #vegan", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T01:05:22Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "theme": "vegan", + "language": "en", + "theme-creator": "Christian Neumann " + }, + "id": 117307299 + } + }, + { + "id": 117306917, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3579497, + 50.8677288 + ], + [ + 4.3579497, + 50.8677288 + ], + [ + 4.3579497, + 50.8677288 + ], + [ + 4.3579497, + 50.8677288 + ], + [ + 4.3579497, + 50.8677288 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #climbing", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T00:27:57Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "climbing", + "locale": "en", + "imagery": "osm", + "add-image": 1 + }, + "id": 117306917 + } + }, + { + "id": 117306895, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.35786, + 50.8552406 + ], + [ + 4.3845343, + 50.8552406 + ], + [ + 4.3845343, + 50.8679295 + ], + [ + 4.35786, + 50.8679295 + ], + [ + 4.35786, + 50.8552406 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T00:25:36Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000338467525270024, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 1, + "locale": "en", + "imagery": "CartoDB.Voyager", + "add-image": 3 + }, + "id": 117306895 + } + }, + { + "id": 117306735, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3452659, + 50.8487309 + ], + [ + 4.3577352, + 50.8487309 + ], + [ + 4.3577352, + 50.8678398 + ], + [ + 4.3452659, + 50.8678398 + ], + [ + 4.3452659, + 50.8487309 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-12T00:12:49Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000238274606769976, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "shops", + "locale": "en", + "imagery": "osm", + "add-image": 2 + }, + "id": 117306735 + } + }, + { + "id": 117305997, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.1295004, + 51.1832266 + ], + [ + 5.3181016, + 51.1832266 + ], + [ + 5.3181016, + 51.2512422 + ], + [ + 5.1295004, + 51.2512422 + ], + [ + 5.1295004, + 51.1832266 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T23:21:15Z", + "reviewed_features": [], + "create": 0, + "modify": 139, + "delete": 0, + "area": 0.0128278237787205, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 236, + "locale": "nl", + "imagery": "osm" + }, + "id": 117305997 + } + }, + { + "id": 117305884, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.083904, + 51.0973208 + ], + [ + 5.0893645, + 51.0973208 + ], + [ + 5.0893645, + 51.1005507 + ], + [ + 5.083904, + 51.1005507 + ], + [ + 5.083904, + 51.0973208 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T23:13:27Z", + "reviewed_features": [], + "create": 48, + "modify": 22, + "delete": 0, + "area": 0.0000176368689500045, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 21, + "theme": "grb", + "locale": "nl", + "imagery": "osm", + "conflation": 2 + }, + "id": 117305884 + } + }, + { + "id": 117301022, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -70.7677225, + -33.489466 + ], + [ + -70.7674246, + -33.489466 + ], + [ + -70.7674246, + -33.4890496 + ], + [ + -70.7677225, + -33.4890496 + ], + [ + -70.7677225, + -33.489466 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T19:55:02Z", + "reviewed_features": [], + "create": 0, + "modify": 9, + "delete": 0, + "area": 1.24045560002469e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "locale": "en", + "imagery": "cyclosm", + "add-image": 9, + "change_over_5000m": 8 + }, + "id": 117301022 + } + }, + { + "id": 117297205, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.7024106, + 51.0505662 + ], + [ + 3.7028538, + 51.0505662 + ], + [ + 3.7028538, + 51.0508728 + ], + [ + 3.7024106, + 51.0508728 + ], + [ + 3.7024106, + 51.0505662 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T17:49:13Z", + "reviewed_features": [], + "create": 0, + "modify": 17, + "delete": 0, + "area": 1.35885120000903e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 16, + "theme": "grb", + "locale": "nl", + "imagery": "AGIVFlandersGRB", + "conflation": 2 + }, + "id": 117297205 + } + }, + { + "id": 117296852, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.7021297, + 51.050972 + ], + [ + 3.7022343, + 51.050972 + ], + [ + 3.7022343, + 51.0510582 + ], + [ + 3.7021297, + 51.0510582 + ], + [ + 3.7021297, + 51.050972 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 43, + "name": "Invalid key value combination" + } + ], + "tags": [], + "features": [ + { + "url": "node-8024991201", + "osm_id": 8024991201, + "reasons": [ + 43 + ], + "version": 6, + "primary_tags": { + "shop": "brass_instruments" + } + } + ], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T17:38:10Z", + "reviewed_features": [], + "create": 0, + "modify": 7, + "delete": 0, + "area": 9.01651999984962e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "shops", + "answer": 5, + "locale": "en", + "imagery": "osm", + "add-image": 1, + "move:node/8024991201": "improve_accuracy" + }, + "id": 117296852 + } + }, + { + "id": 117296102, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -0.6137705, + 51.1867728 + ], + [ + -0.6086519, + 51.1867728 + ], + [ + -0.6086519, + 51.1883261 + ], + [ + -0.6137705, + 51.1883261 + ], + [ + -0.6137705, + 51.1867728 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "waylink", + "uid": "12132256", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T17:18:21Z", + "reviewed_features": [], + "create": 66, + "modify": 0, + "delete": 0, + "area": 0.00000795072137998792, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "create": 66, + "locale": "en", + "imagery": "Surrey-Air_Survey", + "change_over_5000m": 28 + }, + "id": 117296102 + } + }, + { + "id": 117295625, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -0.6151875, + 51.1866476 + ], + [ + -0.6106373, + 51.1866476 + ], + [ + -0.6106373, + 51.1879111 + ], + [ + -0.6151875, + 51.1879111 + ], + [ + -0.6151875, + 51.1866476 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "waylink", + "uid": "12132256", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T17:05:04Z", + "reviewed_features": [], + "create": 30, + "modify": 0, + "delete": 0, + "area": 0.00000574917770000133, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "create": 30, + "locale": "en", + "imagery": "Surrey-Air_Survey" + }, + "id": 117295625 + } + }, + { + "id": 117295023, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -68.1584275, + -16.5257601 + ], + [ + -68.1477905, + -16.5257601 + ], + [ + -68.1477905, + -16.5232639 + ], + [ + -68.1584275, + -16.5232639 + ], + [ + -68.1584275, + -16.5257601 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 83, + "name": "User has multiple blocks" + } + ], + "tags": [], + "features": [], + "user": "rodolfovargas", + "uid": "1217047", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #nature", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T16:49:51Z", + "reviewed_features": [], + "create": 0, + "modify": 12, + "delete": 0, + "area": 0.0000265520794000014, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "nature", + "answer": 14, + "locale": "nl", + "imagery": "osm" + }, + "id": 117295023 + } + }, + { + "id": 117292039, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.7362334, + 51.0546591 + ], + [ + 3.7365281, + 51.0546591 + ], + [ + 3.7365281, + 51.0548567 + ], + [ + 3.7362334, + 51.0548567 + ], + [ + 3.7362334, + 51.0546591 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #buurtnatuur", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T15:16:18Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 5.82327199999694e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "buurtnatuur", + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "change_within_25m": 1 + }, + "id": 117292039 + } + }, + { + "id": 117290881, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.7036753, + 51.0489713 + ], + [ + 3.7036753, + 51.0489713 + ], + [ + 3.7036753, + 51.0489713 + ], + [ + 3.7036753, + 51.0489713 + ], + [ + 3.7036753, + 51.0489713 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.7", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T14:45:51Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cyclofix", + "answer": 5, + "locale": "en", + "imagery": "CartoDB.Voyager", + "change_within_50m": 5 + }, + "id": 117290881 + } + }, + { + "id": 117290798, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -0.6127403, + 51.1855992 + ], + [ + -0.612073, + 51.1855992 + ], + [ + -0.612073, + 51.1863184 + ], + [ + -0.6127403, + 51.1863184 + ], + [ + -0.6127403, + 51.1855992 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "waylink", + "uid": "12132256", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T14:43:40Z", + "reviewed_features": [], + "create": 6, + "modify": 0, + "delete": 0, + "area": 4.79922159999307e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "create": 6, + "locale": "en", + "imagery": "Surrey-Air_Survey" + }, + "id": 117290798 + } + }, + { + "id": 117290651, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.7003531, + 51.0532936 + ], + [ + 3.70154, + 51.0532936 + ], + [ + 3.70154, + 51.0537809 + ], + [ + 3.7003531, + 51.0537809 + ], + [ + 3.7003531, + 51.0532936 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T14:39:23Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 5.78376369995346e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 1, + "locale": "en", + "imagery": "osm" + }, + "id": 117290651 + } + }, + { + "id": 117290521, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0276535, + 51.15828 + ], + [ + 5.0510018, + 51.15828 + ], + [ + 5.0510018, + 51.1654343 + ], + [ + 5.0276535, + 51.1654343 + ], + [ + 5.0276535, + 51.15828 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 4, + "name": "mass modification" + } + ], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T14:35:12Z", + "reviewed_features": [], + "create": 80, + "modify": 510, + "delete": 10, + "area": 0.000167040742690075, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 449, + "theme": "grb", + "answer": 2, + "delete": 10, + "import": 8, + "locale": "nl", + "imagery": "AGIV", + "conflation": 128 + }, + "id": 117290521 + } + }, + { + "id": 117290489, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -0.6077781, + 51.1889232 + ], + [ + -0.6077781, + 51.1889232 + ], + [ + -0.6077781, + 51.1889232 + ], + [ + -0.6077781, + 51.1889232 + ], + [ + -0.6077781, + 51.1889232 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 43, + "name": "Invalid key value combination" + } + ], + "tags": [], + "features": [ + { + "url": "node-9498240425", + "osm_id": 9498240425, + "reasons": [ + 43 + ], + "version": 1, + "primary_tags": { + "tourism": "map" + } + } + ], + "user": "waylink", + "uid": "12132256", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #maps", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T14:34:11Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "maps", + "create": 1, + "locale": "en", + "imagery": "osm" + }, + "id": 117290489 + } + }, + { + "id": 117290398, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.7017542, + 51.0585187 + ], + [ + 3.7025845, + 51.0585187 + ], + [ + 3.7025845, + 51.0590693 + ], + [ + 3.7017542, + 51.0590693 + ], + [ + 3.7017542, + 51.0585187 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T14:31:21Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 4.57163179997417e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "shops", + "answer": 1, + "locale": "en", + "imagery": "osm" + }, + "id": 117290398 + } + }, + { + "id": 117288194, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2257699, + 50.955854 + ], + [ + 4.2315455, + 50.955854 + ], + [ + 4.2315455, + 50.9575472 + ], + [ + 4.2257699, + 50.9575472 + ], + [ + 4.2257699, + 50.955854 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T13:29:49Z", + "reviewed_features": [], + "create": 940, + "modify": 0, + "delete": 0, + "area": 0.00000977924591998971, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 145, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 145 + }, + "id": 117288194 + } + }, + { + "id": 117286674, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0427031, + 51.1403737 + ], + [ + 5.0573365, + 51.1403737 + ], + [ + 5.0573365, + 51.1540915 + ], + [ + 5.0427031, + 51.1540915 + ], + [ + 5.0427031, + 51.1403737 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T12:41:44Z", + "reviewed_features": [], + "create": 61, + "modify": 65, + "delete": 3, + "area": 0.000200738054520031, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 56, + "theme": "grb", + "answer": 1, + "delete": 3, + "import": 5, + "locale": "nl", + "imagery": "osm", + "conflation": 16 + }, + "id": 117286674 + } + }, + { + "id": 117285094, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2337186, + 50.9497145 + ], + [ + 4.2353624, + 50.9497145 + ], + [ + 4.2353624, + 50.9516846 + ], + [ + 4.2337186, + 50.9516846 + ], + [ + 4.2337186, + 50.9497145 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.7", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-11T11:57:29Z", + "reviewed_features": [], + "create": 356, + "modify": 0, + "delete": 0, + "area": 0.00000323845038000038, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "grb", + "import": 45, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 45 + }, + "id": 117285094 + } + }, + { + "id": 117283702, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2341676, + 51.0645934 + ], + [ + 4.2878118, + 51.0645934 + ], + [ + 4.2878118, + 51.0999262 + ], + [ + 4.2341676, + 51.0999262 + ], + [ + 4.2341676, + 51.0645934 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T11:22:06Z", + "reviewed_features": [], + "create": 0, + "modify": 39, + "delete": 0, + "area": 0.00189539978975995, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 72, + "locale": "nl", + "imagery": "osm" + }, + "id": 117283702 + } + }, + { + "id": 117273386, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -122.0543159, + 36.9786617 + ], + [ + -122.054105, + 36.9786617 + ], + [ + -122.054105, + 36.9983898 + ], + [ + -122.0543159, + 36.9983898 + ], + [ + -122.0543159, + 36.9786617 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joeybab3", + "uid": "8783843", + "editor": "MapComplete 0.15.8", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T06:32:26Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.00000416065628997944, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 4, + "locale": "en", + "imagery": "osm", + "add-image": 1 + }, + "id": 117273386 + } + }, + { + "id": 117269761, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2297767, + 51.2019943 + ], + [ + 3.2309529, + 51.2019943 + ], + [ + 3.2309529, + 51.202217 + ], + [ + 3.2297767, + 51.202217 + ], + [ + 3.2297767, + 51.2019943 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.7", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T03:32:25Z", + "reviewed_features": [], + "create": 4, + "modify": 5, + "delete": 0, + "area": 2.61939739993927e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "move": 4, + "path": "mc/develop/", + "theme": "grb", + "import": 1, + "locale": "nl", + "imagery": "osm", + "conflation": 2 + }, + "id": 117269761 + } + }, + { + "id": 117268208, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2324498, + 50.9566027 + ], + [ + 4.2336453, + 50.9566027 + ], + [ + 4.2336453, + 50.9572926 + ], + [ + 4.2324498, + 50.9572926 + ], + [ + 4.2324498, + 50.9566027 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.7", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-11T01:50:29Z", + "reviewed_features": [], + "create": 99, + "modify": 0, + "delete": 0, + "area": 8.24775450005381e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "127.0.0.1:1234", + "theme": "grb", + "import": 16, + "locale": "nl", + "imagery": "osm" + }, + "id": 117268208 + } + }, + { + "id": 117265715, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2203987, + 50.9536033 + ], + [ + 4.2299999, + 50.9536033 + ], + [ + 4.2299999, + 51.2158748 + ], + [ + 3.2203987, + 51.2158748 + ], + [ + 3.2203987, + 50.9536033 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 2, + "name": "possible import" + } + ], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 3, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T23:14:04Z", + "reviewed_features": [], + "create": 1363, + "modify": 11, + "delete": 0, + "area": 0.264789621125804, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "move": 10, + "path": "mc/develop/", + "theme": "grb", + "import": 204, + "locale": "nl", + "imagery": "osm", + "conflation": 2 + }, + "id": 117265715 + } + }, + { + "id": 117265547, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9151924, + 51.0875473 + ], + [ + 4.919482, + 51.0875473 + ], + [ + 4.919482, + 51.0908932 + ], + [ + 4.9151924, + 51.0908932 + ], + [ + 4.9151924, + 51.0875473 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-10T23:05:38Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 0.0000143525726399998, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 6, + "locale": "nl", + "imagery": "osm", + "change_within_5000m": 6 + }, + "id": 117265547 + } + }, + { + "id": 117265193, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.7096154, + 51.0349112 + ], + [ + 3.7096154, + 51.0349112 + ], + [ + 3.7096154, + 51.0349112 + ], + [ + 3.7096154, + 51.0349112 + ], + [ + 3.7096154, + 51.0349112 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-10T22:46:14Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 3, + "locale": "nl", + "imagery": "osm", + "change_within_5000m": 3 + }, + "id": 117265193 + } + }, + { + "id": 117261964, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -2.0072882, + 54.5213479 + ], + [ + -1.6452741, + 54.5213479 + ], + [ + -1.6452741, + 54.8724807 + ], + [ + -2.0072882, + 54.8724807 + ], + [ + -2.0072882, + 54.5213479 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T20:55:04Z", + "reviewed_features": [], + "create": 0, + "modify": 68, + "delete": 0, + "area": 0.127115024572478, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 103, + "locale": "en", + "imagery": "osm" + }, + "id": 117261964 + } + }, + { + "id": 117260011, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9979324, + 51.1655666 + ], + [ + 4.9979324, + 51.1655666 + ], + [ + 4.9979324, + 51.1655666 + ], + [ + 4.9979324, + 51.1655666 + ], + [ + 4.9979324, + 51.1655666 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T19:56:14Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "bookcases", + "create": 1, + "locale": "en", + "imagery": "AGIV", + "add-image": 1 + }, + "id": 117260011 + } + }, + { + "id": 117259394, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.942541, + 51.0934708 + ], + [ + 4.942541, + 51.0934708 + ], + [ + 4.942541, + 51.0934708 + ], + [ + 4.942541, + 51.0934708 + ], + [ + 4.942541, + 51.0934708 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T19:35:48Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "shops", + "locale": "en", + "imagery": "osm", + "add-image": 2 + }, + "id": 117259394 + } + }, + { + "id": 117259168, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.5588466, + 50.7861103 + ], + [ + 5.5588466, + 50.7861103 + ], + [ + 5.5588466, + 50.7861103 + ], + [ + 5.5588466, + 50.7861103 + ], + [ + 5.5588466, + 50.7861103 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T19:27:32Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "food", + "locale": "en", + "imagery": "osm", + "add-image": 1 + }, + "id": 117259168 + } + }, + { + "id": 117259010, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9974884, + 50.8080349 + ], + [ + 5.6063929, + 50.8080349 + ], + [ + 5.6063929, + 51.1663155 + ], + [ + 4.9974884, + 51.1663155 + ], + [ + 4.9974884, + 50.8080349 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T19:20:49Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0.2181586696027, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "playgrounds", + "locale": "en", + "imagery": "osm", + "add-image": 3 + }, + "id": 117259010 + } + }, + { + "id": 117258567, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.374147, + 50.8114932 + ], + [ + 5.5934371, + 50.8114932 + ], + [ + 5.5934371, + 50.8678918 + ], + [ + 4.374147, + 50.8678918 + ], + [ + 4.374147, + 50.8114932 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T19:04:11Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0.0687662546338617, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 5, + "create": 1, + "locale": "en", + "imagery": "CartoDB.Voyager", + "add-image": 2 + }, + "id": 117258567 + } + }, + { + "id": 117257353, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -3.6228028, + 37.1507631 + ], + [ + -3.5872273, + 37.1507631 + ], + [ + -3.5872273, + 37.204901 + ], + [ + -3.6228028, + 37.204901 + ], + [ + -3.6228028, + 37.1507631 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pipeton", + "uid": "11969052", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T18:26:12Z", + "reviewed_features": [], + "create": 0, + "modify": 43, + "delete": 0, + "area": 0.00192598286145003, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 58, + "locale": "en", + "imagery": "osm" + }, + "id": 117257353 + } + }, + { + "id": 117257071, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.7004163, + 51.0535894 + ], + [ + 3.7004163, + 51.0535894 + ], + [ + 3.7004163, + 51.0535894 + ], + [ + 3.7004163, + 51.0535894 + ], + [ + 3.7004163, + 51.0535894 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-10T18:15:44Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "shops", + "answer": 1, + "locale": "en", + "imagery": "osm", + "change_within_25m": 1 + }, + "id": 117257071 + } + }, + { + "id": 117256720, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3219496, + 50.8316173 + ], + [ + 4.3578025, + 50.8316173 + ], + [ + 4.3578025, + 50.8677208 + ], + [ + 4.3219496, + 50.8677208 + ], + [ + 4.3219496, + 50.8316173 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #climbing", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T18:03:04Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0.00129441517515011, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "climbing", + "answer": 4, + "locale": "en", + "imagery": "osm" + }, + "id": 117256720 + } + }, + { + "id": 117256602, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.4495834, + 50.7865585 + ], + [ + 5.4503183, + 50.7865585 + ], + [ + 5.4503183, + 50.7869583 + ], + [ + 5.4495834, + 50.7869583 + ], + [ + 5.4495834, + 50.7865585 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T17:59:42Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 2.93813020002945e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "playgrounds", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "add-image": 1 + }, + "id": 117256602 + } + }, + { + "id": 117256167, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.4338323, + 50.8163334 + ], + [ + 4.4338323, + 50.8163334 + ], + [ + 4.4338323, + 50.8163334 + ], + [ + 4.4338323, + 50.8163334 + ], + [ + 4.4338323, + 50.8163334 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "StefDeGreef", + "uid": "1860737", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T17:46:55Z", + "reviewed_features": [], + "create": 1, + "modify": 4, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 5, + "create": 1, + "locale": "fr", + "imagery": "CartoDB.Voyager", + "add-image": 2 + }, + "id": 117256167 + } + }, + { + "id": 117254536, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.228803, + 51.2007513 + ], + [ + 3.2304441, + 51.2007513 + ], + [ + 3.2304441, + 51.2017392 + ], + [ + 3.228803, + 51.2017392 + ], + [ + 3.228803, + 51.2007513 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-10T16:54:55Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 0.0000016212426899974, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 7, + "locale": "nl", + "imagery": "osm" + }, + "id": 117254536 + } + }, + { + "id": 117252707, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.6593862, + 42.9134642 + ], + [ + 1.6599253, + 42.9134642 + ], + [ + 1.6599253, + 42.9137962 + ], + [ + 1.6593862, + 42.9137962 + ], + [ + 1.6593862, + 42.9134642 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Albin Gasparetto", + "uid": "1227542", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T16:13:19Z", + "reviewed_features": [], + "create": 2, + "modify": 0, + "delete": 0, + "area": 1.78981200000161e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 3, + "create": 2, + "locale": "fr", + "imagery": "osm" + }, + "id": 117252707 + } + }, + { + "id": 117251573, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.6487646, + 42.9137829 + ], + [ + 1.6682535, + 42.9137829 + ], + [ + 1.6682535, + 42.9190556 + ], + [ + 1.6487646, + 42.9190556 + ], + [ + 1.6487646, + 42.9137829 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "anticamfoix", + "uid": "15042359", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T15:44:04Z", + "reviewed_features": [], + "create": 3, + "modify": 0, + "delete": 0, + "area": 0.000102759123029981, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 8, + "create": 3, + "locale": "fr", + "imagery": "osm" + }, + "id": 117251573 + } + }, + { + "id": 117250931, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9982444, + 51.1569198 + ], + [ + 5.0029191, + 51.1569198 + ], + [ + 5.0029191, + 51.1608258 + ], + [ + 4.9982444, + 51.1608258 + ], + [ + 4.9982444, + 51.1569198 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-10T15:25:20Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 0.0000182593782000022, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 13, + "locale": "nl", + "imagery": "osm" + }, + "id": 117250931 + } + }, + { + "id": 117248276, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2258724, + 50.9540131 + ], + [ + 4.2270517, + 50.9540131 + ], + [ + 4.2270517, + 50.9551404 + ], + [ + 4.2258724, + 50.9551404 + ], + [ + 4.2258724, + 50.9540131 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-10T14:18:04Z", + "reviewed_features": [], + "create": 175, + "modify": 0, + "delete": 0, + "area": 0.00000132942488999982, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "127.0.0.1:1234", + "theme": "grb", + "import": 22, + "locale": "nl", + "imagery": "osm" + }, + "id": 117248276 + } + }, + { + "id": 117247272, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.7445464, + 51.041222 + ], + [ + 3.7445464, + 51.041222 + ], + [ + 3.7445464, + 51.041222 + ], + [ + 3.7445464, + 51.041222 + ], + [ + 3.7445464, + 51.041222 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #climbing", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-10T13:52:36Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "climbing", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 1 + }, + "id": 117247272 + } + }, + { + "id": 117245437, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2271065, + 50.9544801 + ], + [ + 4.2272033, + 50.9544801 + ], + [ + 4.2272033, + 50.9546127 + ], + [ + 4.2271065, + 50.9546127 + ], + [ + 4.2271065, + 50.9544801 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-10T13:06:48Z", + "reviewed_features": [], + "create": 11, + "modify": 0, + "delete": 0, + "area": 1.28356800001321e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "127.0.0.1:1234", + "theme": "grb", + "import": 2, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 2 + }, + "id": 117245437 + } + }, + { + "id": 117244900, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.4231233, + 51.3030606 + ], + [ + 9.4517505, + 51.3030606 + ], + [ + 9.4517505, + 51.3139779 + ], + [ + 9.4231233, + 51.3139779 + ], + [ + 9.4231233, + 51.3030606 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Lattenzaun", + "uid": "2603279", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T12:53:45Z", + "reviewed_features": [], + "create": 0, + "modify": 26, + "delete": 0, + "area": 0.000312531730559862, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 32, + "locale": "de", + "imagery": "osm" + }, + "id": 117244900 + } + }, + { + "id": 117238352, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 7.4287755, + 46.9516792 + ], + [ + 7.4300709, + 46.9516792 + ], + [ + 7.4300709, + 46.9527825 + ], + [ + 7.4287755, + 46.9527825 + ], + [ + 7.4287755, + 46.9516792 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "habi", + "uid": "15671", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-10T10:12:34Z", + "reviewed_features": [], + "create": 0, + "modify": 14, + "delete": 0, + "area": 0.00000142921481999509, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "answer": 18, + "locale": "en", + "imagery": "osm", + "change_within_25m": 16, + "change_within_50m": 2 + }, + "id": 117238352 + } + }, + { + "id": 117237763, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.43106, + 51.3029186 + ], + [ + 9.4498972, + 51.3029186 + ], + [ + 9.4498972, + 51.3107455 + ], + [ + 9.43106, + 51.3107455 + ], + [ + 9.43106, + 51.3029186 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Lattenzaun", + "uid": "2603279", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T09:57:48Z", + "reviewed_features": [], + "create": 0, + "modify": 28, + "delete": 0, + "area": 0.000147436880680092, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 38, + "locale": "de", + "imagery": "osm" + }, + "id": 117237763 + } + }, + { + "id": 117236734, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 8.2858713, + 50.8866216 + ], + [ + 8.2858713, + 50.8866216 + ], + [ + 8.2858713, + 50.8866216 + ], + [ + 8.2858713, + 50.8866216 + ], + [ + 8.2858713, + 50.8866216 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Sparkofska", + "uid": "15028493", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #drinking_water", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T09:34:40Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "drinking_water", + "answer": 1, + "locale": "en", + "imagery": "CartoDB.Voyager" + }, + "id": 117236734 + } + }, + { + "id": 117228304, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.8474009, + 51.0602351 + ], + [ + 4.9973272, + 51.0602351 + ], + [ + 4.9973272, + 51.1583943 + ], + [ + 4.8474009, + 51.1583943 + ], + [ + 4.8474009, + 51.0602351 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-10T05:50:15Z", + "reviewed_features": [], + "create": 0, + "modify": 109, + "delete": 0, + "area": 0.0147166456669596, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 193, + "locale": "nl", + "imagery": "osm" + }, + "id": 117228304 + } + }, + { + "id": 117226569, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -71.3379922, + -29.9535533 + ], + [ + -71.3379922, + -29.9535533 + ], + [ + -71.3379922, + -29.9535533 + ], + [ + -71.3379922, + -29.9535533 + ], + [ + -71.3379922, + -29.9535533 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-10T04:25:15Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "locale": "en", + "imagery": "cyclosm", + "add-image": 1 + }, + "id": 117226569 + } + }, + { + "id": 117222929, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 13.5541946, + 52.0577699 + ], + [ + 13.5541946, + 52.0577699 + ], + [ + 13.5541946, + 52.0577699 + ], + [ + 13.5541946, + 52.0577699 + ], + [ + 13.5541946, + 52.0577699 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Marcel1109", + "uid": "14940118", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T23:32:39Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "id": 117222929 + } + }, + { + "id": 117222795, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.6095722, + 42.960264 + ], + [ + 1.6095722, + 42.960264 + ], + [ + 1.6095722, + 42.960264 + ], + [ + 1.6095722, + 42.960264 + ], + [ + 1.6095722, + 42.960264 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "rejbzh", + "uid": "15051154", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T23:24:21Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 1, + "locale": "fr", + "imagery": "fr.ign.bdortho" + }, + "id": 117222795 + } + }, + { + "id": 117222384, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9155991, + 51.0901667 + ], + [ + 4.9446527, + 51.0901667 + ], + [ + 4.9446527, + 51.0971925 + ], + [ + 4.9155991, + 51.0971925 + ], + [ + 4.9155991, + 51.0901667 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-09T23:03:38Z", + "reviewed_features": [], + "create": 0, + "modify": 21, + "delete": 0, + "area": 0.000204124782880029, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 27, + "locale": "nl", + "imagery": "osm", + "change_within_5000m": 27 + }, + "id": 117222384 + } + }, + { + "id": 117222003, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.6478044, + 42.9187911 + ], + [ + 1.6485795, + 42.9187911 + ], + [ + 1.6485795, + 42.9198384 + ], + [ + 1.6478044, + 42.9198384 + ], + [ + 1.6478044, + 42.9187911 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "rejbzh", + "uid": "15051154", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T22:48:48Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 1, + "area": 8.11762230002591e-7, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 1, + "create": 1, + "locale": "fr", + "imagery": "fr.ign.bdortho", + "deletion": 1, + "deletion:node/9493709466": "duplicate" + }, + "id": 117222003 + } + }, + { + "id": 117221882, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2299395, + 50.9585116 + ], + [ + 4.2331176, + 50.9585116 + ], + [ + 4.2331176, + 50.9598897 + ], + [ + 4.2299395, + 50.9598897 + ], + [ + 4.2299395, + 50.9585116 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T22:43:28Z", + "reviewed_features": [], + "create": 533, + "modify": 13, + "delete": 0, + "area": 0.00000437973960998855, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 10, + "theme": "grb", + "answer": 1, + "import": 70, + "locale": "nl", + "imagery": "AGIVFlandersGRB", + "conflation": 4 + }, + "id": 117221882 + } + }, + { + "id": 117221804, + "type": "Feature", + "geometry": null, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T22:40:23Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 0, + "area": null, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 1, + "locale": "nl", + "imagery": "osm" + }, + "id": 117221804 + } + }, + { + "id": 117221776, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2313848, + 50.9592679 + ], + [ + 4.2320341, + 50.9592679 + ], + [ + 4.2320341, + 50.9594673 + ], + [ + 4.2313848, + 50.9594673 + ], + [ + 4.2313848, + 50.9592679 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T22:39:09Z", + "reviewed_features": [], + "create": 25, + "modify": 0, + "delete": 0, + "area": 1.29470419999773e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 2, + "locale": "nl", + "imagery": "osm" + }, + "id": 117221776 + } + }, + { + "id": 117221773, + "type": "Feature", + "geometry": null, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T22:39:05Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 0, + "area": null, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 1, + "locale": "nl", + "imagery": "osm" + }, + "id": 117221773 + } + }, + { + "id": 117221767, + "type": "Feature", + "geometry": null, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T22:38:57Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 0, + "area": null, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 1, + "locale": "nl", + "imagery": "osm" + }, + "id": 117221767 + } + }, + { + "id": 117221764, + "type": "Feature", + "geometry": null, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T22:38:54Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 0, + "area": null, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 1, + "locale": "nl", + "imagery": "osm" + }, + "id": 117221764 + } + }, + { + "id": 117221761, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2319579, + 50.9591851 + ], + [ + 4.2320417, + 50.9591851 + ], + [ + 4.2320417, + 50.9592187 + ], + [ + 4.2319579, + 50.9592187 + ], + [ + 4.2319579, + 50.9591851 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T22:38:45Z", + "reviewed_features": [], + "create": 5, + "modify": 0, + "delete": 0, + "area": 2.8156800001431e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 1, + "locale": "nl", + "imagery": "osm" + }, + "id": 117221761 + } + }, + { + "id": 117221755, + "type": "Feature", + "geometry": null, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T22:38:39Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 0, + "area": null, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 2, + "locale": "nl", + "imagery": "osm" + }, + "id": 117221755 + } + }, + { + "id": 117221751, + "type": "Feature", + "geometry": null, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T22:38:33Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 0, + "area": null, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 1, + "locale": "nl", + "imagery": "osm" + }, + "id": 117221751 + } + }, + { + "id": 117221726, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2320113, + 50.9585369 + ], + [ + 4.2322238, + 50.9585369 + ], + [ + 4.2322238, + 50.9587396 + ], + [ + 4.2320113, + 50.9587396 + ], + [ + 4.2320113, + 50.9585369 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T22:37:19Z", + "reviewed_features": [], + "create": 0, + "modify": 11, + "delete": 0, + "area": 4.30737500005559e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 10, + "theme": "grb", + "locale": "nl", + "imagery": "osm", + "conflation": 2 + }, + "id": 117221726 + } + }, + { + "id": 117220765, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.6304636, + 51.3477836 + ], + [ + 4.6321288, + 51.3477836 + ], + [ + 4.6321288, + 51.3485302 + ], + [ + 4.6304636, + 51.3485302 + ], + [ + 4.6304636, + 51.3477836 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Stinus_Clasius", + "uid": "1086503", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T21:58:45Z", + "reviewed_features": [], + "create": 134, + "modify": 0, + "delete": 0, + "area": 0.0000012432383199994, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 20, + "locale": "nl", + "imagery": "osm" + }, + "id": 117220765 + } + }, + { + "id": 117219747, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.7019163, + 55.0824927 + ], + [ + -1.5878723, + 55.0824927 + ], + [ + -1.5878723, + 55.4339583 + ], + [ + -1.7019163, + 55.4339583 + ], + [ + -1.7019163, + 55.0824927 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 70, + "name": "Impossible angle in a highway" + } + ], + "tags": [], + "features": [ + { + "url": "way-736570673", + "name": "Westmorland Way", + "osm_id": 736570673, + "reasons": [ + 70 + ], + "version": 3, + "primary_tags": { + "highway": "primary" + } + }, + { + "url": "way-126044600", + "name": "Westmorland Way", + "osm_id": 126044600, + "reasons": [ + 70 + ], + "version": 2, + "primary_tags": { + "highway": "primary" + } + }, + { + "url": "way-736570670", + "name": "Westmorland Way", + "osm_id": 736570670, + "reasons": [ + 70 + ], + "version": 3, + "primary_tags": { + "highway": "primary" + } + } + ], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T21:18:26Z", + "reviewed_features": [], + "create": 0, + "modify": 43, + "delete": 0, + "area": 0.0400825428863997, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 62, + "locale": "en", + "imagery": "osm" + }, + "id": 117219747 + } + }, + { + "id": 117218343, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 13.5531508, + 52.0544254 + ], + [ + 13.5531508, + 52.0544254 + ], + [ + 13.5531508, + 52.0544254 + ], + [ + 13.5531508, + 52.0544254 + ], + [ + 13.5531508, + 52.0544254 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Marvin Geisler", + "uid": "13424339", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T20:35:12Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "id": 117218343 + } + }, + { + "id": 117218067, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.6485795, + 42.9187911 + ], + [ + 1.6485795, + 42.9187911 + ], + [ + 1.6485795, + 42.9187911 + ], + [ + 1.6485795, + 42.9187911 + ], + [ + 1.6485795, + 42.9187911 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "rejbzh", + "uid": "15051154", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T20:26:53Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 1, + "create": 1, + "locale": "fr", + "imagery": "CartoDB.Voyager" + }, + "id": 117218067 + } + }, + { + "id": 117218051, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.6485997, + 42.9187699 + ], + [ + 1.6485997, + 42.9187699 + ], + [ + 1.6485997, + 42.9187699 + ], + [ + 1.6485997, + 42.9187699 + ], + [ + 1.6485997, + 42.9187699 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "rejbzh", + "uid": "15051154", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T20:26:09Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 1, + "create": 1, + "locale": "fr", + "imagery": "CartoDB.Voyager" + }, + "id": 117218051 + } + }, + { + "id": 117217034, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.6197403, + 55.0633319 + ], + [ + -1.5169966, + 55.0633319 + ], + [ + -1.5169966, + 55.2210879 + ], + [ + -1.6197403, + 55.2210879 + ], + [ + -1.6197403, + 55.0633319 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 70, + "name": "Impossible angle in a highway" + } + ], + "tags": [], + "features": [ + { + "url": "way-126044593", + "name": "Station Road", + "osm_id": 126044593, + "reasons": [ + 70 + ], + "version": 6, + "primary_tags": { + "highway": "primary" + } + }, + { + "url": "way-126044594", + "name": "Station Road", + "osm_id": 126044594, + "reasons": [ + 70 + ], + "version": 5, + "primary_tags": { + "highway": "secondary" + } + }, + { + "url": "way-125785869", + "name": "Stakeford Lane", + "osm_id": 125785869, + "reasons": [ + 70 + ], + "version": 4, + "primary_tags": { + "highway": "primary" + } + } + ], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T19:51:05Z", + "reviewed_features": [], + "create": 0, + "modify": 98, + "delete": 0, + "area": 0.0162084351371999, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 143, + "locale": "en", + "imagery": "osm" + }, + "id": 117217034 + } + }, + { + "id": 117216564, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 9.4152775, + 51.3018083 + ], + [ + 9.4448682, + 51.3018083 + ], + [ + 9.4448682, + 51.3165842 + ], + [ + 9.4152775, + 51.3165842 + ], + [ + 9.4152775, + 51.3018083 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Lattenzaun", + "uid": "2603279", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T19:33:32Z", + "reviewed_features": [], + "create": 0, + "modify": 84, + "delete": 0, + "area": 0.000437229224130107, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 117, + "locale": "de", + "imagery": "osm" + }, + "id": 117216564 + } + }, + { + "id": 117213496, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.6402526, + 42.9183576 + ], + [ + 1.6416534, + 42.9183576 + ], + [ + 1.6416534, + 42.918765 + ], + [ + 1.6402526, + 42.918765 + ], + [ + 1.6402526, + 42.9183576 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "anticamfoix", + "uid": "15042359", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T17:57:13Z", + "reviewed_features": [], + "create": 3, + "modify": 3, + "delete": 0, + "area": 5.70685920000429e-7, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 8, + "create": 3, + "locale": "fr", + "imagery": "osm" + }, + "id": 117213496 + } + }, + { + "id": 117211444, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.4294978, + 50.8067103 + ], + [ + 4.4294978, + 50.8067103 + ], + [ + 4.4294978, + 50.8067103 + ], + [ + 4.4294978, + 50.8067103 + ], + [ + 4.4294978, + 50.8067103 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "StefDeGreef", + "uid": "1860737", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-09T17:03:43Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 3, + "create": 1, + "locale": "fr", + "imagery": "CartoDB.Voyager", + "add-image": 1, + "change_over_5000m": 1, + "change_within_25m": 4 + }, + "id": 117211444 + } + }, + { + "id": 117208566, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.4760257, + 51.0276134 + ], + [ + 4.4794074, + 51.0276134 + ], + [ + 4.4794074, + 51.0284867 + ], + [ + 4.4760257, + 51.0284867 + ], + [ + 4.4760257, + 51.0276134 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "philippec", + "uid": "76884", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #toilets", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-09T15:43:41Z", + "reviewed_features": [], + "create": 2, + "modify": 3, + "delete": 0, + "area": 0.00000295323861000725, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toilets", + "answer": 7, + "create": 2, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 2, + "change_within_1000m": 7 + }, + "id": 117208566 + } + }, + { + "id": 117206256, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3936619, + 50.4801134 + ], + [ + 4.3936619, + 50.4801134 + ], + [ + 4.3936619, + 50.4801134 + ], + [ + 4.3936619, + 50.4801134 + ], + [ + 4.3936619, + 50.4801134 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jas7100", + "uid": "15023699", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T14:48:31Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 3, + "create": 1, + "locale": "fr", + "imagery": "SPW_ORTHO_LAST" + }, + "id": 117206256 + } + }, + { + "id": 117205993, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 79.4691959, + 11.5993852 + ], + [ + 79.5493961, + 11.5993852 + ], + [ + 79.5493961, + 11.6250078 + ], + [ + 79.4691959, + 11.6250078 + ], + [ + 79.4691959, + 11.5993852 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bponkishore", + "uid": "14062769", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T14:43:39Z", + "reviewed_features": [], + "create": 0, + "modify": 30, + "delete": 0, + "area": 0.00205493764451984, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 30, + "locale": "en", + "imagery": "osm" + }, + "id": 117205993 + } + }, + { + "id": 117205330, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.6076993, + 42.9602758 + ], + [ + 1.6095829, + 42.9602758 + ], + [ + 1.6095829, + 42.9649003 + ], + [ + 1.6076993, + 42.9649003 + ], + [ + 1.6076993, + 42.9602758 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "anticamfoix", + "uid": "15042359", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T14:29:58Z", + "reviewed_features": [], + "create": 2, + "modify": 5, + "delete": 0, + "area": 0.00000871070819999706, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 8, + "create": 2, + "locale": "fr", + "imagery": "osm" + }, + "id": 117205330 + } + }, + { + "id": 117205328, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.6095722, + 42.960264 + ], + [ + 1.6095722, + 42.960264 + ], + [ + 1.6095722, + 42.960264 + ], + [ + 1.6095722, + 42.960264 + ], + [ + 1.6095722, + 42.960264 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "anticamfoix", + "uid": "15042359", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T14:29:57Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 3, + "create": 1, + "locale": "fr", + "imagery": "osm" + }, + "id": 117205328 + } + }, + { + "id": 117205318, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.6095936, + 42.960264 + ], + [ + 1.6095936, + 42.960264 + ], + [ + 1.6095936, + 42.960264 + ], + [ + 1.6095936, + 42.960264 + ], + [ + 1.6095936, + 42.960264 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "anticamfoix", + "uid": "15042359", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T14:29:49Z", + "reviewed_features": [], + "create": 1, + "modify": 5, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 6, + "create": 1, + "locale": "en", + "imagery": "osm" + }, + "id": 117205318 + } + }, + { + "id": 117205291, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 1.6096097, + 42.960319 + ], + [ + 1.6096097, + 42.960319 + ], + [ + 1.6096097, + 42.960319 + ], + [ + 1.6096097, + 42.960319 + ], + [ + 1.6096097, + 42.960319 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Albin Gasparetto", + "uid": "1227542", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T14:29:14Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 3, + "create": 1, + "locale": "fr", + "imagery": "osm" + }, + "id": 117205291 + } + }, + { + "id": 117204967, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.2874715, + 51.6738011 + ], + [ + -1.2284376, + 51.6738011 + ], + [ + -1.2284376, + 51.7544391 + ], + [ + -1.2874715, + 51.7544391 + ], + [ + -1.2874715, + 51.6738011 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Mark Rogerson", + "uid": "14388354", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #climbing", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T14:22:29Z", + "reviewed_features": [], + "create": 0, + "modify": 7, + "delete": 0, + "area": 0.00476037562820004, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "climbing", + "answer": 13, + "locale": "en", + "imagery": "osm" + }, + "id": 117204967 + } + }, + { + "id": 117204832, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 79.4677036, + 11.6005636 + ], + [ + 79.4897943, + 11.6005636 + ], + [ + 79.4897943, + 11.6160654 + ], + [ + 79.4677036, + 11.6160654 + ], + [ + 79.4677036, + 11.6005636 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bponkishore", + "uid": "14062769", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T14:19:50Z", + "reviewed_features": [], + "create": 0, + "modify": 20, + "delete": 0, + "area": 0.000342445613260125, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 23, + "locale": "en", + "imagery": "osm" + }, + "id": 117204832 + } + }, + { + "id": 117204073, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.4032537, + 50.3472884 + ], + [ + 5.4045399, + 50.3472884 + ], + [ + 5.4045399, + 50.3475768 + ], + [ + 5.4032537, + 50.3475768 + ], + [ + 5.4032537, + 50.3472884 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "DNRvuP", + "uid": "15049065", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T14:02:05Z", + "reviewed_features": [], + "create": 2, + "modify": 0, + "delete": 0, + "area": 3.7094008000296e-7, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "benches", + "answer": 3, + "create": 2, + "locale": "en", + "imagery": "osm" + }, + "id": 117204073 + } + }, + { + "id": 117204046, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5382619, + 51.2226776 + ], + [ + 4.543658, + 51.2226776 + ], + [ + 4.543658, + 51.2243473 + ], + [ + 4.5382619, + 51.2243473 + ], + [ + 4.5382619, + 51.2226776 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 1, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T14:01:26Z", + "reviewed_features": [], + "create": 8, + "modify": 4, + "delete": 0, + "area": 0.00000900986817000346, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 8, + "create": 9, + "locale": "nl", + "imagery": "osm", + "add-image": 2 + }, + "id": 117204046 + } + }, + { + "id": 117203387, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.6076002, + 50.8489054 + ], + [ + 4.2658803, + 50.8489054 + ], + [ + 4.2658803, + 51.2340621 + ], + [ + 2.6076002, + 51.2340621 + ], + [ + 2.6076002, + 50.8489054 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T13:46:21Z", + "reviewed_features": [], + "create": 0, + "modify": 190, + "delete": 0, + "area": 0.638697690991675, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 276, + "locale": "nl", + "imagery": "osm" + }, + "id": 117203387 + } + }, + { + "id": 117201983, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.2450132, + -39.8149123 + ], + [ + -73.2450132, + -39.8149123 + ], + [ + -73.2450132, + -39.8149123 + ], + [ + -73.2450132, + -39.8149123 + ], + [ + -73.2450132, + -39.8149123 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T13:11:51Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "answer": 1, + "locale": "en", + "imagery": "cyclosm" + }, + "id": 117201983 + } + }, + { + "id": 117199538, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5184802, + 51.2308586 + ], + [ + 4.5209263, + 51.2308586 + ], + [ + 4.5209263, + 51.2317093 + ], + [ + 4.5184802, + 51.2317093 + ], + [ + 4.5184802, + 51.2308586 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-09T12:09:58Z", + "reviewed_features": [], + "create": 3, + "modify": 4, + "delete": 0, + "area": 0.00000208089727000232, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 4, + "create": 3, + "locale": "nl", + "imagery": "osm", + "add-image": 3, + "change_over_5000m": 3, + "change_within_50m": 3, + "change_within_100m": 4 + }, + "id": 117199538 + } + }, + { + "id": 117199461, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2410496, + 51.2064575 + ], + [ + 3.2410496, + 51.2064575 + ], + [ + 3.2410496, + 51.2064575 + ], + [ + 3.2410496, + 51.2064575 + ], + [ + 3.2410496, + 51.2064575 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/seppesantens/MapComplete-Themes/main/VerkeerdeBordenDatabank/VerkeerdeBordenDatabank.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-09T12:08:06Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/seppesantens/MapComplete-Themes/main/VerkeerdeBordenDatabank/VerkeerdeBordenDatabank.json", + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "change_within_5000m": 1 + }, + "id": 117199461 + } + }, + { + "id": 117196396, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.4247664, + 48.8339249 + ], + [ + 2.4450072, + 48.8339249 + ], + [ + 2.4450072, + 48.844914 + ], + [ + 2.4247664, + 48.844914 + ], + [ + 2.4247664, + 48.8339249 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "nicolas2b54", + "uid": "14828783", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #sidewalks", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T10:46:20Z", + "reviewed_features": [], + "create": 0, + "modify": 25, + "delete": 0, + "area": 0.000222428175280065, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "sidewalks", + "answer": 32, + "locale": "en", + "imagery": "osm" + }, + "id": 117196396 + } + }, + { + "id": 117195266, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5082381, + 51.2291205 + ], + [ + 4.5171927, + 51.2291205 + ], + [ + 4.5171927, + 51.2334895 + ], + [ + 4.5082381, + 51.2334895 + ], + [ + 4.5082381, + 51.2291205 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-09T10:19:40Z", + "reviewed_features": [], + "create": 7, + "modify": 6, + "delete": 0, + "area": 0.0000391226473999729, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 10, + "create": 7, + "locale": "nl", + "imagery": "osm", + "add-image": 3, + "change_over_5000m": 7, + "change_within_25m": 14, + "move:node/9492215009": "improve_accuracy" + }, + "id": 117195266 + } + }, + { + "id": 117195083, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.0949282, + 50.8748673 + ], + [ + 4.7823947, + 50.8748673 + ], + [ + 4.7823947, + 51.3817681 + ], + [ + 3.0949282, + 51.3817681 + ], + [ + 3.0949282, + 50.8748673 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T10:14:28Z", + "reviewed_features": [], + "create": 0, + "modify": 162, + "delete": 0, + "area": 0.855378118823207, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 217, + "locale": "nl", + "imagery": "osm" + }, + "id": 117195083 + } + }, + { + "id": 117194308, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.4918854, + 51.2255385 + ], + [ + 4.5492123, + 51.2255385 + ], + [ + 4.5492123, + 51.2386664 + ], + [ + 4.4918854, + 51.2386664 + ], + [ + 4.4918854, + 51.2255385 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Jori", + "uid": "14800690", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-09T09:56:41Z", + "reviewed_features": [], + "create": 13, + "modify": 19, + "delete": 0, + "area": 0.000752581810510032, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 8, + "create": 13, + "locale": "nl", + "imagery": "osm", + "add-image": 14, + "change_over_5000m": 13, + "change_within_25m": 18, + "change_within_50m": 4 + }, + "id": 117194308 + } + }, + { + "id": 117193831, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 7.4201187, + 46.9375204 + ], + [ + 7.4202203, + 46.9375204 + ], + [ + 7.4202203, + 46.9376317 + ], + [ + 7.4201187, + 46.9376317 + ], + [ + 7.4201187, + 46.9375204 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "habi", + "uid": "15671", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-09T09:46:54Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 1, + "area": 1.13080800001156e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "answer": 3, + "locale": "en", + "imagery": "osm", + "deletion": 1, + "change_within_25m": 3, + "change_within_100m": 1, + "deletion:node/6119665025": "disused" + }, + "id": 117193831 + } + }, + { + "id": 117191011, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.4892173, + 51.2306411 + ], + [ + 4.5089154, + 51.2306411 + ], + [ + 4.5089154, + 51.2359003 + ], + [ + 4.4892173, + 51.2359003 + ], + [ + 4.4892173, + 51.2306411 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-09T08:40:02Z", + "reviewed_features": [], + "create": 14, + "modify": 17, + "delete": 0, + "area": 0.000103596247519954, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 11, + "create": 14, + "locale": "nl", + "imagery": "osm", + "add-image": 13, + "change_over_5000m": 14, + "change_within_25m": 11, + "change_within_50m": 5, + "change_within_100m": 9, + "move:node/9491933424": "improve_accuracy" + }, + "id": 117191011 + } + }, + { + "id": 117189898, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3811197, + 50.8581346 + ], + [ + 4.3811197, + 50.8581346 + ], + [ + 4.3811197, + 50.8581346 + ], + [ + 4.3811197, + 50.8581346 + ], + [ + 4.3811197, + 50.8581346 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-09T08:09:38Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "locale": "en", + "imagery": "CartoDB.Voyager", + "add-image": 1 + }, + "id": 117189898 + } + }, + { + "id": 117187792, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 11.6762339, + 48.0042683 + ], + [ + 11.7130619, + 48.0042683 + ], + [ + 11.7130619, + 48.0164679 + ], + [ + 11.6762339, + 48.0164679 + ], + [ + 11.6762339, + 48.0042683 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.15.6", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-09T07:03:17Z", + "reviewed_features": [], + "create": 38, + "modify": 2, + "delete": 0, + "area": 0.000449286868800087, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "answer": 17, + "create": 38, + "locale": "de", + "imagery": "osm", + "change_over_5000m": 38, + "change_within_25m": 11, + "change_within_50m": 3, + "change_within_100m": 1, + "change_within_500m": 2 + }, + "id": 117187792 + } + }, + { + "id": 117180667, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.235783, + 51.2077624 + ], + [ + 3.2875082, + 51.2077624 + ], + [ + 3.2875082, + 51.2292894 + ], + [ + 3.235783, + 51.2292894 + ], + [ + 3.235783, + 51.2077624 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T23:54:47Z", + "reviewed_features": [], + "create": 0, + "modify": 8, + "delete": 0, + "area": 0.00111348838039994, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 9, + "locale": "nl", + "imagery": "osm" + }, + "id": 117180667 + } + }, + { + "id": 117178203, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.91318, + 54.544246 + ], + [ + -1.8428746, + 54.544246 + ], + [ + -1.8428746, + 54.5486976 + ], + [ + -1.91318, + 54.5486976 + ], + [ + -1.91318, + 54.544246 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T21:41:30Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000312971518639712, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "id": 117178203 + } + }, + { + "id": 117178055, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.8364815, + 51.1846906 + ], + [ + 4.8364815, + 51.1846906 + ], + [ + 4.8364815, + 51.1846906 + ], + [ + 4.8364815, + 51.1846906 + ], + [ + 4.8364815, + 51.1846906 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Frans_Napaters", + "uid": "3574538", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #charging_stations", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T21:35:34Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "charging_stations", + "answer": 1, + "create": 1, + "locale": "nl", + "imagery": "CartoDB.Voyager", + "change_over_5000m": 2 + }, + "id": 117178055 + } + }, + { + "id": 117175034, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5492029, + 50.9430976 + ], + [ + 4.5492029, + 50.9430976 + ], + [ + 4.5492029, + 50.9430976 + ], + [ + 4.5492029, + 50.9430976 + ], + [ + 4.5492029, + 50.9430976 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #waste_basket", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T19:47:02Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "waste_basket", + "answer": 1, + "locale": "en", + "imagery": "osm" + }, + "id": 117175034 + } + }, + { + "id": 117174875, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0039372, + 51.1292317 + ], + [ + 5.0039372, + 51.1292317 + ], + [ + 5.0039372, + 51.1292317 + ], + [ + 5.0039372, + 51.1292317 + ], + [ + 5.0039372, + 51.1292317 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T19:41:50Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 4, + "create": 1, + "locale": "en", + "imagery": "AGIV", + "add-image": 1 + }, + "id": 117174875 + } + }, + { + "id": 117174624, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5493613, + 50.9431886 + ], + [ + 5.0058976, + 50.9431886 + ], + [ + 5.0058976, + 51.1300524 + ], + [ + 4.5493613, + 51.1300524 + ], + [ + 4.5493613, + 50.9431886 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T19:32:47Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.0853101078559389, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "benches", + "answer": 1, + "locale": "en", + "imagery": "osm", + "add-image": 2 + }, + "id": 117174624 + } + }, + { + "id": 117174481, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.4207606, + 50.8464705 + ], + [ + 5.0101136, + 50.8464705 + ], + [ + 5.0101136, + 51.162952 + ], + [ + 4.4207606, + 51.162952 + ], + [ + 4.4207606, + 50.8464705 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 43, + "name": "Invalid key value combination" + } + ], + "tags": [], + "features": [ + { + "url": "node-9490613102", + "osm_id": 9490613102, + "reasons": [ + 43 + ], + "version": 2, + "primary_tags": { + "tourism": "map" + } + } + ], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #maps", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T19:28:28Z", + "reviewed_features": [], + "create": 3, + "modify": 1, + "delete": 0, + "area": 0.186519321469497, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "maps", + "create": 3, + "locale": "en", + "imagery": "osm", + "add-image": 3 + }, + "id": 117174481 + } + }, + { + "id": 117172449, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2157024, + 51.2154692 + ], + [ + 3.2157024, + 51.2154692 + ], + [ + 3.2157024, + 51.2154692 + ], + [ + 3.2157024, + 51.2154692 + ], + [ + 3.2157024, + 51.2154692 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T18:21:22Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 1, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "locale": "nl", + "imagery": "osm", + "deletion": 1, + "change_within_5000m": 1, + "deletion:node/9490464167": "testing point" + }, + "id": 117172449 + } + }, + { + "id": 117172287, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2157024, + 51.2154692 + ], + [ + 3.2157024, + 51.2154692 + ], + [ + 3.2157024, + 51.2154692 + ], + [ + 3.2157024, + 51.2154692 + ], + [ + 3.2157024, + 51.2154692 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "349499", + "uid": "7006347", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T18:15:43Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "create": 1, + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "change_over_5000m": 1, + "change_within_500m": 1 + }, + "id": 117172287 + } + }, + { + "id": 117172158, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3719104, + 50.8495035 + ], + [ + 4.3719104, + 50.8495035 + ], + [ + 4.3719104, + 50.8495035 + ], + [ + 4.3719104, + 50.8495035 + ], + [ + 4.3719104, + 50.8495035 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #cafes_and_pubs", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T18:12:20Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cafes_and_pubs", + "locale": "en", + "imagery": "osm", + "add-image": 2 + }, + "id": 117172158 + } + }, + { + "id": 117172020, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.394691, + 50.8541611 + ], + [ + 4.3947936, + 50.8541611 + ], + [ + 4.3947936, + 50.8542007 + ], + [ + 4.394691, + 50.8542007 + ], + [ + 4.394691, + 50.8541611 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T18:08:34Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 4.06296000009218e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "locale": "en", + "imagery": "CartoDB.Voyager", + "add-image": 1 + }, + "id": 117172020 + } + }, + { + "id": 117171205, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3580336, + 50.8448902 + ], + [ + 4.3581534, + 50.8448902 + ], + [ + 4.3581534, + 50.8449677 + ], + [ + 4.3580336, + 50.8449677 + ], + [ + 4.3580336, + 50.8448902 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #food", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T17:45:23Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 9.28449999955957e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "food", + "locale": "en", + "imagery": "osm", + "add-image": 2 + }, + "id": 117171205 + } + }, + { + "id": 117167781, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.5988831, + 50.8133359 + ], + [ + 5.1808282, + 50.8133359 + ], + [ + 5.1808282, + 51.3949055 + ], + [ + 2.5988831, + 51.3949055 + ], + [ + 2.5988831, + 50.8133359 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 4, + "name": "mass modification" + } + ], + "tags": [], + "features": [], + "user": "Rienux", + "uid": "11911273", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T16:12:42Z", + "reviewed_features": [], + "create": 0, + "modify": 439, + "delete": 0, + "area": 1.50158077902896, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 637, + "locale": "en", + "imagery": "osm" + }, + "id": 117167781 + } + }, + { + "id": 117164043, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9471519, + 51.162022 + ], + [ + 4.9990879, + 51.162022 + ], + [ + 4.9990879, + 51.1638621 + ], + [ + 4.9471519, + 51.1638621 + ], + [ + 4.9471519, + 51.162022 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T14:38:31Z", + "reviewed_features": [], + "create": 31, + "modify": 46, + "delete": 0, + "area": 0.000095567433600134, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 43, + "theme": "grb", + "answer": 2, + "import": 2, + "locale": "nl", + "imagery": "osm", + "conflation": 6 + }, + "id": 117164043 + } + }, + { + "id": 117162248, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.4814137, + 51.3948839 + ], + [ + 4.9855423, + 51.3948839 + ], + [ + 4.9855423, + 51.4207554 + ], + [ + 4.4814137, + 51.4207554 + ], + [ + 4.4814137, + 51.3948839 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T13:53:00Z", + "reviewed_features": [], + "create": 213, + "modify": 65, + "delete": 0, + "area": 0.0130425630748969, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 53, + "theme": "grb", + "import": 22, + "locale": "nl", + "imagery": "osm", + "conflation": 24, + "change_over_5000m": 13 + }, + "id": 117162248 + } + }, + { + "id": 117160589, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5083977, + 51.221038 + ], + [ + 4.5206085, + 51.221038 + ], + [ + 4.5206085, + 51.2258549 + ], + [ + 4.5083977, + 51.2258549 + ], + [ + 4.5083977, + 51.221038 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T13:09:12Z", + "reviewed_features": [], + "create": 7, + "modify": 10, + "delete": 1, + "area": 0.0000588182025200195, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 4, + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 6, + "create": 7, + "locale": "nl", + "imagery": "osm", + "deletion": 1, + "add-image": 6, + "change_over_5000m": 7, + "change_within_25m": 3, + "change_within_50m": 4, + "change_within_100m": 5, + "change_within_500m": 5, + "move:node/7980623376": "improve_accuracy", + "move:node/9489869914": "improve_accuracy", + "move:node/9489892866": "improve_accuracy", + "deletion:node/7980623376": "testing point" + }, + "id": 117160589 + } + }, + { + "id": 117159099, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.1885303, + 50.9183966 + ], + [ + 4.4603666, + 50.9183966 + ], + [ + 4.4603666, + 51.0180682 + ], + [ + 4.1885303, + 51.0180682 + ], + [ + 4.1885303, + 50.9183966 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + }, + { + "id": 42, + "name": "Invalid tag modification" + } + ], + "tags": [], + "features": [ + { + "url": "way-125921816", + "name": "Verkeerstuin 'Biesieklette'", + "osm_id": 125921816, + "reasons": [ + 42 + ], + "version": 7, + "primary_tags": {} + } + ], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T12:32:11Z", + "reviewed_features": [], + "create": 2, + "modify": 8, + "delete": 0, + "area": 0.0270943589590802, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 9, + "create": 2, + "locale": "nl", + "imagery": "CartoDB.Voyager", + "soft-delete": 1, + "soft-delete:way/125921816": "dit is geen speeltuin, maar een verkeerstuin waar kinderen verkeersregels leren" + }, + "id": 117159099 + } + }, + { + "id": 117151884, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5019772, + 51.2237098 + ], + [ + 4.5265355, + 51.2237098 + ], + [ + 4.5265355, + 51.2294389 + ], + [ + 4.5019772, + 51.2294389 + ], + [ + 4.5019772, + 51.2237098 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T09:35:59Z", + "reviewed_features": [], + "create": 23, + "modify": 21, + "delete": 0, + "area": 0.00014069695652991, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 2, + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 27, + "create": 23, + "locale": "nl", + "imagery": "osm", + "add-image": 17, + "change_over_5000m": 23, + "change_within_25m": 28, + "change_within_50m": 3, + "change_within_100m": 8, + "change_within_500m": 7, + "move:node/9489430949": "improve_accuracy", + "move:node/9489646032": "improve_accuracy" + }, + "id": 117151884 + } + }, + { + "id": 117151836, + "type": "Feature", + "geometry": null, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T09:34:40Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 0, + "area": null, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "change_within_25m": 1 + }, + "id": 117151836 + } + }, + { + "id": 117151819, + "type": "Feature", + "geometry": null, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T09:34:22Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 0, + "area": null, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 2, + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "change_within_25m": 3 + }, + "id": 117151819 + } + }, + { + "id": 117151752, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5110612, + 51.2254501 + ], + [ + 4.5110612, + 51.2254501 + ], + [ + 4.5110612, + 51.2254501 + ], + [ + 4.5110612, + 51.2254501 + ], + [ + 4.5110612, + 51.2254501 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T09:32:05Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 2, + "create": 1, + "locale": "nl", + "imagery": "osm", + "add-image": 2, + "change_over_5000m": 1, + "change_within_25m": 3, + "change_within_50m": 1 + }, + "id": 117151752 + } + }, + { + "id": 117150611, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5019129, + 51.2230856 + ], + [ + 4.5276289, + 51.2230856 + ], + [ + 4.5276289, + 51.2297074 + ], + [ + 4.5019129, + 51.2297074 + ], + [ + 4.5019129, + 51.2230856 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Jori", + "uid": "14800690", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T09:02:46Z", + "reviewed_features": [], + "create": 44, + "modify": 48, + "delete": 1, + "area": 0.000170286208800126, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 16, + "create": 44, + "locale": "nl", + "imagery": "osm", + "deletion": 1, + "add-image": 41, + "change_over_5000m": 44, + "change_within_25m": 58, + "deletion:node/9489217545": "testing point" + }, + "id": 117150611 + } + }, + { + "id": 117149982, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 7.8493904, + 47.9980541 + ], + [ + 7.8549796, + 47.9980541 + ], + [ + 7.8549796, + 48.0113066 + ], + [ + 7.8493904, + 48.0113066 + ], + [ + 7.8493904, + 47.9980541 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "kapiza", + "uid": "15040216", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cycle_infra", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-08T08:48:32Z", + "reviewed_features": [], + "create": 0, + "modify": 20, + "delete": 0, + "area": 0.000074070873000003, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cycle_infra", + "answer": 20, + "locale": "en", + "imagery": "EsriWorldImagery" + }, + "id": 117149982 + } + }, + { + "id": 117149573, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5111939, + 51.2251074 + ], + [ + 4.5213005, + 51.2251074 + ], + [ + 4.5213005, + 51.2272432 + ], + [ + 4.5111939, + 51.2272432 + ], + [ + 4.5111939, + 51.2251074 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T08:37:51Z", + "reviewed_features": [], + "create": 13, + "modify": 19, + "delete": 0, + "area": 0.0000215856762799765, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 4, + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 19, + "create": 13, + "locale": "nl", + "imagery": "osm", + "add-image": 10, + "change_over_5000m": 13, + "change_within_25m": 6, + "change_within_50m": 17, + "change_within_100m": 10, + "move:node/9489129510": "improve_accuracy", + "move:node/9489261714": "improve_accuracy", + "move:node/9489269562": "improve_accuracy", + "move:node/9489300240": "improve_accuracy" + }, + "id": 117149573 + } + }, + { + "id": 117149227, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9987267, + 51.127691 + ], + [ + 5.0089875, + 51.127691 + ], + [ + 5.0089875, + 51.1412877 + ], + [ + 4.9987267, + 51.1412877 + ], + [ + 4.9987267, + 51.127691 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T08:27:46Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 0.000139513019360011, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "benches", + "answer": 8, + "locale": "nl", + "imagery": "osm" + }, + "id": 117149227 + } + }, + { + "id": 117148021, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9865156, + 51.1237229 + ], + [ + 5.009369, + 51.1237229 + ], + [ + 5.009369, + 51.1687037 + ], + [ + 4.9865156, + 51.1687037 + ], + [ + 4.9865156, + 51.1237229 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T07:54:22Z", + "reviewed_features": [], + "create": 0, + "modify": 42, + "delete": 0, + "area": 0.00102796421472014, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 57, + "locale": "nl", + "imagery": "osm" + }, + "id": 117148021 + } + }, + { + "id": 117147804, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 11.7116444, + 47.9865243 + ], + [ + 11.7403541, + 47.9865243 + ], + [ + 11.7403541, + 47.9936529 + ], + [ + 11.7116444, + 47.9936529 + ], + [ + 11.7116444, + 47.9865243 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T07:48:32Z", + "reviewed_features": [], + "create": 15, + "modify": 4, + "delete": 0, + "area": 0.000204659967420032, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "answer": 14, + "create": 15, + "locale": "de", + "imagery": "osm", + "change_over_5000m": 15, + "change_within_25m": 7, + "change_within_50m": 3, + "change_within_100m": 3, + "change_within_500m": 1 + }, + "id": 117147804 + } + }, + { + "id": 117147589, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9994084, + 51.1216351 + ], + [ + 5.0220884, + 51.1216351 + ], + [ + 5.0220884, + 51.1500062 + ], + [ + 4.9994084, + 51.1500062 + ], + [ + 4.9994084, + 51.1216351 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #nature", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-08T07:42:57Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.000643456548000032, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "nature", + "answer": 2, + "locale": "nl", + "imagery": "osm", + "add-image": 2 + }, + "id": 117147589 + } + }, + { + "id": 117139657, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9890231, + 51.1645267 + ], + [ + 4.9906412, + 51.1645267 + ], + [ + 4.9906412, + 51.1650754 + ], + [ + 4.9890231, + 51.1650754 + ], + [ + 4.9890231, + 51.1645267 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-07T23:59:53Z", + "reviewed_features": [], + "create": 8, + "modify": 62, + "delete": 0, + "area": 8.8785146999344e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 55, + "theme": "grb", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "conflation": 12, + "change_within_500m": 1 + }, + "id": 117139657 + } + }, + { + "id": 117132736, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 6.1215835, + 46.2326336 + ], + [ + 6.1215835, + 46.2326336 + ], + [ + 6.1215835, + 46.2326336 + ], + [ + 6.1215835, + 46.2326336 + ], + [ + 6.1215835, + 46.2326336 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "dmx_valou", + "uid": "13908331", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-07T19:26:20Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 2, + "create": 1, + "locale": "fr", + "imagery": "osm" + }, + "id": 117132736 + } + }, + { + "id": 117127208, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9121683, + 51.0913603 + ], + [ + 5.0941013, + 51.0913603 + ], + [ + 5.0941013, + 51.2462495 + ], + [ + 4.9121683, + 51.2462495 + ], + [ + 4.9121683, + 51.0913603 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 4, + "name": "mass modification" + } + ], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-07T16:43:09Z", + "reviewed_features": [], + "create": 0, + "modify": 540, + "delete": 0, + "area": 0.0281794568235999, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 886, + "locale": "nl", + "imagery": "AGIV", + "change_over_5000m": 1, + "change_within_5000m": 54 + }, + "id": 117127208 + } + }, + { + "id": 117126820, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9281797, + 51.140005 + ], + [ + 4.9547198, + 51.140005 + ], + [ + 4.9547198, + 51.1467978 + ], + [ + 4.9281797, + 51.1467978 + ], + [ + 4.9281797, + 51.140005 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-07T16:33:09Z", + "reviewed_features": [], + "create": 0, + "modify": 44, + "delete": 0, + "area": 0.000180281591279987, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 59, + "locale": "nl", + "imagery": "AGIV" + }, + "id": 117126820 + } + }, + { + "id": 117125624, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 37.661374, + 55.7706285 + ], + [ + 37.6615548, + 55.7706285 + ], + [ + 37.6615548, + 55.7707726 + ], + [ + 37.661374, + 55.7707726 + ], + [ + 37.661374, + 55.7706285 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "trolleway", + "uid": "397326", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #entrances", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-07T15:59:49Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 2.60532799993378e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "entrances", + "answer": 4, + "locale": "en", + "imagery": "osm", + "change_within_5000m": 4 + }, + "id": 117125624 + } + }, + { + "id": 117125249, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 34.7990064, + 50.8962661 + ], + [ + 34.7990064, + 50.8962661 + ], + [ + 34.7990064, + 50.8962661 + ], + [ + 34.7990064, + 50.8962661 + ], + [ + 34.7990064, + 50.8962661 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 43, + "name": "Invalid key value combination" + } + ], + "tags": [], + "features": [ + { + "url": "node-9487156863", + "osm_id": 9487156863, + "reasons": [ + 43 + ], + "version": 1, + "primary_tags": { + "tourism": "map" + } + } + ], + "user": "mike140", + "uid": "2471547", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #maps", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-07T15:48:01Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "maps", + "create": 1, + "locale": "ru", + "imagery": "osm" + }, + "id": 117125249 + } + }, + { + "id": 117124054, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0068996, + 51.1067639 + ], + [ + 5.1018922, + 51.1067639 + ], + [ + 5.1018922, + 51.1306956 + ], + [ + 5.0068996, + 51.1306956 + ], + [ + 5.0068996, + 51.1067639 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-07T15:14:19Z", + "reviewed_features": [], + "create": 0, + "modify": 16, + "delete": 0, + "area": 0.00227333440542055, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 22, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 12, + "change_within_5000m": 10 + }, + "id": 117124054 + } + }, + { + "id": 117122175, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.2965395, + 50.696603 + ], + [ + -1.2955724, + 50.696603 + ], + [ + -1.2955724, + 50.6981279 + ], + [ + -1.2965395, + 50.6981279 + ], + [ + -1.2965395, + 50.696603 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "CjMalone", + "uid": "6816132", + "editor": "MapComplete 0.15.5", + "comment": "Adding data with #MapComplete for theme #uk_addresses", + "comments_count": 2, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-07T14:25:59Z", + "reviewed_features": [], + "create": 11, + "modify": 8, + "delete": 0, + "area": 0.00000147473078999973, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "uk_addresses", + "answer": 16, + "import": 11, + "locale": "en", + "imagery": "osm" + }, + "id": 117122175 + } + }, + { + "id": 117120640, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3912317, + 50.8534512 + ], + [ + 4.3947936, + 50.8534512 + ], + [ + 4.3947936, + 50.8542007 + ], + [ + 4.3912317, + 50.8542007 + ], + [ + 4.3912317, + 50.8534512 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-07T13:47:34Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.00000266964404999211, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 1, + "locale": "en", + "imagery": "CartoDB.Voyager", + "add-image": 2 + }, + "id": 117120640 + } + }, + { + "id": 117120081, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9978845, + 51.1171758 + ], + [ + 5.0452177, + 51.1171758 + ], + [ + 5.0452177, + 51.1941443 + ], + [ + 4.9978845, + 51.1941443 + ], + [ + 4.9978845, + 51.1171758 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-07T13:35:32Z", + "reviewed_features": [], + "create": 0, + "modify": 29, + "delete": 0, + "area": 0.00364316540420003, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 39, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 13, + "change_within_5000m": 26 + }, + "id": 117120081 + } + }, + { + "id": 117118217, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0033394, + 51.1249236 + ], + [ + 5.0114777, + 51.1249236 + ], + [ + 5.0114777, + 51.1307655 + ], + [ + 5.0033394, + 51.1307655 + ], + [ + 5.0033394, + 51.1249236 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-07T12:48:13Z", + "reviewed_features": [], + "create": 0, + "modify": 14, + "delete": 0, + "area": 0.000047543134770004, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "benches", + "answer": 20, + "locale": "nl", + "imagery": "osm", + "change_within_500m": 20 + }, + "id": 117118217 + } + }, + { + "id": 117107587, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 16.5751174, + 49.2333062 + ], + [ + 16.5751174, + 49.2333062 + ], + [ + 16.5751174, + 49.2333062 + ], + [ + 16.5751174, + 49.2333062 + ], + [ + 16.5751174, + 49.2333062 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Jakuje", + "uid": "1641564", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-07T08:23:47Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "id": 117107587 + } + }, + { + "id": 117106705, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 11.8003403, + 48.0193367 + ], + [ + 11.8389179, + 48.0193367 + ], + [ + 11.8389179, + 48.0292086 + ], + [ + 11.8003403, + 48.0292086 + ], + [ + 11.8003403, + 48.0193367 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-07T08:00:15Z", + "reviewed_features": [], + "create": 13, + "modify": 0, + "delete": 0, + "area": 0.00038083420944001, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "answer": 7, + "create": 13, + "locale": "de", + "imagery": "osm", + "change_over_5000m": 13, + "change_within_25m": 4, + "change_within_50m": 2, + "change_within_100m": 1 + }, + "id": 117106705 + } + }, + { + "id": 117098329, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.1836149, + 50.4649387 + ], + [ + 4.3373278, + 50.4649387 + ], + [ + 4.3373278, + 50.6062737 + ], + [ + 4.1836149, + 50.6062737 + ], + [ + 4.1836149, + 50.4649387 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jas7100", + "uid": "15023699", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-07T00:01:17Z", + "reviewed_features": [], + "create": 7, + "modify": 2, + "delete": 0, + "area": 0.0217250127215007, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 16, + "create": 7, + "locale": "fr", + "imagery": "SPW_ORTHO_LAST", + "change_over_5000m": 8, + "change_within_5000m": 9 + }, + "id": 117098329 + } + }, + { + "id": 117092571, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.8060962, + 51.1712021 + ], + [ + 4.8093933, + 51.1712021 + ], + [ + 4.8093933, + 51.1720265 + ], + [ + 4.8060962, + 51.1720265 + ], + [ + 4.8060962, + 51.1712021 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T19:50:32Z", + "reviewed_features": [], + "create": 9, + "modify": 10, + "delete": 1, + "area": 0.00000271812923999703, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 7, + "theme": "grb", + "answer": 1, + "delete": 1, + "locale": "nl", + "imagery": "osm", + "conflation": 4 + }, + "id": 117092571 + } + }, + { + "id": 117092124, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -3.6089637, + 37.1800358 + ], + [ + -3.6075618, + 37.1800358 + ], + [ + -3.6075618, + 37.1811233 + ], + [ + -3.6089637, + 37.1811233 + ], + [ + -3.6089637, + 37.1800358 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pipeton", + "uid": "11969052", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-06T19:33:01Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0.00000152456625000562, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "id": 117092124 + } + }, + { + "id": 117086537, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2503706, + 51.2378383 + ], + [ + 3.2504109, + 51.2378383 + ], + [ + 3.2504109, + 51.2379122 + ], + [ + 3.2503706, + 51.2379122 + ], + [ + 3.2503706, + 51.2378383 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-06T16:44:00Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 2.97816999985172e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "benches", + "answer": 1, + "create": 1, + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "move:node/9483811766": "improve_accuracy" + }, + "id": 117086537 + } + }, + { + "id": 117083441, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.953632, + 51.1447716 + ], + [ + 5.0131495, + 51.1447716 + ], + [ + 5.0131495, + 51.2367644 + ], + [ + 4.953632, + 51.2367644 + ], + [ + 4.953632, + 51.1447716 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T15:31:08Z", + "reviewed_features": [], + "create": 0, + "modify": 82, + "delete": 0, + "area": 0.005475181474, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 122, + "locale": "nl", + "imagery": "osm" + }, + "id": 117083441 + } + }, + { + "id": 117076107, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9841892, + 51.1564028 + ], + [ + 5.0029191, + 51.1564028 + ], + [ + 5.0029191, + 51.1724997 + ], + [ + 4.9841892, + 51.1724997 + ], + [ + 4.9841892, + 51.1564028 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T11:47:44Z", + "reviewed_features": [], + "create": 0, + "modify": 38, + "delete": 0, + "area": 0.000301493327310007, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 45, + "locale": "nl", + "imagery": "osm" + }, + "id": 117076107 + } + }, + { + "id": 117075258, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3069129, + 50.8342321 + ], + [ + 4.3069424, + 50.8342321 + ], + [ + 4.3069424, + 50.8342381 + ], + [ + 4.3069129, + 50.8342381 + ], + [ + 4.3069129, + 50.8342321 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Driesvr", + "uid": "4757701", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-06T11:23:13Z", + "reviewed_features": [], + "create": 1, + "modify": 5, + "delete": 0, + "area": 1.76999999967769e-10, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "cyclofix", + "answer": 6, + "create": 1, + "locale": "en", + "imagery": "CartoDB.Voyager", + "add-image": 1, + "move:node/9483033353": "improve_accuracy" + }, + "id": 117075258 + } + }, + { + "id": 117074726, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 12.6863261, + 51.0507916 + ], + [ + 12.7014004, + 51.0507916 + ], + [ + 12.7014004, + 51.1010766 + ], + [ + 12.6863261, + 51.1010766 + ], + [ + 12.6863261, + 51.0507916 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "shogun", + "uid": "94315", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-06T11:03:46Z", + "reviewed_features": [], + "create": 0, + "modify": 10, + "delete": 0, + "area": 0.000758011175500046, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "hailhydrant", + "answer": 11, + "locale": "en", + "imagery": "HDM_HOT" + }, + "id": 117074726 + } + }, + { + "id": 117074470, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.7388952, + 50.8125013 + ], + [ + 3.7390105, + 50.8125013 + ], + [ + 3.7390105, + 50.8125757 + ], + [ + 3.7388952, + 50.8125757 + ], + [ + 3.7388952, + 50.8125013 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "kbentekik", + "uid": "4495", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #observation_towers", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T10:56:40Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 8.57831999948163e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "observation_towers", + "answer": 3, + "locale": "nl", + "imagery": "osm" + }, + "id": 117074470 + } + }, + { + "id": 117073294, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.559801, + 50.8492121 + ], + [ + 3.560135, + 50.8492121 + ], + [ + 3.560135, + 50.8493446 + ], + [ + 3.559801, + 50.8493446 + ], + [ + 3.559801, + 50.8492121 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "kbentekik", + "uid": "4495", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T10:23:06Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 4.42549999997565e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "playgrounds", + "answer": 2, + "locale": "nl", + "imagery": "osm" + }, + "id": 117073294 + } + }, + { + "id": 117073072, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.624339, + 50.8703127 + ], + [ + 3.624339, + 50.8703127 + ], + [ + 3.624339, + 50.8703127 + ], + [ + 3.624339, + 50.8703127 + ], + [ + 3.624339, + 50.8703127 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "kbentekik", + "uid": "4495", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #fritures", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T10:15:47Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "fritures", + "answer": 6, + "locale": "nl", + "imagery": "osm" + }, + "id": 117073072 + } + }, + { + "id": 117072973, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.6139307, + 50.8442875 + ], + [ + 3.6158797, + 50.8442875 + ], + [ + 3.6158797, + 50.8464318 + ], + [ + 3.6139307, + 50.8464318 + ], + [ + 3.6139307, + 50.8442875 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "kbentekik", + "uid": "4495", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #sport_pitches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T10:11:50Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0.00000417924069999491, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "sport_pitches", + "answer": 4, + "locale": "en", + "imagery": "osm" + }, + "id": 117072973 + } + }, + { + "id": 117072647, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.5877942, + 50.7352587 + ], + [ + 3.5877942, + 50.7352587 + ], + [ + 3.5877942, + 50.7352587 + ], + [ + 3.5877942, + 50.7352587 + ], + [ + 3.5877942, + 50.7352587 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "kbentekik", + "uid": "4495", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #climbing", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T10:00:32Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "climbing", + "answer": 5, + "locale": "en", + "imagery": "osm" + }, + "id": 117072647 + } + }, + { + "id": 117072390, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.6012411, + 50.8671691 + ], + [ + 3.6012411, + 50.8671691 + ], + [ + 3.6012411, + 50.8671691 + ], + [ + 3.6012411, + 50.8671691 + ], + [ + 3.6012411, + 50.8671691 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "kbentekik", + "uid": "4495", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 3, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T09:52:03Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 4, + "create": 1, + "locale": "en", + "imagery": "osm" + }, + "id": 117072390 + } + }, + { + "id": 117071913, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2344225, + 50.7377153 + ], + [ + 4.2344225, + 50.7377153 + ], + [ + 4.2344225, + 50.7377153 + ], + [ + 4.2344225, + 50.7377153 + ], + [ + 4.2344225, + 50.7377153 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T09:34:32Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 3, + "create": 1, + "locale": "nl", + "imagery": "AGIVFlandersGRB" + }, + "id": 117071913 + } + }, + { + "id": 117071461, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.5667178, + 50.7950119 + ], + [ + 3.6347119, + 50.7950119 + ], + [ + 3.6347119, + 50.8766053 + ], + [ + 3.5667178, + 50.8766053 + ], + [ + 3.5667178, + 50.7950119 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "kbentekik", + "uid": "4495", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T09:19:50Z", + "reviewed_features": [], + "create": 1, + "modify": 25, + "delete": 0, + "area": 0.00554786979894018, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 33, + "create": 1, + "locale": "en", + "imagery": "CartoDB.Voyager", + "change_over_5000m": 2, + "change_within_5000m": 18 + }, + "id": 117071461 + } + }, + { + "id": 117070044, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 13.0488154, + 52.3830947 + ], + [ + 13.0488154, + 52.3830947 + ], + [ + 13.0488154, + 52.3830947 + ], + [ + 13.0488154, + 52.3830947 + ], + [ + 13.0488154, + 52.3830947 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "hfs", + "uid": "9607", + "editor": "MapComplete 0.7.2l", + "comment": "Adding data with #MapComplete for theme #waldbrand", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-06T08:19:24Z", + "reviewed_features": [], + "create": 1, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "waldbrand-app.de", + "theme": "waldbrand", + "imagery": "osm", + "language": "de", + "theme-creator": "Sebastian Kürten" + }, + "id": 117070044 + } + }, + { + "id": 117067048, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 6.6332142, + 49.7415027 + ], + [ + 6.6418992, + 49.7415027 + ], + [ + 6.6418992, + 49.7473637 + ], + [ + 6.6332142, + 49.7473637 + ], + [ + 6.6332142, + 49.7415027 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "oudalricus", + "uid": "29752", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #bookcases", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T04:49:30Z", + "reviewed_features": [], + "create": 2, + "modify": 2, + "delete": 0, + "area": 0.0000509027850000251, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "bookcases", + "answer": 5, + "create": 2, + "locale": "en", + "imagery": "osm", + "change_over_5000m": 2, + "change_within_500m": 3, + "change_within_5000m": 2 + }, + "id": 117067048 + } + }, + { + "id": 117066501, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -70.5763384, + -33.5892201 + ], + [ + -70.5761209, + -33.5892201 + ], + [ + -70.5761209, + -33.5891396 + ], + [ + -70.5763384, + -33.5891396 + ], + [ + -70.5763384, + -33.5892201 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-06T03:36:36Z", + "reviewed_features": [], + "create": 1, + "modify": 3, + "delete": 0, + "area": 1.75087499983324e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "answer": 1, + "create": 1, + "locale": "en", + "imagery": "EsriWorldImagery", + "add-image": 3, + "change_over_5000m": 1, + "change_within_1000m": 4 + }, + "id": 117066501 + } + }, + { + "id": 117065334, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3293576, + 50.9330894 + ], + [ + 4.3293576, + 50.9330894 + ], + [ + 4.3293576, + 50.9330894 + ], + [ + 4.3293576, + 50.9330894 + ], + [ + 4.3293576, + 50.9330894 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-06T01:28:05Z", + "reviewed_features": [], + "create": 1, + "modify": 4, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 4, + "create": 1, + "locale": "en", + "imagery": "osm", + "add-image": 1 + }, + "id": 117065334 + } + }, + { + "id": 117065156, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3297518, + 50.9331187 + ], + [ + 4.3310669, + 50.9331187 + ], + [ + 4.3310669, + 50.9337452 + ], + [ + 4.3297518, + 50.9337452 + ], + [ + 4.3297518, + 50.9331187 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclestreets", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-06T01:11:22Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 8.23910149993863e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclestreets", + "locale": "en", + "imagery": "osm", + "add-image": 2 + }, + "id": 117065156 + } + }, + { + "id": 117063791, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.0774627, + 51.0005565 + ], + [ + 5.3340983, + 51.0005565 + ], + [ + 5.3340983, + 51.0130005 + ], + [ + 4.0774627, + 51.0130005 + ], + [ + 4.0774627, + 51.0005565 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-05T23:19:52Z", + "reviewed_features": [], + "create": 87, + "modify": 99, + "delete": 0, + "area": 0.0156375734063937, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 87, + "theme": "grb", + "answer": 3, + "import": 14, + "locale": "nl", + "imagery": "osm", + "conflation": 20, + "change_over_5000m": 14 + }, + "id": 117063791 + } + }, + { + "id": 117062931, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.9490609, + 51.2236122 + ], + [ + 2.9496488, + 51.2236122 + ], + [ + 2.9496488, + 51.2241226 + ], + [ + 2.9490609, + 51.2241226 + ], + [ + 2.9490609, + 51.2236122 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-05T22:31:34Z", + "reviewed_features": [], + "create": 12, + "modify": 40, + "delete": 0, + "area": 3.00064160001714e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 38, + "theme": "grb", + "locale": "nl", + "imagery": "osm", + "conflation": 4 + }, + "id": 117062931 + } + }, + { + "id": 117062564, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.4708848, + 51.0389621 + ], + [ + 4.4766978, + 51.0389621 + ], + [ + 4.4766978, + 51.0439392 + ], + [ + 4.4708848, + 51.0439392 + ], + [ + 4.4708848, + 51.0389621 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-05T22:12:29Z", + "reviewed_features": [], + "create": 0, + "modify": 32, + "delete": 0, + "area": 0.0000289318822999867, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "etymology", + "answer": 33, + "locale": "nl", + "imagery": "osm" + }, + "id": 117062564 + } + }, + { + "id": 117061161, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.6995421, + 50.9461506 + ], + [ + 4.7022597, + 50.9461506 + ], + [ + 4.7022597, + 50.9475972 + ], + [ + 4.6995421, + 50.9475972 + ], + [ + 4.6995421, + 50.9461506 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclestreets", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-05T21:07:17Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0.00000393128015998355, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclestreets", + "locale": "en", + "imagery": "osm", + "add-image": 1 + }, + "id": 117061161 + } + }, + { + "id": 117061124, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3505589, + 50.8534436 + ], + [ + 4.3505589, + 50.8534436 + ], + [ + 4.3505589, + 50.8534436 + ], + [ + 4.3505589, + 50.8534436 + ], + [ + 4.3505589, + 50.8534436 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #bicycle_rental", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-05T21:05:37Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "bicycle_rental", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "id": 117061124 + } + }, + { + "id": 117060916, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3848027, + 50.8537825 + ], + [ + 4.3848027, + 50.8537825 + ], + [ + 4.3848027, + 50.8537825 + ], + [ + 4.3848027, + 50.8537825 + ], + [ + 4.3848027, + 50.8537825 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-05T20:57:19Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "locale": "en", + "imagery": "CartoDB.Voyager", + "add-image": 1 + }, + "id": 117060916 + } + }, + { + "id": 117060144, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2003085, + 50.4646397 + ], + [ + 4.232723, + 50.4646397 + ], + [ + 4.232723, + 50.5009176 + ], + [ + 4.2003085, + 50.5009176 + ], + [ + 4.2003085, + 50.4646397 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jas7100", + "uid": "15023699", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #surveillance", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-05T20:30:50Z", + "reviewed_features": [], + "create": 3, + "modify": 0, + "delete": 0, + "area": 0.00117592998955005, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "surveillance", + "answer": 7, + "create": 3, + "locale": "fr", + "imagery": "osm" + }, + "id": 117060144 + } + }, + { + "id": 117057746, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -3.6082716, + 37.1758055 + ], + [ + -3.5975352, + 37.1758055 + ], + [ + -3.5975352, + 37.1931918 + ], + [ + -3.6082716, + 37.1931918 + ], + [ + -3.6082716, + 37.1758055 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pipeton", + "uid": "11969052", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-05T19:14:33Z", + "reviewed_features": [], + "create": 0, + "modify": 13, + "delete": 0, + "area": 0.000186666271319987, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 18, + "locale": "en", + "imagery": "osm" + }, + "id": 117057746 + } + }, + { + "id": 117055064, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -70.6200119, + -33.4152875 + ], + [ + -70.6199099, + -33.4152875 + ], + [ + -70.6199099, + -33.415181 + ], + [ + -70.6200119, + -33.415181 + ], + [ + -70.6200119, + -33.4152875 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Awo", + "uid": "196556", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-05T17:50:08Z", + "reviewed_features": [], + "create": 2, + "modify": 4, + "delete": 0, + "area": 1.086299999993e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "answer": 2, + "create": 2, + "locale": "en", + "imagery": "EsriWorldImagery", + "add-image": 2, + "change_over_5000m": 2, + "change_within_25m": 4 + }, + "id": 117055064 + } + }, + { + "id": 117047039, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.6993572, + 51.0548482 + ], + [ + 3.6993572, + 51.0548482 + ], + [ + 3.6993572, + 51.0548482 + ], + [ + 3.6993572, + 51.0548482 + ], + [ + 3.6993572, + 51.0548482 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #climbing", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-05T14:28:52Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "climbing", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "change_within_50m": 1 + }, + "id": 117047039 + } + }, + { + "id": 117046304, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.4279919, + 50.8954137 + ], + [ + 3.4279919, + 50.8954137 + ], + [ + 3.4279919, + 50.8954137 + ], + [ + 3.4279919, + 50.8954137 + ], + [ + 3.4279919, + 50.8954137 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-05T14:11:48Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 2, + "locale": "en", + "imagery": "CartoDB.Voyager" + }, + "id": 117046304 + } + }, + { + "id": 117042748, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -3.6226222, + 37.1764844 + ], + [ + -3.597922, + 37.1764844 + ], + [ + -3.597922, + 37.2098153 + ], + [ + -3.6226222, + 37.2098153 + ], + [ + -3.6226222, + 37.1764844 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pipeton", + "uid": "11969052", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-05T12:28:57Z", + "reviewed_features": [], + "create": 0, + "modify": 34, + "delete": 0, + "area": 0.000823279896180065, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 49, + "locale": "en", + "imagery": "osm" + }, + "id": 117042748 + } + }, + { + "id": 117038736, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5032707, + 50.8839614 + ], + [ + 4.5082809, + 50.8839614 + ], + [ + 4.5082809, + 50.8843848 + ], + [ + 4.5032707, + 50.8843848 + ], + [ + 4.5032707, + 50.8839614 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thierry1030", + "uid": "286563", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclestreets", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-05T10:30:35Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0.00000212131868001264, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclestreets", + "locale": "en", + "imagery": "osm", + "add-image": 1 + }, + "id": 117038736 + } + }, + { + "id": 117026389, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -0.4804213, + 38.3552983 + ], + [ + -0.0276139, + 38.3552983 + ], + [ + -0.0276139, + 39.983386 + ], + [ + -0.4804213, + 39.983386 + ], + [ + -0.4804213, + 38.3552983 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Jordi MF", + "uid": "8278438", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/yopaseopor/mcquests/master/nameca.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T23:08:30Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 0.737210158408981, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/yopaseopor/mcquests/master/nameca.json", + "answer": 3, + "locale": "ca", + "imagery": "osm" + }, + "id": 117026389 + } + }, + { + "id": 117024588, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.7458396, + 54.5353513 + ], + [ + -1.4974843, + 54.5353513 + ], + [ + -1.4974843, + 54.6969542 + ], + [ + -1.7458396, + 54.6969542 + ], + [ + -1.7458396, + 54.5353513 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T22:22:16Z", + "reviewed_features": [], + "create": 0, + "modify": 90, + "delete": 0, + "area": 0.0401349367103696, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 132, + "locale": "en", + "imagery": "osm" + }, + "id": 117024588 + } + }, + { + "id": 117024181, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.9586471, + 40.7358133 + ], + [ + -73.9586471, + 40.7358133 + ], + [ + -73.9586471, + 40.7358133 + ], + [ + -73.9586471, + 40.7358133 + ], + [ + -73.9586471, + 40.7358133 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Stereo", + "uid": "40611", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T22:09:40Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 1, + "locale": "en", + "imagery": "CartoDB.Voyager" + }, + "id": 117024181 + } + }, + { + "id": 117020965, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.7001051, + 51.0525401 + ], + [ + 3.7001051, + 51.0525401 + ], + [ + 3.7001051, + 51.0525401 + ], + [ + 3.7001051, + 51.0525401 + ], + [ + 3.7001051, + 51.0525401 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #fritures", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-04T20:14:36Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "fritures", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "change_within_25m": 1 + }, + "id": 117020965 + } + }, + { + "id": 117020021, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.5228447, + 54.7322004 + ], + [ + -1.317749, + 54.7322004 + ], + [ + -1.317749, + 54.8476547 + ], + [ + -1.5228447, + 54.8476547 + ], + [ + -1.5228447, + 54.7322004 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T19:40:45Z", + "reviewed_features": [], + "create": 0, + "modify": 116, + "delete": 0, + "area": 0.0236791804765092, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 165, + "locale": "en", + "imagery": "osm" + }, + "id": 117020021 + } + }, + { + "id": 117015486, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.8340356, + 54.8719747 + ], + [ + -1.3873431, + 54.8719747 + ], + [ + -1.3873431, + 55.0062506 + ], + [ + -1.8340356, + 55.0062506 + ], + [ + -1.8340356, + 54.8719747 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T17:22:57Z", + "reviewed_features": [], + "create": 0, + "modify": 142, + "delete": 0, + "area": 0.0599800374607494, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 218, + "locale": "en", + "imagery": "osm" + }, + "id": 117015486 + } + }, + { + "id": 117011429, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 11.8755227, + 47.9883074 + ], + [ + 11.8755227, + 47.9883074 + ], + [ + 11.8755227, + 47.9883074 + ], + [ + 11.8755227, + 47.9883074 + ], + [ + 11.8755227, + 47.9883074 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-04T15:35:16Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "answer": 1, + "create": 1, + "locale": "de", + "imagery": "osm", + "change_over_5000m": 1, + "change_within_100m": 1 + }, + "id": 117011429 + } + }, + { + "id": 117011189, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -3.6185387, + 37.1687518 + ], + [ + -3.5963848, + 37.1687518 + ], + [ + -3.5963848, + 37.1842364 + ], + [ + -3.6185387, + 37.1842364 + ], + [ + -3.6185387, + 37.1687518 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pipeton", + "uid": "11969052", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T15:28:35Z", + "reviewed_features": [], + "create": 0, + "modify": 51, + "delete": 0, + "area": 0.000343044279940017, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 69, + "locale": "en", + "imagery": "osm" + }, + "id": 117011189 + } + }, + { + "id": 117009200, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5144967, + 51.2274513 + ], + [ + 4.5144967, + 51.2274513 + ], + [ + 4.5144967, + 51.2274513 + ], + [ + 4.5144967, + 51.2274513 + ], + [ + 4.5144967, + 51.2274513 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T14:32:33Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 1, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "locale": "nl", + "imagery": "osm", + "deletion": 1, + "deletion:node/8264901851": "not found" + }, + "id": 117009200 + } + }, + { + "id": 117007591, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -58.4142745, + -34.60851 + ], + [ + -58.4142745, + -34.60851 + ], + [ + -58.4142745, + -34.60851 + ], + [ + -58.4142745, + -34.60851 + ], + [ + -58.4142745, + -34.60851 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "AgusQui", + "uid": "331218", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/AgusQui/MapCompleteRailway/main/Signals", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-04T13:49:01Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/AgusQui/MapCompleteRailway/main/Signals", + "answer": 5, + "create": 1, + "locale": "es", + "imagery": "EsriWorldImageryClarity", + "change_over_5000m": 1, + "change_within_100m": 5 + }, + "id": 117007591 + } + }, + { + "id": 117003771, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.4143578, + 50.8202931 + ], + [ + 4.4143588, + 50.8202931 + ], + [ + 4.4143588, + 50.8202941 + ], + [ + 4.4143578, + 50.8202941 + ], + [ + 4.4143578, + 50.8202931 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "StefDeGreef", + "uid": "1860737", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-04T11:58:30Z", + "reviewed_features": [], + "create": 2, + "modify": 4, + "delete": 1, + "area": 9.99999996726842e-13, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 7, + "create": 2, + "locale": "fr", + "imagery": "AGIV", + "deletion": 1, + "add-image": 2, + "change_over_5000m": 2, + "change_within_25m": 10, + "deletion:node/9474148329": "mauvaise catégorie" + }, + "id": 117003771 + } + }, + { + "id": 117000670, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2373959, + 51.078721 + ], + [ + 3.4913433, + 51.078721 + ], + [ + 3.4913433, + 51.1885224 + ], + [ + 3.2373959, + 51.1885224 + ], + [ + 3.2373959, + 51.078721 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "L'imaginaire", + "uid": "654234", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T10:50:55Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 0.0278837800463587, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "benches", + "locale": "nl", + "imagery": "osm", + "add-image": 5, + "change_within_5000m": 1 + }, + "id": 117000670 + } + }, + { + "id": 116999217, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9999913, + 50.9139913 + ], + [ + 5.00031, + 50.9139913 + ], + [ + 5.00031, + 50.9142456 + ], + [ + 4.9999913, + 50.9142456 + ], + [ + 4.9999913, + 50.9139913 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Stinus_Clasius", + "uid": "1086503", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T10:18:16Z", + "reviewed_features": [], + "create": 21, + "modify": 0, + "delete": 0, + "area": 8.10454100006014e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 1, + "locale": "nl", + "imagery": "osm" + }, + "id": 116999217 + } + }, + { + "id": 116999189, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -0.047145, + 51.4930966 + ], + [ + -0.0466357, + 51.4930966 + ], + [ + -0.0466357, + 51.49325 + ], + [ + -0.047145, + 51.49325 + ], + [ + -0.047145, + 51.4930966 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "quantumstate", + "uid": "71337", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #sidewalks", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T10:17:42Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 7.81266200010587e-8, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "sidewalks", + "answer": 3, + "locale": "en", + "imagery": "osm" + }, + "id": 116999189 + } + }, + { + "id": 116992786, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 11.8102665, + 48.019413 + ], + [ + 11.8116868, + 48.019413 + ], + [ + 11.8116868, + 48.0219524 + ], + [ + 11.8102665, + 48.0219524 + ], + [ + 11.8102665, + 48.019413 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-04T07:25:27Z", + "reviewed_features": [], + "create": 7, + "modify": 0, + "delete": 0, + "area": 0.00000360670982000805, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "answer": 3, + "create": 7, + "locale": "de", + "imagery": "osm", + "change_over_5000m": 7, + "change_within_25m": 2, + "change_within_50m": 1 + }, + "id": 116992786 + } + }, + { + "id": 116992590, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 10.7639762, + 49.6278908 + ], + [ + 10.7686397, + 49.6278908 + ], + [ + 10.7686397, + 49.6324979 + ], + [ + 10.7639762, + 49.6324979 + ], + [ + 10.7639762, + 49.6278908 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "womped", + "uid": "1880469", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #openwindpowermap", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-04T07:18:58Z", + "reviewed_features": [], + "create": 0, + "modify": 5, + "delete": 0, + "area": 0.0000214852108499701, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "openwindpowermap", + "answer": 5, + "locale": "en", + "imagery": "CartoDB.Voyager" + }, + "id": 116992590 + } + }, + { + "id": 116985905, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2006452, + 51.2102969 + ], + [ + 3.2243449, + 51.2102969 + ], + [ + 3.2243449, + 51.2496012 + ], + [ + 3.2006452, + 51.2496012 + ], + [ + 3.2006452, + 51.2102969 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-04T01:31:08Z", + "reviewed_features": [], + "create": 0, + "modify": 8, + "delete": 0, + "area": 0.000931500118709959, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "shops", + "answer": 8, + "locale": "en", + "imagery": "osm", + "change_within_1000m": 1, + "change_within_5000m": 7 + }, + "id": 116985905 + } + }, + { + "id": 116985783, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.7086034, + 51.0371267 + ], + [ + 3.7086034, + 51.0371267 + ], + [ + 3.7086034, + 51.0371267 + ], + [ + 3.7086034, + 51.0371267 + ], + [ + 3.7086034, + 51.0371267 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.4", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-04T01:20:24Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cyclofix", + "answer": 1, + "locale": "nl", + "imagery": "CartoDB.Voyager", + "change_over_5000m": 1 + }, + "id": 116985783 + } + }, + { + "id": 116982670, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.8804471, + 54.8138866 + ], + [ + -1.5879136, + 54.8138866 + ], + [ + -1.5879136, + 54.9778917 + ], + [ + -1.8804471, + 54.9778917 + ], + [ + -1.8804471, + 54.8138866 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 91, + "name": "Motorway/trunk geometry modified" + } + ], + "tags": [], + "features": [ + { + "url": "way-975389803", + "name": "Consett Road", + "osm_id": 975389803, + "reasons": [ + 91 + ], + "version": 4, + "primary_tags": { + "highway": "trunk" + } + } + ], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-03T22:29:42Z", + "reviewed_features": [], + "create": 0, + "modify": 81, + "delete": 0, + "area": 0.0479769859208512, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 123, + "locale": "en", + "imagery": "osm" + }, + "id": 116982670 + } + }, + { + "id": 116975972, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -1.7713918, + 54.6557743 + ], + [ + -1.5378977, + 54.6557743 + ], + [ + -1.5378977, + 54.7780057 + ], + [ + -1.7713918, + 54.7780057 + ], + [ + -1.7713918, + 54.6557743 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "confusedbuffalo", + "uid": "242345", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-03T18:30:09Z", + "reviewed_features": [], + "create": 0, + "modify": 109, + "delete": 0, + "area": 0.0285403107347409, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 165, + "locale": "en", + "imagery": "osm" + }, + "id": 116975972 + } + }, + { + "id": 116970091, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.3006754, + 50.8825968 + ], + [ + 4.3006754, + 50.8825968 + ], + [ + 4.3006754, + 50.8825968 + ], + [ + 4.3006754, + 50.8825968 + ], + [ + 4.3006754, + 50.8825968 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "milenasonneveld", + "uid": "8177639", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #climbing", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-03T15:44:58Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "climbing", + "answer": 2, + "create": 1, + "locale": "en", + "imagery": "osm", + "add-image": 1, + "change_over_5000m": 1, + "change_within_25m": 3 + }, + "id": 116970091 + } + }, + { + "id": 116966319, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.3630863, + 50.9960832 + ], + [ + 5.3630863, + 50.9960832 + ], + [ + 5.3630863, + 50.9960832 + ], + [ + 5.3630863, + 50.9960832 + ], + [ + 5.3630863, + 50.9960832 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #aed", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-03T14:04:40Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "aed", + "answer": 4, + "create": 1, + "locale": "nl", + "imagery": "osm", + "change_over_5000m": 1, + "change_within_5000m": 4 + }, + "id": 116966319 + } + }, + { + "id": 116963372, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -58.7921441, + -34.6497892 + ], + [ + -58.7921441, + -34.6497892 + ], + [ + -58.7921441, + -34.6497892 + ], + [ + -58.7921441, + -34.6497892 + ], + [ + -58.7921441, + -34.6497892 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "AgusQui", + "uid": "331218", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #https://raw.githubusercontent.com/AgusQui/MapCompleteRailway/main/Signals", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-03T13:00:07Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://raw.githubusercontent.com/AgusQui/MapCompleteRailway/main/Signals", + "answer": 4, + "create": 1, + "locale": "es", + "imagery": "osm", + "change_over_5000m": 1, + "change_within_25m": 4 + }, + "id": 116963372 + } + }, + { + "id": 116961725, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2045793, + 51.2231139 + ], + [ + 3.2045793, + 51.2231139 + ], + [ + 3.2045793, + 51.2231139 + ], + [ + 3.2045793, + 51.2231139 + ], + [ + 3.2045793, + 51.2231139 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #shops", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-03T12:22:28Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "shops", + "answer": 2, + "locale": "en", + "imagery": "osm", + "add-image": 1, + "change_within_100m": 3 + }, + "id": 116961725 + } + }, + { + "id": 116958998, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5, + 51.2224491 + ], + [ + 4.5054352, + 51.2224491 + ], + [ + 4.5054352, + 51.2241332 + ], + [ + 4.5, + 51.2241332 + ], + [ + 4.5, + 51.2224491 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-03T11:18:10Z", + "reviewed_features": [], + "create": 6, + "modify": 11, + "delete": 0, + "area": 0.00000915342031999193, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 8, + "create": 6, + "locale": "nl", + "imagery": "osm", + "add-image": 7, + "change_over_5000m": 6, + "change_within_25m": 1, + "change_within_50m": 3, + "change_within_100m": 6, + "change_within_500m": 5 + }, + "id": 116958998 + } + }, + { + "id": 116958369, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.8585203, + 51.1416444 + ], + [ + 4.9321125, + 51.1416444 + ], + [ + 4.9321125, + 51.1543244 + ], + [ + 4.8585203, + 51.1543244 + ], + [ + 4.8585203, + 51.1416444 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 57, + "name": "Feature overlaps with existing features" + } + ], + "tags": [], + "features": [ + { + "url": "way-1027348440", + "osm_id": 1027348440, + "reasons": [ + 57 + ], + "version": 1, + "primary_tags": { + "building": "yes" + } + } + ], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-03T11:03:53Z", + "reviewed_features": [], + "create": 65, + "modify": 82, + "delete": 1, + "area": 0.000933149096000222, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 70, + "theme": "grb", + "answer": 1, + "delete": 1, + "import": 2, + "locale": "nl", + "imagery": "osm", + "conflation": 26 + }, + "id": 116958369 + } + }, + { + "id": 116957163, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 16.3646879, + 48.1690215 + ], + [ + 16.3768684, + 48.1690215 + ], + [ + 16.3768684, + 48.1711088 + ], + [ + 16.3646879, + 48.1711088 + ], + [ + 16.3646879, + 48.1690215 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "ladoga", + "uid": "827957", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-03T10:38:42Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 0.0000254243576499923, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 8, + "locale": "de", + "imagery": "osm" + }, + "id": 116957163 + } + }, + { + "id": 116954133, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0359338, + 51.144863 + ], + [ + 5.0365486, + 51.144863 + ], + [ + 5.0365486, + 51.1452192 + ], + [ + 5.0359338, + 51.1452192 + ], + [ + 5.0359338, + 51.144863 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-03T09:32:58Z", + "reviewed_features": [], + "create": 6, + "modify": 19, + "delete": 0, + "area": 2.18991759999316e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 16, + "theme": "grb", + "locale": "nl", + "imagery": "osm", + "conflation": 6 + }, + "id": 116954133 + } + }, + { + "id": 116954048, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.498719, + 51.2202058 + ], + [ + 4.5088953, + 51.2202058 + ], + [ + 4.5088953, + 51.2247144 + ], + [ + 4.498719, + 51.2247144 + ], + [ + 4.498719, + 51.2202058 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-03T09:31:10Z", + "reviewed_features": [], + "create": 12, + "modify": 16, + "delete": 0, + "area": 0.0000458808661800098, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 3, + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 12, + "create": 12, + "locale": "nl", + "imagery": "osm", + "add-image": 11, + "change_over_5000m": 12, + "change_within_25m": 14, + "change_within_100m": 8, + "change_within_500m": 4, + "move:node/9471164305": "improve_accuracy", + "move:node/9471270450": "improve_accuracy", + "move:node/9471273002": "improve_accuracy" + }, + "id": 116954048 + } + }, + { + "id": 116948018, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 11.7879398, + 48.0076587 + ], + [ + 11.7879398, + 48.0076587 + ], + [ + 11.7879398, + 48.0076587 + ], + [ + 11.7879398, + 48.0076587 + ], + [ + 11.7879398, + 48.0076587 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "bollyboll", + "uid": "12120321", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #hailhydrant", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-03T06:49:21Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "hailhydrant", + "create": 1, + "locale": "de", + "imagery": "osm", + "change_over_5000m": 1 + }, + "id": 116948018 + } + }, + { + "id": 116938373, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9730452, + 50.8484767 + ], + [ + 5.0140859, + 50.8484767 + ], + [ + 5.0140859, + 50.9795608 + ], + [ + 4.9730452, + 50.9795608 + ], + [ + 4.9730452, + 50.8484767 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Stinus_Clasius", + "uid": "1086503", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-02T22:28:13Z", + "reviewed_features": [], + "create": 78, + "modify": 0, + "delete": 0, + "area": 0.00537978322287021, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 10, + "locale": "nl", + "imagery": "osm" + }, + "id": 116938373 + } + }, + { + "id": 116935775, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.2316612, + 50.7323588 + ], + [ + 4.249092, + 50.7323588 + ], + [ + 4.249092, + 50.7412338 + ], + [ + 4.2316612, + 50.7412338 + ], + [ + 4.2316612, + 50.7323588 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "joost schouppe", + "uid": "67832", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-02T20:56:15Z", + "reviewed_features": [], + "create": 1, + "modify": 9, + "delete": 0, + "area": 0.000154698350000062, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 6, + "theme": "cyclofix", + "answer": 4, + "create": 1, + "locale": "nl", + "imagery": "AGIV", + "add-image": 8, + "change_within_25m": 6, + "change_within_50m": 6, + "move:node/9246056984": "improve_accuracy" + }, + "id": 116935775 + } + }, + { + "id": 116935227, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5063829, + 51.1189978 + ], + [ + 4.5457594, + 51.1189978 + ], + [ + 4.5457594, + 51.1486483 + ], + [ + 4.5063829, + 51.1486483 + ], + [ + 4.5063829, + 51.1189978 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Stinus_Clasius", + "uid": "1086503", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-02T20:41:45Z", + "reviewed_features": [], + "create": 83, + "modify": 6, + "delete": 0, + "area": 0.0011675329132498, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 4, + "theme": "grb", + "answer": 2, + "import": 7, + "locale": "nl", + "imagery": "osm", + "conflation": 2 + }, + "id": 116935227 + } + }, + { + "id": 116925894, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.9946355, + 51.1334005 + ], + [ + 5.0379172, + 51.1334005 + ], + [ + 5.0379172, + 51.1450359 + ], + [ + 4.9946355, + 51.1450359 + ], + [ + 4.9946355, + 51.1334005 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-02T17:17:19Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 0.000503599892180124, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "benches", + "answer": 5, + "locale": "nl", + "imagery": "osm", + "move:node/1706000858": "improve_accuracy" + }, + "id": 116925894 + } + }, + { + "id": 116923770, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0418765, + 51.1515337 + ], + [ + 5.0418975, + 51.1515337 + ], + [ + 5.0418975, + 51.1515359 + ], + [ + 5.0418765, + 51.1515359 + ], + [ + 5.0418765, + 51.1515337 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #nature", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-02T16:52:31Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 4.61999999436376e-11, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "nature", + "locale": "nl", + "imagery": "osm", + "add-image": 6 + }, + "id": 116923770 + } + }, + { + "id": 116920011, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0341848, + 51.1492532 + ], + [ + 5.0351863, + 51.1492532 + ], + [ + 5.0351863, + 51.1514538 + ], + [ + 5.0341848, + 51.1514538 + ], + [ + 5.0341848, + 51.1492532 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-02T15:56:24Z", + "reviewed_features": [], + "create": 0, + "modify": 6, + "delete": 0, + "area": 0.00000220390090000211, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 7, + "locale": "nl", + "imagery": "osm", + "add-image": 1 + }, + "id": 116920011 + } + }, + { + "id": 116919912, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0377786, + 51.144746 + ], + [ + 5.0414998, + 51.144746 + ], + [ + 5.0414998, + 51.145517 + ], + [ + 5.0377786, + 51.145517 + ], + [ + 5.0377786, + 51.144746 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-02T15:54:11Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0.00000286904520000127, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "locale": "nl", + "imagery": "osm", + "add-image": 1 + }, + "id": 116919912 + } + }, + { + "id": 116919820, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0150035, + 51.1428292 + ], + [ + 5.0150035, + 51.1428292 + ], + [ + 5.0150035, + 51.1428292 + ], + [ + 5.0150035, + 51.1428292 + ], + [ + 5.0150035, + 51.1428292 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #nature", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-02T15:51:54Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "nature", + "locale": "nl", + "imagery": "osm", + "add-image": 1 + }, + "id": 116919820 + } + }, + { + "id": 116919481, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0149785, + 51.1428032 + ], + [ + 5.0149785, + 51.1428032 + ], + [ + 5.0149785, + 51.1428032 + ], + [ + 5.0149785, + 51.1428032 + ], + [ + 5.0149785, + 51.1428032 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #benches", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-02T15:44:38Z", + "reviewed_features": [], + "create": 0, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "benches", + "answer": 5, + "locale": "nl", + "imagery": "osm", + "add-image": 1 + }, + "id": 116919481 + } + }, + { + "id": 116915898, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 18.9798036, + 47.6909891 + ], + [ + 18.9798478, + 47.6909891 + ], + [ + 18.9798478, + 47.6910172 + ], + [ + 18.9798036, + 47.6910172 + ], + [ + 18.9798036, + 47.6909891 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "GBAB", + "uid": "3335899", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #observation_towers", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-02T14:21:11Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 1.24201999979239e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "observation_towers", + "answer": 2, + "locale": "en", + "imagery": "osm" + }, + "id": 116915898 + } + }, + { + "id": 116911694, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2249977, + 51.210513 + ], + [ + 3.2249977, + 51.210513 + ], + [ + 3.2249977, + 51.210513 + ], + [ + 3.2249977, + 51.210513 + ], + [ + 3.2249977, + 51.210513 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-02T12:39:25Z", + "reviewed_features": [], + "create": 0, + "modify": 0, + "delete": 1, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "cyclofix", + "locale": "en", + "imagery": "CartoDB.Voyager", + "deletion": 1, + "change_within_500m": 1, + "deletion:node/9425818877": "duplicate" + }, + "id": 116911694 + } + }, + { + "id": 116909437, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2367616, + 51.1883955 + ], + [ + 3.2375599, + 51.1883955 + ], + [ + 3.2375599, + 51.1887126 + ], + [ + 3.2367616, + 51.1887126 + ], + [ + 3.2367616, + 51.1883955 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #test", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-02T11:42:42Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 2.5314093000299e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "test", + "answer": 1, + "locale": "nl", + "imagery": "osm", + "change_within_50m": 1 + }, + "id": 116909437 + } + }, + { + "id": 116909356, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2264824, + 51.1883955 + ], + [ + 3.2375599, + 51.1883955 + ], + [ + 3.2375599, + 51.1991918 + ], + [ + 3.2264824, + 51.1991918 + ], + [ + 3.2264824, + 51.1883955 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-02T11:40:35Z", + "reviewed_features": [], + "create": 0, + "modify": 7, + "delete": 0, + "area": 0.000119596013250028, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "playgrounds", + "answer": 4, + "locale": "nl", + "imagery": "osm", + "add-image": 4, + "delete-image": 1, + "change_within_25m": 6, + "change_within_50m": 3 + }, + "id": 116909356 + } + }, + { + "id": 116908634, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.2302803, + 51.1795184 + ], + [ + 3.2572538, + 51.1795184 + ], + [ + 3.2572538, + 51.2006504 + ], + [ + 3.2302803, + 51.2006504 + ], + [ + 3.2302803, + 51.1795184 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-02T11:21:58Z", + "reviewed_features": [], + "create": 0, + "modify": 88, + "delete": 0, + "area": 0.00057000400200004, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "pietervdvn.github.io", + "path": "mc/develop/", + "theme": "etymology", + "answer": 127, + "locale": "nl", + "imagery": "osm", + "add-image": 1, + "change_within_25m": 6, + "change_within_50m": 7, + "change_within_100m": 18, + "change_within_500m": 59, + "change_within_1000m": 30, + "change_within_5000m": 8 + }, + "id": 116908634 + } + }, + { + "id": 116906468, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 3.3372978, + 50.9987722 + ], + [ + 3.4020574, + 50.9987722 + ], + [ + 3.4020574, + 51.0134531 + ], + [ + 3.3372978, + 51.0134531 + ], + [ + 3.3372978, + 50.9987722 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Thibaultmol", + "uid": "2916921", + "editor": "MapComplete 0.15.3", + "comment": "Adding data with #MapComplete for theme #etymology", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-02T10:31:16Z", + "reviewed_features": [], + "create": 0, + "modify": 7, + "delete": 0, + "area": 0.000950729211640121, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "etymology", + "answer": 9, + "locale": "nl", + "imagery": "osm" + }, + "id": 116906468 + } + }, + { + "id": 116882267, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.4669026, + 51.4670566 + ], + [ + 4.4669026, + 51.4670566 + ], + [ + 4.4669026, + 51.4670566 + ], + [ + 4.4669026, + 51.4670566 + ], + [ + 4.4669026, + 51.4670566 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "GeertDD", + "uid": "2776338", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-01T19:45:12Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 1, + "import": 1, + "imagery": "osm", + "language": "nl" + }, + "id": 116882267 + } + }, + { + "id": 116874502, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5340151, + 51.4218319 + ], + [ + 4.5341133, + 51.4218319 + ], + [ + 4.5341133, + 51.4218935 + ], + [ + 4.5340151, + 51.4218935 + ], + [ + 4.5340151, + 51.4218319 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Pieter Vander Vennet", + "uid": "3818858", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-01T15:57:32Z", + "reviewed_features": [], + "create": 10, + "modify": 0, + "delete": 0, + "area": 6.04912000016582e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "grb", + "import": 2, + "imagery": "AGIVFlandersGRB", + "language": "nl", + "change_over_5000m": 2 + }, + "id": 116874502 + } + }, + { + "id": 116873429, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 7.6340412, + 46.7554728 + ], + [ + 7.6340412, + 46.7554728 + ], + [ + 7.6340412, + 46.7554728 + ], + [ + 7.6340412, + 46.7554728 + ], + [ + 7.6340412, + 46.7554728 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "habi", + "uid": "15671", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #artwork", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-01T15:27:23Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "artwork", + "answer": 1, + "imagery": "osm", + "language": "en" + }, + "id": 116873429 + } + }, + { + "id": 116871277, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.0068088, + 51.1034188 + ], + [ + 5.0147423, + 51.1034188 + ], + [ + 5.0147423, + 51.1265577 + ], + [ + 5.0068088, + 51.1265577 + ], + [ + 5.0068088, + 51.1034188 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 4, + "name": "mass modification" + } + ], + "tags": [], + "features": [], + "user": "dentonny", + "uid": "4198737", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #grb", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-01T14:28:34Z", + "reviewed_features": [], + "create": 94, + "modify": 236, + "delete": 6, + "area": 0.000183572463149995, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 213, + "theme": "grb", + "answer": 1, + "delete": 6, + "import": 9, + "imagery": "osm", + "language": "nl", + "conflation": 68, + "change_within_500m": 9, + "change_within_1000m": 1 + }, + "id": 116871277 + } + }, + { + "id": 116868200, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5719102, + 51.127015 + ], + [ + 4.5719102, + 51.127015 + ], + [ + 4.5719102, + 51.127015 + ], + [ + 4.5719102, + 51.127015 + ], + [ + 4.5719102, + 51.127015 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-01T13:10:11Z", + "reviewed_features": [], + "create": 1, + "modify": 2, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 5, + "create": 1, + "imagery": "osm", + "language": "nl" + }, + "id": 116868200 + } + }, + { + "id": 116866356, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5093539, + 51.2271718 + ], + [ + 4.5176245, + 51.2271718 + ], + [ + 4.5176245, + 51.2292261 + ], + [ + 4.5093539, + 51.2292261 + ], + [ + 4.5093539, + 51.2271718 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-01T12:23:54Z", + "reviewed_features": [], + "create": 19, + "modify": 36, + "delete": 0, + "area": 0.0000169902935799801, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 3, + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 19, + "create": 19, + "imagery": "osm", + "language": "nl", + "add-image": 23, + "change_over_5000m": 19, + "change_within_25m": 33, + "change_within_50m": 5, + "change_within_100m": 7, + "move:node/9465980888": "improve_accuracy", + "move:node/9466180750": "improve_accuracy" + }, + "id": 116866356 + } + }, + { + "id": 116863788, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.7424285, + 50.9160986 + ], + [ + 4.7424285, + 50.9160986 + ], + [ + 4.7424285, + 50.9160986 + ], + [ + 4.7424285, + 50.9160986 + ], + [ + 4.7424285, + 50.9160986 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "pieterpaul", + "uid": "14539037", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #playgrounds", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-01T11:20:00Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "playgrounds", + "answer": 1, + "create": 1, + "imagery": "AGIV", + "language": "en" + }, + "id": 116863788 + } + }, + { + "id": 116863619, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5112514, + 51.2295137 + ], + [ + 4.5112514, + 51.2295137 + ], + [ + 4.5112514, + 51.2295137 + ], + [ + 4.5112514, + 51.2295137 + ], + [ + 4.5112514, + 51.2295137 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #test", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-01T11:15:58Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 0, + "area": 0, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "test", + "answer": 1, + "imagery": "osm", + "language": "nl", + "change_within_25m": 1 + }, + "id": 116863619 + } + }, + { + "id": 116861180, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.1857858, + 50.9224714 + ], + [ + 4.2230963, + 50.9224714 + ], + [ + 4.2230963, + 50.9302263 + ], + [ + 4.1857858, + 50.9302263 + ], + [ + 4.1857858, + 50.9224714 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "jospyck", + "uid": "12128135", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-01T10:19:54Z", + "reviewed_features": [], + "create": 0, + "modify": 1, + "delete": 1, + "area": 0.000289339196450073, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "toerisme_vlaanderen", + "answer": 4, + "imagery": "osm", + "deletion": 1, + "language": "nl", + "deletion:node/9420056262": "duplicate" + }, + "id": 116861180 + } + }, + { + "id": 116860089, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 7.4163521, + 46.922083 + ], + [ + 7.4164044, + 46.922083 + ], + [ + 7.4164044, + 46.9221885 + ], + [ + 7.4163521, + 46.9221885 + ], + [ + 7.4163521, + 46.922083 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "habi", + "uid": "15671", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #trees", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-01T09:54:54Z", + "reviewed_features": [], + "create": 0, + "modify": 3, + "delete": 0, + "area": 5.51764999983124e-9, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "trees", + "answer": 3, + "imagery": "osm", + "language": "en", + "change_within_50m": 3 + }, + "id": 116860089 + } + }, + { + "id": 116859087, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 4.5041826, + 51.2278437 + ], + [ + 4.5113575, + 51.2278437 + ], + [ + 4.5113575, + 51.2295137 + ], + [ + 4.5041826, + 51.2295137 + ], + [ + 4.5041826, + 51.2278437 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "Locatus_Raf", + "uid": "14799940", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-01T09:31:33Z", + "reviewed_features": [], + "create": 4, + "modify": 12, + "delete": 0, + "area": 0.0000119820829999795, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "move": 1, + "theme": "https://gist.githubusercontent.com/joostschouppe/4f631b3f658b67bcfafd56b731c726dc/raw/d39021f0731179a8105531f2e4254d1fe4a6eacf/locatus.json", + "answer": 10, + "create": 4, + "imagery": "osm", + "language": "nl", + "add-image": 6, + "change_over_5000m": 4, + "change_within_25m": 15, + "change_within_50m": 2, + "move:node/9465521314": "improve_accuracy" + }, + "id": 116859087 + } + }, + { + "id": 116858693, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 7.3428155, + 53.1637274 + ], + [ + 7.3428155, + 53.1637274 + ], + [ + 7.3428155, + 53.1637274 + ], + [ + 7.3428155, + 53.1637274 + ], + [ + 7.3428155, + 53.1637274 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Robin van der Linde", + "uid": "5093765", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #cycle_infra", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-01T09:23:09Z", + "reviewed_features": [], + "create": 1, + "modify": 0, + "delete": 0, + "area": 0, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cycle_infra", + "answer": 2, + "create": 1, + "imagery": "CartoDB.Voyager", + "language": "en", + "change_over_5000m": 1, + "change_within_25m": 2 + }, + "id": 116858693 + } + }, + { + "id": 116858601, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 7.3425967, + 53.1635659 + ], + [ + 7.3433493, + 53.1635659 + ], + [ + 7.3433493, + 53.1638981 + ], + [ + 7.3425967, + 53.1638981 + ], + [ + 7.3425967, + 53.1635659 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [], + "tags": [], + "features": [], + "user": "Robin van der Linde", + "uid": "5093765", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #cyclofix", + "comments_count": 0, + "source": "survey", + "imagery_used": "Not reported", + "date": "2022-02-01T09:20:56Z", + "reviewed_features": [], + "create": 2, + "modify": 6, + "delete": 1, + "area": 2.50013719996649e-7, + "is_suspect": false, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "cyclofix", + "answer": 12, + "create": 2, + "imagery": "CartoDB.Voyager", + "deletion": 1, + "language": "en", + "change_over_5000m": 2, + "change_within_25m": 13, + "deletion:node/5168101073": "disused" + }, + "id": 116858601 + } + }, + { + "id": 116850450, + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 15.6097537, + 51.1268452 + ], + [ + 15.610653, + 51.1268452 + ], + [ + 15.610653, + 51.1272331 + ], + [ + 15.6097537, + 51.1272331 + ], + [ + 15.6097537, + 51.1268452 + ] + ] + ] + }, + "properties": { + "check_user": null, + "reasons": [ + { + "id": 40, + "name": "New mapper" + } + ], + "tags": [], + "features": [], + "user": "art_m_wb", + "uid": "12876924", + "editor": "MapComplete 0.15.1", + "comment": "Adding data with #MapComplete for theme #climbing", + "comments_count": 0, + "source": "Not reported", + "imagery_used": "Not reported", + "date": "2022-02-01T06:09:39Z", + "reviewed_features": [], + "create": 0, + "modify": 4, + "delete": 0, + "area": 3.48838469999256e-7, + "is_suspect": true, + "harmful": null, + "checked": false, + "check_date": null, + "metadata": { + "host": "mapcomplete.osm.be", + "theme": "climbing", + "answer": 7, + "imagery": "osm", + "language": "en" + }, + "id": 116850450 + } + } + ] +} \ No newline at end of file diff --git a/Docs/URL_Parameters.md b/Docs/URL_Parameters.md index feff2b83db..c1eb483760 100644 --- a/Docs/URL_Parameters.md +++ b/Docs/URL_Parameters.md @@ -84,7 +84,7 @@ Finally, the URL-hash is the part after the `#`. It is `node/1234` in this case. fs-filter ----------- - Disables/Enables the filter The default value is _true_ + Disables/Enables the filter view The default value is _true_ @@ -105,7 +105,7 @@ Finally, the URL-hash is the part after the `#`. It is `node/1234` in this case. fs-iframe-popout ------------------ - Disables/Enables the iframe-popout button. If in iframe mode and the welcome message is hidden, a popout button to the full mapcomplete instance is shown instead (unless disabled with this switch) The default value is _true_ + Disables/Enables the extraLink button. By default, if in iframe mode and the welcome message is hidden, a popout button to the full mapcomplete instance is shown instead (unless disabled with this switch or another extraLink button is enabled) The default value is _true_ @@ -219,4 +219,4 @@ Finally, the URL-hash is the part after the `#`. It is `node/1234` in this case. Wether or not the layer with id is shown The default value is _true_ -This document is autogenerated from QueryParameters \ No newline at end of file +This document is autogenerated from [Logic/Web/QueryParameters.ts](https://github.com/pietervdvn/MapComplete/blob/develop/Logic/Web/QueryParameters.ts), [UI/QueryParameterDocumentation.ts](https://github.com/pietervdvn/MapComplete/blob/develop/UI/QueryParameterDocumentation.ts) \ No newline at end of file diff --git a/Docs/warning.svg b/Docs/warning.svg index 82f1f8acd2..f02006c9f3 100644 --- a/Docs/warning.svg +++ b/Docs/warning.svg @@ -1,28 +1,37 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Logic/Actors/AvailableBaseLayersImplementation.ts b/Logic/Actors/AvailableBaseLayersImplementation.ts index 39dcdc4b17..2ac7aa8d4c 100644 --- a/Logic/Actors/AvailableBaseLayersImplementation.ts +++ b/Logic/Actors/AvailableBaseLayersImplementation.ts @@ -8,6 +8,7 @@ import {TileLayer} from "leaflet"; import * as X from "leaflet-providers"; import {Utils} from "../../Utils"; import {AvailableBaseLayersObj} from "./AvailableBaseLayers"; +import {BBox} from "../BBox"; export default class AvailableBaseLayersImplementation implements AvailableBaseLayersObj { @@ -26,7 +27,9 @@ export default class AvailableBaseLayersImplementation implements AvailableBaseL category: "osmbasedmap" } - public layerOverview = AvailableBaseLayersImplementation.LoadRasterIndex().concat(AvailableBaseLayersImplementation.LoadProviderIndex()); + public readonly layerOverview = AvailableBaseLayersImplementation.LoadRasterIndex().concat(AvailableBaseLayersImplementation.LoadProviderIndex()); + public readonly globalLayers = this.layerOverview.filter(layer => layer.feature?.geometry === undefined || layer.feature?.geometry === null) + public readonly localLayers = this.layerOverview.filter(layer => layer.feature?.geometry !== undefined && layer.featuer?.geometry !== null) private static LoadRasterIndex(): BaseLayer[] { const layers: BaseLayer[] = [] @@ -36,8 +39,8 @@ export default class AvailableBaseLayersImplementation implements AvailableBaseL const layer = features[i]; const props = layer.properties; - if (props.id === "Bing") { - // Doesnt work + if (props.type === "bing") { + // A lot of work to implement - see https://github.com/pietervdvn/MapComplete/issues/648 continue; } @@ -64,7 +67,7 @@ export default class AvailableBaseLayersImplementation implements AvailableBaseL console.warn("Editor layer index: name not defined on ", props) continue } - + const leafletLayer: () => TileLayer = () => AvailableBaseLayersImplementation.CreateBackgroundLayer( props.id, @@ -102,7 +105,10 @@ export default class AvailableBaseLayersImplementation implements AvailableBaseL feature: null, id: id, name: name, - layer: () => L.tileLayer.provider(id, undefined), + layer: () => L.tileLayer.provider(id, { + maxNativeZoom: layer.options?.maxZoom, + maxZoom: Math.max(layer.options?.maxZoom ?? 19, 21) + }), min_zoom: 1, max_zoom: layer.options.maxZoom, category: "osmbasedmap", @@ -189,13 +195,13 @@ export default class AvailableBaseLayersImplementation implements AvailableBaseL attribution: attribution, maxZoom: Math.max(21, maxZoom ?? 19), maxNativeZoom: maxZoom ?? 19, - minZoom: 1, + minZoom: 1, // @ts-ignore wmts: isWMTS ?? false, subdomains: domains }); } - + public AvailableLayersAt(location: UIEventSource): UIEventSource { return UIEventSource.ListStabilized(location.map( (currentLocation) => { @@ -209,70 +215,69 @@ export default class AvailableBaseLayersImplementation implements AvailableBaseL public SelectBestLayerAccordingTo(location: UIEventSource, preferedCategory: UIEventSource): UIEventSource { return this.AvailableLayersAt(location) .map(available => { - // First float all 'best layers' to the top - available.sort((a, b) => { - if (a.isBest && b.isBest) { - return 0; - } - if (!a.isBest) { - return 1 - } - - return -1; - } - ) - - if (preferedCategory.data === undefined) { - return available[0] - } - - let prefered: string [] - if (typeof preferedCategory.data === "string") { - prefered = [preferedCategory.data] - } else { - prefered = preferedCategory.data; - } - - prefered.reverse(); - for (const category of prefered) { - //Then sort all 'photo'-layers to the top. Stability of the sorting will force a 'best' photo layer on top + // First float all 'best layers' to the top available.sort((a, b) => { - if (a.category === category && b.category === category) { + if (a.isBest && b.isBest) { return 0; } - if (a.category !== category) { + if (!a.isBest) { return 1 } return -1; } ) - } - return available[0] - }, [preferedCategory]) + + if (preferedCategory.data === undefined) { + return available[0] + } + + let prefered: string [] + if (typeof preferedCategory.data === "string") { + prefered = [preferedCategory.data] + } else { + prefered = preferedCategory.data; + } + + prefered.reverse(); + for (const category of prefered) { + //Then sort all 'photo'-layers to the top. Stability of the sorting will force a 'best' photo layer on top + available.sort((a, b) => { + if (a.category === category && b.category === category) { + return 0; + } + if (a.category !== category) { + return 1 + } + + return -1; + } + ) + } + return available[0] + }, [preferedCategory]) } - + private CalculateAvailableLayersAt(lon: number, lat: number): BaseLayer[] { const availableLayers = [this.osmCarto] - const globalLayers = []; - for (const layerOverviewItem of this.layerOverview) { + if (lon === undefined || lat === undefined) { + return availableLayers.concat(this.globalLayers); + } + const lonlat = [lon, lat]; + for (const layerOverviewItem of this.localLayers) { const layer = layerOverviewItem; - - if (layer.feature?.geometry === undefined || layer.feature?.geometry === null) { - globalLayers.push(layer); - continue; + const bbox = BBox.get(layer.feature) + + if(!bbox.contains(lonlat)){ + continue } - if (lon === undefined || lat === undefined) { - continue; - } - - if (GeoOperations.inside([lon, lat], layer.feature)) { + if (GeoOperations.inside(lonlat, layer.feature)) { availableLayers.push(layer); } } - return availableLayers.concat(globalLayers); + return availableLayers.concat(this.globalLayers); } } \ No newline at end of file diff --git a/Logic/Actors/GeoLocationHandler.ts b/Logic/Actors/GeoLocationHandler.ts index 2d1166e51c..7d3aca2c31 100644 --- a/Logic/Actors/GeoLocationHandler.ts +++ b/Logic/Actors/GeoLocationHandler.ts @@ -11,11 +11,11 @@ export interface GeoLocationPointProperties { "user:location": "yes", "date": string, "latitude": number - "longitude":number, + "longitude": number, "speed": number, "accuracy": number "heading": number - "altitude":number + "altitude": number } export default class GeoLocationHandler extends VariableUiElement { diff --git a/Logic/Actors/SelectedElementTagsUpdater.ts b/Logic/Actors/SelectedElementTagsUpdater.ts index 2aa2c942ef..beff7c21f3 100644 --- a/Logic/Actors/SelectedElementTagsUpdater.ts +++ b/Logic/Actors/SelectedElementTagsUpdater.ts @@ -117,7 +117,6 @@ export default class SelectedElementTagsUpdater { const localValue = currentTags[key] if (localValue !== osmValue) { - console.log("Local value for ", key, ":", localValue, "upstream", osmValue) somethingChanged = true; currentTags[key] = osmValue } diff --git a/Logic/BBox.ts b/Logic/BBox.ts index 7289b793ba..1aa9d08827 100644 --- a/Logic/BBox.ts +++ b/Logic/BBox.ts @@ -48,12 +48,12 @@ export class BBox { } return feature.bbox; } - - static bboxAroundAll(bboxes: BBox[]): BBox{ + + static bboxAroundAll(bboxes: BBox[]): BBox { let maxLat: number = -90; - let maxLon: number= -180; - let minLat: number= 80; - let minLon: number= 180; + let maxLon: number = -180; + let minLat: number = 80; + let minLon: number = 180; for (const bbox of bboxes) { maxLat = Math.max(maxLat, bbox.maxLat) @@ -61,7 +61,7 @@ export class BBox { minLat = Math.min(minLat, bbox.minLat) minLon = Math.min(minLon, bbox.minLon) } - return new BBox([[maxLon, maxLat],[minLon,minLat]]) + return new BBox([[maxLon, maxLat], [minLon, minLat]]) } static fromTile(z: number, x: number, y: number): BBox { @@ -75,6 +75,14 @@ export class BBox { return BBox.fromTile(...Tiles.tile_from_index(i)) } + public unionWith(other: BBox) { + return new BBox([[ + Math.max(this.maxLon, other.maxLon), + Math.max(this.maxLat, other.maxLat)], + [Math.min(this.minLon, other.minLon), + Math.min(this.minLat, other.minLat)]]) + } + /** * Constructs a tilerange which fully contains this bbox (thus might be a bit larger) * @param zoomlevel @@ -145,6 +153,15 @@ export class BBox { this.maxLat + latDiff]]) } + padAbsolute(degrees: number): BBox { + + return new BBox([[ + this.minLon - degrees, + this.minLat - degrees + ], [this.maxLon + degrees, + this.maxLat + degrees]]) + } + toLeaflet() { return [[this.minLat, this.minLon], [this.maxLat, this.maxLon]] } diff --git a/Logic/DetermineLayout.ts b/Logic/DetermineLayout.ts index 8c3907f72f..734988583d 100644 --- a/Logic/DetermineLayout.ts +++ b/Logic/DetermineLayout.ts @@ -10,14 +10,21 @@ import {UIEventSource} from "./UIEventSource"; import {LocalStorageSource} from "./Web/LocalStorageSource"; import LZString from "lz-string"; import * as personal from "../assets/themes/personal/personal.json"; -import {FixLegacyTheme, PrepareTheme} from "../Models/ThemeConfig/Conversion/LegacyJsonConvert"; +import {FixLegacyTheme} from "../Models/ThemeConfig/Conversion/LegacyJsonConvert"; import {LayerConfigJson} from "../Models/ThemeConfig/Json/LayerConfigJson"; import SharedTagRenderings from "../Customizations/SharedTagRenderings"; import * as known_layers from "../assets/generated/known_layers.json" import {LayoutConfigJson} from "../Models/ThemeConfig/Json/LayoutConfigJson"; +import {PrepareTheme} from "../Models/ThemeConfig/Conversion/PrepareTheme"; +import * as licenses from "../assets/generated/license_info.json" +import TagRenderingConfig from "../Models/ThemeConfig/TagRenderingConfig"; +import {FixImages} from "../Models/ThemeConfig/Conversion/FixImages"; +import Svg from "../Svg"; export default class DetermineLayout { + private static readonly _knownImages =new Set( Array.from(licenses).map(l => l.path)) + /** * Gets the correct layout for this website */ @@ -63,26 +70,12 @@ export default class DetermineLayout { return layoutToUse } - private static prepCustomTheme(json: any): LayoutConfigJson{ - const knownLayersDict = new Map() - for (const key in known_layers["default"]) { - const layer = known_layers["default"][key] - knownLayersDict.set(layer.id, layer) - } - const converState = { - tagRenderings: SharedTagRenderings.SharedTagRenderingJson, - sharedLayers: knownLayersDict - } - json = new FixLegacyTheme().convertStrict(converState, json, "While loading a dynamic theme") - json = new PrepareTheme().convertStrict(converState, json, "While preparing a dynamic theme") - console.log("The layoutconfig is ", json) - return json - } - public static LoadLayoutFromHash( userLayoutParam: UIEventSource - ): LayoutConfig | null { + ): (LayoutConfig & {definition: LayoutConfigJson}) | null { let hash = location.hash.substr(1); + let json: any; + try { // layoutFromBase64 contains the name of the theme. This is partly to do tracking with goat counter const dedicatedHashFromLocalStorage = LocalStorageSource.Get( @@ -105,7 +98,6 @@ export default class DetermineLayout { dedicatedHashFromLocalStorage.setData(hash); } - let json: any; try { json = JSON.parse(atob(hash)); } catch (e) { @@ -121,32 +113,71 @@ export default class DetermineLayout { const layoutToUse = DetermineLayout.prepCustomTheme(json) userLayoutParam.setData(layoutToUse.id); - return new LayoutConfig(layoutToUse, false); + const config = new LayoutConfig(layoutToUse, false); + config["definition"] = json + return config } catch (e) { console.error(e) if (hash === undefined || hash.length < 10) { - DetermineLayout.ShowErrorOnCustomTheme("Could not load a theme from the hash", new FixedUiElement("Hash does not contain data")) + DetermineLayout.ShowErrorOnCustomTheme("Could not load a theme from the hash", new FixedUiElement("Hash does not contain data"), json) } - this.ShowErrorOnCustomTheme("Could not parse the hash", new FixedUiElement(e)) + this.ShowErrorOnCustomTheme("Could not parse the hash", new FixedUiElement(e), json) return null; } } public static ShowErrorOnCustomTheme( intro: string = "Error: could not parse the custom layout:", - error: BaseUIElement) { + error: BaseUIElement, + json?: any) { new Combine([ intro, error.SetClass("alert"), - new SubtleButton("./assets/svg/mapcomplete_logo.svg", + new SubtleButton(Svg.back_svg(), "Go back to the theme overview", - {url: window.location.protocol + "//" + window.location.hostname + "/index.html", newTab: false}) - + {url: window.location.protocol + "//" + window.location.hostname + "/index.html", newTab: false}), + json !== undefined ? new SubtleButton(Svg.download_svg(),"Download the JSON file").onClick(() => { + Utils.offerContentsAsDownloadableFile(JSON.stringify(json, null, " "), "theme_definition.json") + }) : undefined ]) .SetClass("flex flex-col clickable") .AttachTo("centermessage"); } + private static prepCustomTheme(json: any): LayoutConfigJson { + + if(json.layers === undefined && json.tagRenderings !== undefined){ + const iconTr = json.mapRendering.map(mr => mr.icon).find(icon => icon !== undefined) + const icon = new TagRenderingConfig(iconTr).render.txt + json = { + id: json.id, + description: json.description, + descriptionTail: { + en: "
Layer only mode.
The loaded custom theme actually isn't a custom theme, but only contains a layer." + }, + icon, + title: json.name, + layers: [json], + } + } + + + const knownLayersDict = new Map() + for (const key in known_layers.layers) { + const layer = known_layers.layers[key] + knownLayersDict.set(layer.id, layer) + } + const converState = { + tagRenderings: SharedTagRenderings.SharedTagRenderingJson, + sharedLayers: knownLayersDict + } + json = new FixLegacyTheme().convertStrict(json, "While loading a dynamic theme") + json = new FixImages(DetermineLayout._knownImages).convertStrict(json, "While fixing the images") + json = new PrepareTheme(converState).convertStrict(json, "While preparing a dynamic theme") + console.log("The layoutconfig is ", json) + return json + } + private static async LoadRemoteTheme(link: string): Promise { console.log("Downloading map theme from ", link); @@ -156,24 +187,17 @@ export default class DetermineLayout { try { let parsed = await Utils.downloadJson(link) - console.log("Got ", parsed) - parsed = new FixLegacyTheme().convertStrict({ - tagRenderings: SharedTagRenderings.SharedTagRenderingJson, - sharedLayers: new Map() // FIXME: actually add the layers - }, parsed, "While loading a dynamic theme") - - - parsed.id = link; - - try { + parsed.id = link; + console.log("Loaded remote link:", link) const layoutToUse = DetermineLayout.prepCustomTheme(parsed) - return new LayoutConfig(layoutToUse,false).patchImages(link, JSON.stringify(layoutToUse)); + return new LayoutConfig(layoutToUse, false) } catch (e) { console.error(e) DetermineLayout.ShowErrorOnCustomTheme( `${link} is invalid:`, - new FixedUiElement(e) + new FixedUiElement(e), + parsed ) return null; } diff --git a/Logic/ExtraFunctions.ts b/Logic/ExtraFunctions.ts index f8da9a1d1d..9a97ff39e9 100644 --- a/Logic/ExtraFunctions.ts +++ b/Logic/ExtraFunctions.ts @@ -94,7 +94,7 @@ class IntersectionFunc implements ExtraFunction { for (const otherFeature of tile) { const intersections = GeoOperations.LineIntersections(feat, otherFeature) - if(intersections.length === 0){ + if (intersections.length === 0) { continue } result.push({feat: otherFeature, intersections}) @@ -154,28 +154,12 @@ class ClosestObjectFunc implements ExtraFunction { class ClosestNObjectFunc implements ExtraFunction { - _f(params, feature) { - - return (features, amount, uniqueTag, maxDistanceInMeters) => { - let distance: number = Number(maxDistanceInMeters) - if (isNaN(distance)) { - distance = undefined - } - return ClosestNObjectFunc.GetClosestNFeatures(params, feature, features, { - maxFeatures: Number(amount), - uniqueTag: uniqueTag, - maxDistance: distance - }); - } - } - _name = "closestn" _doc = "Given either a list of geojson features or a single layer name, gives the n closest objects which are nearest to the feature (excluding the feature itself). In the case of ways/polygons, only the centerpoint is considered. " + "Returns a list of `{feat: geojson, distance:number}` the empty list if nothing is found (or not yet loaded)\n\n" + "If a 'unique tag key' is given, the tag with this key will only appear once (e.g. if 'name' is given, all features will have a different name)" _args = ["list of features or layer name or '*' to get all features", "amount of features", "unique tag key (optional)", "maxDistanceInMeters (optional)"] - /** * Gets the closes N features, sorted by ascending distance. * @@ -311,6 +295,21 @@ class ClosestNObjectFunc implements ExtraFunction { return closestFeatures; } + _f(params, feature) { + + return (features, amount, uniqueTag, maxDistanceInMeters) => { + let distance: number = Number(maxDistanceInMeters) + if (isNaN(distance)) { + distance = undefined + } + return ClosestNObjectFunc.GetClosestNFeatures(params, feature, features, { + maxFeatures: Number(amount), + uniqueTag: uniqueTag, + maxDistance: distance + }); + } + } + } @@ -401,7 +400,7 @@ export class ExtraFunctions { ]; public static FullPatchFeature(params: ExtraFuncParams, feature) { - if(feature._is_patched){ + if (feature._is_patched) { return } feature._is_patched = true @@ -414,7 +413,6 @@ export class ExtraFunctions { const elems = [] for (const func of ExtraFunctions.allFuncs) { - console.log("Generating ", func.constructor.name) elems.push(new Title(func._name, 3), func._doc, new List(func._args ?? [], true)) diff --git a/Logic/FeatureSource/Actors/MetaTagRecalculator.ts b/Logic/FeatureSource/Actors/MetaTagRecalculator.ts new file mode 100644 index 0000000000..f17c27afe8 --- /dev/null +++ b/Logic/FeatureSource/Actors/MetaTagRecalculator.ts @@ -0,0 +1,124 @@ +import {FeatureSourceForLayer, Tiled} from "../FeatureSource"; +import MetaTagging from "../../MetaTagging"; +import {ElementStorage} from "../../ElementStorage"; +import {ExtraFuncParams} from "../../ExtraFunctions"; +import FeaturePipeline from "../FeaturePipeline"; +import {BBox} from "../../BBox"; +import {UIEventSource} from "../../UIEventSource"; + +/**** + * Concerned with the logic of updating the right layer at the right time + */ +class MetatagUpdater { + public readonly neededLayerBboxes = new Map() + private source: FeatureSourceForLayer & Tiled; + private readonly params: ExtraFuncParams + private state: { allElements?: ElementStorage }; + + private readonly isDirty = new UIEventSource(false) + + constructor(source: FeatureSourceForLayer & Tiled, state: { allElements?: ElementStorage }, featurePipeline: FeaturePipeline) { + this.state = state; + this.source = source; + const self = this; + this.params = { + getFeatureById(id) { + return state.allElements.ContainingFeatures.get(id) + }, + getFeaturesWithin(layerId, bbox) { + // We keep track of the BBOX that this source needs + let oldBbox: BBox = self.neededLayerBboxes.get(layerId) + if (oldBbox === undefined) { + self.neededLayerBboxes.set(layerId, bbox); + } else if (!bbox.isContainedIn(oldBbox)) { + self.neededLayerBboxes.set(layerId, oldBbox.unionWith(bbox)) + } + return featurePipeline.GetFeaturesWithin(layerId, bbox) + }, + memberships: featurePipeline.relationTracker + } + this.isDirty.stabilized(100).addCallback(dirty => { + if (dirty) { + self.updateMetaTags() + } + }) + this.source.features.addCallbackAndRunD(_ => self.isDirty.setData(true)) + + } + + public requestUpdate() { + this.isDirty.setData(true) + } + + public updateMetaTags() { + const features = this.source.features.data + + if (features.length === 0) { + this.isDirty.setData(false) + return + } + MetaTagging.addMetatags( + features, + this.params, + this.source.layer.layerDef, + this.state) + this.isDirty.setData(false) + + } + +} + +export default class MetaTagRecalculator { + private _state: { + allElements?: ElementStorage + }; + private _featurePipeline: FeaturePipeline; + private readonly _alreadyRegistered: Set = new Set() + private readonly _notifiers: MetatagUpdater[] = [] + + /** + * The meta tag recalculator receives tiles of layers via the 'registerSource'-function. + * It keeps track of which sources have had their share calculated, and which should be re-updated if some other data is loaded + */ + constructor(state: { allElements?: ElementStorage, currentView: FeatureSourceForLayer & Tiled }, featurePipeline: FeaturePipeline) { + this._featurePipeline = featurePipeline; + this._state = state; + + if(state.currentView !== undefined){ + const currentViewUpdater = new MetatagUpdater(state.currentView, this._state, this._featurePipeline) + this._alreadyRegistered.add(state.currentView) + this._notifiers.push(currentViewUpdater) + state.currentView.features.addCallback(_ => { + console.debug("Requesting an update for currentView") + currentViewUpdater.updateMetaTags(); + }) + } + + } + + public registerSource(source: FeatureSourceForLayer & Tiled, recalculateOnEveryChange = false) { + if (source === undefined) { + return; + } + if (this._alreadyRegistered.has(source)) { + return; + } + this._alreadyRegistered.add(source) + this._notifiers.push(new MetatagUpdater(source, this._state, this._featurePipeline)) + const self = this; + source.features.addCallbackAndRunD(_ => { + const layerName = source.layer.layerDef.id + for (const updater of self._notifiers) { + const neededBbox = updater.neededLayerBboxes.get(layerName) + if (neededBbox == undefined) { + continue + } + if (source.bbox === undefined || neededBbox.overlapsWith(source.bbox)) { + updater.requestUpdate() + } + } + }) + + } + +} \ No newline at end of file diff --git a/Logic/FeatureSource/Actors/SaveTileToLocalStorageActor.ts b/Logic/FeatureSource/Actors/SaveTileToLocalStorageActor.ts index 5b884ac87b..b49a554833 100644 --- a/Logic/FeatureSource/Actors/SaveTileToLocalStorageActor.ts +++ b/Logic/FeatureSource/Actors/SaveTileToLocalStorageActor.ts @@ -1,8 +1,3 @@ -/*** - * Saves all the features that are passed in to localstorage, so they can be retrieved on the next run - * - * Technically, more an Actor then a featuresource, but it fits more neatly this ay - */ import FeatureSource, {Tiled} from "../FeatureSource"; import {Tiles} from "../../../Models/TileRange"; import {IdbLocalStorage} from "../../Web/IdbLocalStorage"; @@ -13,6 +8,11 @@ import SimpleFeatureSource from "../Sources/SimpleFeatureSource"; import FilteredLayer from "../../../Models/FilteredLayer"; import Loc from "../../../Models/Loc"; +/*** + * Saves all the features that are passed in to localstorage, so they can be retrieved on the next run + * + * Technically, more an Actor then a featuresource, but it fits more neatly this ay + */ export default class SaveTileToLocalStorageActor { private readonly visitedTiles: UIEventSource> private readonly _layer: LayerConfig; @@ -41,7 +41,7 @@ export default class SaveTileToLocalStorageActor { }) } - + public LoadTilesFromDisk(currentBounds: UIEventSource, location: UIEventSource, registerFreshness: (tileId: number, freshness: Date) => void, registerTile: ((src: FeatureSource & Tiled) => void)) { @@ -55,7 +55,7 @@ export default class SaveTileToLocalStorageActor { } currentBounds.addCallbackAndRunD(bbox => { - if(self._layer.minzoomVisible > location.data.zoom){ + if (self._layer.minzoomVisible > location.data.zoom) { // Not enough zoom return; } @@ -119,9 +119,9 @@ export default class SaveTileToLocalStorageActor { } private SetIdb(tileIndex, data) { - try{ + try { IdbLocalStorage.SetDirectly(this._layer.id + "_" + tileIndex, data) - }catch(e){ + } catch (e) { console.error("Could not save tile to indexed-db: ", e, "tileIndex is:", tileIndex, "for layer", this._layer.id) } } diff --git a/Logic/FeatureSource/FeaturePipeline.ts b/Logic/FeatureSource/FeaturePipeline.ts index fd17de4e6f..bb2382affa 100644 --- a/Logic/FeatureSource/FeaturePipeline.ts +++ b/Logic/FeatureSource/FeaturePipeline.ts @@ -5,7 +5,6 @@ import FeatureSource, {FeatureSourceForLayer, IndexedFeatureSource, Tiled} from import TiledFeatureSource from "./TiledFeatureSource/TiledFeatureSource"; import {UIEventSource} from "../UIEventSource"; import {TileHierarchyTools} from "./TiledFeatureSource/TileHierarchy"; -import MetaTagging from "../MetaTagging"; import RememberingSource from "./Sources/RememberingSource"; import OverpassFeatureSource from "../Actors/OverpassFeatureSource"; import GeoJsonSource from "./Sources/GeoJsonSource"; @@ -44,37 +43,35 @@ export default class FeaturePipeline { public readonly timeout: UIEventSource; public readonly somethingLoaded: UIEventSource = new UIEventSource(false) public readonly newDataLoadedSignal: UIEventSource = new UIEventSource(undefined) - - - + public readonly relationTracker: RelationsTracker + /** + * Keeps track of all raw OSM-nodes. + * Only initialized if 'type_node' is defined as layer + */ + public readonly fullNodeDatabase?: FullNodeDatabaseSource private readonly overpassUpdater: OverpassFeatureSource private state: MapState; - private readonly relationTracker: RelationsTracker private readonly perLayerHierarchy: Map; - /** * Keeps track of the age of the loaded data. * Has one freshness-Calculator for every layer * @private */ private readonly freshnesses = new Map(); - private readonly oldestAllowedDate: Date; private readonly osmSourceZoomLevel - private readonly localStorageSavers = new Map() - private readonly metataggingRecalculated = new UIEventSource(undefined) - private readonly requestMetataggingRecalculation = new UIEventSource(undefined) - - /** - * Keeps track of all raw OSM-nodes. - * Only initialized if 'type_node' is defined as layer - */ - public readonly fullNodeDatabase? : FullNodeDatabaseSource + private readonly newGeometryHandler : NewGeometryFromChangesFeatureSource; + constructor( handleFeatureSource: (source: FeatureSourceForLayer & Tiled) => void, - state: MapState) { + state: MapState, + options?: { + /*Used for metatagging - will receive all the sources with changeGeometry applied but without filtering*/ + handleRawFeatureSource: (source: FeatureSourceForLayer) => void + } + ) { this.state = state; const self = this @@ -103,10 +100,6 @@ export default class FeaturePipeline { } ); - this.requestMetataggingRecalculation.stabilized(500).addCallbackAndRunD(_ => { - self.updateAllMetaTagging("Request stabilized") - }) - const neededTilesFromOsm = this.getNeededTilesFromOsm(this.sufficientlyZoomed) const perLayerHierarchy = new Map() @@ -115,13 +108,13 @@ export default class FeaturePipeline { // Given a tile, wraps it and passes it on to render (handled by 'handleFeatureSource' function patchedHandleFeatureSource(src: FeatureSourceForLayer & IndexedFeatureSource & Tiled) { // This will already contain the merged features for this tile. In other words, this will only be triggered once for every tile - const srcFiltered = - new FilteringFeatureSource(state, src.tileIndex, - new ChangeGeometryApplicator(src, state.changes), - self.metataggingRecalculated - ) + const withChanges = new ChangeGeometryApplicator(src, state.changes); + const srcFiltered = new FilteringFeatureSource(state, src.tileIndex, withChanges) handleFeatureSource(srcFiltered) + if (options?.handleRawFeatureSource) { + options.handleRawFeatureSource(withChanges) + } self.somethingLoaded.setData(true) // We do not mark as visited here, this is the responsability of the code near the actual loader (e.g. overpassLoader and OSMApiFeatureLoader) } @@ -178,11 +171,6 @@ export default class FeaturePipeline { if (id === "current_view") { handlePriviligedFeatureSource(state.currentView) - state.currentView.features.map(ffs => ffs[0]?.feature?.properties?.id).withEqualityStabilized((x,y) => x === y) - .addCallbackAndRunD(_ => { - self.applyMetaTags(state.currentView, this.state, `currentview changed`) - } - ) continue } @@ -216,7 +204,7 @@ export default class FeaturePipeline { TiledFeatureSource.createHierarchy(src, { layer: src.layer, minZoomLevel: this.osmSourceZoomLevel, - dontEnforceMinZoom: true, + noDuplicates: true, registerTile: (tile) => { new RegisteringAllFromFeatureSourceActor(tile, state.allElements) perLayerHierarchy.get(id).registerTile(tile) @@ -274,7 +262,7 @@ export default class FeaturePipeline { }) }) - if(this.fullNodeDatabase !== undefined){ + if (this.fullNodeDatabase !== undefined) { osmFeatureSource.rawDataHandlers.push((osmJson, tileId) => this.fullNodeDatabase.handleOsmJson(osmJson, tileId)) } @@ -288,7 +276,7 @@ export default class FeaturePipeline { (source) => TiledFeatureSource.createHierarchy(source, { layer: source.layer, minZoomLevel: source.layer.layerDef.minzoom, - dontEnforceMinZoom: true, + noDuplicates: true, maxFeatureCount: state.layoutToUse.clustering.minNeededElements, maxZoomLevel: state.layoutToUse.clustering.maxZoom, registerTile: (tile) => { @@ -296,7 +284,7 @@ export default class FeaturePipeline { self.localStorageSavers.get(tile.layer.layerDef.id)?.addTile(tile) perLayerHierarchy.get(source.layer.layerDef.id).registerTile(new RememberingSource(tile)) tile.features.addCallbackAndRunD(f => { - if(f.length === 0){ + if (f.length === 0) { return } self.onNewDataLoaded(tile) @@ -305,17 +293,20 @@ export default class FeaturePipeline { } }), updater, - {handleLeftovers: (leftOvers) => { - console.warn("Overpass returned a few non-matched features:", leftOvers) - }}) + { + handleLeftovers: (leftOvers) => { + console.warn("Overpass returned a few non-matched features:", leftOvers) + } + }) // Also load points/lines that are newly added. - const newGeometry = new NewGeometryFromChangesFeatureSource(state.changes, state.osmConnection._oauth_config.url) + const newGeometry = new NewGeometryFromChangesFeatureSource(state.changes, state.allElements, state.osmConnection._oauth_config.url) + this.newGeometryHandler = newGeometry; newGeometry.features.addCallbackAndRun(geometries => { console.debug("New geometries are:", geometries) }) - + new RegisteringAllFromFeatureSourceActor(newGeometry, state.allElements) // A NewGeometryFromChangesFeatureSource does not split per layer, so we do this next new PerLayerFeatureSourceSplitter(state.filteredLayers, @@ -323,22 +314,19 @@ export default class FeaturePipeline { // We don't bother to split them over tiles as it'll contain little features by default, so we simply add them like this perLayerHierarchy.get(perLayer.layer.layerDef.id).registerTile(perLayer) // AT last, we always apply the metatags whenever possible - perLayer.features.addCallbackAndRunD(_ => self.onNewDataLoaded(perLayer)) + perLayer.features.addCallbackAndRunD(feats => { + self.onNewDataLoaded(perLayer); + }) }, newGeometry, - {handleLeftovers: (leftOvers) => { - console.warn("Got some leftovers from the filteredLayers: ", leftOvers) - }} + { + handleLeftovers: (leftOvers) => { + console.warn("Got some leftovers from the filteredLayers: ", leftOvers) + } + } ) - - // Whenever fresh data comes in, we need to update the metatagging - self.newDataLoadedSignal.stabilized(250).addCallback(src => { - self.updateAllMetaTagging(`New data loaded by ${src.name} (and stabilized)`) - }) - - this.runningQuery = updater.runningQuery.map( overpass => { console.log("FeaturePipeline: runningQuery state changed: Overpass", overpass ? "is querying," : "is idle,", @@ -349,11 +337,6 @@ export default class FeaturePipeline { } - private onNewDataLoaded(src: FeatureSource){ - this.newDataLoadedSignal.setData(src) - this.requestMetataggingRecalculation.setData(new Date()) - } - public GetAllFeaturesWithin(bbox: BBox): any[][] { const self = this const tiles = [] @@ -362,6 +345,22 @@ export default class FeaturePipeline { return tiles; } + public GetAllFeaturesAndMetaWithin(bbox: BBox, layerIdWhitelist?: Set): {features: any[], layer: string}[] { + const self = this + const tiles :{features: any[], layer: string}[]= [] + Array.from(this.perLayerHierarchy.keys()) + .forEach(key => { + if(layerIdWhitelist !== undefined && !layerIdWhitelist.has(key)){ + return; + } + return tiles.push({ + layer: key, + features: [].concat(...self.GetFeaturesWithin(key, bbox)) + }); + }) + return tiles; + } + public GetFeaturesWithin(layerId: string, bbox: BBox): any[][] { if (layerId === "*") { return this.GetAllFeaturesWithin(bbox) @@ -382,20 +381,24 @@ export default class FeaturePipeline { }) } + private onNewDataLoaded(src: FeatureSource) { + this.newDataLoadedSignal.setData(src) + } + private freshnessForVisibleLayers(z: number, x: number, y: number): Date { let oldestDate = undefined; for (const flayer of this.state.filteredLayers.data) { - if (!flayer.isDisplayed.data) { + if (!flayer.isDisplayed.data && !flayer.layerDef.forceLoad) { continue } if (this.state.locationControl.data.zoom < flayer.layerDef.minzoom) { continue; } - if(flayer.layerDef.maxAgeOfCache === 0){ + if (flayer.layerDef.maxAgeOfCache === 0) { return undefined; } const freshnessCalc = this.freshnesses.get(flayer.layerDef.id) - if(freshnessCalc === undefined){ + if (freshnessCalc === undefined) { console.warn("No freshness tracker found for ", flayer.layerDef.id) return undefined } @@ -411,6 +414,9 @@ export default class FeaturePipeline { return oldestDate } + /* + * Gives an UIEventSource containing the tileIndexes of the tiles that should be loaded from OSM + * */ private getNeededTilesFromOsm(isSufficientlyZoomed: UIEventSource): UIEventSource { const self = this return this.state.currentBounds.map(bbox => { @@ -498,44 +504,14 @@ export default class FeaturePipeline { return updater; } - private applyMetaTags(src: FeatureSourceForLayer, state: any, reason: string) { - const self = this - if(src === undefined){ - throw "Src is undefined" - } - const layerDef = src.layer.layerDef; - console.debug(`Applying metatags onto ${src.name} due to ${reason} which has ${src.features.data?.length} features`) - if(src.features.data.length == 0){ - return - } - MetaTagging.addMetatags( - src.features.data, - { - memberships: this.relationTracker, - getFeaturesWithin: (layerId, bbox: BBox) => self.GetFeaturesWithin(layerId, bbox), - getFeatureById: (id: string) => self.state.allElements.ContainingFeatures.get(id) - }, - layerDef, - state, - { - includeDates: true, - // We assume that the non-dated metatags are already set by the cache generator - includeNonDates: layerDef.source.geojsonSource === undefined || !layerDef.source.isOsmCacheLayer - } - ) - - } - - - public updateAllMetaTagging(reason: string) { - const self = this; - this.perLayerHierarchy.forEach(hierarchy => { - hierarchy.loadedTiles.forEach(tile => { - self.applyMetaTags(tile, this.state, `${reason} (tile ${tile.tileIndex})`) - }) + /** + * Inject a new point + */ + InjectNewPoint(geojson) { + this.newGeometryHandler.features.data.push({ + feature: geojson, + freshness: new Date() }) - self.metataggingRecalculated.ping() - + this.newGeometryHandler.features.ping(); } - } \ No newline at end of file diff --git a/Logic/FeatureSource/PerLayerFeatureSourceSplitter.ts b/Logic/FeatureSource/PerLayerFeatureSourceSplitter.ts index 3b18e21447..8bf207aaaa 100644 --- a/Logic/FeatureSource/PerLayerFeatureSourceSplitter.ts +++ b/Logic/FeatureSource/PerLayerFeatureSourceSplitter.ts @@ -50,8 +50,8 @@ export default class PerLayerFeatureSourceSplitter { break; } } - noLayerFound.push(f) } + noLayerFound.push(f) } // At this point, we have our features per layer as a list diff --git a/Logic/FeatureSource/Sources/FilteringFeatureSource.ts b/Logic/FeatureSource/Sources/FilteringFeatureSource.ts index 1250184063..5609bfed6e 100644 --- a/Logic/FeatureSource/Sources/FilteringFeatureSource.ts +++ b/Logic/FeatureSource/Sources/FilteringFeatureSource.ts @@ -19,8 +19,8 @@ export default class FilteringFeatureSource implements FeatureSourceForLayer, Ti }; private readonly _alreadyRegistered = new Set>(); private readonly _is_dirty = new UIEventSource(false) - private previousFeatureSet : Set = undefined; - + private previousFeatureSet: Set = undefined; + constructor( state: { locationControl: UIEventSource<{ zoom: number }>, @@ -29,11 +29,11 @@ export default class FilteringFeatureSource implements FeatureSourceForLayer, Ti }, tileIndex, upstream: FeatureSourceForLayer, - metataggingUpdated: UIEventSource + metataggingUpdated?: UIEventSource ) { this.name = "FilteringFeatureSource(" + upstream.name + ")" this.tileIndex = tileIndex - this.bbox = BBox.fromTileIndex(tileIndex) + this.bbox = tileIndex === undefined ? undefined : BBox.fromTileIndex(tileIndex) this.upstream = upstream this.state = state @@ -54,8 +54,8 @@ export default class FilteringFeatureSource implements FeatureSourceForLayer, Ti self.update() } }) - - metataggingUpdated.addCallback(_ => { + + metataggingUpdated?.addCallback(_ => { self._is_dirty.setData(true) }) @@ -66,7 +66,7 @@ export default class FilteringFeatureSource implements FeatureSourceForLayer, Ti const self = this; const layer = this.upstream.layer; const features: { feature: any; freshness: Date }[] = (this.upstream.features.data ?? []); - const includedFeatureIds = new Set(); + const includedFeatureIds = new Set(); const newFeatures = (features ?? []).filter((f) => { self.registerCallback(f.feature) @@ -82,9 +82,9 @@ export default class FilteringFeatureSource implements FeatureSourceForLayer, Ti } } - const tagsFilter = Array.from(layer.appliedFilters.data.values()); - for (const filter of tagsFilter ?? []) { - const neededTags : TagsFilter = filter?.currentFilter + const tagsFilter = Array.from(layer.appliedFilters?.data?.values() ?? []) + for (const filter of tagsFilter) { + const neededTags: TagsFilter = filter?.currentFilter if (neededTags !== undefined && !neededTags.matchesProperties(f.feature.properties)) { // Hidden by the filter on the layer itself - we want to hide it no matter wat return false; @@ -97,29 +97,29 @@ export default class FilteringFeatureSource implements FeatureSourceForLayer, Ti const previousSet = this.previousFeatureSet; this._is_dirty.setData(false) - + // Is there any difference between the two sets? - if(previousSet !== undefined && previousSet.size === includedFeatureIds.size){ + if (previousSet !== undefined && previousSet.size === includedFeatureIds.size) { // The size of the sets is the same - they _might_ be identical const newItemFound = Array.from(includedFeatureIds).some(id => !previousSet.has(id)) - if(!newItemFound){ + if (!newItemFound) { // We know that: // - The sets have the same size // - Every item from the new set has been found in the old set // which means they are identical! return; } - + } - + // Something new has been found! this.features.setData(newFeatures); - + } private registerCallback(feature: any) { const src = this.state?.allElements?.addOrGetElement(feature) - if(src == undefined){ + if (src == undefined) { return } if (this._alreadyRegistered.has(src)) { diff --git a/Logic/FeatureSource/Sources/GeoJsonSource.ts b/Logic/FeatureSource/Sources/GeoJsonSource.ts index 8de41dd33c..df7270255c 100644 --- a/Logic/FeatureSource/Sources/GeoJsonSource.ts +++ b/Logic/FeatureSource/Sources/GeoJsonSource.ts @@ -18,19 +18,13 @@ export default class GeoJsonSource implements FeatureSourceForLayer, Tiled { public readonly layer: FilteredLayer; public readonly tileIndex public readonly bbox; - private readonly seenids: Set = new Set() - /** - * Only used if the actual source is a tiled geojson. - * A big feature might be contained in multiple tiles. - * However, we only want to load them once. The blacklist thus contains all ids of all features previously seen - * @private - */ - private readonly featureIdBlacklist?: UIEventSource> + private readonly seenids: Set; + private readonly idKey ?: string; public constructor(flayer: FilteredLayer, - zxy?: [number, number, number], + zxy?: [number, number, number] | BBox, options?: { - featureIdBlacklist?: UIEventSource> + featureIdBlacklist?: Set }) { if (flayer.layerDef.source.geojsonZoomLevel !== undefined && zxy === undefined) { @@ -38,26 +32,36 @@ export default class GeoJsonSource implements FeatureSourceForLayer, Tiled { } this.layer = flayer; - this.featureIdBlacklist = options?.featureIdBlacklist + this.idKey = flayer.layerDef.source.idKey + this.seenids = options?.featureIdBlacklist ?? new Set() let url = flayer.layerDef.source.geojsonSource.replace("{layer}", flayer.layerDef.id); if (zxy !== undefined) { - const [z, x, y] = zxy; - let tile_bbox = BBox.fromTile(z, x, y) + let tile_bbox: BBox; + if (zxy instanceof BBox) { + tile_bbox = zxy; + } else { + const [z, x, y] = zxy; + tile_bbox = BBox.fromTile(z, x, y); + + this.tileIndex = Tiles.tile_index(z, x, y) + this.bbox = BBox.fromTile(z, x, y) + url = url + .replace('{z}', "" + z) + .replace('{x}', "" + x) + .replace('{y}', "" + y) + } let bounds: { minLat: number, maxLat: number, minLon: number, maxLon: number } = tile_bbox if (this.layer.layerDef.source.mercatorCrs) { bounds = tile_bbox.toMercator() } + url = url - .replace('{z}', "" + z) - .replace('{x}', "" + x) - .replace('{y}', "" + y) .replace('{y_min}', "" + bounds.minLat) .replace('{y_max}', "" + bounds.maxLat) .replace('{x_min}', "" + bounds.minLon) .replace('{x_max}', "" + bounds.maxLon) - this.tileIndex = Tiles.tile_index(z, x, y) - this.bbox = BBox.fromTile(z, x, y) + } else { this.tileIndex = Tiles.tile_index(0, 0, 0) this.bbox = BBox.global; @@ -83,7 +87,7 @@ export default class GeoJsonSource implements FeatureSourceForLayer, Tiled { if (self.layer.layerDef.source.mercatorCrs) { json = GeoOperations.GeoJsonToWGS84(json) } - + const time = new Date(); const newFeatures: { feature: any, freshness: Date } [] = [] let i = 0; @@ -91,12 +95,21 @@ export default class GeoJsonSource implements FeatureSourceForLayer, Tiled { for (const feature of json.features) { const props = feature.properties for (const key in props) { + + if(props[key] === null){ + delete props[key] + } + if (typeof props[key] !== "string") { // Make sure all the values are string, it crashes stuff otherwise props[key] = JSON.stringify(props[key]) } } + if(self.idKey !== undefined){ + props.id = props[self.idKey] + } + if (props.id === undefined) { props.id = url + "/" + i; feature.id = url + "/" + i; @@ -108,10 +121,6 @@ export default class GeoJsonSource implements FeatureSourceForLayer, Tiled { } self.seenids.add(props.id) - if (self.featureIdBlacklist?.data?.has(props.id)) { - continue; - } - let freshness: Date = time; if (feature.properties["_last_edit:timestamp"] !== undefined) { freshness = new Date(props["_last_edit:timestamp"]) diff --git a/Logic/FeatureSource/Sources/NewGeometryFromChangesFeatureSource.ts b/Logic/FeatureSource/Sources/NewGeometryFromChangesFeatureSource.ts index 1c7ab3f393..ee2bd2cf41 100644 --- a/Logic/FeatureSource/Sources/NewGeometryFromChangesFeatureSource.ts +++ b/Logic/FeatureSource/Sources/NewGeometryFromChangesFeatureSource.ts @@ -1,8 +1,9 @@ import {Changes} from "../../Osm/Changes"; -import {OsmNode, OsmRelation, OsmWay} from "../../Osm/OsmObject"; +import {OsmNode, OsmObject, OsmRelation, OsmWay} from "../../Osm/OsmObject"; import FeatureSource from "../FeatureSource"; import {UIEventSource} from "../../UIEventSource"; import {ChangeDescription} from "../../Osm/Actions/ChangeDescription"; +import {ElementStorage} from "../../ElementStorage"; export class NewGeometryFromChangesFeatureSource implements FeatureSource { // This class name truly puts the 'Java' into 'Javascript' @@ -13,79 +14,115 @@ export class NewGeometryFromChangesFeatureSource implements FeatureSource { public readonly features: UIEventSource<{ feature: any; freshness: Date }[]> = new UIEventSource<{ feature: any; freshness: Date }[]>([]); public readonly name: string = "newFeatures"; - constructor(changes: Changes, backendUrl: string) { + constructor(changes: Changes, allElementStorage: ElementStorage, backendUrl: string) { const seenChanges = new Set(); const features = this.features.data; const self = this; - changes.pendingChanges - .map(changes => changes.filter(ch => - // only new objects allowed - ch.id < 0 && - // The change is an update to the object (e.g. tags or geometry) - not the actual create - ch.changes !== undefined && - // If tags is undefined, this is probably a new point that is part of a split road - ch.tags !== undefined && - // Already handled - !seenChanges.has(ch))) - .addCallbackAndRunD(changes => { - if (changes.length === 0) { - return; + changes.pendingChanges.stabilized(100).addCallbackAndRunD(changes => { + if (changes.length === 0) { + return; + } + + const now = new Date(); + let somethingChanged = false; + + function add(feature) { + feature.id = feature.properties.id + features.push({ + feature: feature, + freshness: now + }) + somethingChanged = true; + } + + for (const change of changes) { + if (seenChanges.has(change)) { + // Already handled + continue; + } + seenChanges.add(change) + + if (change.tags === undefined) { + // If tags is undefined, this is probably a new point that is part of a split road + continue } - const now = new Date(); - - function add(feature) { - feature.id = feature.properties.id - features.push({ - feature: feature, - freshness: now - }) - } - - for (const change of changes) { - seenChanges.add(change) - try { - const tags = {} - for (const kv of change.tags) { - tags[kv.k] = kv.v - } - tags["id"] = change.type + "/" + change.id - - tags["_backend"] = backendUrl - - switch (change.type) { - case "node": - const n = new OsmNode(change.id) - n.tags = tags - n.lat = change.changes["lat"] - n.lon = change.changes["lon"] - const geojson = n.asGeoJson() - add(geojson) - break; - case "way": - const w = new OsmWay(change.id) - w.tags = tags - w.nodes = change.changes["nodes"] - w.coordinates = change.changes["coordinates"].map(coor => [coor[1], coor[0]]) - add(w.asGeoJson()) - break; - case "relation": - const r = new OsmRelation(change.id) - r.tags = tags - r.members = change.changes["members"] - add(r.asGeoJson()) - break; - } - } catch (e) { - console.error("Could not generate a new geometry to render on screen for:", e) + if (change.id > 0) { + // This is an already existing object + // In _most_ of the cases, this means that this _isn't_ a new object + // However, when a point is snapped to an already existing point, we have to create a representation for this point! + // For this, we introspect the change + if (allElementStorage.has(change.id)) { + // const currentTags = allElementStorage.getEventSourceById(change.id).data + continue; } + console.debug("Detected a reused point") + // The 'allElementsStore' does _not_ have this point yet, so we have to create it + OsmObject.DownloadObjectAsync(change.type + "/" + change.id).then(feat => { + console.log("Got the reused point:", feat) + for (const kv of change.tags) { + feat.tags[kv.k] = kv.v + } + const geojson = feat.asGeoJson(); + allElementStorage.addOrGetElement(geojson) + self.features.data.push({feature: geojson, freshness: new Date()}) + self.features.ping() + }) + continue + + } else if (change.id < 0 && change.changes === undefined) { + // The geometry is not described - not a new point + if (change.id < 0) { + console.error("WARNING: got a new point without geometry!") + } + continue; } + + try { + const tags = {} + for (const kv of change.tags) { + tags[kv.k] = kv.v + } + tags["id"] = change.type + "/" + change.id + + tags["_backend"] = backendUrl + + switch (change.type) { + case "node": + const n = new OsmNode(change.id) + n.tags = tags + n.lat = change.changes["lat"] + n.lon = change.changes["lon"] + const geojson = n.asGeoJson() + add(geojson) + break; + case "way": + const w = new OsmWay(change.id) + w.tags = tags + w.nodes = change.changes["nodes"] + w.coordinates = change.changes["coordinates"].map(([lon, lat]) => [lat, lon]) + add(w.asGeoJson()) + break; + case "relation": + const r = new OsmRelation(change.id) + r.tags = tags + r.members = change.changes["members"] + add(r.asGeoJson()) + break; + } + } catch (e) { + console.error("Could not generate a new geometry to render on screen for:", e) + } + + } + if (somethingChanged) { self.features.ping() - }) + } + }) } } \ No newline at end of file diff --git a/Logic/FeatureSource/Sources/SimpleFeatureSource.ts b/Logic/FeatureSource/Sources/SimpleFeatureSource.ts index 138a3465e6..52007d2f5b 100644 --- a/Logic/FeatureSource/Sources/SimpleFeatureSource.ts +++ b/Logic/FeatureSource/Sources/SimpleFeatureSource.ts @@ -10,7 +10,7 @@ export default class SimpleFeatureSource implements FeatureSourceForLayer, Tiled public readonly bbox: BBox = BBox.global; public readonly tileIndex: number; - constructor(layer: FilteredLayer, tileIndex: number, featureSource?: UIEventSource<{ feature:any; freshness: Date }[]>) { + constructor(layer: FilteredLayer, tileIndex: number, featureSource?: UIEventSource<{ feature: any; freshness: Date }[]>) { this.name = "SimpleFeatureSource(" + layer.layerDef.id + ")" this.layer = layer this.tileIndex = tileIndex ?? 0; diff --git a/Logic/FeatureSource/Sources/StaticFeatureSource.ts b/Logic/FeatureSource/Sources/StaticFeatureSource.ts index d5795a1d51..2d8aef37df 100644 --- a/Logic/FeatureSource/Sources/StaticFeatureSource.ts +++ b/Logic/FeatureSource/Sources/StaticFeatureSource.ts @@ -10,17 +10,20 @@ export default class StaticFeatureSource implements FeatureSource { constructor(features: any[] | UIEventSource>, useFeaturesDirectly) { const now = new Date(); + if(features === undefined){ + throw "Static feature source received undefined as source" + } if (useFeaturesDirectly) { // @ts-ignore this.features = features } else if (features instanceof UIEventSource) { // @ts-ignore - this.features = features.map(features => features.map(f => ({feature: f, freshness: now}))) + this.features = features.map(features => features?.map(f => ({feature: f, freshness: now}) ?? [])) } else { - this.features = new UIEventSource(features.map(f => ({ + this.features = new UIEventSource(features?.map(f => ({ feature: f, freshness: now - }))) + }))??[]) } } diff --git a/Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts b/Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts index 09b0b58527..0c37711ce4 100644 --- a/Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts +++ b/Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts @@ -40,7 +40,7 @@ export default class DynamicGeoJsonTileSource extends DynamicTileSource { json => { const data = new Map>(); for (const x in json) { - if(x === "zoom"){ + if (x === "zoom") { continue } data.set(Number(x), new Set(json[x])) @@ -55,8 +55,7 @@ export default class DynamicGeoJsonTileSource extends DynamicTileSource { } } - const seenIds = new Set(); - const blackList = new UIEventSource(seenIds) + const blackList = (new Set()) super( layer, source.geojsonZoomLevel, @@ -76,10 +75,7 @@ export default class DynamicGeoJsonTileSource extends DynamicTileSource { featureIdBlacklist: blackList } ) - src.features.addCallbackAndRunD(feats => { - feats.forEach(feat => seenIds.add(feat.feature.properties.id)) - blackList.ping(); - }) + registerLayer(src) return src }, @@ -91,7 +87,7 @@ export default class DynamicGeoJsonTileSource extends DynamicTileSource { public static RegisterWhitelist(url: string, json: any) { const data = new Map>(); for (const x in json) { - if(x === "zoom"){ + if (x === "zoom") { continue } data.set(Number(x), new Set(json[x])) diff --git a/Logic/FeatureSource/TiledFeatureSource/DynamicTileSource.ts b/Logic/FeatureSource/TiledFeatureSource/DynamicTileSource.ts index 7019364aa5..b974687307 100644 --- a/Logic/FeatureSource/TiledFeatureSource/DynamicTileSource.ts +++ b/Logic/FeatureSource/TiledFeatureSource/DynamicTileSource.ts @@ -27,7 +27,7 @@ export default class DynamicTileSource implements TileHierarchy() const neededTiles = state.locationControl.map( location => { - if (!layer.isDisplayed.data) { + if (!layer.isDisplayed.data && !layer.layerDef.forceLoad) { // No need to download! - the layer is disabled return undefined; } @@ -44,11 +44,11 @@ export default class DynamicTileSource implements TileHierarchy 10000){ + if (tileRange.total > 10000) { console.error("Got a really big tilerange, bounds and location might be out of sync") return undefined } - + const needed = Tiles.MapRange(tileRange, (x, y) => Tiles.tile_index(zoomlevel, x, y)).filter(i => !self._loadedTiles.has(i)) if (needed.length === 0) { return undefined diff --git a/Logic/FeatureSource/TiledFeatureSource/FullNodeDatabaseSource.ts b/Logic/FeatureSource/TiledFeatureSource/FullNodeDatabaseSource.ts index b56b1eb149..6561b234d0 100644 --- a/Logic/FeatureSource/TiledFeatureSource/FullNodeDatabaseSource.ts +++ b/Logic/FeatureSource/TiledFeatureSource/FullNodeDatabaseSource.ts @@ -45,8 +45,8 @@ export default class FullNodeDatabaseSource implements TileHierarchy([]) - this.parentWays.set(nodeId,src) + const src = new UIEventSource([]) + this.parentWays.set(nodeId, src) src.addCallback(parentWays => { const tgs = nodesById.get(nodeId).tags tgs ["parent_ways"] = JSON.stringify(parentWays.map(w => w.tags)) diff --git a/Logic/FeatureSource/TiledFeatureSource/OsmFeatureSource.ts b/Logic/FeatureSource/TiledFeatureSource/OsmFeatureSource.ts index 9c3f1fd2da..68190d9098 100644 --- a/Logic/FeatureSource/TiledFeatureSource/OsmFeatureSource.ts +++ b/Logic/FeatureSource/TiledFeatureSource/OsmFeatureSource.ts @@ -89,8 +89,8 @@ export default class OsmFeatureSource { if (z > 20) { throw "This is an absurd high zoom level" } - - if( z < 14){ + + if (z < 14) { throw `Zoom ${z} is too much for OSM to handle! Use a higher zoom level!` } diff --git a/Logic/FeatureSource/TiledFeatureSource/TileHierarchyMerger.ts b/Logic/FeatureSource/TiledFeatureSource/TileHierarchyMerger.ts index 716aefde00..c65decf9f2 100644 --- a/Logic/FeatureSource/TiledFeatureSource/TileHierarchyMerger.ts +++ b/Logic/FeatureSource/TiledFeatureSource/TileHierarchyMerger.ts @@ -21,7 +21,6 @@ export class TileHierarchyMerger implements TileHierarchy void, readonly layer?: FilteredLayer } \ No newline at end of file diff --git a/Logic/GeoOperations.ts b/Logic/GeoOperations.ts index e1acc4dd42..9c0bad52c4 100644 --- a/Logic/GeoOperations.ts +++ b/Logic/GeoOperations.ts @@ -59,7 +59,7 @@ export class GeoOperations { const coor = feature.geometry.coordinates; for (const otherFeature of otherFeatures) { - if (feature.id !== undefined && feature.id === otherFeature.id) { + if (feature.properties.id !== undefined && feature.properties.id === otherFeature.properties.id) { continue; } @@ -79,7 +79,7 @@ export class GeoOperations { for (const otherFeature of otherFeatures) { - if (feature.id !== undefined && feature.id === otherFeature.id) { + if (feature.properties.id !== undefined && feature.properties.id === otherFeature.properties.id) { continue; } @@ -97,7 +97,7 @@ export class GeoOperations { for (const otherFeature of otherFeatures) { - if (feature.id === otherFeature.id) { + if (feature.properties.id !== undefined && feature.properties.id === otherFeature.properties.id) { continue; } @@ -124,6 +124,20 @@ export class GeoOperations { return result; } + public static pointInPolygonCoordinates(x: number, y: number, coordinates: [number, number][][]) { + const inside = GeoOperations.pointWithinRing(x, y, /*This is the outer ring of the polygon */coordinates[0]) + if (!inside) { + return false; + } + for (let i = 1; i < coordinates.length; i++) { + const inHole = GeoOperations.pointWithinRing(x, y, coordinates[i] /* These are inner rings, aka holes*/) + if (inHole) { + return false; + } + } + return true; + } + public static inside(pointCoordinate, feature): boolean { // ray-casting algorithm based on // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html @@ -136,62 +150,31 @@ export class GeoOperations { pointCoordinate = pointCoordinate.geometry.coordinates } - if (feature.geometry.type === "MultiPolygon") { - const coordinates = feature.geometry.coordinates[0]; - const outerPolygon = coordinates[0]; - const inside = GeoOperations.inside(pointCoordinate, { - geometry: { - type: 'Polygon', - coordinates: [outerPolygon] - } - }) - if (!inside) { - return false; - } - for (let i = 1; i < coordinates.length; i++) { - const inHole = GeoOperations.inside(pointCoordinate, { - geometry: { - type: 'Polygon', - coordinates: [coordinates[i]] - } - }) - if (inHole) { - return false; - } - } - return true; - } - - const x: number = pointCoordinate[0]; const y: number = pointCoordinate[1]; - for (let i = 0; i < feature.geometry.coordinates.length; i++) { - let poly = feature.geometry.coordinates[i]; - let inside = false; - for (let i = 0, j = poly.length - 1; i < poly.length; j = i++) { - const coori = poly[i]; - const coorj = poly[j]; - - const xi = coori[0]; - const yi = coori[1]; - const xj = coorj[0]; - const yj = coorj[1]; - - const intersect = ((yi > y) != (yj > y)) - && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); - if (intersect) { - inside = !inside; + if (feature.geometry.type === "MultiPolygon") { + const coordinatess = feature.geometry.coordinates; + for (const coordinates of coordinatess) { + const inThisPolygon = GeoOperations.pointInPolygonCoordinates(x, y, coordinates) + if (inThisPolygon) { + return true; } + } - if (inside) { - return true; - } + return false; } - return false; - }; + + if (feature.geometry.type === "Polygon") { + return GeoOperations.pointInPolygonCoordinates(x, y, feature.geometry.coordinates) + } + + throw "GeoOperations.inside: unsupported geometry type "+feature.geometry.type + + + } static lengthInMeters(feature: any) { return turf.length(feature) * 1000 @@ -558,19 +541,19 @@ export class GeoOperations { const prevCoordinate = coordinates[i - 1] const distP = GeoOperations.distanceBetween(coordinate, prevCoordinate) - if(distP < 0.1){ + if (distP < 0.1) { coordinates.splice(i, 1) continue } - - if(i == coordinates.length - 2){ + + if (i == coordinates.length - 2) { const distN = GeoOperations.distanceBetween(coordinate, nextCoordinate) - if(distN < 0.1){ + if (distN < 0.1) { coordinates.splice(i, 1) continue } } - + const bearingN = turf.bearing(coordinate, nextCoordinate) const bearingP = turf.bearing(prevCoordinate, coordinate) const diff = Math.abs(bearingN - bearingP) @@ -587,6 +570,26 @@ export class GeoOperations { } + private static pointWithinRing(x: number, y: number, ring: [number, number][]) { + let inside = false; + for (let i = 0, j = ring.length - 1; i < ring.length; j = i++) { + const coori = ring[i]; + const coorj = ring[j]; + + const xi = coori[0]; + const yi = coori[1]; + const xj = coorj[0]; + const yj = coorj[1]; + + const intersect = ((yi > y) != (yj > y)) + && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + if (intersect) { + inside = !inside; + } + } + return inside; + } + /** * 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 @@ -683,6 +686,8 @@ export class GeoOperations { throw "CalculateIntersection fallthrough: can not calculate an intersection between features" } + + } diff --git a/Logic/ImageProviders/ImageProvider.ts b/Logic/ImageProviders/ImageProvider.ts index c1d90578e4..dded72a0b1 100644 --- a/Logic/ImageProviders/ImageProvider.ts +++ b/Logic/ImageProviders/ImageProvider.ts @@ -35,7 +35,7 @@ export default abstract class ImageProvider { }): UIEventSource { const prefixes = options?.prefixes ?? this.defaultKeyPrefixes if (prefixes === undefined) { - throw "The image provider" + this.constructor.name + " doesn't define `defaultKeyPrefixes`" + throw "No `defaultKeyPrefixes` defined by this image provider" } const relevantUrls = new UIEventSource<{ url: string; key: string; provider: ImageProvider }[]>([]) const seenValues = new Set() diff --git a/Logic/ImageProviders/Imgur.ts b/Logic/ImageProviders/Imgur.ts index b06b2a6c0e..d7de993c00 100644 --- a/Logic/ImageProviders/Imgur.ts +++ b/Logic/ImageProviders/Imgur.ts @@ -44,7 +44,7 @@ export class Imgur extends ImageProvider { } - static uploadImage(title: string, description: string, blob, + static uploadImage(title: string, description: string, blob: File, handleSuccessfullUpload: ((imageURL: string) => void), onFail: (reason: string) => void) { diff --git a/Logic/MetaTagging.ts b/Logic/MetaTagging.ts index a48dae3d90..a73476d36f 100644 --- a/Logic/MetaTagging.ts +++ b/Logic/MetaTagging.ts @@ -1,6 +1,7 @@ import SimpleMetaTaggers, {SimpleMetaTagger} from "./SimpleMetaTagger"; import {ExtraFuncParams, ExtraFunctions} from "./ExtraFunctions"; import LayerConfig from "../Models/ThemeConfig/LayerConfig"; +import {ElementStorage} from "./ElementStorage"; /** @@ -13,6 +14,7 @@ export default class MetaTagging { private static errorPrintCount = 0; private static readonly stopErrorOutputAt = 10; + private static retaggingFuncCache = new Map void)[]>() /** * This method (re)calculates all metatags and calculated tags on every given object. @@ -23,10 +25,11 @@ export default class MetaTagging { public static addMetatags(features: { feature: any; freshness: Date }[], params: ExtraFuncParams, layer: LayerConfig, - state, + state?: { allElements?: ElementStorage }, options?: { includeDates?: true | boolean, - includeNonDates?: true | boolean + includeNonDates?: true | boolean, + evaluateStrict?: false | boolean }): boolean { if (features === undefined || features.length === 0) { return; @@ -35,11 +38,11 @@ export default class MetaTagging { const metatagsToApply: SimpleMetaTagger[] = [] for (const metatag of SimpleMetaTaggers.metatags) { if (metatag.includesDates) { - if (options.includeDates ?? true) { + if (options?.includeDates ?? true) { metatagsToApply.push(metatag) } } else { - if (options.includeNonDates ?? true) { + if (options?.includeNonDates ?? true) { metatagsToApply.push(metatag) } } @@ -55,7 +58,7 @@ export default class MetaTagging { const feature = ff.feature const freshness = ff.freshness let somethingChanged = false - let definedTags = new Set(Object.getOwnPropertyNames( feature.properties )) + let definedTags = new Set(Object.getOwnPropertyNames(feature.properties)) for (const metatag of metatagsToApply) { try { if (!metatag.keys.some(key => feature.properties[key] === undefined)) { @@ -64,12 +67,17 @@ export default class MetaTagging { } if (metatag.isLazy) { - if(!metatag.keys.some(key => !definedTags.has(key))) { + if (!metatag.keys.some(key => !definedTags.has(key))) { // All keys are defined - lets skip! continue } somethingChanged = true; metatag.applyMetaTagsOnFeature(feature, freshness, layer, state) + if(options?.evaluateStrict){ + for (const key of metatag.keys) { + feature.properties[key] + } + } } else { const newValueAdded = metatag.applyMetaTagsOnFeature(feature, freshness, layer, state) /* Note that the expression: @@ -103,7 +111,8 @@ export default class MetaTagging { } return atLeastOneFeatureChanged } - public static createFunctionsForFeature(layerId: string, calculatedTags: [string, string, boolean][]): ((feature: any) => void)[] { + + private static createFunctionsForFeature(layerId: string, calculatedTags: [string, string, boolean][]): ((feature: any) => void)[] { const functions: ((feature: any) => any)[] = []; for (const entry of calculatedTags) { const key = entry[0] @@ -126,7 +135,7 @@ export default class MetaTagging { delete feat.properties[key] feat.properties[key] = result; return result - }catch(e){ + } catch (e) { if (MetaTagging.errorPrintCount < MetaTagging.stopErrorOutputAt) { console.warn("Could not calculate a " + (isStrict ? "strict " : "") + " calculated tag for key " + key + " defined by " + code + " (in layer" + layerId + ") due to \n" + e + "\n. Are you the theme creator? Doublecheck your code. Note that the metatags might not be stable on new features", e, e.stack) MetaTagging.errorPrintCount++; @@ -136,10 +145,10 @@ export default class MetaTagging { } return undefined; } - } - - - if(isStrict){ + } + + + if (isStrict) { functions.push(calculateAndAssign) continue } @@ -164,8 +173,6 @@ export default class MetaTagging { return functions; } - private static retaggingFuncCache = new Map void)[]>() - /** * Creates the function which adds all the calculated tags to a feature. Called once per layer * @param layer @@ -180,7 +187,7 @@ export default class MetaTagging { return undefined; } - let functions :((feature: any) => void)[] = MetaTagging.retaggingFuncCache.get(layer.id); + let functions: ((feature: any) => void)[] = MetaTagging.retaggingFuncCache.get(layer.id); if (functions === undefined) { functions = MetaTagging.createFunctionsForFeature(layer.id, calculatedTags) MetaTagging.retaggingFuncCache.set(layer.id, functions) diff --git a/Logic/Osm/Actions/ChangeLocationAction.ts b/Logic/Osm/Actions/ChangeLocationAction.ts index 54141d5489..429bfb596d 100644 --- a/Logic/Osm/Actions/ChangeLocationAction.ts +++ b/Logic/Osm/Actions/ChangeLocationAction.ts @@ -11,7 +11,7 @@ export default class ChangeLocationAction extends OsmChangeAction { theme: string, reason: string }) { - super(id,true); + super(id, true); if (!id.startsWith("node/")) { throw "Invalid ID: only 'node/number' is accepted" } @@ -19,7 +19,7 @@ export default class ChangeLocationAction extends OsmChangeAction { this._newLonLat = newLonLat; this._meta = meta; } - + protected async CreateChangeDescriptions(changes: Changes): Promise { const d: ChangeDescription = { diff --git a/Logic/Osm/Actions/ChangeTagAction.ts b/Logic/Osm/Actions/ChangeTagAction.ts index 013b90a461..963e8e9468 100644 --- a/Logic/Osm/Actions/ChangeTagAction.ts +++ b/Logic/Osm/Actions/ChangeTagAction.ts @@ -19,7 +19,7 @@ export default class ChangeTagAction extends OsmChangeAction { this._currentTags = currentTags; this._meta = meta; } - + /** * Doublechecks that no stupid values are added */ diff --git a/Logic/Osm/Actions/CreateMultiPolygonWithPointReuseAction.ts b/Logic/Osm/Actions/CreateMultiPolygonWithPointReuseAction.ts index 4723a2b11c..d5e3f53ecc 100644 --- a/Logic/Osm/Actions/CreateMultiPolygonWithPointReuseAction.ts +++ b/Logic/Osm/Actions/CreateMultiPolygonWithPointReuseAction.ts @@ -14,35 +14,36 @@ import {TagUtils} from "../../Tags/TagUtils"; * More or less the same as 'CreateNewWay', except that it'll try to reuse already existing points */ export default class CreateMultiPolygonWithPointReuseAction extends OsmCreateAction { - private readonly _tags: Tag[]; public newElementId: string = undefined; - public newElementIdNumber: number = undefined; + public newElementIdNumber: number = undefined; + private readonly _tags: Tag[]; private readonly createOuterWay: CreateWayWithPointReuseAction - private readonly createInnerWays : CreateNewWayAction[] -private readonly geojsonPreview: any; + private readonly createInnerWays: CreateNewWayAction[] + private readonly geojsonPreview: any; private readonly theme: string; private readonly changeType: "import" | "create" | string; + constructor(tags: Tag[], outerRingCoordinates: [number, number][], - innerRingsCoordinates: [number, number][][], + innerRingsCoordinates: [number, number][][], state: FeaturePipelineState, config: MergePointConfig[], changeType: "import" | "create" | string ) { - super(null,true); - this._tags = [...tags, new Tag("type","multipolygon")]; + super(null, true); + this._tags = [...tags, new Tag("type", "multipolygon")]; this.changeType = changeType; this.theme = state.layoutToUse.id - this. createOuterWay = new CreateWayWithPointReuseAction([], outerRingCoordinates, state, config) - this. createInnerWays = innerRingsCoordinates.map(ringCoordinates => - new CreateNewWayAction([], - ringCoordinates.map(([lon, lat] )=> ({lat, lon})), - {theme: state.layoutToUse.id})) - - this.geojsonPreview = { + this.createOuterWay = new CreateWayWithPointReuseAction([], outerRingCoordinates, state, config) + this.createInnerWays = innerRingsCoordinates.map(ringCoordinates => + new CreateNewWayAction([], + ringCoordinates.map(([lon, lat]) => ({lat, lon})), + {theme: state.layoutToUse.id})) + + this.geojsonPreview = { type: "Feature", properties: TagUtils.changeAsProperties(new And(this._tags).asChange({})), - geometry:{ + geometry: { type: "Polygon", coordinates: [ outerRingCoordinates, @@ -59,7 +60,7 @@ private readonly geojsonPreview: any; freshness: new Date(), feature: this.geojsonPreview }) - return outerPreview + return outerPreview } protected async CreateChangeDescriptions(changes: Changes): Promise { @@ -72,14 +73,14 @@ private readonly geojsonPreview: any; this.newElementIdNumber = changes.getNewID(); - this.newElementId = "relation/"+this.newElementIdNumber + this.newElementId = "relation/" + this.newElementIdNumber descriptions.push({ - type:"relation", + type: "relation", id: this.newElementIdNumber, tags: new And(this._tags).asChange({}), meta: { theme: this.theme, - changeType:this.changeType + changeType: this.changeType }, changes: { members: [ @@ -93,8 +94,8 @@ private readonly geojsonPreview: any; ] } }) - - + + return descriptions } diff --git a/Logic/Osm/Actions/CreateNewNodeAction.ts b/Logic/Osm/Actions/CreateNewNodeAction.ts index d3f7e1f192..1c7d37989f 100644 --- a/Logic/Osm/Actions/CreateNewNodeAction.ts +++ b/Logic/Osm/Actions/CreateNewNodeAction.ts @@ -20,18 +20,21 @@ export default class CreateNewNodeAction extends OsmCreateAction { private readonly _lon: number; private readonly _snapOnto: OsmWay; private readonly _reusePointDistance: number; - private meta: { changeType: "create" | "import"; theme: string }; + private meta: { changeType: "create" | "import"; theme: string; specialMotivation?: string }; private readonly _reusePreviouslyCreatedPoint: boolean; + constructor(basicTags: Tag[], lat: number, lon: number, options: { allowReuseOfPreviouslyCreatedPoints?: boolean, snapOnto?: OsmWay, reusePointWithinMeters?: number, - theme: string, changeType: "create" | "import" | null + theme: string, + changeType: "create" | "import" | null, + specialMotivation?: string }) { - super(null,basicTags !== undefined && basicTags.length > 0) + super(null, basicTags !== undefined && basicTags.length > 0) this._basicTags = basicTags; this._lat = lat; this._lon = lon; @@ -43,7 +46,8 @@ export default class CreateNewNodeAction extends OsmCreateAction { this._reusePreviouslyCreatedPoint = options?.allowReuseOfPreviouslyCreatedPoints ?? (basicTags.length === 0) this.meta = { theme: options.theme, - changeType: options.changeType + changeType: options.changeType, + specialMotivation: options.specialMotivation } } @@ -64,6 +68,7 @@ export default class CreateNewNodeAction extends OsmCreateAction { } async CreateChangeDescriptions(changes: Changes): Promise { + if (this._reusePreviouslyCreatedPoint) { const key = this._lat + "," + this._lon @@ -136,7 +141,7 @@ export default class CreateNewNodeAction extends OsmCreateAction { 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, diff --git a/Logic/Osm/Actions/CreateNewWayAction.ts b/Logic/Osm/Actions/CreateNewWayAction.ts index ad8d2a2a3c..68c521abc6 100644 --- a/Logic/Osm/Actions/CreateNewWayAction.ts +++ b/Logic/Osm/Actions/CreateNewWayAction.ts @@ -25,8 +25,23 @@ export default class CreateNewWayAction extends OsmCreateAction { options: { theme: string }) { - super(null,true) - this.coordinates = coordinates; + super(null, true) + this.coordinates = []; + + for (const coordinate of coordinates) { + /* The 'PointReuseAction' is a bit buggy and might generate duplicate ids. + We filter those here, as the CreateWayWithPointReuseAction delegates the actual creation to here. + Filtering here also prevents similar bugs in other actions + */ + if(this.coordinates.length > 0 && this.coordinates[this.coordinates.length - 1].nodeId === coordinate.nodeId){ + // This is a duplicate id + console.warn("Skipping a node in createWay to avoid a duplicate node:", coordinate,"\nThe previous coordinates are: ", this.coordinates) + continue + } + + this.coordinates.push(coordinate) + } + this.tags = tags; this._options = options; } @@ -56,7 +71,7 @@ export default class CreateNewWayAction extends OsmCreateAction { const id = changes.getNewID() - this.newElementIdNumber = id + this.newElementIdNumber = id const newWay = { id, type: "way", diff --git a/Logic/Osm/Actions/CreateWayWithPointReuseAction.ts b/Logic/Osm/Actions/CreateWayWithPointReuseAction.ts index a6578dfab0..afcdab4a11 100644 --- a/Logic/Osm/Actions/CreateWayWithPointReuseAction.ts +++ b/Logic/Osm/Actions/CreateWayWithPointReuseAction.ts @@ -20,14 +20,14 @@ export interface MergePointConfig { /** * CreateWayWithPointreuse will create a 'CoordinateInfo' for _every_ point in the way to be created. - * + * * The CoordinateInfo indicates the action to take, e.g.: - * + * * - Create a new point * - Reuse an existing OSM point (and don't move it) * - Reuse an existing OSM point (and leave it where it is) * - Reuse another Coordinate info (and don't do anything else with it) - * + * */ interface CoordinateInfo { /** @@ -56,6 +56,8 @@ interface CoordinateInfo { * More or less the same as 'CreateNewWay', except that it'll try to reuse already existing points */ export default class CreateWayWithPointReuseAction extends OsmCreateAction { + public newElementId: string = undefined; + public newElementIdNumber: number = undefined private readonly _tags: Tag[]; /** * lngLat-coordinates @@ -64,20 +66,17 @@ export default class CreateWayWithPointReuseAction extends OsmCreateAction { private _coordinateInfo: CoordinateInfo[]; private _state: FeaturePipelineState; private _config: MergePointConfig[]; - - public newElementId: string = undefined; - public newElementIdNumber: number = undefined constructor(tags: Tag[], coordinates: [number, number][], state: FeaturePipelineState, config: MergePointConfig[] ) { - super(null,true); + super(null, true); this._tags = tags; this._state = state; this._config = config; - + // The main logic of this class: the coordinateInfo contains all the changes this._coordinateInfo = this.CalculateClosebyNodes(coordinates); @@ -117,7 +116,7 @@ export default class CreateWayWithPointReuseAction extends OsmCreateAction { "move": "yes", "osm-id": reusedPoint.node.properties.id, "id": "new-geometry-move-existing" + i, - "distance":GeoOperations.distanceBetween(coordinateInfo.lngLat, reusedPoint.node.geometry.coordinates) + "distance": GeoOperations.distanceBetween(coordinateInfo.lngLat, reusedPoint.node.geometry.coordinates) }, geometry: { type: "LineString", @@ -136,7 +135,7 @@ export default class CreateWayWithPointReuseAction extends OsmCreateAction { "move": "no", "osm-id": reusedPoint.node.properties.id, "id": "new-geometry-reuse-existing" + i, - "distance":GeoOperations.distanceBetween(coordinateInfo.lngLat, reusedPoint.node.geometry.coordinates) + "distance": GeoOperations.distanceBetween(coordinateInfo.lngLat, reusedPoint.node.geometry.coordinates) }, geometry: { type: "LineString", @@ -238,7 +237,7 @@ export default class CreateWayWithPointReuseAction extends OsmCreateAction { const newWay = new CreateNewWayAction(this._tags, nodeIdsToUse, { theme }) - + allChanges.push(...(await newWay.CreateChangeDescriptions(changes))) this.newElementId = newWay.newElementId this.newElementIdNumber = newWay.newElementIdNumber @@ -266,7 +265,7 @@ export default class CreateWayWithPointReuseAction extends OsmCreateAction { }[] }[] = coordinates.map(_ => undefined) - + // First loop: gather all information... for (let i = 0; i < coordinates.length; i++) { @@ -328,7 +327,7 @@ export default class CreateWayWithPointReuseAction extends OsmCreateAction { } - + // Second loop: figure out which point moves where without creating conflicts let conflictFree = true; do { @@ -348,8 +347,8 @@ export default class CreateWayWithPointReuseAction extends OsmCreateAction { if (other.closebyNodes === undefined || other.closebyNodes[0] === undefined) { continue } - - if(coorInfo.closebyNodes[0] === undefined){ + + if (coorInfo.closebyNodes[0] === undefined) { continue } diff --git a/Logic/Osm/Actions/DeleteAction.ts b/Logic/Osm/Actions/DeleteAction.ts index 4673fecada..e5cd05ddb6 100644 --- a/Logic/Osm/Actions/DeleteAction.ts +++ b/Logic/Osm/Actions/DeleteAction.ts @@ -1,4 +1,3 @@ -import State from "../../../State"; import {OsmObject} from "../OsmObject"; import OsmChangeAction from "./OsmChangeAction"; import {Changes} from "../Changes"; @@ -27,7 +26,7 @@ export default class DeleteAction extends OsmChangeAction { specialMotivation: string }, hardDelete: boolean) { - super(id,true) + super(id, true) this._id = id; this._hardDelete = hardDelete; this.meta = {...meta, changeType: "deletion"}; @@ -52,7 +51,7 @@ export default class DeleteAction extends OsmChangeAction { return await new ChangeTagAction( this._id, this._softDeletionTags, osmObject.tags, { - theme: State.state?.layoutToUse?.id ?? "unkown", + ...this.meta, changeType: "soft-delete" } ).CreateChangeDescriptions(changes) diff --git a/Logic/Osm/Actions/OsmChangeAction.ts b/Logic/Osm/Actions/OsmChangeAction.ts index dc1a8e591b..1754a91bc8 100644 --- a/Logic/Osm/Actions/OsmChangeAction.ts +++ b/Logic/Osm/Actions/OsmChangeAction.ts @@ -7,7 +7,6 @@ import {ChangeDescription} from "./ChangeDescription"; export default abstract class OsmChangeAction { - private isUsed = false public readonly trackStatistics: boolean; /** * The ID of the object that is the center of this change. @@ -15,7 +14,8 @@ export default abstract class OsmChangeAction { * Undefined if such an id does not make sense */ public readonly mainObjectId: string; - + private isUsed = false + constructor(mainObjectId: string, trackStatistics: boolean = true) { this.trackStatistics = trackStatistics; this.mainObjectId = mainObjectId @@ -23,7 +23,7 @@ export default abstract class OsmChangeAction { public Perform(changes: Changes) { if (this.isUsed) { - throw "This ChangeAction is already used: " + this.constructor.name + throw "This ChangeAction is already used" } this.isUsed = true; return this.CreateChangeDescriptions(changes) @@ -32,9 +32,9 @@ export default abstract class OsmChangeAction { protected abstract CreateChangeDescriptions(changes: Changes): Promise } -export abstract class OsmCreateAction extends OsmChangeAction{ +export abstract class OsmCreateAction extends OsmChangeAction { - public newElementId : string + public newElementId: string public newElementIdNumber: number - + } diff --git a/Logic/Osm/Actions/RelationSplitHandler.ts b/Logic/Osm/Actions/RelationSplitHandler.ts index 4cc5a0d0e8..8e8f081faf 100644 --- a/Logic/Osm/Actions/RelationSplitHandler.ts +++ b/Logic/Osm/Actions/RelationSplitHandler.ts @@ -16,10 +16,11 @@ abstract class AbstractRelationSplitHandler extends OsmChangeAction { protected readonly _theme: string; constructor(input: RelationSplitInput, theme: string) { - super("relation/"+input.relation.id, false) + super("relation/" + input.relation.id, false) this._input = input; this._theme = theme; } + /** * Returns which node should border the member at the given index */ diff --git a/Logic/Osm/Actions/ReplaceGeometryAction.ts b/Logic/Osm/Actions/ReplaceGeometryAction.ts index 876ce2e96b..5146e55741 100644 --- a/Logic/Osm/Actions/ReplaceGeometryAction.ts +++ b/Logic/Osm/Actions/ReplaceGeometryAction.ts @@ -468,12 +468,12 @@ export default class ReplaceGeometryAction extends OsmChangeAction { proj.sort((a, b) => { // Sort descending const diff = b.projectAfterIndex - a.projectAfterIndex; - if(diff !== 0){ + if (diff !== 0) { return diff } return b.distance - a.distance; - - + + }) for (const reprojectedNode of proj) { diff --git a/Logic/Osm/Actions/SplitAction.ts b/Logic/Osm/Actions/SplitAction.ts index 3928ed4055..0b97e593f0 100644 --- a/Logic/Osm/Actions/SplitAction.ts +++ b/Logic/Osm/Actions/SplitAction.ts @@ -26,7 +26,7 @@ export default class SplitAction extends OsmChangeAction { * @param toleranceInMeters: if a splitpoint closer then this amount of meters to an existing point, the existing point will be used to split the line instead of a new point */ constructor(wayId: string, splitPointCoordinates: [number, number][], meta: { theme: string }, toleranceInMeters = 5) { - super(wayId,true) + super(wayId, true) this.wayId = wayId; this._splitPointsCoordinates = splitPointCoordinates this._toleranceInMeters = toleranceInMeters; diff --git a/Logic/Osm/Changes.ts b/Logic/Osm/Changes.ts index 831c05800f..10640991fc 100644 --- a/Logic/Osm/Changes.ts +++ b/Logic/Osm/Changes.ts @@ -11,7 +11,7 @@ import FeatureSource from "../FeatureSource/FeatureSource"; import {ElementStorage} from "../ElementStorage"; import {GeoLocationPointProperties} from "../Actors/GeoLocationHandler"; import {GeoOperations} from "../GeoOperations"; -import {ChangesetTag} from "./ChangesetHandler"; +import {ChangesetHandler, ChangesetTag} from "./ChangesetHandler"; import {OsmConnection} from "./OsmConnection"; /** @@ -27,20 +27,19 @@ export class Changes { public features = new UIEventSource<{ feature: any, freshness: Date }[]>([]); public readonly pendingChanges: UIEventSource = LocalStorageSource.GetParsed("pending-changes", []) public readonly allChanges = new UIEventSource(undefined) + public readonly state: { allElements: ElementStorage; osmConnection: OsmConnection } + public readonly extraComment: UIEventSource = new UIEventSource(undefined) + + private historicalUserLocations: FeatureSource private _nextId: number = -1; // Newly assigned ID's are negative private readonly isUploading = new UIEventSource(false); - private readonly previouslyCreated: OsmObject[] = [] private readonly _leftRightSensitive: boolean; - - public readonly state: { allElements: ElementStorage; historicalUserLocations: FeatureSource; osmConnection: OsmConnection } - - public readonly extraComment:UIEventSource = new UIEventSource(undefined) + private _changesetHandler: ChangesetHandler; constructor( state?: { allElements: ElementStorage, - historicalUserLocations: FeatureSource, osmConnection: OsmConnection }, leftRightSensitive: boolean = false) { @@ -50,6 +49,7 @@ export class Changes { // If a pending change contains a negative ID, we save that this._nextId = Math.min(-1, ...this.pendingChanges.data?.map(pch => pch.id) ?? []) this.state = state; + this._changesetHandler = state?.osmConnection?.CreateChangesetHandler(state.allElements, this) // Note: a changeset might be reused which was opened just before and might have already used some ids // This doesn't matter however, as the '-1' is per piecewise upload, not global per changeset @@ -107,7 +107,7 @@ export class Changes { * Uploads all the pending changes in one go. * Triggered by the 'PendingChangeUploader'-actor in Actors */ - public async flushChanges(flushreason: string = undefined, openChangeset?: UIEventSource) : Promise{ + public async flushChanges(flushreason: string = undefined): Promise { if (this.pendingChanges.data.length === 0) { return; } @@ -116,31 +116,51 @@ export class Changes { return; } - + console.log("Uploading changes due to: ", flushreason) this.isUploading.setData(true) try { - const csNumber = await this.flushChangesAsync(openChangeset) + const csNumber = await this.flushChangesAsync() this.isUploading.setData(false) - console.log("Changes flushed. Your changeset is "+csNumber); + console.log("Changes flushed. Your changeset is " + csNumber); } catch (e) { this.isUploading.setData(false) console.error("Flushing changes failed due to", e); } } + public async applyAction(action: OsmChangeAction): Promise { + const changeDescriptions = await action.Perform(this) + changeDescriptions[0].meta.distanceToObject = this.calculateDistanceToChanges(action, changeDescriptions) + this.applyChanges(changeDescriptions) + } + + public applyChanges(changes: ChangeDescription[]) { + console.log("Received changes:", changes) + this.pendingChanges.data.push(...changes); + this.pendingChanges.ping(); + this.allChanges.data.push(...changes) + this.allChanges.ping() + } + + public registerIdRewrites(mappings: Map): void { + CreateNewNodeAction.registerIdRewrites(mappings) + } + private calculateDistanceToChanges(change: OsmChangeAction, changeDescriptions: ChangeDescription[]) { - if (this.state === undefined) { - // No state loaded -> we can't calculate... + const locations = this.historicalUserLocations?.features?.data + if (locations === undefined) { + // No state loaded or no locations -> we can't calculate... return; } if (!change.trackStatistics) { // Probably irrelevant, such as a new helper node return; } + const now = new Date() - const recentLocationPoints = this.state.historicalUserLocations.features.data.map(ff => ff.feature) + const recentLocationPoints = locations.map(ff => ff.feature) .filter(feat => feat.geometry.type === "Point") .filter(feat => { const visitTime = new Date((feat.properties).date) @@ -186,26 +206,6 @@ export class Changes { )) } - public async applyAction(action: OsmChangeAction): Promise { - const changeDescriptions = await action.Perform(this) - changeDescriptions[0].meta.distanceToObject = this.calculateDistanceToChanges(action, changeDescriptions) - this.applyChanges(changeDescriptions) - } - - public applyChanges(changes: ChangeDescription[]) { - console.log("Received changes:", changes) - this.pendingChanges.data.push(...changes); - this.pendingChanges.ping(); - this.allChanges.data.push(...changes) - this.allChanges.ping() - } - - - public registerIdRewrites(mappings: Map): void { - CreateNewNodeAction.registerIdRewrites(mappings) - } - - /** * UPload the selected changes to OSM. * Returns 'true' if successfull and if they can be removed @@ -216,7 +216,7 @@ export class Changes { const osmObjects = Utils.NoNull(await Promise.all(neededIds.map(async id => OsmObject.DownloadObjectAsync(id).catch(e => { - console.error("Could not download OSM-object", id, " dropping it from the changes") + console.error("Could not download OSM-object", id, " dropping it from the changes ("+e+")") pending = pending.filter(ch => ch.type + "/" + ch.id !== id) return undefined; })))); @@ -285,10 +285,10 @@ export class Changes { // This method is only called with changedescriptions for this theme const theme = pending[0].meta.theme let comment = "Adding data with #MapComplete for theme #" + theme - if(this.extraComment.data !== undefined){ - comment+="\n\n"+this.extraComment.data + if (this.extraComment.data !== undefined) { + comment += "\n\n" + this.extraComment.data } - + const metatags: ChangesetTag[] = [{ key: "comment", value: comment @@ -302,7 +302,7 @@ export class Changes { ...perBinMessage ] - await this.state.osmConnection.changesetHandler.UploadChangeset( + await this._changesetHandler.UploadChangeset( (csId) => Changes.createChangesetFor("" + csId, changes), metatags, openChangeset @@ -312,7 +312,7 @@ export class Changes { return true; } - private async flushChangesAsync(openChangeset?: UIEventSource): Promise { + private async flushChangesAsync(): Promise { const self = this; try { // At last, we build the changeset and upload @@ -327,22 +327,20 @@ export class Changes { pendingPerTheme.get(theme).push(changeDescription) } - const successes = await Promise.all(Array.from(pendingPerTheme, - async ([theme, pendingChanges]) => { + const successes = await Promise.all(Array.from(pendingPerTheme, + async ([theme, pendingChanges]) => { try { - if(openChangeset === undefined){ - openChangeset = this.state.osmConnection.GetPreference("current-open-changeset-" + theme).map( - str => { - const n = Number(str); - if (isNaN(n)) { - return undefined - } - return n - }, [], n => "" + n - ); - console.log("Using current-open-changeset-"+theme+" from the preferences, got "+openChangeset.data) - } - + const openChangeset = this.state.osmConnection.GetPreference("current-open-changeset-" + theme).map( + str => { + const n = Number(str); + if (isNaN(n)) { + return undefined + } + return n + }, [], n => "" + n + ); + console.log("Using current-open-changeset-" + theme + " from the preferences, got " + openChangeset.data) + return await self.flushSelectChanges(pendingChanges, openChangeset); } catch (e) { console.error("Could not upload some changes:", e) @@ -393,7 +391,7 @@ export class Changes { // Might be a failed fetch for simply this object throw "Did not get an object that should be known: " + id } - if(change.changes === undefined){ + if (change.changes === undefined) { // This object is a change to a newly created object. However, we have not seen the creation changedescription yet! throw "Not a creation of the object" } @@ -520,7 +518,11 @@ export class Changes { }) - console.debug("Calculated the pending changes: ", result.newObjects.length,"new; ", result.modifiedObjects.length,"modified;",result.deletedObjects,"deleted") + console.debug("Calculated the pending changes: ", result.newObjects.length, "new; ", result.modifiedObjects.length, "modified;", result.deletedObjects, "deleted") return result } + + public setHistoricalUserLocations(locations: FeatureSource ){ + this.historicalUserLocations = locations + } } \ No newline at end of file diff --git a/Logic/Osm/ChangesetHandler.ts b/Logic/Osm/ChangesetHandler.ts index 6f758f9858..21fc42dd2f 100644 --- a/Logic/Osm/ChangesetHandler.ts +++ b/Logic/Osm/ChangesetHandler.ts @@ -18,13 +18,20 @@ export class ChangesetHandler { private readonly allElements: ElementStorage; private osmConnection: OsmConnection; private readonly changes: Changes; - private readonly _dryRun: boolean; + private readonly _dryRun: UIEventSource; private readonly userDetails: UIEventSource; private readonly auth: any; private readonly backend: string; - constructor(layoutName: string, - dryRun: boolean, + /** + * Use 'osmConnection.CreateChangesetHandler' instead + * @param dryRun + * @param osmConnection + * @param allElements + * @param changes + * @param auth + */ + constructor(dryRun: UIEventSource, osmConnection: OsmConnection, allElements: ElementStorage, changes: Changes, @@ -43,6 +50,30 @@ export class ChangesetHandler { } + /** + * If the metatags contain a special motivation of the format ":node/-", this method will rewrite this negative number to the actual ID + * The key is changed _in place_; true will be returned if a change has been applied + * @param extraMetaTags + * @param rewriteIds + * @private + */ + private static rewriteMetaTags(extraMetaTags: ChangesetTag[], rewriteIds: Map) { + let hasChange = false; + for (const tag of extraMetaTags) { + const match = tag.key.match(/^([a-zA-Z0-9_]+):(node\/-[0-9])$/) + if (match == null) { + continue + } + // This is a special motivation which has a negative ID -> we check for rewrites + const [_, reason, id] = match + if (rewriteIds.has(id)) { + tag.key = reason + ":" + rewriteIds.get(id) + hasChange = true + } + } + return hasChange + } + /** * The full logic to upload a change to one or more elements. * @@ -61,13 +92,13 @@ export class ChangesetHandler { if (!extraMetaTags.some(tag => tag.key === "comment") || !extraMetaTags.some(tag => tag.key === "theme")) { throw "The meta tags should at least contain a `comment` and a `theme`" } - + if (this.userDetails.data.csCount == 0) { // The user became a contributor! this.userDetails.data.csCount = 1; this.userDetails.ping(); } - if (this._dryRun) { + if (this._dryRun.data) { const changesetXML = generateChangeXML(123456); console.log("Metatags are", extraMetaTags) console.log(changesetXML); @@ -81,7 +112,13 @@ export class ChangesetHandler { openChangeset.setData(csId); const changeset = generateChangeXML(csId); console.trace("Opened a new changeset (openChangeset.data is undefined):", changeset); - await this.AddChange(csId, changeset) + const changes = await this.AddChange(csId, changeset) + const hasSpecialMotivationChanges = ChangesetHandler.rewriteMetaTags(extraMetaTags, changes) + if(hasSpecialMotivationChanges){ + // At this point, 'extraMetaTags' will have changed - we need to set the tags again + this.UpdateTags(csId, extraMetaTags) + } + } catch (e) { console.error("Could not open/upload changeset due to ", e) openChangeset.setData(undefined) @@ -91,6 +128,7 @@ export class ChangesetHandler { // Let's check! const csId = openChangeset.data; try { + const oldChangesetMeta = await this.GetChangesetMeta(csId) if (!oldChangesetMeta.open) { // Mark the CS as closed... @@ -101,41 +139,11 @@ export class ChangesetHandler { return; } - const extraTagsById = new Map() - for (const extraMetaTag of extraMetaTags) { - extraTagsById.set(extraMetaTag.key, extraMetaTag) - } - const oldCsTags = oldChangesetMeta.tags - for (const key in oldCsTags) { - const newMetaTag = extraTagsById.get(key) - if (newMetaTag === undefined) { - extraMetaTags.push({ - key: key, - value: oldCsTags[key] - }) - } else if (newMetaTag.aggregate) { - let n = Number(newMetaTag.value) - if (isNaN(n)) { - n = 0 - } - let o = Number(oldCsTags[key]) - if (isNaN(o)) { - o = 0 - } - // We _update_ the tag itself, as it'll be updated in 'extraMetaTags' straight away - newMetaTag.value = "" + (n + o) - } else { - // The old value is overwritten, thus we drop - } - } - - await this.UpdateTags(csId, extraMetaTags.map(csTag => <[string, string]>[csTag.key, csTag.value])) - - - await this.AddChange( + const rewritings = await this.AddChange( csId, generateChangeXML(csId)) + await this.RewriteTagsOf(extraMetaTags, rewritings, oldChangesetMeta) } catch (e) { console.warn("Could not upload, changeset is probably closed: ", e); @@ -144,6 +152,74 @@ export class ChangesetHandler { } } + /** + * Updates the metatag of a changeset - + * @param extraMetaTags: new changeset tags to add/fuse with this changeset + * @param oldChangesetMeta: the metadata-object of the already existing changeset + * @constructor + * @private + */ + private async RewriteTagsOf(extraMetaTags: ChangesetTag[], + rewriteIds: Map, + oldChangesetMeta: { + open: boolean, + id: number + uid: number, // User ID + changes_count: number, + tags: any + }) { + + const csId = oldChangesetMeta.id + + // Note: extraMetaTags is where all the tags are collected into + + // same as 'extraMetaTag', but indexed + // Note that updates to 'extraTagsById.get().value = XYZ' is shared with extraMetatags + const extraTagsById = new Map() + for (const extraMetaTag of extraMetaTags) { + extraTagsById.set(extraMetaTag.key, extraMetaTag) + } + + const oldCsTags = oldChangesetMeta.tags + for (const key in oldCsTags) { + const newMetaTag = extraTagsById.get(key) + const existingValue = oldCsTags[key] + + if (newMetaTag !== undefined && newMetaTag.value === existingValue) { + continue + } + if (newMetaTag === undefined) { + extraMetaTags.push({ + key: key, + value: oldCsTags[key] + }) + continue + } + + if (newMetaTag.aggregate) { + let n = Number(newMetaTag.value) + if (isNaN(n)) { + n = 0 + } + let o = Number(oldCsTags[key]) + if (isNaN(o)) { + o = 0 + } + // We _update_ the tag itself, as it'll be updated in 'extraMetaTags' straight away + newMetaTag.value = "" + (n + o) + } else { + // The old value is overwritten, thus we drop this old key + } + } + + + ChangesetHandler.rewriteMetaTags(extraMetaTags, rewriteIds) + + await this.UpdateTags(csId, extraMetaTags) + + + } + private handleIdRewrite(node: any, type: string): [string, string] { const oldId = parseInt(node.attributes.old_id.value); if (node.attributes.new_id === undefined) { @@ -163,7 +239,6 @@ export class ChangesetHandler { if (oldId == newId) { return undefined; } - console.log("Rewriting id: ", type + "/" + oldId, "-->", type + "/" + newId); const element = this.allElements.getEventSourceById("node/" + oldId); if (element === undefined) { // Element to rewrite not found, probably a node or relation that is not rendered @@ -176,7 +251,7 @@ export class ChangesetHandler { return result; } - private parseUploadChangesetResponse(response: XMLDocument): void { + private parseUploadChangesetResponse(response: XMLDocument): Map { const nodes = response.getElementsByTagName("node"); const mappings = new Map() // @ts-ignore @@ -196,6 +271,7 @@ export class ChangesetHandler { } } this.changes.registerIdRewrites(mappings) + return mappings } @@ -205,7 +281,6 @@ export class ChangesetHandler { if (changesetId === undefined) { return; } - console.log("closing changeset", changesetId); self.auth.xhr({ method: 'PUT', path: '/api/0.6/changeset/' + changesetId + '/close', @@ -232,15 +307,21 @@ export class ChangesetHandler { return csData.elements[0] } + + /** + * Puts the specified tags onto the changesets as they are. + * This method will erase previously set tags + */ private async UpdateTags( csId: number, - tags: [string, string][]) { + tags: ChangesetTag[]) { + console.trace("Updating tags of " + csId) const self = this; return new Promise(function (resolve, reject) { - tags = Utils.NoNull(tags).filter(([k, v]) => k !== undefined && v !== undefined && k !== "" && v !== "") - const metadata = tags.map(kv => ``) + tags = Utils.NoNull(tags).filter(tag => tag.key !== undefined && tag.value !== undefined && tag.key !== "" && tag.value !== "") + const metadata = tags.map(kv => ``) self.auth.xhr({ method: 'PUT', @@ -258,7 +339,6 @@ export class ChangesetHandler { } }); }) - } private OpenChangeset( @@ -271,7 +351,7 @@ export class ChangesetHandler { path = path.substr(1, path.lastIndexOf("/")); const metadata = [ ["created_by", `MapComplete ${Constants.vNumber}`], - ["language", Locale.language.data], + ["locale", Locale.language.data], ["host", window.location.host], ["path", path], ["source", self.changes.state["currentUserLocation"]?.features?.data?.length > 0 ? "survey" : undefined], @@ -306,7 +386,7 @@ export class ChangesetHandler { * Upload a changesetXML */ private AddChange(changesetId: number, - changesetXML: string): Promise { + changesetXML: string): Promise> { const self = this; return new Promise(function (resolve, reject) { self.auth.xhr({ @@ -319,9 +399,9 @@ export class ChangesetHandler { console.log("err", err); reject(err); } - self.parseUploadChangesetResponse(response); + const changes = self.parseUploadChangesetResponse(response); console.log("Uploaded changeset ", changesetId); - resolve(changesetId); + resolve(changes); }); }) diff --git a/Logic/Osm/OsmConnection.ts b/Logic/Osm/OsmConnection.ts index 7f2067c7c2..93164ca2f4 100644 --- a/Logic/Osm/OsmConnection.ts +++ b/Logic/Osm/OsmConnection.ts @@ -19,7 +19,6 @@ export default class UserDetails { public img: string; public unreadMessages = 0; public totalMessages = 0; - public dryRun: boolean; home: { lon: number; lat: number }; public backend: string; @@ -47,14 +46,14 @@ export class OsmConnection { public auth; public userDetails: UIEventSource; public isLoggedIn: UIEventSource - _dryRun: boolean; + public loadingStatus = new UIEventSource<"not-attempted" | "loading" | "error" | "logged-in">("not-attempted") public preferencesHandler: OsmPreferences; - public changesetHandler: ChangesetHandler; public readonly _oauth_config: { oauth_consumer_key: string, oauth_secret: string, url: string }; + private readonly _dryRun: UIEventSource; private fakeUser: boolean; private _onLoggedIn: ((userDetails: UserDetails) => void)[] = []; private readonly _iframeMode: Boolean | boolean; @@ -62,13 +61,10 @@ export class OsmConnection { private isChecking = false; constructor(options: { - dryRun?: false | boolean, + dryRun?: UIEventSource, fakeUser?: false | boolean, - allElements: ElementStorage, - changes: Changes, oauth_token?: UIEventSource, // Used to keep multiple changesets open and to write to the correct changeset - layoutName: string, singlePage?: boolean, osmConfiguration?: "osm" | "osm-test", attemptLogin?: true | boolean @@ -82,7 +78,6 @@ export class OsmConnection { this._iframeMode = Utils.runningFromConsole ? false : window !== window.top; this.userDetails = new UIEventSource(new UserDetails(this._oauth_config.url), "userDetails"); - this.userDetails.data.dryRun = (options.dryRun ?? false) || (options.fakeUser ?? false); if (options.fakeUser) { const ud = this.userDetails.data; ud.csCount = 5678 @@ -99,13 +94,12 @@ export class OsmConnection { self.AttemptLogin() } }); - this._dryRun = options.dryRun; + this._dryRun = options.dryRun ?? new UIEventSource(false); this.updateAuthObject(); this.preferencesHandler = new OsmPreferences(this.auth, this); - this.changesetHandler = new ChangesetHandler(options.layoutName, options.dryRun, this, options.allElements, options.changes, this.auth); if (options.oauth_token?.data !== undefined) { console.log(options.oauth_token.data) const self = this; @@ -124,6 +118,10 @@ export class OsmConnection { console.log("Not authenticated"); } } + + public CreateChangesetHandler(allElements: ElementStorage, changes: Changes){ + return new ChangesetHandler(this._dryRun, this, allElements, changes, this.auth); + } public GetPreference(key: string, prefix: string = "mapcomplete-"): UIEventSource { return this.preferencesHandler.GetPreference(key, prefix); @@ -144,10 +142,13 @@ export class OsmConnection { this.userDetails.data.name = ""; this.userDetails.ping(); console.log("Logged out") + this.loadingStatus.setData("not-attempted") } public AttemptLogin() { + this.loadingStatus.setData("loading") if (this.fakeUser) { + this.loadingStatus.setData("logged-in") console.log("AttemptLogin called, but ignored as fakeUser is set") return; } @@ -160,6 +161,7 @@ export class OsmConnection { }, function (err, details) { if (err != null) { console.log(err); + self.loadingStatus.setData("error") if (err.status == 401) { console.log("Clearing tokens...") // Not authorized - our token probably got revoked @@ -174,6 +176,7 @@ export class OsmConnection { } if (details == null) { + self.loadingStatus.setData("error") return; } @@ -205,6 +208,7 @@ export class OsmConnection { data.home = {lat: lat, lon: lon}; } + self.loadingStatus.setData("logged-in") const messages = userInfo.getElementsByTagName("messages")[0].getElementsByTagName("received")[0]; data.unreadMessages = parseInt(messages.getAttribute("unread")); data.totalMessages = parseInt(messages.getAttribute("count")); @@ -223,7 +227,7 @@ export class OsmConnection { if ((text ?? "") !== "") { textSuffix = "?text=" + encodeURIComponent(text) } - if (this._dryRun) { + if (this._dryRun.data) { console.warn("Dryrun enabled - not actually closing note ", id, " with text ", text) return new Promise((ok, error) => { ok() @@ -246,7 +250,7 @@ export class OsmConnection { } public reopenNote(id: number | string, text?: string): Promise { - if (this._dryRun) { + if (this._dryRun.data) { console.warn("Dryrun enabled - not actually reopening note ", id, " with text ", text) return new Promise((ok, error) => { ok() @@ -273,10 +277,10 @@ export class OsmConnection { } public openNote(lat: number, lon: number, text: string): Promise<{ id: number }> { - if (this._dryRun) { + if (this._dryRun.data) { console.warn("Dryrun enabled - not actually opening note with text ", text) - return new Promise((ok, error) => { - ok() + return new Promise<{ id: number }>((ok, error) => { + window.setTimeout(() => ok({id: Math.floor(Math.random() * 1000)}), Math.random() * 5000) }); } const auth = this.auth; @@ -285,15 +289,21 @@ export class OsmConnection { auth.xhr({ method: 'POST', path: `/api/0.6/notes.json`, - options: {header: - {'Content-Type': 'application/json'}}, + options: { + header: + {'Content-Type': 'application/json'} + }, content: JSON.stringify(content) - }, function (err, response) { + }, function ( + err, + response: string) { + console.log("RESPONSE IS", response) if (err !== null) { error(err) } else { - const id = Number(response.children[0].children[0].children.item("id").innerHTML) + const parsed = JSON.parse(response) + const id = parsed.properties.id console.log("OPENED NOTE", id) ok({id}) } @@ -302,9 +312,9 @@ export class OsmConnection { }) } - + public addCommentToNode(id: number | string, text: string): Promise { - if (this._dryRun) { + if (this._dryRun.data) { console.warn("Dryrun enabled - not actually adding comment ", text, "to note ", id) return new Promise((ok, error) => { ok() @@ -317,8 +327,8 @@ export class OsmConnection { return new Promise((ok, error) => { this.auth.xhr({ method: 'POST', - - path: `/api/0.6/notes.json/${id}/comment?text=${encodeURIComponent(text)}` + + path: `/api/0.6/notes/${id}/comment?text=${encodeURIComponent(text)}` }, function (err, response) { if (err !== null) { error(err) diff --git a/Logic/Osm/OsmObject.ts b/Logic/Osm/OsmObject.ts index 4e5ccc2e32..c73cf4e724 100644 --- a/Logic/Osm/OsmObject.ts +++ b/Logic/Osm/OsmObject.ts @@ -402,7 +402,7 @@ export class OsmWay extends OsmObject { } public asGeoJson() { - let coordinates: ([number, number][] | [number, number][][]) = this.coordinates.map(c => [c[1], c[0]]); + let coordinates: ([number, number][] | [number, number][][]) = this.coordinates.map(([lat, lon]) => [lon, lat]); if (this.isPolygon()) { coordinates = [coordinates] } diff --git a/Logic/Osm/OsmPreferences.ts b/Logic/Osm/OsmPreferences.ts index fadd9c1059..7e06bdfc64 100644 --- a/Logic/Osm/OsmPreferences.ts +++ b/Logic/Osm/OsmPreferences.ts @@ -5,7 +5,7 @@ import {Utils} from "../../Utils"; export class OsmPreferences { public preferences = new UIEventSource({}, "all-osm-preferences"); - public preferenceSources: any = {} + private readonly preferenceSources = new Map>() private auth: any; private userDetails: UIEventSource; private longPreferences = {}; @@ -29,6 +29,7 @@ export class OsmPreferences { return this.longPreferences[prefix + key]; } + const source = new UIEventSource(undefined, "long-osm-preference:" + prefix + key); this.longPreferences[prefix + key] = source; @@ -36,6 +37,10 @@ export class OsmPreferences { // Gives the number of combined preferences const length = this.GetPreference(allStartWith + "-length", ""); + if( (allStartWith + "-length").length > 255){ + throw "This preference key is too long, it has "+key.length+" characters, but at most "+(255 - "-length".length - "-combined".length - prefix.length)+" characters are allowed" + } + const self = this; source.addCallback(str => { if (str === undefined || str === "") { @@ -101,27 +106,51 @@ export class OsmPreferences { if (key.length >= 255) { throw "Preferences: key length to big"; } - if (this.preferenceSources[key] !== undefined) { - return this.preferenceSources[key]; + const cached = this.preferenceSources.get(key) + if (cached !== undefined) { + return cached; } if (this.userDetails.data.loggedIn && this.preferences.data[key] === undefined) { this.UpdatePreferences(); } + const pref = new UIEventSource(this.preferences.data[key], "osm-preference:" + key); pref.addCallback((v) => { - this.SetPreference(key, v); + this.UploadPreference(key, v); }); - this.preferences.addCallback((prefs) => { - if (prefs[key] !== undefined) { - pref.setData(prefs[key]); - } - }); - - this.preferenceSources[key] = pref; + + this.preferenceSources.set(key, pref) return pref; } + public ClearPreferences() { + let isRunning = false; + const self = this; + this.preferences.addCallbackAndRun(prefs => { + if (Object.keys(prefs).length == 0) { + return; + } + if (isRunning) { + return + } + isRunning = true + const prefixes = ["mapcomplete-installed-theme", "mapcomplete-installed-themes-", "mapcomplete-current-open-changeset", "mapcomplete-personal-theme-layer"] + for (const key in prefs) { + for (const prefix of prefixes) { + if (key.startsWith(prefix)) { + console.log("Clearing ", key) + self.GetPreference(key, "").setData("") + + } + } + } + isRunning = false; + return true; + + }) + } + private UpdatePreferences() { const self = this; this.auth.xhr({ @@ -139,11 +168,26 @@ export class OsmPreferences { const v = pref.getAttribute("v"); self.preferences.data[k] = v; } + + // We merge all the preferences: new keys are uploaded + // For differing values, the server overrides local changes + self.preferenceSources.forEach((preference, key) => { + const osmValue = self.preferences.data[key] + console.log("Sending value to osm:", key," osm has: ", osmValue, " local has: ", preference.data) + if(osmValue === undefined && preference.data !== undefined){ + // OSM doesn't know this value yet + self.UploadPreference(key, preference.data) + } else { + // OSM does have a value - set it + preference.setData(osmValue) + } + }) + self.preferences.ping(); }); } - private SetPreference(k: string, v: string) { + private UploadPreference(k: string, v: string) { if (!this.userDetails.data.loggedIn) { console.debug(`Not saving preference ${k}: user not logged in`); return; @@ -178,10 +222,10 @@ export class OsmPreferences { content: v }, function (error) { if (error) { - console.log(`Could not set preference "${k}"'`, error); + console.warn(`Could not set preference "${k}"'`, error); return; } - console.log(`Preference ${k} written!`); + console.debug(`Preference ${k} written!`); }); } diff --git a/Logic/Osm/Overpass.ts b/Logic/Osm/Overpass.ts index df7fe5619c..f941fe2ba9 100644 --- a/Logic/Osm/Overpass.ts +++ b/Logic/Osm/Overpass.ts @@ -9,7 +9,6 @@ import * as osmtogeojson from "osmtogeojson"; * Interfaces overpass to get all the latest data */ export class Overpass { - public static testUrl: string = null private _filter: TagsFilter private readonly _interpreterUrl: string; private readonly _timeout: UIEventSource; @@ -36,10 +35,6 @@ export class Overpass { let query = this.buildQuery("[bbox:" + bounds.getSouth() + "," + bounds.getWest() + "," + bounds.getNorth() + "," + bounds.getEast() + "]") - if (Overpass.testUrl !== null) { - console.log("Using testing URL") - query = Overpass.testUrl; - } const self = this; const json = await Utils.downloadJson(query) diff --git a/Logic/SimpleMetaTagger.ts b/Logic/SimpleMetaTagger.ts index 67be6a5af0..af00de028a 100644 --- a/Logic/SimpleMetaTagger.ts +++ b/Logic/SimpleMetaTagger.ts @@ -9,7 +9,7 @@ import LayerConfig from "../Models/ThemeConfig/LayerConfig"; import {CountryCoder} from "latlon2country" -export class SimpleMetaTagger { +export class SimpleMetaTagger { public readonly keys: string[]; public readonly doc: string; public readonly isLazy: boolean; @@ -42,9 +42,9 @@ export class SimpleMetaTagger { export class CountryTagger extends SimpleMetaTagger { private static readonly coder = new CountryCoder("https://raw.githubusercontent.com/pietervdvn/MapComplete-data/main/latlon2country", Utils.downloadJson); public runningTasks: Set; - + constructor() { - const runningTasks= new Set(); + const runningTasks = new Set(); super ( { @@ -77,20 +77,12 @@ export class CountryTagger extends SimpleMetaTagger { return false; }) ) - this.runningTasks = runningTasks; + this.runningTasks = runningTasks; } } export default class SimpleMetaTaggers { - private static readonly cardinalDirections = { - N: 0, NNE: 22.5, NE: 45, ENE: 67.5, - E: 90, ESE: 112.5, SE: 135, SSE: 157.5, - S: 180, SSW: 202.5, SW: 225, WSW: 247.5, - W: 270, WNW: 292.5, NW: 315, NNW: 337.5 - } - - public static readonly objectMetaInfo = new SimpleMetaTagger( { keys: ["_last_edit:contributor", @@ -121,7 +113,24 @@ export default class SimpleMetaTaggers { return true; } ) - + public static country = new CountryTagger() + public static geometryType = new SimpleMetaTagger( + { + keys: ["_geometry:type"], + doc: "Adds the geometry type as property. This is identical to the GoeJson geometry type and is one of `Point`,`LineString`, `Polygon` and exceptionally `MultiPolygon` or `MultiLineString`", + }, + (feature, _) => { + const changed = feature.properties["_geometry:type"] === feature.geometry.type; + feature.properties["_geometry:type"] = feature.geometry.type; + return changed + } + ) + private static readonly cardinalDirections = { + N: 0, NNE: 22.5, NE: 45, ENE: 67.5, + E: 90, ESE: 112.5, SE: 135, SSE: 157.5, + S: 180, SSW: 202.5, SW: 225, WSW: 247.5, + W: 270, WNW: 292.5, NW: 315, NNW: 337.5 + } private static latlon = new SimpleMetaTagger({ keys: ["_lat", "_lon"], doc: "The latitude and longitude of the point (or centerpoint in the case of a way/area)" @@ -201,7 +210,6 @@ export default class SimpleMetaTaggers { return true; }) ); - private static canonicalize = new SimpleMetaTagger( { doc: "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`)", @@ -254,7 +262,6 @@ export default class SimpleMetaTaggers { return rewritten }) ) - private static lngth = new SimpleMetaTagger( { keys: ["_length", "_length:km"], @@ -269,7 +276,6 @@ export default class SimpleMetaTaggers { return true; }) ) - public static country = new CountryTagger() private static isOpen = new SimpleMetaTagger( { keys: ["_isOpen"], @@ -277,82 +283,54 @@ export default class SimpleMetaTaggers { includesDates: true, isLazy: true }, - ((feature, _, __ ,state) => { + ((feature, _, __, state) => { if (Utils.runningFromConsole) { // We are running from console, thus probably creating a cache // isOpen is irrelevant return false } - + if (feature.properties.opening_hours === "24/7") { + feature.properties._isOpen = "yes" + return true; + } + + // _isOpen is calculated dynamically on every call Object.defineProperty(feature.properties, "_isOpen", { enumerable: false, configurable: true, get: () => { - delete feature.properties._isOpen - feature.properties._isOpen = undefined - const tagsSource = state.allElements.getEventSourceById(feature.properties.id); - tagsSource - .addCallbackAndRunD(tags => { - if (tags.opening_hours === undefined || tags._country === undefined) { - return; - } - try { - const [lon, lat] = GeoOperations.centerpointCoordinates(feature) - const oh = new opening_hours(tags["opening_hours"], { - lat: lat, - lon: lon, - address: { - country_code: tags._country.toLowerCase() - } - }, {tag_key: "opening_hours"}); - // AUtomatically triggered on the next change - const updateTags = () => { - const oldValueIsOpen = tags["_isOpen"]; - const oldNextChange = tags["_isOpen:nextTrigger"] ?? 0; + const tags = feature.properties + if (tags.opening_hours === undefined) { + return; + } + if (tags._country === undefined) { + return; + } - if (oldNextChange > (new Date()).getTime() && - tags["_isOpen:oldvalue"] === tags["opening_hours"] - && tags["_isOpen"] !== undefined) { - // Already calculated and should not yet be triggered - return false; - } - - tags["_isOpen"] = oh.getState() ? "yes" : "no"; - const comment = oh.getComment(); - if (comment) { - tags["_isOpen:description"] = comment; - } - - if (oldValueIsOpen !== tags._isOpen) { - tagsSource.ping(); - } - - const nextChange = oh.getNextChange(); - if (nextChange !== undefined) { - const timeout = nextChange.getTime() - (new Date()).getTime(); - tags["_isOpen:nextTrigger"] = nextChange.getTime(); - tags["_isOpen:oldvalue"] = tags.opening_hours - window.setTimeout( - () => { - console.log("Updating the _isOpen tag for ", tags.id, ", it's timer expired after", timeout); - updateTags(); - }, - timeout - ) - } + try { + const [lon, lat] = GeoOperations.centerpointCoordinates(feature) + const oh = new opening_hours(tags["opening_hours"], { + lat: lat, + lon: lon, + address: { + country_code: tags._country.toLowerCase() } - updateTags(); - } catch (e) { - console.warn("Error while parsing opening hours of ", tags.id, e); - delete tags._isOpen - tags["_isOpen"] = "parse_error"; - } + }, {tag_key: "opening_hours"}); - }) - return undefined - } - }) - return true; + // Recalculate! + return oh.getState() ? "yes" : "no"; + + } catch (e) { + console.warn("Error while parsing opening hours of ", tags.id, e); + delete tags._isOpen + tags["_isOpen"] = "parse_error"; + } + }}); + + + const tagsSource = state.allElements.getEventSourceById(feature.properties.id); + + }) ) @@ -380,8 +358,6 @@ export default class SimpleMetaTaggers { return true; }) ) - - private static currentTime = new SimpleMetaTagger( { keys: ["_now:date", "_now:datetime", "_loaded:date", "_loaded:_datetime"], @@ -410,20 +386,6 @@ export default class SimpleMetaTaggers { return true; } ); - - public static geometryType = new SimpleMetaTagger( - { - keys:["_geometry:type"], - doc: "Adds the geometry type as property. This is identical to the GoeJson geometry type and is one of `Point`,`LineString`, `Polygon` and exceptionally `MultiPolygon` or `MultiLineString`", - }, - (feature, _) => { - const changed = feature.properties["_geometry:type"] === feature.geometry.type; - feature.properties["_geometry:type"] = feature.geometry.type; - return changed - } - ) - - public static metatags: SimpleMetaTagger[] = [ SimpleMetaTaggers.latlon, SimpleMetaTaggers.layerInfo, @@ -439,11 +401,9 @@ export default class SimpleMetaTaggers { SimpleMetaTaggers.geometryType ]; - public static readonly lazyTags: string[] = [].concat(...SimpleMetaTaggers.metatags.filter(tagger => tagger.isLazy) .map(tagger => tagger.keys)); - /** * Edits the given object to rewrite 'both'-tagging into a 'left-right' tagging scheme. * These changes are performed in-place. diff --git a/Logic/State/ElementsState.ts b/Logic/State/ElementsState.ts index 8167f7cb2b..c7fc1dbbf4 100644 --- a/Logic/State/ElementsState.ts +++ b/Logic/State/ElementsState.ts @@ -20,11 +20,7 @@ export default class ElementsState extends FeatureSwitchState { The mapping from id -> UIEventSource */ public allElements: ElementStorage = new ElementStorage(); - /** - THe change handler - */ - public changes: Changes; - + /** The latest element that was selected */ @@ -48,9 +44,6 @@ export default class ElementsState extends FeatureSwitchState { constructor(layoutToUse: LayoutConfig) { super(layoutToUse); - // @ts-ignore - this.changes = new Changes(this,layoutToUse?.isLeftRightSensitive() ?? false) - { // -- Location control initialization const zoom = UIEventSource.asFloat( QueryParameters.GetQueryParameter( @@ -85,10 +78,7 @@ export default class ElementsState extends FeatureSwitchState { lat.setData(latlonz.lat); lon.setData(latlonz.lon); }); - } - - new ChangeToElementsActor(this.changes, this.allElements) - new PendingChangesUploader(this.changes, this.selectedElement); + } } \ No newline at end of file diff --git a/Logic/State/FeaturePipelineState.ts b/Logic/State/FeaturePipelineState.ts index 90f0539e1f..2c2c2a81f5 100644 --- a/Logic/State/FeaturePipelineState.ts +++ b/Logic/State/FeaturePipelineState.ts @@ -9,6 +9,9 @@ import MapState from "./MapState"; import SelectedFeatureHandler from "../Actors/SelectedFeatureHandler"; import Hash from "../Web/Hash"; import {BBox} from "../BBox"; +import FeatureInfoBox from "../../UI/Popup/FeatureInfoBox"; +import {FeatureSourceForLayer, Tiled} from "../FeatureSource/FeatureSource"; +import MetaTagRecalculator from "../FeatureSource/Actors/MetaTagRecalculator"; export default class FeaturePipelineState extends MapState { @@ -17,6 +20,7 @@ export default class FeaturePipelineState extends MapState { */ public readonly featurePipeline: FeaturePipeline; private readonly featureAggregator: TileHierarchyAggregator; + private readonly metatagRecalculator: MetaTagRecalculator constructor(layoutToUse: LayoutConfig) { super(layoutToUse); @@ -25,80 +29,106 @@ export default class FeaturePipelineState extends MapState { this.featureAggregator = TileHierarchyAggregator.createHierarchy(this); const clusterCounter = this.featureAggregator const self = this; - this.featurePipeline = new FeaturePipeline( - source => { - clusterCounter.addTile(source) + /** + * We are a bit in a bind: + * There is the featurePipeline, which creates some sources during construction + * THere is the metatagger, which needs to have these sources registered AND which takes a FeaturePipeline as argument + * + * This is a bit of a catch-22 (except that it isn't) + * The sources that are registered in the constructor are saved into 'registeredSources' temporary + * + */ + const sourcesToRegister = [] - const sourceBBox = source.features.map(allFeatures => BBox.bboxAroundAll(allFeatures.map(f => BBox.get(f.feature)))) - - // Do show features indicates if the respective 'showDataLayer' should be shown. It can be hidden by e.g. clustering - const doShowFeatures = source.features.map( - f => { - const z = self.locationControl.data.zoom + function registerRaw(source: FeatureSourceForLayer & Tiled) { + if (self.metatagRecalculator === undefined) { + sourcesToRegister.push(source) + } else { + self.metatagRecalculator.registerSource(source) + } + } - if (!source.layer.isDisplayed.data) { - return false; - } + function registerSource(source: FeatureSourceForLayer & Tiled) { - const bounds = self.currentBounds.data - if (bounds === undefined) { - // Map is not yet displayed - return false; - } + clusterCounter.addTile(source) + const sourceBBox = source.features.map(allFeatures => BBox.bboxAroundAll(allFeatures.map(f => BBox.get(f.feature)))) - if (!sourceBBox.data.overlapsWith(bounds)) { - // Not within range -> features are hidden - return false - } + // Do show features indicates if the respective 'showDataLayer' should be shown. It can be hidden by e.g. clustering + const doShowFeatures = source.features.map( + f => { + const z = self.locationControl.data.zoom - - if (z < source.layer.layerDef.minzoom) { - // Layer is always hidden for this zoom level - return false; - } - - if (z > clustering.maxZoom) { - return true - } - - if (f.length > clustering.minNeededElements) { - // This tile alone already has too much features - return false - } - - let [tileZ, tileX, tileY] = Tiles.tile_from_index(source.tileIndex); - if (tileZ >= z) { - - while (tileZ > z) { - tileZ-- - tileX = Math.floor(tileX / 2) - tileY = Math.floor(tileY / 2) - } - - if (clusterCounter.getTile(Tiles.tile_index(tileZ, tileX, tileY))?.totalValue > clustering.minNeededElements) { - // To much elements - return false - } - } - - - return true - }, [this.currentBounds, source.layer.isDisplayed, sourceBBox] - ) - - new ShowDataLayer( - { - features: source, - leafletMap: self.leafletMap, - layerToShow: source.layer.layerDef, - doShowLayer: doShowFeatures, - allElements: self.allElements, - selectedElement: self.selectedElement + if (!source.layer.isDisplayed.data) { + return false; } - ); - }, this - ); + + const bounds = self.currentBounds.data + if (bounds === undefined) { + // Map is not yet displayed + return false; + } + + if (!sourceBBox.data.overlapsWith(bounds)) { + // Not within range -> features are hidden + return false + } + + + if (z < source.layer.layerDef.minzoom) { + // Layer is always hidden for this zoom level + return false; + } + + if (z > clustering.maxZoom) { + return true + } + + if (f.length > clustering.minNeededElements) { + // This tile alone already has too much features + return false + } + + let [tileZ, tileX, tileY] = Tiles.tile_from_index(source.tileIndex); + if (tileZ >= z) { + + while (tileZ > z) { + tileZ-- + tileX = Math.floor(tileX / 2) + tileY = Math.floor(tileY / 2) + } + + if (clusterCounter.getTile(Tiles.tile_index(tileZ, tileX, tileY))?.totalValue > clustering.minNeededElements) { + // To much elements + return false + } + } + + + return true + }, [self.currentBounds, source.layer.isDisplayed, sourceBBox] + ) + + new ShowDataLayer( + { + features: source, + leafletMap: self.leafletMap, + layerToShow: source.layer.layerDef, + doShowLayer: doShowFeatures, + selectedElement: self.selectedElement, + state: self, + popup: (tags, layer) => new FeatureInfoBox(tags, layer, self) + } + ) + } + + + this.featurePipeline = new FeaturePipeline(registerSource, this, {handleRawFeatureSource: registerRaw}); + this.metatagRecalculator = new MetaTagRecalculator(this, this.featurePipeline) + this.metatagRecalculator.registerSource(this.currentView, true) + + sourcesToRegister.forEach(source => self.metatagRecalculator.registerSource(source)) + new SelectedFeatureHandler(Hash.hash, this) this.AddClusteringToMap(this.leafletMap) @@ -112,11 +142,13 @@ export default class FeaturePipelineState extends MapState { */ public AddClusteringToMap(leafletMap: UIEventSource) { const clustering = this.layoutToUse.clustering + const self = this; new ShowDataLayer({ features: this.featureAggregator.getCountsForZoom(clustering, this.locationControl, clustering.minNeededElements), leafletMap: leafletMap, layerToShow: ShowTileInfo.styling, - enablePopups: this.featureSwitchIsDebugging.data, + popup: this.featureSwitchIsDebugging.data ? (tags, layer) => new FeatureInfoBox(tags, layer, self) : undefined, + state: this }) } diff --git a/Logic/State/FeatureSwitchState.ts b/Logic/State/FeatureSwitchState.ts index 6dc25429b2..787d6a4eed 100644 --- a/Logic/State/FeatureSwitchState.ts +++ b/Logic/State/FeatureSwitchState.ts @@ -19,7 +19,7 @@ export default class FeatureSwitchState { public readonly featureSwitchBackgroundSelection: UIEventSource; public readonly featureSwitchAddNew: UIEventSource; public readonly featureSwitchWelcomeMessage: UIEventSource; - public readonly featureSwitchIframePopoutEnabled: UIEventSource; + public readonly featureSwitchExtraLinkEnabled: UIEventSource; public readonly featureSwitchMoreQuests: UIEventSource; public readonly featureSwitchShareScreen: UIEventSource; public readonly featureSwitchGeolocation: UIEventSource; @@ -81,7 +81,7 @@ export default class FeatureSwitchState { this.featureSwitchFilter = featSw( "fs-filter", (layoutToUse) => layoutToUse?.enableLayers ?? true, - "Disables/Enables the filter" + "Disables/Enables the filter view" ); this.featureSwitchAddNew = featSw( "fs-add-new", @@ -93,10 +93,10 @@ export default class FeatureSwitchState { () => true, "Disables/enables the help menu or welcome message" ); - this.featureSwitchIframePopoutEnabled = featSw( + this.featureSwitchExtraLinkEnabled = featSw( "fs-iframe-popout", - (layoutToUse) => layoutToUse?.enableIframePopout, - "Disables/Enables the iframe-popout button. If in iframe mode and the welcome message is hidden, a popout button to the full mapcomplete instance is shown instead (unless disabled with this switch)" + _ => true, + "Disables/Enables the extraLink button. By default, if in iframe mode and the welcome message is hidden, a popout button to the full mapcomplete instance is shown instead (unless disabled with this switch or another extraLink button is enabled)" ); this.featureSwitchMoreQuests = featSw( "fs-more-quests", @@ -146,17 +146,17 @@ export default class FeatureSwitchState { this.featureSwitchIsTesting = QueryParameters.GetBooleanQueryParameter( "test", - "" + testingDefaultValue, + testingDefaultValue, "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" ) this.featureSwitchIsDebugging = QueryParameters.GetBooleanQueryParameter( "debug", - "false", + false, "If true, shows some extra debugging help such as all the available tags on every object" ) - this.featureSwitchFakeUser = QueryParameters.GetBooleanQueryParameter("fake-user", "false", + this.featureSwitchFakeUser = QueryParameters.GetBooleanQueryParameter("fake-user", false, "If true, 'dryrun' mode is activated and a fake user account is loaded") diff --git a/Logic/State/MapState.ts b/Logic/State/MapState.ts index b5e7bb1782..387885a9ce 100644 --- a/Logic/State/MapState.ts +++ b/Logic/State/MapState.ts @@ -10,13 +10,14 @@ import BaseUIElement from "../../UI/BaseUIElement"; import FilteredLayer, {FilterState} from "../../Models/FilteredLayer"; import TilesourceConfig from "../../Models/ThemeConfig/TilesourceConfig"; import {QueryParameters} from "../Web/QueryParameters"; -import * as personal from "../../assets/themes/personal/personal.json"; import ShowOverlayLayer from "../../UI/ShowDataLayer/ShowOverlayLayer"; import {FeatureSourceForLayer, Tiled} from "../FeatureSource/FeatureSource"; import SimpleFeatureSource from "../FeatureSource/Sources/SimpleFeatureSource"; import {LocalStorageSource} from "../Web/LocalStorageSource"; import {GeoOperations} from "../GeoOperations"; import TitleHandler from "../Actors/TitleHandler"; +import {BBox} from "../BBox"; +import LayerConfig from "../../Models/ThemeConfig/LayerConfig"; /** * Contains all the leaflet-map related state @@ -73,7 +74,7 @@ export default class MapState extends UserRelatedState { /** - * WHich layers are enabled in the current theme + * Which layers are enabled in the current theme and what filters are applied onto them */ public filteredLayers: UIEventSource = new UIEventSource([], "filteredLayers"); /** @@ -118,7 +119,7 @@ export default class MapState extends UserRelatedState { this.overlayToggles = this.layoutToUse.tileLayerSources.filter(c => c.name !== undefined).map(c => ({ config: c, - isDisplayed: QueryParameters.GetBooleanQueryParameter("overlay-" + c.id, "" + c.defaultState, "Wether or not the overlay " + c.id + " is shown") + isDisplayed: QueryParameters.GetBooleanQueryParameter("overlay-" + c.id, c.defaultState, "Wether or not the overlay " + c.id + " is shown") })) this.filteredLayers = this.InitializeFilteredLayers() @@ -169,11 +170,10 @@ export default class MapState extends UserRelatedState { ]; } console.warn("Locking the bounds to ", layout.lockLocation); - this.leafletMap.addCallbackAndRunD(map => { - // @ts-ignore - map.setMaxBounds(layout.lockLocation); - map.setMinZoom(layout.startZoom); - }) + this.mainMapObject.installBounds( + new BBox(layout.lockLocation), + this.featureSwitchIsTesting.data + ) } } @@ -223,7 +223,7 @@ export default class MapState extends UserRelatedState { private initGpsLocation() { // Initialize the gps layer data. This is emtpy for now, the actual writing happens in the Geolocationhandler let gpsLayerDef: FilteredLayer = this.filteredLayers.data.filter(l => l.layerDef.id === "gps_location")[0] - if(gpsLayerDef === undefined){ + if (gpsLayerDef === undefined) { return } this.currentUserLocation = new SimpleFeatureSource(gpsLayerDef, Tiles.tile_index(0, 0, 0)); @@ -269,8 +269,9 @@ export default class MapState extends UserRelatedState { let gpsLayerDef: FilteredLayer = this.filteredLayers.data.filter(l => l.layerDef.id === "gps_location_history")[0] - if(gpsLayerDef !== undefined){ + if (gpsLayerDef !== undefined) { this.historicalUserLocations = new SimpleFeatureSource(gpsLayerDef, Tiles.tile_index(0, 0, 0), features); + this.changes.setHistoricalUserLocations(this.historicalUserLocations) } @@ -299,7 +300,7 @@ export default class MapState extends UserRelatedState { }] }) let gpsLineLayerDef: FilteredLayer = this.filteredLayers.data.filter(l => l.layerDef.id === "gps_track")[0] - if(gpsLineLayerDef !== undefined){ + if (gpsLineLayerDef !== undefined) { this.historicalUserLocationsTrack = new SimpleFeatureSource(gpsLineLayerDef, Tiles.tile_index(0, 0, 0), asLine); } } @@ -344,24 +345,41 @@ export default class MapState extends UserRelatedState { } + private getPref(key: string, layer: LayerConfig): UIEventSource { + const pref = this.osmConnection + .GetPreference(key) + .map(v => { + if(v === undefined){ + return undefined + } + return v === "true"; + }, [], b => { + if(b === undefined){ + return undefined + } + return "" + b; + }) + pref.setData(layer.shownByDefault) + return pref + } + private InitializeFilteredLayers() { const layoutToUse = this.layoutToUse; const flayers: FilteredLayer[] = []; for (const layer of layoutToUse.layers) { let isDisplayed: UIEventSource - if (layoutToUse.id === personal.id) { - isDisplayed = this.osmConnection.GetPreference("personal-theme-layer-" + layer.id + "-enabled") - .map(value => value === "yes", [], enabled => { - return enabled ? "yes" : ""; - }) + if (layer.syncSelection === "local") { + isDisplayed = LocalStorageSource.GetParsed(layoutToUse.id + "-layer-" + layer.id + "-enabled", layer.shownByDefault) + } else if (layer.syncSelection === "theme-only") { + isDisplayed = this.getPref(layoutToUse.id+ "-layer-" + layer.id + "-enabled", layer) + } else if (layer.syncSelection === "global") { + isDisplayed = this.getPref("layer-" + layer.id + "-enabled", layer) } else { - isDisplayed = QueryParameters.GetBooleanQueryParameter( - "layer-" + layer.id, - "" + layer.shownByDefault, - "Wether or not layer " + layer.id + " is shown" - ) + isDisplayed = QueryParameters.GetBooleanQueryParameter("layer-" + layer.id, layer.shownByDefault, "Wether or not layer "+layer.id+" is shown") } + + const flayer: FilteredLayer = { isDisplayed: isDisplayed, layerDef: layer, @@ -377,6 +395,24 @@ export default class MapState extends UserRelatedState { flayers.push(flayer); } + + for (const layer of layoutToUse.layers) { + if (layer.filterIsSameAs === undefined) { + continue + } + const toReuse = flayers.find(l => l.layerDef.id === layer.filterIsSameAs) + if (toReuse === undefined) { + throw "Error in layer " + layer.id + ": it defines that it should be use the filters of " + layer.filterIsSameAs + ", but this layer was not loaded" + } + console.warn("Linking filter and isDisplayed-states of " + layer.id + " and " + layer.filterIsSameAs) + const selfLayer = flayers.findIndex(l => l.layerDef.id === layer.id) + flayers[selfLayer] = { + isDisplayed: toReuse.isDisplayed, + layerDef: layer, + appliedFilters: toReuse.appliedFilters + }; + } + return new UIEventSource(flayers); } diff --git a/Logic/State/UserRelatedState.ts b/Logic/State/UserRelatedState.ts index d770268453..6d6f8ae892 100644 --- a/Logic/State/UserRelatedState.ts +++ b/Logic/State/UserRelatedState.ts @@ -8,6 +8,9 @@ import {Utils} from "../../Utils"; import Locale from "../../UI/i18n/Locale"; import ElementsState from "./ElementsState"; import SelectedElementTagsUpdater from "../Actors/SelectedElementTagsUpdater"; +import {Changes} from "../Osm/Changes"; +import ChangeToElementsActor from "../Actors/ChangeToElementsActor"; +import PendingChangesUploader from "../Actors/PendingChangesUploader"; /** * The part of the state which keeps track of user-related stuff, e.g. the OSM-connection, @@ -20,6 +23,10 @@ export default class UserRelatedState extends ElementsState { The user credentials */ public osmConnection: OsmConnection; + /** + THe change handler + */ + public changes: Changes; /** * The key for mangrove */ @@ -29,33 +36,28 @@ export default class UserRelatedState extends ElementsState { */ public favouriteLayers: UIEventSource; - /** - * WHich other themes the user previously visited - */ - public installedThemes: UIEventSource<{ id: string, // The id doubles as the URL - icon: string, - title: any, - shortDescription: any}[]>; - - - constructor(layoutToUse: LayoutConfig, options?:{attemptLogin : true | boolean}) { + constructor(layoutToUse: LayoutConfig, options?: { attemptLogin: true | boolean }) { super(layoutToUse); this.osmConnection = new OsmConnection({ - changes: this.changes, - dryRun: this.featureSwitchIsTesting.data, + dryRun: this.featureSwitchIsTesting, fakeUser: this.featureSwitchFakeUser.data, - allElements: this.allElements, oauth_token: QueryParameters.GetQueryParameter( "oauth_token", undefined, "Used to complete the login" ), - layoutName: layoutToUse?.id, osmConfiguration: <'osm' | 'osm-test'>this.featureSwitchApiURL.data, attemptLogin: options?.attemptLogin }) + + this.changes = new Changes(this, layoutToUse?.isLeftRightSensitive() ?? false) + + + new ChangeToElementsActor(this.changes, this.allElements) + new PendingChangesUploader(this.changes, this.selectedElement); + this.mangroveIdentity = new MangroveIdentity( this.osmConnection.GetLongPreference("identity", "mangrove") ); @@ -71,46 +73,17 @@ export default class UserRelatedState extends ElementsState { }) } - this.installedThemes = this.osmConnection.GetLongPreference("installed-themes").map( - str => { - if(str === undefined || str === ""){ - return [] - } - try{ - return JSON.parse(str) - }catch(e){ - console.warn("Could not parse preference with installed themes due to ", e,"\nThe offending string is",str) - return [] - } - }, [],(installed => JSON.stringify(installed)) - ) - - - const self = this; - this.osmConnection.isLoggedIn.addCallbackAndRunD(loggedIn => { - if(!loggedIn){ - return - } - - if(this.layoutToUse?.id?.startsWith("http")){ - if(!this.installedThemes.data.some(installed => installed.id === this.layoutToUse.id)){ - - this.installedThemes.data.push({ - id: this.layoutToUse.id, - icon: this.layoutToUse.icon, - title: this.layoutToUse.title.translations, - shortDescription: this.layoutToUse.shortDescription.translations - }) - } - this.installedThemes.ping() - console.log("Registered "+this.layoutToUse.id+" as installed themes") - } - - - - - return true; - }) + if (this.layoutToUse !== undefined && !this.layoutToUse.official) { + console.log("Marking unofficial theme as visited") + this.osmConnection.GetLongPreference("unofficial-theme-" + this.layoutToUse.id) + .setData(JSON.stringify({ + id: this.layoutToUse.id, + icon: this.layoutToUse.icon, + title: this.layoutToUse.title.translations, + shortDescription: this.layoutToUse.shortDescription.translations, + definition: this.layoutToUse["definition"] + })) + } // Important: the favourite layers are initialized _after_ the installed themes, as these might contain an installedTheme @@ -121,7 +94,7 @@ export default class UserRelatedState extends ElementsState { [], (layers) => Utils.Dedup(layers)?.join(";") ); - + this.InitializeLanguage(); new SelectedElementTagsUpdater(this) diff --git a/Logic/Tags/And.ts b/Logic/Tags/And.ts index d3a1cbac64..3a4a8e20f9 100644 --- a/Logic/Tags/And.ts +++ b/Logic/Tags/And.ts @@ -117,7 +117,7 @@ export class And extends TagsFilter { } return result; } - + AsJson() { return { and: this.and.map(a => a.AsJson()) diff --git a/Logic/Tags/ComparingTag.ts b/Logic/Tags/ComparingTag.ts index c09b19fcce..36979f71b9 100644 --- a/Logic/Tags/ComparingTag.ts +++ b/Logic/Tags/ComparingTag.ts @@ -38,7 +38,7 @@ export default class ComparingTag implements TagsFilter { usedKeys(): string[] { return [this._key]; } - + AsJson() { return this.asHumanString(false, false, {}) } diff --git a/Logic/Tags/Or.ts b/Logic/Tags/Or.ts index d7d0788b40..341cfc030a 100644 --- a/Logic/Tags/Or.ts +++ b/Logic/Tags/Or.ts @@ -65,7 +65,7 @@ export class Or extends TagsFilter { } return result; } - + AsJson() { return { or: this.or.map(o => o.AsJson()) diff --git a/Logic/Tags/RegexTag.ts b/Logic/Tags/RegexTag.ts index f747156b61..53357d6047 100644 --- a/Logic/Tags/RegexTag.ts +++ b/Logic/Tags/RegexTag.ts @@ -10,6 +10,13 @@ export class RegexTag extends TagsFilter { constructor(key: string | RegExp, value: RegExp | string, invert: boolean = false) { super(); this.key = key; + if (typeof value === "string") { + if (value.indexOf("^") < 0 && value.indexOf("$") < 0) { + value = "^" + value + "$" + } + value = new RegExp(value) + } + this.value = value; this.invert = invert; this.matchesEmpty = RegexTag.doesMatch("", this.value); @@ -109,7 +116,7 @@ export class RegexTag extends TagsFilter { console.error("Cannot export regex tag to asChange; ", this.key, this.value) return [] } - + AsJson() { return this.asHumanString() } diff --git a/Logic/Tags/Tag.ts b/Logic/Tags/Tag.ts index bdf3235adf..d2fd818e37 100644 --- a/Logic/Tags/Tag.ts +++ b/Logic/Tags/Tag.ts @@ -46,13 +46,13 @@ export class Tag extends TagsFilter { if (shorten) { v = Utils.EllipsesAfter(v, 25); } - if(v === "" || v === undefined){ + if (v === "" || v === undefined) { // This tag will be removed if in the properties, so we indicate this with special rendering - if(currentProperties !== undefined && (currentProperties[this.key] ?? "") === ""){ + if (currentProperties !== undefined && (currentProperties[this.key] ?? "") === "") { // This tag is not present in the current properties, so this tag doesn't change anything return "" } - return ""+this.key+"" + return "" + this.key + "" } if (linkToWiki) { return `${this.key}` + @@ -83,7 +83,7 @@ export class Tag extends TagsFilter { asChange(properties: any): { k: string; v: string }[] { return [{k: this.key, v: this.value}]; } - + AsJson() { return this.asHumanString(false, false) } diff --git a/Logic/Tags/TagUtils.ts b/Logic/Tags/TagUtils.ts index 42da0dd471..927205fc16 100644 --- a/Logic/Tags/TagUtils.ts +++ b/Logic/Tags/TagUtils.ts @@ -192,16 +192,13 @@ export class TagUtils { } const f = (value: string | undefined) => { - if(value === undefined){ + if (value === undefined) { return false; } - let b = Number(value?.trim() ) + let b = Number(value?.trim()) if (isNaN(b)) { - if(value.endsWith(" UTC")) { - value = value.replace(" UTC", "+00") - } - b = new Date(value).getTime() - if(isNaN(b)){ + b = Utils.ParseDate(value).getTime() + if (isNaN(b)) { return false } } @@ -218,7 +215,7 @@ export class TagUtils { } return new RegexTag( split[0], - new RegExp("^" + split[1] + "$"), + split[1], true ); } @@ -228,8 +225,8 @@ export class TagUtils { split[1] = "..*" } return new RegexTag( - new RegExp("^" + split[0] + "$"), - new RegExp("^" + split[1] + "$") + split[0], + split[1] ); } if (tag.indexOf("!:=") >= 0) { @@ -259,7 +256,7 @@ export class TagUtils { } return new RegexTag( split[0], - new RegExp("^" + split[1] + "$"), + split[1], true ); } @@ -273,7 +270,7 @@ export class TagUtils { } return new RegexTag( split[0], - new RegExp("^" + split[1] + "$") + split[1] ); } if (tag.indexOf("=") >= 0) { @@ -288,6 +285,10 @@ export class TagUtils { throw `Error while parsing tag '${tag}' in ${context}: no key part and value part were found` } + + if(json.and !== undefined && json.or !== undefined){ + throw `Error while parsing a TagConfig: got an object where both 'and' and 'or' are defined`} + if (json.and !== undefined) { return new And(json.and.map(t => TagUtils.Tag(t, context))); } diff --git a/Logic/UIEventSource.ts b/Logic/UIEventSource.ts index 28f2152575..fad6e07374 100644 --- a/Logic/UIEventSource.ts +++ b/Logic/UIEventSource.ts @@ -11,7 +11,7 @@ export class UIEventSource { constructor(data: T, tag: string = "") { this.tag = tag; this.data = data; - if(tag === undefined || tag === ""){ + if (tag === undefined || tag === "") { const callstack = new Error().stack.split("\n") this.tag = callstack[1] } @@ -41,6 +41,12 @@ export class UIEventSource { source.addCallback((latestData) => { sink.setData(latestData?.data); + latestData.addCallback(data => { + if (source.data !== latestData) { + return true; + } + sink.setData(data) + }) }); for (const possibleSource of possibleSources ?? []) { @@ -237,8 +243,8 @@ export class UIEventSource { } } let endTime = new Date().getTime() / 1000 - if((endTime - startTime) > 500){ - console.trace("Warning: a ping of ",this.tag," took more then 500ms; this is probably a performance issue") + if ((endTime - startTime) > 500) { + console.trace("Warning: a ping of ", this.tag, " took more then 500ms; this is probably a performance issue") } if (toDelete !== undefined) { for (const toDeleteElement of toDelete) { @@ -291,10 +297,10 @@ export class UIEventSource { const stack = new Error().stack.split("\n"); const callee = stack[1] - + const newSource = new UIEventSource( f(this.data), - "map(" + this.tag + ")@"+callee + "map(" + this.tag + ")@" + callee ); const update = function () { @@ -320,8 +326,10 @@ export class UIEventSource { this.addCallback((latest) => otherSource.setData(latest)); const self = this; otherSource.addCallback((latest) => self.setData(latest)); - if (reverseOverride && otherSource.data !== undefined) { - this.setData(otherSource.data); + if (reverseOverride) { + if(otherSource.data !== undefined){ + this.setData(otherSource.data); + } } else if (this.data === undefined) { this.setData(otherSource.data); } else { diff --git a/Logic/Web/IdbLocalStorage.ts b/Logic/Web/IdbLocalStorage.ts index 6850c3b6fd..1a7ac4544e 100644 --- a/Logic/Web/IdbLocalStorage.ts +++ b/Logic/Web/IdbLocalStorage.ts @@ -7,19 +7,24 @@ import {Utils} from "../../Utils"; */ export class IdbLocalStorage { - - public static Get(key: string, options: { defaultValue?: T }): UIEventSource{ - const src = new UIEventSource(options.defaultValue, "idb-local-storage:"+key) - if(Utils.runningFromConsole){ + + public static Get(key: string, options?: { defaultValue?: T, whenLoaded?: (t: T) => void }): UIEventSource { + const src = new UIEventSource(options?.defaultValue, "idb-local-storage:" + key) + if (Utils.runningFromConsole) { return src; } - idb.get(key).then(v => src.setData(v ?? options.defaultValue)) + idb.get(key).then(v => { + src.setData(v ?? options?.defaultValue); + if (options?.whenLoaded !== undefined) { + options?.whenLoaded(v) + } + }) src.addCallback(v => idb.set(key, v)) return src; - + } - - public static SetDirectly(key: string, value){ + + public static SetDirectly(key: string, value) { idb.set(key, value) } diff --git a/Logic/Web/QueryParameters.ts b/Logic/Web/QueryParameters.ts index 9824145c51..6dc084305a 100644 --- a/Logic/Web/QueryParameters.ts +++ b/Logic/Web/QueryParameters.ts @@ -7,15 +7,12 @@ import {Utils} from "../../Utils"; export class QueryParameters { + static defaults = {} + static documentation = {} private static order: string [] = ["layout", "test", "z", "lat", "lon"]; private static _wasInitialized: Set = new Set() private static knownSources = {}; private static initialized = false; - static defaults = {} - - static documentation = {} - - public static GetQueryParameter(key: string, deflt: string, documentation?: string): UIEventSource { if (!this.initialized) { @@ -35,12 +32,11 @@ export class QueryParameters { return source; } - public static GetBooleanQueryParameter(key: string, deflt: string, documentation?: string): UIEventSource { - return QueryParameters.GetQueryParameter(key, deflt, documentation).map(str => str === "true", [], b => "" + b) + public static GetBooleanQueryParameter(key: string, deflt: boolean, documentation?: string): UIEventSource { + return QueryParameters.GetQueryParameter(key, ""+ deflt, documentation).map(str => str === "true", [], b => "" + b) } - public static wasInitialized(key: string): boolean { return QueryParameters._wasInitialized.has(key) } @@ -75,7 +71,7 @@ export class QueryParameters { QueryParameters.knownSources[key] = source; } } - + } private static Serialize() { diff --git a/Models/Constants.ts b/Models/Constants.ts index 78f81b633c..3e13e2b77f 100644 --- a/Models/Constants.ts +++ b/Models/Constants.ts @@ -2,7 +2,8 @@ import {Utils} from "../Utils"; export default class Constants { - public static vNumber = "0.14.1"; + public static vNumber = "0.16.0"; + public static ImgurApiKey = '7070e7167f0a25a' public static readonly mapillary_client_token_v4 = "MLY|4441509239301885|b40ad2d3ea105435bd40c7e76993ae85" @@ -18,13 +19,13 @@ export default class Constants { public static readonly added_by_default: string[] = ["gps_location", "gps_location_history", "home_location", "gps_track"] - public static readonly no_include: string[] = ["conflation", "left_right_style", "split_point","current_view","matchpoint"] + public static readonly no_include: string[] = ["conflation", "left_right_style", "split_point", "current_view", "matchpoint"] /** * Layer IDs of layers which have special properties through built-in hooks */ - public static readonly priviliged_layers: string[] = [...Constants.added_by_default, "type_node", "note", ...Constants.no_include] + public static readonly priviliged_layers: string[] = [...Constants.added_by_default, "type_node", "note", "import_candidate", ...Constants.no_include] + - // The user journey states thresholds when a new feature gets unlocked public static userJourney = { moreScreenUnlock: 1, @@ -40,6 +41,7 @@ export default class Constants { addNewPointWithUnreadMessagesUnlock: 500, minZoomLevelToAddNewPoints: (Constants.isRetina() ? 18 : 19), + importHelperUnlock: 5000 }; /** * Used by 'PendingChangesUploader', which waits this amount of seconds to upload changes. @@ -52,13 +54,13 @@ export default class Constants { * The point closest to the changed feature will be considered and this distance will be tracked. * ALl these distances are used to calculate a nearby-score */ - static nearbyVisitTime: number= 30 * 60; + static nearbyVisitTime: number = 30 * 60; /** * If a user makes a change, the distance to the changed object is calculated. * If a user makes multiple changes, all these distances are put into multiple bins, depending on this distance. * For every bin, the totals are uploaded as metadata */ - static distanceToChangeObjectBins = [25,50,100,500,1000,5000, Number.MAX_VALUE] + static distanceToChangeObjectBins = [25, 50, 100, 500, 1000, 5000, Number.MAX_VALUE] static themeOrder = ["personal", "cyclofix", "hailhydrant", "bookcases", "toilets", "aed"]; private static isRetina(): boolean { diff --git a/Models/FilteredLayer.ts b/Models/FilteredLayer.ts index 0c4e163a3b..6890915f8d 100644 --- a/Models/FilteredLayer.ts +++ b/Models/FilteredLayer.ts @@ -3,7 +3,8 @@ import LayerConfig from "./ThemeConfig/LayerConfig"; import {TagsFilter} from "../Logic/Tags/TagsFilter"; export interface FilterState { - currentFilter: TagsFilter, state: string | number + currentFilter: TagsFilter, + state: string | number } export default interface FilteredLayer { diff --git a/Models/ThemeConfig/Conversion/Conversion.ts b/Models/ThemeConfig/Conversion/Conversion.ts new file mode 100644 index 0000000000..2926fb3de8 --- /dev/null +++ b/Models/ThemeConfig/Conversion/Conversion.ts @@ -0,0 +1,183 @@ +import {TagRenderingConfigJson} from "../Json/TagRenderingConfigJson"; +import {LayerConfigJson} from "../Json/LayerConfigJson"; +import {Utils} from "../../../Utils"; + +export interface DesugaringContext { + tagRenderings: Map + sharedLayers: Map +} + +export abstract class Conversion { + public readonly modifiedAttributes: string[]; + protected readonly doc: string; + public readonly name: string + + constructor(doc: string, modifiedAttributes: string[] = [], name: string) { + this.modifiedAttributes = modifiedAttributes; + this.doc = doc + "\n\nModified attributes are\n" + modifiedAttributes.join(", "); + this.name = name + } + + public static strict(fixed: { errors?: string[], warnings?: string[], information?: string[], result?: T }): T { + if (fixed?.errors !== undefined && fixed?.errors?.length > 0) { + throw fixed.errors.join("\n\n"); + } + fixed.information?.forEach(i => console.log(" ", i)) + const yellow = (s) => "\x1b[33m"+s+"\x1b[0m" + const red = s => '\x1b[31m'+s+'\x1b[0m' + + fixed.warnings?.forEach(w => console.warn(red(` `), yellow (w))) + return fixed.result; + } + + public convertStrict(json: TIn, context: string): TOut { + const fixed = this.convert(json, context) + return DesugaringStep.strict(fixed) + } + + abstract convert(json: TIn, context: string): { result: TOut, errors?: string[], warnings?: string[], information?: string[] } + + public convertAll(jsons: TIn[], context: string): { result: TOut[], errors: string[], warnings: string[], information?: string[] } { + if(jsons === undefined){ + throw "convertAll received undefined - don't do this (at "+context+")" + } + const result = [] + const errors = [] + const warnings = [] + const information = [] + for (let i = 0; i < jsons.length; i++) { + const json = jsons[i]; + const r = this.convert(json, context + "[" + i + "]") + result.push(r.result) + errors.push(...r.errors ?? []) + warnings.push(...r.warnings ?? []) + information.push(...r.information ?? []) + } + return { + result, + errors, + warnings, + information + } + } + +} + +export abstract class DesugaringStep extends Conversion { +} + +export class OnEvery extends DesugaringStep { + private readonly key: string; + private readonly step: DesugaringStep; + + constructor(key: string, step: DesugaringStep) { + super("Applies " + step.name + " onto every object of the list `key`", [key], "OnEvery("+step.name+")"); + this.step = step; + this.key = key; + } + + convert(json: T, context: string): { result: T; errors?: string[]; warnings?: string[], information?: string[] } { + json = {...json} + const step = this.step + const key = this.key; + const r = step.convertAll((json[key]), context + "." + key) + json[key] = r.result + return { + ...r, + result: json, + }; + } +} + +export class OnEveryConcat extends DesugaringStep { + private readonly key: string; + private readonly step: Conversion; + + constructor(key: string, step: Conversion) { + super(`Applies ${step.name} onto every object of the list \`${key}\`. The results are concatenated and used as new list`, [key], + "OnEvery("+key+").Concat("+step.name+")"); + this.step = step; + this.key = key; + } + + convert(json: T, context: string): { result: T; errors?: string[]; warnings?: string[], information?: string[] } { + json = {...json} + const step = this.step + const key = this.key; + const values = json[key] + if (values === undefined) { + // Move on - nothing to see here! + return { + result: json, + } + } + const r = step.convertAll((values), context + "." + key) + const vals: X[][] = r.result + json[key] = [].concat(...vals) + return { + ...r, + result: json, + }; + + } +} + +export class Fuse extends DesugaringStep { + private readonly steps: DesugaringStep[]; + + constructor(doc: string, ...steps: DesugaringStep[]) { + super((doc ?? "") + "This fused pipeline of the following steps: " + steps.map(s => s.name).join(", "), + Utils.Dedup([].concat(...steps.map(step => step.modifiedAttributes))), + "Fuse of "+steps.map(s => s.name).join(", ") + ); + this.steps = steps; + } + + convert(json: T, context: string): { result: T; errors: string[]; warnings: string[], information: string[] } { + const errors = [] + const warnings = [] + const information = [] + for (let i = 0; i < this.steps.length; i++) { + const step = this.steps[i]; + let r = step.convert(json, "While running step " +step.name + ": " + context) + errors.push(...r.errors ?? []) + warnings.push(...r.warnings ?? []) + information.push(...r.information ?? []) + json = r.result + if (errors.length > 0) { + break; + } + } + return { + result: json, + errors, + warnings, + information + }; + } + +} + +export class SetDefault extends DesugaringStep { + private readonly value: any; + private readonly key: string; + private readonly _overrideEmptyString: boolean; + + constructor(key: string, value: any, overrideEmptyString = false) { + super("Sets " + key + " to a default value if undefined", [], "SetDefault of "+key); + this.key = key; + this.value = value; + this._overrideEmptyString = overrideEmptyString; + } + + convert(json: T, context: string): { result: T } { + if (json[this.key] === undefined || (json[this.key] === "" && this._overrideEmptyString)) { + json = {...json} + json[this.key] = this.value + } + + return { + result: json + }; + } +} \ No newline at end of file diff --git a/Models/ThemeConfig/Conversion/CreateNoteImportLayer.ts b/Models/ThemeConfig/Conversion/CreateNoteImportLayer.ts index b8f78fe5bc..49d7af5b9e 100644 --- a/Models/ThemeConfig/Conversion/CreateNoteImportLayer.ts +++ b/Models/ThemeConfig/Conversion/CreateNoteImportLayer.ts @@ -1,29 +1,80 @@ -import {Conversion, DesugaringContext} from "./LegacyJsonConvert"; +import {Conversion} from "./Conversion"; import LayerConfig from "../LayerConfig"; import {LayerConfigJson} from "../Json/LayerConfigJson"; import Translations from "../../../UI/i18n/Translations"; -import {TagsFilter} from "../../../Logic/Tags/TagsFilter"; -import {And} from "../../../Logic/Tags/And"; +import PointRenderingConfigJson from "../Json/PointRenderingConfigJson"; +import {Translation} from "../../../UI/i18n/Translation"; -export default class CreateNoteImportLayer extends Conversion { +export default class CreateNoteImportLayer extends Conversion { + /** + * A closed note is included if it is less then 'n'-days closed + * @private + */ + private readonly _includeClosedNotesDays: number; - constructor() { + constructor(includeClosedNotesDays = 0) { super([ "Advanced conversion which deducts a layer showing all notes that are 'importable' (i.e. a note that contains a link to some MapComplete theme, with hash '#import').", "The import buttons and matches will be based on the presets of the given theme", - ].join("\n\n"), []) + ].join("\n\n"), [],"CreateNoteImportLayer") + this._includeClosedNotesDays = includeClosedNotesDays; } - convert(state: DesugaringContext, layer: LayerConfig, context: string): { result: LayerConfigJson; errors: string[]; warnings: string[] } { - const errors = [] - const warnings = [] + convert(layerJson: LayerConfigJson, context: string): { result: LayerConfigJson } { const t = Translations.t.importLayer; - - const possibleTags: TagsFilter[] = layer.presets.map(p => new And(p.tags)) - - const result : LayerConfigJson = { - "id": "note_import_"+layer.id, - "name": t.layerName.Subs({title: layer.title.render}).translations, + + /** + * The note itself will contain `tags=k=v;k=v;k=v;... + * This must be matched with a regex. + * This is a simple JSON-object as how it'll be put into the layerConfigJson directly + */ + const isShownIfAny: any[] = [] + const layer = new LayerConfig(layerJson, "while constructing a note-import layer") + for (const preset of layer.presets) { + const mustMatchAll = [] + for (const tag of preset.tags) { + const key = tag.key + const value = tag.value + const condition = "_tags~(^|.*;)" + key + "\=" + value + "($|;.*)" + mustMatchAll.push(condition) + } + isShownIfAny.push({and: mustMatchAll}) + } + + const pointRenderings = (layerJson.mapRendering ?? []).filter(r => r !== null && r["location"] !== undefined); + const firstRender = (pointRenderings [0]) + if(firstRender === undefined){ + throw `Layer ${layerJson.id} does not have a pointRendering: `+context + } + const icon = firstRender.icon + const iconBadges = [] + const title = layer.presets[0].title + if (icon !== undefined) { + iconBadges.push({ + if: {and: []}, + then: icon + }) + } + + const importButton = {} + { + const translations = t.importButton.Subs({layerId: layer.id, title: layer.presets[0].title}).translations + for (const key in translations) { + importButton[key] = "{" + translations[key] + "}" + } + } + + function embed(prefix, translation: Translation, postfix) { + const result = {} + for (const language in translation.translations) { + result[language] = prefix + translation.translations[language] + postfix + } + return result + } + + const result: LayerConfigJson = { + "id": "note_import_" + layer.id, + // By disabling the name, the import-layers won't pollute the filter view "name": t.layerName.Subs({title: layer.title.render}).translations, "description": t.description.Subs({title: layer.title.render}).translations, "source": { "osmTags": { @@ -31,28 +82,35 @@ export default class CreateNoteImportLayer extends Conversion {const lines = feat.properties['_first_comment'].split('\\n'); const matchesMapCompleteURL = lines.map(l => l.match(\".*https://mapcomplete.osm.be/\\([a-zA-Z_-]+\\)\\(.html\\).*#import\")); const matchedIndexes = matchesMapCompleteURL.map((doesMatch, i) => [doesMatch !== null, i]).filter(v => v[0]).map(v => v[1]); return matchedIndexes[0] })()", - "_intro:=(() => {const lines = feat.properties['_first_comment'].split('\\n'); lines.splice(feat.get('_trigger_index')-1, lines.length); return lines.map(l => l == '' ? '
' : l).join('');})()", - "_tags:=(() => {let lines = feat.properties['_first_comment'].split('\\n').map(l => l.trim()); lines.splice(0, feat.get('_trigger_index') + 1); lines = lines.filter(l => l != ''); return lines.join(';');})()" + "_first_comment=feat.get('comments')[0].text.toLowerCase()", + "_trigger_index=(() => {const lines = feat.properties['_first_comment'].split('\\n'); const matchesMapCompleteURL = lines.map(l => l.match(\".*https://mapcomplete.osm.be/\\([a-zA-Z_-]+\\)\\(.html\\)?.*#import\")); const matchedIndexes = matchesMapCompleteURL.map((doesMatch, i) => [doesMatch !== null, i]).filter(v => v[0]).map(v => v[1]); return matchedIndexes[0] })()", + "_comments_count=feat.get('comments').length", + "_intro=(() => {const lines = feat.get('comments')[0].text.split('\\n'); lines.splice(feat.get('_trigger_index')-1, lines.length); return lines.filter(l => l !== '').join('
');})()", + "_tags=(() => {let lines = feat.properties['_first_comment'].split('\\n').map(l => l.trim()); lines.splice(0, feat.get('_trigger_index') + 1); lines = lines.filter(l => l != ''); return lines.join(';');})()" ], "isShown": { "render": "no", "mappings": [ { - "if": {and: + "if": "comments!~.*https://mapcomplete.osm.be.*", + "then": "no" + }, + { + "if": { + and: ["_trigger_index~*", - {or: possibleTags.map(tf => tf.AsJson())} - ]}, + {or: isShownIfAny} + ] + }, "then": "yes" } ] @@ -63,25 +121,35 @@ export default class CreateNoteImportLayer extends Conversion1" + }, { "id": "import", - "render": "{import_button(public_bookcase, _tags, There might be a public bookcase here,./assets/svg/addSmall.svg,,,id)}" + "render": importButton, + condition: "closed_at=" }, { "id": "close_note_", - "render": "{close_note(Does not exist
, ./assets/svg/close.svg, id, This feature does not exist)}" + "render": embed( + "{close_note(", t.notFound.Subs({title}), ", ./assets/svg/close.svg, id, This feature does not exist)}"), + condition: "closed_at=" }, { "id": "close_note_mapped", - "render": "{close_note(Already mapped, ./assets/svg/checkmark.svg, id, Already mapped)}" + "render": embed("{close_note(", t.alreadyMapped.Subs({title}), ", ./assets/svg/checkmark.svg, id, Already mapped)}"), + condition: "closed_at=" + }, + { + "id": "handled", + "render": t.importHandled.translations, + condition: "closed_at~*" }, { "id": "comment", @@ -95,21 +163,24 @@ export default class CreateNoteImportLayer extends Conversion { + private _isOfficial: boolean; + constructor(isOfficial: boolean) { + super("Extract all images from a layoutConfig using the meta paths",[],"ExctractImages"); + this._isOfficial = isOfficial; + } + + convert(json: LayoutConfigJson, context: string): { result: string[], errors: string[], warnings: string[] } { + const paths = metapaths["default"] ?? metapaths + const trpaths = tagrenderingmetapaths["default"] ?? tagrenderingmetapaths + const allFoundImages = [] + const errors = [] + const warnings = [] + for (const metapath of paths) { + if (metapath.typeHint === undefined) { + continue + } + if (metapath.typeHint !== "image" && metapath.typeHint !== "icon") { + continue + } + + const mightBeTr = Array.isArray(metapath.type) && metapath.type.some(t => t["$ref"] == "#/definitions/TagRenderingConfigJson") + const found = Utils.CollectPath(metapath.path, json) + if (mightBeTr) { + // We might have tagRenderingConfigs containing icons here + for (const foundImage of found) { + if (typeof foundImage === "string") { + allFoundImages.push(foundImage) + } else { + // This is a tagRendering where every rendered value might be an icon! + for (const trpath of trpaths) { + if (trpath.typeHint !== "rendered") { + continue + } + const fromPath = Utils.CollectPath(trpath.path, foundImage) + for (const img of fromPath) { + if (typeof img !== "string") { + (this._isOfficial ? errors: warnings).push(context+": found an image path that is not a path at " + context + "." + metapath.path.join(".") + ": " + JSON.stringify(img)) + } + } + allFoundImages.push(...fromPath.filter(i => typeof i === "string")) + } + + } + } + } else { + allFoundImages.push(...found) + } + } + + const splitParts = [].concat(...Utils.NoNull(allFoundImages).map(img => img.split(";"))) + .map(img => img.split(":")[0]) + return {result: Utils.Dedup(splitParts), errors, warnings}; + } + +} + +export class FixImages extends DesugaringStep { + private readonly _knownImages: Set; + + constructor(knownImages: Set) { + super("Walks over the entire theme and replaces images to the relative URL. Only works if the ID of the theme is an URL",[],"fixImages"); + this._knownImages = knownImages; + } + + convert(json: LayoutConfigJson, context: string): { result: LayoutConfigJson } { + let url: URL; + try { + url = new URL(json.id) + } catch (e) { + // Not a URL, we don't rewrite + return {result: json} + } + + const absolute = url.protocol + "//" + url.host + let relative = url.protocol + "//" + url.host + url.pathname + relative = relative.substring(0, relative.lastIndexOf("/")) + const self = this; + + function replaceString(leaf: string) { + if (self._knownImages.has(leaf)) { + return leaf; + } + if (leaf.startsWith("./")) { + return relative + leaf.substring(1) + } + if (leaf.startsWith("/")) { + return absolute + leaf + } + return leaf; + } + + json = Utils.Clone(json) + + let paths = metapaths["default"] ?? metapaths + let trpaths = tagrenderingmetapaths["default"] ?? tagrenderingmetapaths + + for (const metapath of paths) { + if (metapath.typeHint !== "image" && metapath.typeHint !== "icon") { + continue + } + const mightBeTr = Array.isArray(metapath.type) && metapath.type.some(t => t["$ref"] == "#/definitions/TagRenderingConfigJson") + Utils.WalkPath(metapath.path, json, leaf => { + if (typeof leaf === "string") { + return replaceString(leaf) + } + + if (mightBeTr) { + // We might have reached a tagRenderingConfig containing icons + // lets walk every rendered value and fix the images in there + for (const trpath of trpaths) { + if (trpath.typeHint !== "rendered") { + continue + } + Utils.WalkPath(trpath.path, leaf, (rendered => { + return replaceString(rendered) + })) + } + } + + + return leaf; + }) + } + + + return { + result: json + }; + } +} \ No newline at end of file diff --git a/Models/ThemeConfig/Conversion/LegacyJsonConvert.ts b/Models/ThemeConfig/Conversion/LegacyJsonConvert.ts index df9408a8ea..f5a5294fb8 100644 --- a/Models/ThemeConfig/Conversion/LegacyJsonConvert.ts +++ b/Models/ThemeConfig/Conversion/LegacyJsonConvert.ts @@ -1,456 +1,22 @@ import {LayoutConfigJson} from "../Json/LayoutConfigJson"; -import DependencyCalculator from "../DependencyCalculator"; -import LayerConfig from "../LayerConfig"; -import {Translation} from "../../../UI/i18n/Translation"; -import LayoutConfig from "../LayoutConfig"; import {Utils} from "../../../Utils"; -import {TagRenderingConfigJson} from "../Json/TagRenderingConfigJson"; import LineRenderingConfigJson from "../Json/LineRenderingConfigJson"; import {LayerConfigJson} from "../Json/LayerConfigJson"; -import Constants from "../../Constants"; -import {AllKnownLayouts} from "../../../Customizations/AllKnownLayouts"; -import {SubstitutedTranslation} from "../../../UI/SubstitutedTranslation"; - -export interface DesugaringContext { - tagRenderings: Map - sharedLayers: Map -} - -export abstract class Conversion { - public readonly modifiedAttributes: string[]; - protected readonly doc: string; - - constructor(doc: string, modifiedAttributes: string[] = []) { - this.modifiedAttributes = modifiedAttributes; - this.doc = doc + "\n\nModified attributes are\n" + modifiedAttributes.join(", "); - } - - public static strict(fixed: { errors: string[], warnings: string[], result?: T }): T { - if (fixed?.errors?.length > 0) { - throw fixed.errors.join("\n"); - } - fixed.warnings?.forEach(w => console.warn(w)) - return fixed.result; - } - - public convertStrict(state: DesugaringContext, json: TIn, context: string): TOut { - const fixed = this.convert(state, json, context) - return DesugaringStep.strict(fixed) - } - - abstract convert(state: DesugaringContext, json: TIn, context: string): { result: TOut, errors: string[], warnings: string[] } - - public convertAll(state: DesugaringContext, jsons: TIn[], context: string): { result: TOut[], errors: string[], warnings: string[] } { - const result = [] - const errors = [] - const warnings = [] - for (let i = 0; i < jsons.length; i++) { - const json = jsons[i]; - const r = this.convert(state, json, context + "[" + i + "]") - result.push(r.result) - errors.push(...r.errors) - warnings.push(...r.warnings) - } - return { - result, - errors, - warnings - } - } - -} - -export abstract class DesugaringStep extends Conversion { -} - -class OnEvery extends DesugaringStep { - private readonly key: string; - private readonly step: DesugaringStep; - - constructor(key: string, step: DesugaringStep) { - super("Applies " + step.constructor.name + " onto every object of the list `key`", [key]); - this.step = step; - this.key = key; - } - - convert(state: DesugaringContext, json: T, context: string): { result: T; errors: string[]; warnings: string[] } { - json = {...json} - const step = this.step - const key = this.key; - const r = step.convertAll(state, (json[key]), context + "." + key) - json[key] = r.result - return { - result: json, - errors: r.errors, - warnings: r.warnings - }; - } -} - -class OnEveryConcat extends DesugaringStep { - private readonly key: string; - private readonly step: Conversion; - - constructor(key: string, step: Conversion) { - super(`Applies ${step.constructor.name} onto every object of the list \`${key}\``, [key]); - this.step = step; - this.key = key; - } - - convert(state: DesugaringContext, json: T, context: string): { result: T; errors: string[]; warnings: string[] } { - json = {...json} - const step = this.step - const key = this.key; - const values = json[key] - if (values === undefined) { - // Move on - nothing to see here! - return { - result: json, - errors: [], - warnings: [] - } - } - const r = step.convertAll(state, (values), context + "." + key) - const vals: X[][] = r.result - json[key] = [].concat(...vals) - return { - result: json, - errors: r.errors, - warnings: r.warnings - }; - - } -} - -class Fuse extends DesugaringStep { - private readonly steps: DesugaringStep[]; - - constructor(doc: string, ...steps: DesugaringStep[]) { - super((doc ?? "") + "This fused pipeline of the following steps: " + steps.map(s => s.constructor.name).join(", "), - Utils.Dedup([].concat(...steps.map(step => step.modifiedAttributes))) - ); - this.steps = steps; - } - - convert(state: DesugaringContext, json: T, context: string): { result: T; errors: string[]; warnings: string[] } { - const errors = [] - const warnings = [] - for (let i = 0; i < this.steps.length; i++) { - const step = this.steps[i]; - let r = step.convert(state, json, context + "(fusion " + this.constructor.name + "." + i + ")") - errors.push(...r.errors) - warnings.push(...r.warnings) - json = r.result - if (errors.length > 0) { - break; - } - } - return { - result: json, - errors, - warnings - }; - } - -} - -class AddMiniMap extends DesugaringStep { - constructor() { - super("Adds a default 'minimap'-element to the tagrenderings if none of the elements define such a minimap", ["tagRenderings"]); - } - - /** - * Returns true if this tag rendering has a minimap in some language. - * Note: this minimap can be hidden by conditions - */ - private static hasMinimap(renderingConfig: TagRenderingConfigJson): boolean { - const translations: Translation[] = Utils.NoNull([renderingConfig.render, ...(renderingConfig.mappings ?? []).map(m => m.then)]); - for (const translation of translations) { - for (const key in translation.translations) { - if (!translation.translations.hasOwnProperty(key)) { - continue - } - const template = translation.translations[key] - const parts = SubstitutedTranslation.ExtractSpecialComponents(template) - const hasMiniMap = parts.filter(part => part.special !== undefined).some(special => special.special.func.funcName === "minimap") - if (hasMiniMap) { - return true; - } - } - } - return false; - } - - convert(state: DesugaringContext, layerConfig: LayerConfigJson, context: string): { result: LayerConfigJson; errors: string[]; warnings: string[] } { - - - - const hasMinimap = layerConfig.tagRenderings?.some(tr => AddMiniMap.hasMinimap( tr)) ?? true - if (!hasMinimap) { - layerConfig = {...layerConfig} - layerConfig.tagRenderings = [...layerConfig.tagRenderings] - layerConfig.tagRenderings.push(state.tagRenderings.get("minimap")) - } - - return { - errors:[], - warnings: [], - result: layerConfig - }; - } -} - -class ExpandTagRendering extends Conversion { - constructor() { - super("Converts a tagRenderingSpec into the full tagRendering", []); - } - - convert(state: DesugaringContext, json: string | TagRenderingConfigJson | { builtin: string | string[]; override: any }, context: string): { result: TagRenderingConfigJson[]; errors: string[]; warnings: string[] } { - const errors = [] - const warnings = [] - - return { - result: this.convertUntilStable(state, json, warnings, errors, context), - errors, warnings - }; - } - - private lookup(state: DesugaringContext, name: string): TagRenderingConfigJson[] { - if (state.tagRenderings.has(name)) { - return [state.tagRenderings.get(name)] - } - if (name.indexOf(".") >= 0) { - const spl = name.split("."); - const layer = state.sharedLayers.get(spl[0]) - if (spl.length === 2 && layer !== undefined) { - const id = spl[1]; - - const layerTrs = layer.tagRenderings.filter(tr => tr["id"] !== undefined) - let matchingTrs: TagRenderingConfigJson[] - if (id === "*") { - matchingTrs = layerTrs - } else if (id.startsWith("*")) { - const id_ = id.substring(1) - matchingTrs = layerTrs.filter(tr => tr.group === id_) - } else { - matchingTrs = layerTrs.filter(tr => tr.id === id) - } - - - for (let i = 0; i < matchingTrs.length; i++) { - // The matched tagRenderings are 'stolen' from another layer. This means that they must match the layer condition before being shown - const found = Utils.Clone(matchingTrs[i]); - if (found.condition === undefined) { - found.condition = layer.source.osmTags - } else { - found.condition = {and: [found.condition, layer.source.osmTags]} - } - matchingTrs[i] = found - } - - if (matchingTrs.length !== 0) { - return matchingTrs - } - } - } - return undefined; - } - - private convertOnce(state: DesugaringContext, tr: string | any, warnings: string[], errors: string[], ctx: string): TagRenderingConfigJson[] { - if (tr === "questions") { - return [{ - id: "questions" - }] - } - - - if (typeof tr === "string") { - const lookup = this.lookup(state, tr); - if (lookup !== undefined) { - return lookup - } - warnings.push(ctx + "A literal rendering was detected: " + tr) - return [{ - render: tr, - id: tr.replace(/![a-zA-Z0-9]/g, "") - }] - } - - if (tr["builtin"] !== undefined) { - let names = tr["builtin"] - if (typeof names === "string") { - names = [names] - } - - for (const key of Object.keys(tr)) { - if (key === "builtin" || key === "override" || key === "id" || key.startsWith("#")) { - continue - } - errors.push("At " + ctx + ": an object calling a builtin can only have keys `builtin` or `override`, but a key with name `" + key + "` was found. This won't be picked up! The full object is: " + JSON.stringify(tr)) - } - - const trs: TagRenderingConfigJson[] = [] - for (const name of names) { - const lookup = this.lookup(state, name) - if (lookup === undefined) { - errors.push(ctx + ": The tagRendering with identifier " + name + " was not found.\n\tDid you mean one of " + Array.from(state.tagRenderings.keys()).join(", ") + "?") - continue - } - for (let foundTr of lookup) { - foundTr = Utils.Clone(foundTr) - Utils.Merge(tr["override"] ?? {}, foundTr) - trs.push(foundTr) - } - } - return trs; - } - - return [tr] - } - - private convertUntilStable(state: DesugaringContext, spec: string | any, warnings: string[], errors: string[], ctx: string): TagRenderingConfigJson[] { - const trs = this.convertOnce(state, spec, warnings, errors, ctx); - - const result = [] - for (const tr of trs) { - if (tr["builtin"] !== undefined) { - const stable = this.convertUntilStable(state, tr, warnings, errors, ctx + "(RECURSIVE RESOLVE)") - result.push(...stable) - } else { - result.push(tr) - } - } - - return result; - } -} - -class ExpandGroupRewrite extends Conversion<{ - rewrite: { - sourceString: string, - into: string[] - }[], - renderings: (string | { builtin: string, override: any } | TagRenderingConfigJson)[] -} | TagRenderingConfigJson, TagRenderingConfigJson[]> { - - - private static expandSubTagRenderings = new ExpandTagRendering() - - constructor() { - super( - "Converts a rewrite config for tagRenderings into the expanded form" - ); - } - - convert(state: DesugaringContext, json: - { - rewrite: - { sourceString: string; into: string[] }[]; renderings: (string | { builtin: string; override: any } | TagRenderingConfigJson)[] - } | TagRenderingConfigJson, context: string): { result: TagRenderingConfigJson[]; errors: string[]; warnings: string[] } { - - if (json["rewrite"] === undefined) { - return {result: [json], errors: [], warnings: []} - } - let config = <{ - rewrite: - { sourceString: string; into: string[] }[]; - renderings: (string | { builtin: string; override: any } | TagRenderingConfigJson)[] - }>json; - - - const subRenderingsRes = ExpandGroupRewrite.expandSubTagRenderings.convertAll(state, config.renderings, context); - const subRenderings: TagRenderingConfigJson[] = [].concat(subRenderingsRes.result); - const errors = subRenderingsRes.errors; - const warnings = subRenderingsRes.warnings; - - - const rewrittenPerGroup = new Map() - - // The actual rewriting - for (const rewrite of config.rewrite) { - const source = rewrite.sourceString; - for (const target of rewrite.into) { - const groupName = target; - const trs: TagRenderingConfigJson[] = [] - - for (const tr of subRenderings) { - trs.push(this.prepConfig(source, target, tr)) - } - if (rewrittenPerGroup.has(groupName)) { - rewrittenPerGroup.get(groupName).push(...trs) - - } else { - rewrittenPerGroup.set(groupName, trs) - - } - } - } - - // Add questions box for this category - rewrittenPerGroup.forEach((group, groupName) => { - group.push({ - id: "questions", - group: groupName - }) - }) - - - rewrittenPerGroup.forEach((group, _) => { - group.forEach(tr => { - if (tr.id === undefined || tr.id === "") { - errors.push("A tagrendering has an empty ID after expanding the tag") - } - }) - }) - - return { - result: [].concat(...Array.from(rewrittenPerGroup.values())), - errors, warnings - }; - } - - /* Used for left|right group creation and replacement */ - private prepConfig(keyToRewrite: string, target: string, tr: TagRenderingConfigJson) { - - function replaceRecursive(transl: string | any) { - if (typeof transl === "string") { - return transl.replace(keyToRewrite, target) - } - if (transl.map !== undefined) { - return transl.map(o => replaceRecursive(o)) - } - transl = {...transl} - for (const key in transl) { - transl[key] = replaceRecursive(transl[key]) - } - return transl - } - - const orig = tr; - tr = replaceRecursive(tr) - - tr.id = target + "-" + orig.id - tr.group = target - return tr - } -} - +import {DesugaringStep, Fuse, OnEvery} from "./Conversion"; export class UpdateLegacyLayer extends DesugaringStep { constructor() { super("Updates various attributes from the old data format to the new to provide backwards compatibility with the formats", - ["overpassTags", "source.osmtags", "tagRenderings[*].id", "mapRendering"]); + ["overpassTags", "source.osmtags", "tagRenderings[*].id", "mapRendering"], + "UpdateLegacyLayer"); } - convert(state: {}, json: LayerConfigJson, context: string): { result: LayerConfigJson; errors: string[]; warnings: string[] } { + convert(json: LayerConfigJson, context: string): { result: LayerConfigJson; errors: string[]; warnings: string[] } { const warnings = [] - if (typeof json === "string") { - return json - } - if (json["builtin"] !== undefined) { - // @ts-ignore - return json; + if (typeof json === "string" || json["builtin"] !== undefined) { + // Reuse of an already existing layer; return as-is + return {result: json, errors: [], warnings: []} } let config: any = {...json}; @@ -464,7 +30,7 @@ export class UpdateLegacyLayer extends DesugaringStep { constructor() { - super("Small fixes in the theme config", ["roamingRenderings"]); + super("Small fixes in the theme config", ["roamingRenderings"],"UpdateLegacyTheme"); } - convert(state: DesugaringContext, json: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors: string[]; warnings: string[] } { + convert(json: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors: string[]; warnings: string[] } { const oldThemeConfig = {...json} if (oldThemeConfig["roamingRenderings"] !== undefined) { @@ -572,6 +138,9 @@ class UpdateLegacyTheme extends DesugaringStep { } } } + + oldThemeConfig.layers = Utils.NoNull(oldThemeConfig.layers) + delete oldThemeConfig["language"] return { errors: [], warnings: [], @@ -590,467 +159,4 @@ export class FixLegacyTheme extends Fuse { } } -export class ValidateLayer extends DesugaringStep { - /** - * The paths where this layer is originally saved. Triggers some extra checks - * @private - */ - private readonly _path?: string; - private readonly knownImagePaths?: Set; - private readonly _isBuiltin: boolean; - constructor(knownImagePaths: Set, path: string, isBuiltin: boolean) { - super("Doesn't change anything, but emits warnings and errors", []); - this.knownImagePaths = knownImagePaths; - this._path = path; - this._isBuiltin = isBuiltin; - } - - convert(state: DesugaringContext, json: LayerConfigJson, context: string): { result: LayerConfigJson; errors: string[]; warnings: string[] } { - const errors = [] - const warnings = [] - - if (typeof json === "string") { - errors.push(context + ": This layer hasn't been expanded: " + json) - return { - result: null, - warnings: [], - errors - } - } - - if (json["builtin"] !== undefined) { - errors.push(context + ": This layer hasn't been expanded: " + json) - return { - result: null, - warnings: [], - errors - } - } - - try { - { - // Some checks for legacy elements - - if (json["overpassTags"] !== undefined) { - errors.push("Layer " + json.id + "still uses the old 'overpassTags'-format. Please use \"source\": {\"osmTags\": }' instead of \"overpassTags\": (note: this isn't your fault, the custom theme generator still spits out the old format)") - } - const forbiddenTopLevel = ["icon", "wayHandling", "roamingRenderings", "roamingRendering", "label", "width", "color", "colour", "iconOverlays"] - for (const forbiddenKey of forbiddenTopLevel) { - if (json[forbiddenKey] !== undefined) - errors.push(context + ": layer " + json.id + " still has a forbidden key " + forbiddenKey) - } - if (json["hideUnderlayingFeaturesMinPercentage"] !== undefined) { - errors.push(context + ": layer " + json.id + " contains an old 'hideUnderlayingFeaturesMinPercentage'") - } - } - { - const layer = new LayerConfig(json, "test", true) - const images = Array.from(layer.ExtractImages()) - const remoteImages = images.filter(img => img.indexOf("http") == 0) - for (const remoteImage of remoteImages) { - errors.push("Found a remote image: " + remoteImage + " in layer " + layer.id + ", please download it. You can use the fixTheme script to automate this") - } - for (const image of images) { - if (image.indexOf("{") >= 0) { - warnings.push("Ignoring image with { in the path: ", image) - continue - } - - if (this.knownImagePaths !== undefined && !this.knownImagePaths.has(image)) { - const ctx = context === undefined ? "" : ` in a layer defined in the theme ${context}` - errors.push(`Image with path ${image} not found or not attributed; it is used in ${layer.id}${ctx}`) - } - } - - } - { - // CHeck location - const expected: string = `assets/layers/${json.id}/${json.id}.json` - if (this._path != undefined && this._path.indexOf(expected) < 0) { - errors.push("Layer is in an incorrect place. The path is " + this._path + ", but expected " + expected) - } - } - - - if (this._isBuiltin) { - if (json.tagRenderings?.some(tr => tr["id"] === "")) { - const emptyIndexes: number[] = [] - for (let i = 0; i < json.tagRenderings.length; i++) { - const tagRendering = json.tagRenderings[i]; - if (tagRendering["id"] === "") { - emptyIndexes.push(i) - } - } - errors.push(`Some tagrendering-ids are empty or have an emtpy string; this is not allowed (at ${context}.tagRenderings.[${emptyIndexes.join(",")}])`) - } - - const duplicateIds = Utils.Dupiclates((json.tagRenderings ?? [])?.map(f => f["id"]).filter(id => id !== "questions")) - if (duplicateIds.length > 0 && !Utils.runningFromConsole) { - errors.push(`Some tagRenderings have a duplicate id: ${duplicateIds} (at ${context}.tagRenderings)`) - } - - - if (json.description === undefined) { - - if (Constants.priviliged_layers.indexOf(json.id) >= 0) { - errors.push( - context + ": A priviliged layer must have a description" - ) - } else { - warnings.push( - context + ": A builtin layer should have a description" - ) - } - } - } - } catch (e) { - errors.push(e) - } - return { - result: undefined, - errors, - warnings - }; - } -} - -class ValidateLanguageCompleteness extends DesugaringStep { - private readonly _languages: string[]; - - constructor(...languages: string[]) { - super("Checks that the given object is fully translated in the specified languages", []); - this._languages = languages; - } - - convert(state: DesugaringContext, obj: any, context: string): { result: LayerConfig; errors: string[]; warnings: string[] } { - const errors = [] - const translations = Translation.ExtractAllTranslationsFrom( - obj - ) - for (const neededLanguage of this._languages) { - translations - .filter(t => t.tr.translations[neededLanguage] === undefined && t.tr.translations["*"] === undefined) - .forEach(missing => { - errors.push(context + "A theme should be translation-complete for " + neededLanguage + ", but it lacks a translation for " + missing.context + ".\n\tThe english translation is " + missing.tr.textFor('en')) - }) - } - - return { - result: obj, - warnings: [], errors - }; - } -} - -class ValidateTheme extends DesugaringStep { - /** - * The paths where this layer is originally saved. Triggers some extra checks - * @private - */ - private readonly _path?: string; - private readonly knownImagePaths: Set; - private readonly _isBuiltin: boolean; - - constructor(knownImagePaths: Set, path: string, isBuiltin: boolean) { - super("Doesn't change anything, but emits warnings and errors", []); - this.knownImagePaths = knownImagePaths; - this._path = path; - this._isBuiltin = isBuiltin; - } - - convert(state: DesugaringContext, json: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors: string[]; warnings: string[] } { - const errors = [] - const warnings = [] - { - // Legacy format checks - if (this._isBuiltin) { - if (typeof json.language === "string") { - errors.push("The theme " + json.id + " has a string as language. Please use a list of strings") - } - if (json["units"] !== undefined) { - errors.push("The theme " + json.id + " has units defined - these should be defined on the layer instead. (Hint: use overrideAll: { '+units': ... }) ") - } - if (json["roamingRenderings"] !== undefined) { - errors.push("Theme " + json.id + " contains an old 'roamingRenderings'. Use an 'overrideAll' instead") - } - } - } - - try { - const theme = new LayoutConfig(json, true, "test") - if (theme.id !== theme.id.toLowerCase()) { - errors.push("Theme ids should be in lowercase, but it is " + theme.id) - } - - const filename = this._path.substring(this._path.lastIndexOf("/") + 1, this._path.length - 5) - if (theme.id !== filename) { - errors.push("Theme ids should be the same as the name.json, but we got id: " + theme.id + " and filename " + filename + " (" + this._path + ")") - } - if (!this.knownImagePaths.has(theme.icon)) { - errors.push("The theme image " + theme.icon + " is not attributed or not saved locally") - } - const dups = Utils.Dupiclates(json.layers.map(layer => layer["id"])) - if (dups.length > 0) { - errors.push(`The theme ${json.id} defines multiple layers with id ${dups.join(", ")}`) - } - if (json["mustHaveLanguage"] !== undefined) { - const checked = new ValidateLanguageCompleteness(...json["mustHaveLanguage"]) - .convert(state, theme, theme.id) - errors.push(...checked.errors) - warnings.push(...checked.warnings) - } - - } catch (e) { - errors.push(e) - } - - return { - result: json, - errors, - warnings - }; - } -} - -export class ValidateThemeAndLayers extends Fuse { - constructor(knownImagePaths: Set, path: string, isBuiltin: boolean) { - super("Validates a theme and the contained layers", - new ValidateTheme(knownImagePaths, path, isBuiltin), - new OnEvery("layers", new ValidateLayer(knownImagePaths, undefined, false)) - ); - } -} - -class AddDependencyLayersToTheme extends DesugaringStep { - constructor() { - super("If a layer has a dependency on another layer, these layers are added automatically on the theme. (For example: defibrillator depends on 'walls_and_buildings' to snap onto. This layer is added automatically)", ["layers"]); - } - - private static CalculateDependencies(alreadyLoaded: LayerConfigJson[], allKnownLayers: Map, themeId: string): LayerConfigJson[] { - const dependenciesToAdd: LayerConfigJson[] = [] - const loadedLayerIds: Set = new Set(alreadyLoaded.map(l => l.id)); - - // Verify cross-dependencies - let unmetDependencies: { neededLayer: string, neededBy: string, reason: string, context?: string }[] = [] - do { - const dependencies: { neededLayer: string, reason: string, context?: string, neededBy: string }[] = [] - - for (const layerConfig of alreadyLoaded) { - const layerDeps = DependencyCalculator.getLayerDependencies(new LayerConfig(layerConfig)) - dependencies.push(...layerDeps) - } - - // During the generate script, builtin layers are verified but not loaded - so we have to add them manually here - // Their existance is checked elsewhere, so this is fine - unmetDependencies = dependencies.filter(dep => !loadedLayerIds.has(dep.neededLayer)) - for (const unmetDependency of unmetDependencies) { - if (loadedLayerIds.has(unmetDependency.neededLayer)) { - continue - } - const dep = allKnownLayers.get(unmetDependency.neededLayer) - if (dep === undefined) { - const message = - ["Loading a dependency failed: layer " + unmetDependency.neededLayer + " is not found, neither as layer of " + themeId + " nor as builtin layer.", - "This layer is needed by " + unmetDependency.neededBy, - unmetDependency.reason + " (at " + unmetDependency.context + ")", - "Loaded layers are: " + alreadyLoaded.map(l => l.id).join(",") - - ] - throw message.join("\n\t"); - } - dependenciesToAdd.unshift(dep) - loadedLayerIds.add(dep.id); - unmetDependencies = unmetDependencies.filter(d => d.neededLayer !== unmetDependency.neededLayer) - } - - } while (unmetDependencies.length > 0) - - return dependenciesToAdd; - } - - convert(state: DesugaringContext, theme: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors: string[]; warnings: string[] } { - const allKnownLayers: Map = state.sharedLayers; - const knownTagRenderings: Map = state.tagRenderings; - const errors = []; - const warnings = []; - const layers: LayerConfigJson[] = theme.layers; // Layers should be expanded at this point - - knownTagRenderings.forEach((value, key) => { - value.id = key; - }) - - const dependencies = AddDependencyLayersToTheme.CalculateDependencies(layers, allKnownLayers, theme.id); - if (dependencies.length > 0) { - - warnings.push(context + ": added " + dependencies.map(d => d.id).join(", ") + " to the theme as they are needed") - } - layers.unshift(...dependencies); - - return { - result: { - ...theme, - layers: layers - }, - errors, - warnings - }; - } -} - -class SetDefault extends DesugaringStep { - private readonly value: any; - private readonly key: string; - private readonly _overrideEmptyString: boolean; - - constructor(key: string, value: any, overrideEmptyString = false) { - super("Sets " + key + " to a default value if undefined"); - this.key = key; - this.value = value; - this._overrideEmptyString = overrideEmptyString; - } - - convert(state: DesugaringContext, json: T, context: string): { result: T; errors: string[]; warnings: string[] } { - if (json[this.key] === undefined || (json[this.key] === "" && this._overrideEmptyString)) { - json = {...json} - json[this.key] = this.value - } - - return { - errors: [], warnings: [], - result: json - }; - } -} - -export class PrepareLayer extends Fuse { - constructor() { - super( - "Fully prepares and expands a layer for the LayerConfig.", - new OnEveryConcat("tagRenderings", new ExpandGroupRewrite()), - new OnEveryConcat("tagRenderings", new ExpandTagRendering()), - new SetDefault("titleIcons", ["defaults"]), - new OnEveryConcat("titleIcons", new ExpandTagRendering()) - ); - } -} - -class SubstituteLayer extends Conversion<(string | LayerConfigJson), LayerConfigJson[]> { - constructor() { - super("Converts the identifier of a builtin layer into the actual layer, or converts a 'builtin' syntax with override in the fully expanded form", []); - } - - convert(state: DesugaringContext, json: string | LayerConfigJson, context: string): { result: LayerConfigJson[]; errors: string[]; warnings: string[] } { - const errors = [] - const warnings = [] - if (typeof json === "string") { - const found = state.sharedLayers.get(json) - if (found === undefined) { - return { - result: null, - errors: [context + ": The layer with name " + json + " was not found as a builtin layer"], - warnings - } - } - return { - result: [found], - errors, warnings - } - } - - if (json["builtin"] !== undefined) { - let names = json["builtin"] - if (typeof names === "string") { - names = [names] - } - const layers = [] - for (const name of names) { - const found = Utils.Clone(state.sharedLayers.get(name)) - if (found === undefined) { - errors.push(context + ": The layer with name " + json + " was not found as a builtin layer") - continue - } - if (json["override"]["tagRenderings"] !== undefined && (found["tagRenderings"] ?? []).length > 0) { - errors.push(`At ${context}: when overriding a layer, an override is not allowed to override into tagRenderings. Use "+tagRenderings" or "tagRenderings+" instead to prepend or append some questions.`) - } - try { - Utils.Merge(json["override"], found); - layers.push(found) - } catch (e) { - errors.push(`At ${context}: could not apply an override due to: ${e}.\nThe override is: ${JSON.stringify(json["override"],)}`) - } - } - return { - result: layers, - errors, warnings - } - - } - - return { - result: [json], - errors, warnings - }; - } - -} - -class AddDefaultLayers extends DesugaringStep { - - constructor() { - super("Adds the default layers, namely: " + Constants.added_by_default.join(", "), ["layers"]); - } - - convert(state: DesugaringContext, json: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors: string[]; warnings: string[] } { - const errors = [] - const warnings = [] - json.layers = [...json.layers] - - if (json.id === "personal") { - json.layers = [] - for (const publicLayer of AllKnownLayouts.AllPublicLayers()) { - const id = publicLayer.id - const config = state.sharedLayers.get(id) - if(Constants.added_by_default.indexOf(id) >= 0){ - continue; - } - if(config === undefined){ - // This is a layer which is coded within a public theme, not as separate .json - continue - } - json.layers.push(config) - } - const publicIds = AllKnownLayouts.AllPublicLayers().map(l => l.id) - publicIds.map(id => state.sharedLayers.get(id)) - } - - for (const layerName of Constants.added_by_default) { - const v = state.sharedLayers.get(layerName) - if (v === undefined) { - errors.push("Default layer " + layerName + " not found") - } - json.layers.push(v) - } - - return { - result: json, - errors, - warnings - }; - } - -} - -export class PrepareTheme extends Fuse { - constructor() { - super( - "Fully prepares and expands a theme", - new OnEveryConcat("layers", new SubstituteLayer()), - new SetDefault("socialImage", "assets/SocialImage.png", true), - new AddDefaultLayers(), - new AddDependencyLayersToTheme(), - new OnEvery("layers", new PrepareLayer()), - new OnEvery("layers", new AddMiniMap()) - ); - } -} \ No newline at end of file diff --git a/Models/ThemeConfig/Conversion/PrepareLayer.ts b/Models/ThemeConfig/Conversion/PrepareLayer.ts new file mode 100644 index 0000000000..70b9815d74 --- /dev/null +++ b/Models/ThemeConfig/Conversion/PrepareLayer.ts @@ -0,0 +1,309 @@ +import {Conversion, DesugaringContext, Fuse, OnEveryConcat, SetDefault} from "./Conversion"; +import {LayerConfigJson} from "../Json/LayerConfigJson"; +import {TagRenderingConfigJson} from "../Json/TagRenderingConfigJson"; +import {Utils} from "../../../Utils"; +import Translations from "../../../UI/i18n/Translations"; +import {Translation} from "../../../UI/i18n/Translation"; + +class ExpandTagRendering extends Conversion { + private readonly _state: DesugaringContext; + constructor(state: DesugaringContext) { + super("Converts a tagRenderingSpec into the full tagRendering", [],"ExpandTagRendering"); + this._state = state; + } + + convert(json: string | TagRenderingConfigJson | { builtin: string | string[]; override: any }, context: string): { result: TagRenderingConfigJson[]; errors: string[]; warnings: string[] } { + const errors = [] + const warnings = [] + + return { + result: this.convertUntilStable(json, warnings, errors, context), + errors, warnings + }; + } + + private lookup(name: string): TagRenderingConfigJson[] { + const state = this._state; + if (state.tagRenderings.has(name)) { + return [state.tagRenderings.get(name)] + } + if (name.indexOf(".") >= 0) { + const spl = name.split("."); + const layer = state.sharedLayers.get(spl[0]) + if (spl.length === 2 && layer !== undefined) { + const id = spl[1]; + + const layerTrs = layer.tagRenderings.filter(tr => tr["id"] !== undefined) + let matchingTrs: TagRenderingConfigJson[] + if (id === "*") { + matchingTrs = layerTrs + } else if (id.startsWith("*")) { + const id_ = id.substring(1) + matchingTrs = layerTrs.filter(tr => tr.group === id_) + } else { + matchingTrs = layerTrs.filter(tr => tr.id === id) + } + + + for (let i = 0; i < matchingTrs.length; i++) { + // The matched tagRenderings are 'stolen' from another layer. This means that they must match the layer condition before being shown + const found = Utils.Clone(matchingTrs[i]); + if (found.condition === undefined) { + found.condition = layer.source.osmTags + } else { + found.condition = {and: [found.condition, layer.source.osmTags]} + } + matchingTrs[i] = found + } + + if (matchingTrs.length !== 0) { + return matchingTrs + } + } + } + return undefined; + } + + private convertOnce(tr: string | any, warnings: string[], errors: string[], ctx: string): TagRenderingConfigJson[] { + const state = this._state + if (tr === "questions") { + return [{ + id: "questions" + }] + } + + + if (typeof tr === "string") { + const lookup = this.lookup(tr); + if (lookup !== undefined) { + return lookup + } + warnings.push(ctx + "A literal rendering was detected: " + tr) + return [{ + render: tr, + id: tr.replace(/![a-zA-Z0-9]/g, "") + }] + } + + if (tr["builtin"] !== undefined) { + let names = tr["builtin"] + if (typeof names === "string") { + names = [names] + } + + for (const key of Object.keys(tr)) { + if (key === "builtin" || key === "override" || key === "id" || key.startsWith("#")) { + continue + } + errors.push("At " + ctx + ": an object calling a builtin can only have keys `builtin` or `override`, but a key with name `" + key + "` was found. This won't be picked up! The full object is: " + JSON.stringify(tr)) + } + + const trs: TagRenderingConfigJson[] = [] + for (const name of names) { + const lookup = this.lookup(name) + if (lookup === undefined) { + errors.push(ctx + ": The tagRendering with identifier " + name + " was not found.\n\tDid you mean one of " + Array.from(state.tagRenderings.keys()).join(", ") + "?") + continue + } + for (let foundTr of lookup) { + foundTr = Utils.Clone(foundTr) + Utils.Merge(tr["override"] ?? {}, foundTr) + trs.push(foundTr) + } + } + return trs; + } + + return [tr] + } + + private convertUntilStable(spec: string | any, warnings: string[], errors: string[], ctx: string): TagRenderingConfigJson[] { + const trs = this.convertOnce(spec, warnings, errors, ctx); + + const result = [] + for (const tr of trs) { + if (tr["builtin"] !== undefined) { + const stable = this.convertUntilStable(tr, warnings, errors, ctx + "(RECURSIVE RESOLVE)") + result.push(...stable) + } else { + result.push(tr) + } + } + + return result; + } +} + +class ExpandGroupRewrite extends Conversion<{ + rewrite: { + sourceString: string, + into: string[] + }[], + renderings: (string | { builtin: string, override: any } | TagRenderingConfigJson)[] +} | TagRenderingConfigJson, TagRenderingConfigJson[]> { + + + private _expandSubTagRenderings; + + constructor(state: DesugaringContext) { + super( + "Converts a rewrite config for tagRenderings into the expanded form",[], + "ExpandGroupRewrite" + ); + this._expandSubTagRenderings = new ExpandTagRendering(state) + } + + convert( json: + { + rewrite: + { sourceString: string; into: string[] }[]; renderings: (string | { builtin: string; override: any } | TagRenderingConfigJson)[] + } | TagRenderingConfigJson, context: string): { result: TagRenderingConfigJson[]; errors: string[]; warnings?: string[] } { + + if (json["rewrite"] === undefined) { + return {result: [json], errors: [], warnings: []} + } + let config = <{ + rewrite: + { sourceString: string[]; into: (string | any)[][] }; + renderings: (string | { builtin: string; override: any } | TagRenderingConfigJson)[] + }>json; + + + { + const errors = [] + + if(!Array.isArray(config.rewrite.sourceString)){ + let extra = ""; + if(typeof config.rewrite.sourceString === "string"){ + extra=`
Try "sourceString": [ "${config.rewrite.sourceString}" ] instead (note the [ and ])` + } + const msg = context+"
Invalid format: a rewrite block is defined, but the 'sourceString' should be an array of strings, but it is a "+typeof config.rewrite.sourceString + extra + errors.push(msg) + } + + + const expectedLength = config.rewrite.sourceString.length + for (let i = 0; i < config.rewrite.into.length; i++){ + const targets = config.rewrite.into[i]; + if(!Array.isArray(targets)){ + errors.push(`${context}.rewrite.into[${i}] should be an array of values, but it is a `+typeof targets) + } else if(targets.length !== expectedLength){ + errors.push(`${context}.rewrite.into[${i}]:
The rewrite specified ${config.rewrite.sourceString} as sourcestring, which consists of ${expectedLength} values. The target ${JSON.stringify(targets)} has ${targets.length} items`) + if(typeof targets[0] !== "string"){ + errors.push(context+".rewrite.into["+i+"]: expected a string as first rewrite value values, but got "+targets[0]) + + } + } + } + + if (errors.length > 0) { + return { + errors, + warnings: [], + result: undefined + } + } + } + + const subRenderingsRes = <{ result: TagRenderingConfigJson[][], errors, warnings }> this._expandSubTagRenderings.convertAll(config.renderings, context); + const subRenderings: TagRenderingConfigJson[] = [].concat(...subRenderingsRes.result); + const errors = subRenderingsRes.errors; + const warnings = subRenderingsRes.warnings; + + + const rewrittenPerGroup = new Map() + + // The actual rewriting + const sourceStrings = config.rewrite.sourceString; + for (const targets of config.rewrite.into) { + const groupName = targets[0]; + if(typeof groupName !== "string"){ + throw "The first string of 'targets' should always be a string" + } + const trs: TagRenderingConfigJson[] = [] + + for (const tr of subRenderings) { + let rewritten = tr; + for (let i = 0; i < sourceStrings.length; i++) { + const source = sourceStrings[i] + const target = targets[i] // This is a string OR a translation + rewritten = this.prepConfig(source, target, rewritten) + } + rewritten.group = rewritten.group ?? groupName + trs.push(rewritten) + } + + if (rewrittenPerGroup.has(groupName)) { + rewrittenPerGroup.get(groupName).push(...trs) + } else { + rewrittenPerGroup.set(groupName, trs) + + } + } + + // Add questions box for this category + rewrittenPerGroup.forEach((group, groupName) => { + group.push({ + id: "questions", + group: groupName + }) + }) + + + rewrittenPerGroup.forEach((group, _) => { + group.forEach(tr => { + if (tr.id === undefined || tr.id === "") { + errors.push("A tagrendering has an empty ID after expanding the tag; the tagrendering is: "+JSON.stringify(tr)) + } + }) + }) + + return { + result: [].concat(...Array.from(rewrittenPerGroup.values())), + errors, warnings + }; + } + + /* Used for left|right group creation and replacement. + * Every 'keyToRewrite' will be replaced with 'target' recursively. This substitution will happen in place in the object 'tr' */ + private prepConfig(keyToRewrite: string, target: string | any, tr: TagRenderingConfigJson): TagRenderingConfigJson { + + const isTranslation = typeof target !== "string" + + function replaceRecursive(transl: string | any) { + if (typeof transl === "string") { + // This is a simple string - we do a simple replace + return transl.replace(keyToRewrite, target) + } + if (transl.map !== undefined) { + // This is a list of items + return transl.map(o => replaceRecursive(o)) + } + + if (Translations.isProbablyATranslation(transl) && isTranslation) { + return Translations.T(transl).Fuse(new Translation(target), keyToRewrite).translations + } + + transl = {...transl} + for (const key in transl) { + transl[key] = replaceRecursive(transl[key]) + } + return transl + } + + return replaceRecursive(tr) + } +} + + +export class PrepareLayer extends Fuse { + constructor(state: DesugaringContext) { + super( + "Fully prepares and expands a layer for the LayerConfig.", + new OnEveryConcat("tagRenderings", new ExpandGroupRewrite(state)), + new OnEveryConcat("tagRenderings", new ExpandTagRendering(state)), + new SetDefault("titleIcons", ["defaults"]), + new OnEveryConcat("titleIcons", new ExpandTagRendering(state)) + ); + } +} \ No newline at end of file diff --git a/Models/ThemeConfig/Conversion/PrepareTheme.ts b/Models/ThemeConfig/Conversion/PrepareTheme.ts new file mode 100644 index 0000000000..b79f118b38 --- /dev/null +++ b/Models/ThemeConfig/Conversion/PrepareTheme.ts @@ -0,0 +1,443 @@ +import {Conversion, DesugaringContext, DesugaringStep, Fuse, OnEvery, OnEveryConcat, SetDefault} from "./Conversion"; +import {LayoutConfigJson} from "../Json/LayoutConfigJson"; +import {PrepareLayer} from "./PrepareLayer"; +import {LayerConfigJson} from "../Json/LayerConfigJson"; +import {Utils} from "../../../Utils"; +import Constants from "../../Constants"; +import {AllKnownLayouts} from "../../../Customizations/AllKnownLayouts"; +import CreateNoteImportLayer from "./CreateNoteImportLayer"; +import LayerConfig from "../LayerConfig"; +import {TagRenderingConfigJson} from "../Json/TagRenderingConfigJson"; +import {SubstitutedTranslation} from "../../../UI/SubstitutedTranslation"; +import DependencyCalculator from "../DependencyCalculator"; + +class SubstituteLayer extends Conversion<(string | LayerConfigJson), LayerConfigJson[]> { + private readonly _state: DesugaringContext; + constructor( + state: DesugaringContext, + ) { + super("Converts the identifier of a builtin layer into the actual layer, or converts a 'builtin' syntax with override in the fully expanded form", [],"SubstuteLayers"); + this._state = state; + } + + convert(json: string | LayerConfigJson, context: string): { result: LayerConfigJson[]; errors: string[], information?: string[] } { + const errors = [] + const information = [] + const state= this._state + function reportNotFound(name: string){ + const knownLayers = Array.from(state.sharedLayers.keys()) + const withDistance = knownLayers.map(lname => [lname, Utils.levenshteinDistance(name, lname)]) + withDistance.sort((a, b) => a[1] - b[1]) + const ids = withDistance.map(n => n[0]) + // Known builtin layers are "+.join(",")+"\n For more information, see " + errors.push(`${context}: The layer with name ${name} was not found as a builtin layer. Perhaps you meant ${ids[0]}, ${ids[1]} or ${ids[2]}? + For an overview of all available layers, refer to https://github.com/pietervdvn/MapComplete/blob/develop/Docs/BuiltinLayers.md`) + } + + + if (typeof json === "string") { + const found = state.sharedLayers.get(json) + if (found === undefined) { + reportNotFound(json) + return { + result: null, + errors, + } + } + return { + result: [found], + errors + } + } + + if (json["builtin"] !== undefined) { + let names = json["builtin"] + if (typeof names === "string") { + names = [names] + } + const layers = [] + + for (const name of names) { + const found = Utils.Clone(state.sharedLayers.get(name)) + if (found === undefined) { + reportNotFound(name) + continue + } + if (json["override"]["tagRenderings"] !== undefined && (found["tagRenderings"] ?? []).length > 0) { + errors.push(`At ${context}: when overriding a layer, an override is not allowed to override into tagRenderings. Use "+tagRenderings" or "tagRenderings+" instead to prepend or append some questions.`) + } + try { + Utils.Merge(json["override"], found); + layers.push(found) + } catch (e) { + errors.push(`At ${context}: could not apply an override due to: ${e}.\nThe override is: ${JSON.stringify(json["override"],)}`) + } + + if(json["hideTagRenderingsWithLabels"]){ + const hideLabels: Set = new Set(json["hideTagRenderingsWithLabels"]) + // These labels caused at least one deletion + const usedLabels : Set = new Set(); + const filtered = [] + for (const tr of found.tagRenderings) { + const labels = tr["labels"] + if(labels !== undefined){ + const forbiddenLabel = labels.findIndex(l => hideLabels.has(l)) + if(forbiddenLabel >= 0){ + usedLabels.add(labels[forbiddenLabel]) + information.push(context+": Dropping tagRendering "+tr["id"]+" as it has a forbidden label: "+labels[forbiddenLabel]) + continue + } + } + + if(hideLabels.has(tr["id"])){ + usedLabels.add(tr["id"]) + information.push(context+": Dropping tagRendering "+tr["id"]+" as its id is a forbidden label") + continue + } + + if(hideLabels.has(tr["group"])){ + usedLabels.add(tr["group"]) + information.push(context+": Dropping tagRendering "+tr["id"]+" as its group `"+tr["group"]+"` is a forbidden label") + continue + } + + filtered.push(tr) + } + const unused = Array.from(hideLabels).filter(l => !usedLabels.has(l)) + if(unused.length > 0){ + errors.push("This theme specifies that certain tagrenderings have to be removed based on forbidden layers. One or more of these layers did not match any tagRenderings and caused no deletions: "+unused.join(", ")+"\n This means that this label can be removed or that the original tagRendering that should be deleted does not have this label anymore") + } + found.tagRenderings = filtered + } + } + return { + result: layers, + errors, + information + } + + } + + return { + result: [json], + errors + }; + } + +} + +class AddDefaultLayers extends DesugaringStep { + private _state: DesugaringContext; + + constructor(state: DesugaringContext) { + super("Adds the default layers, namely: " + Constants.added_by_default.join(", "), ["layers"],"AddDefaultLayers"); + this._state = state; + } + + convert(json: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors: string[]; warnings: string[] } { + const errors = [] + const warnings = [] + const state = this._state + json.layers = [...json.layers] + const alreadyLoaded = new Set(json.layers.map(l => l["id"])) + + if (json.id === "personal") { + json.layers = [] + for (const publicLayer of AllKnownLayouts.AllPublicLayers()) { + const id = publicLayer.id + const config = state.sharedLayers.get(id) + if (Constants.added_by_default.indexOf(id) >= 0) { + continue; + } + if (config === undefined) { + // This is a layer which is coded within a public theme, not as separate .json + continue + } + json.layers.push(config) + } + const publicIds = AllKnownLayouts.AllPublicLayers().map(l => l.id) + publicIds.map(id => state.sharedLayers.get(id)) + } + + for (const layerName of Constants.added_by_default) { + const v = state.sharedLayers.get(layerName) + if (v === undefined) { + errors.push("Default layer " + layerName + " not found") + } + if(alreadyLoaded.has(v.id)){ + warnings.push("Layout "+context+" already has a layer with name "+v.id+"; skipping inclusion of this builtin layer") + continue + } + json.layers.push(v) + } + + return { + result: json, + errors, + warnings + }; + } + +} + +class AddImportLayers extends DesugaringStep { + constructor() { + super("For every layer in the 'layers'-list, create a new layer which'll import notes. (Note that priviliged layers and layers which have a geojson-source set are ignored)", ["layers"],"AddImportLayers"); + } + + convert(json: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors: string[] } { + const errors = [] + + json = {...json} + const allLayers: LayerConfigJson[] = json.layers; + json.layers = [...json.layers] + + + if(json.enableNoteImports ?? true) { + const creator = new CreateNoteImportLayer() + for (let i1 = 0; i1 < allLayers.length; i1++) { + const layer = allLayers[i1]; + if (Constants.priviliged_layers.indexOf(layer.id) >= 0) { + // Priviliged layers are skipped + continue + } + + if (layer.source["geoJson"] !== undefined) { + // Layer which don't get their data from OSM are skipped + continue + } + + if (layer.title === undefined || layer.name === undefined) { + // Anonymous layers and layers without popup are skipped + continue + } + + if (layer.presets === undefined || layer.presets.length == 0) { + // A preset is needed to be able to generate a new point + continue; + } + + try { + + const importLayerResult = creator.convert(layer, context + ".(noteimportlayer)[" + i1 + "]") + if (importLayerResult.result !== undefined) { + json.layers.push(importLayerResult.result) + } + } catch (e) { + errors.push("Could not generate an import-layer for " + layer.id + " due to " + e) + } + } + } + + return { + errors, + result: json + }; + } +} + + +export class AddMiniMap extends DesugaringStep { + private readonly _state: DesugaringContext; + constructor(state: DesugaringContext, ) { + super("Adds a default 'minimap'-element to the tagrenderings if none of the elements define such a minimap", ["tagRenderings"],"AddMiniMap"); + this._state = state; + } + + /** + * Returns true if this tag rendering has a minimap in some language. + * Note: this minimap can be hidden by conditions + */ + static hasMinimap(renderingConfig: TagRenderingConfigJson): boolean { + const translations: any[] = Utils.NoNull([renderingConfig.render, ...(renderingConfig.mappings ?? []).map(m => m.then)]); + for (let translation of translations) { + if (typeof translation == "string") { + translation = {"*": translation} + } + + for (const key in translation) { + if (!translation.hasOwnProperty(key)) { + continue + } + const template = translation[key] + const parts = SubstitutedTranslation.ExtractSpecialComponents(template) + const hasMiniMap = parts.filter(part => part.special !== undefined).some(special => special.special.func.funcName === "minimap") + if (hasMiniMap) { + return true; + } + } + } + return false; + } + + convert(layerConfig: LayerConfigJson, context: string): { result: LayerConfigJson } { + + const state = this._state; + const hasMinimap = layerConfig.tagRenderings?.some(tr => AddMiniMap.hasMinimap(tr)) ?? true + if (!hasMinimap) { + layerConfig = {...layerConfig} + layerConfig.tagRenderings = [...layerConfig.tagRenderings] + layerConfig.tagRenderings.push(state.tagRenderings.get("questions")) + layerConfig.tagRenderings.push(state.tagRenderings.get("minimap")) + } + + return { + result: layerConfig + }; + } +} + + +class ApplyOverrideAll extends DesugaringStep { + + constructor() { + super("Applies 'overrideAll' onto every 'layer'. The 'overrideAll'-field is removed afterwards", ["overrideAll", "layers"],"ApplyOverrideAll"); + } + + convert(json: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors: string[]; warnings: string[] } { + + const overrideAll = json.overrideAll; + if (overrideAll === undefined) { + return {result: json, warnings: [], errors: []} + } + + json = {...json} + + delete json.overrideAll + const newLayers = [] + for (let layer of json.layers) { + layer = {...layer} + Utils.Merge(overrideAll, layer) + newLayers.push(layer) + } + json.layers = newLayers + + + return {result: json, warnings: [], errors: []}; + } + +} + +class AddDependencyLayersToTheme extends DesugaringStep { + private readonly _state: DesugaringContext; + constructor(state: DesugaringContext, ) { + super("If a layer has a dependency on another layer, these layers are added automatically on the theme. (For example: defibrillator depends on 'walls_and_buildings' to snap onto. This layer is added automatically)", ["layers"],"AddDependencyLayersToTheme"); + this._state = state; + } + + private static CalculateDependencies(alreadyLoaded: LayerConfigJson[], allKnownLayers: Map, themeId: string): LayerConfigJson[] { + const dependenciesToAdd: LayerConfigJson[] = [] + const loadedLayerIds: Set = new Set(alreadyLoaded.map(l => l.id)); + + // Verify cross-dependencies + let unmetDependencies: { neededLayer: string, neededBy: string, reason: string, context?: string }[] = [] + do { + const dependencies: { neededLayer: string, reason: string, context?: string, neededBy: string }[] = [] + + for (const layerConfig of alreadyLoaded) { + const layerDeps = DependencyCalculator.getLayerDependencies(new LayerConfig(layerConfig)) + dependencies.push(...layerDeps) + } + + for (const dependency of dependencies) { + if(loadedLayerIds.has(dependency.neededLayer)){ + // We mark the needed layer as 'mustLoad' + alreadyLoaded.find(l => l.id === dependency.neededLayer).forceLoad = true + } + } + + // During the generate script, builtin layers are verified but not loaded - so we have to add them manually here + // Their existance is checked elsewhere, so this is fine + unmetDependencies = dependencies.filter(dep => !loadedLayerIds.has(dep.neededLayer)) + for (const unmetDependency of unmetDependencies) { + if (loadedLayerIds.has(unmetDependency.neededLayer)) { + continue + } + const dep = allKnownLayers.get(unmetDependency.neededLayer) + if (dep === undefined) { + const message = + ["Loading a dependency failed: layer " + unmetDependency.neededLayer + " is not found, neither as layer of " + themeId + " nor as builtin layer.", + "This layer is needed by " + unmetDependency.neededBy, + unmetDependency.reason + " (at " + unmetDependency.context + ")", + "Loaded layers are: " + alreadyLoaded.map(l => l.id).join(",") + + ] + throw message.join("\n\t"); + } + dependenciesToAdd.unshift(dep) + loadedLayerIds.add(dep.id); + unmetDependencies = unmetDependencies.filter(d => d.neededLayer !== unmetDependency.neededLayer) + } + + } while (unmetDependencies.length > 0) + + return dependenciesToAdd.map(dep => { + dep = Utils.Clone(dep); + dep.forceLoad = true + return dep + }); + } + + convert(theme: LayoutConfigJson, context: string): { result: LayoutConfigJson; information: string[] } { + const state = this._state + const allKnownLayers: Map = state.sharedLayers; + const knownTagRenderings: Map = state.tagRenderings; + const information = []; + const layers: LayerConfigJson[] = theme.layers; // Layers should be expanded at this point + + knownTagRenderings.forEach((value, key) => { + value.id = key; + }) + + const dependencies = AddDependencyLayersToTheme.CalculateDependencies(layers, allKnownLayers, theme.id); + if (dependencies.length > 0) { + + information.push(context + ": added " + dependencies.map(d => d.id).join(", ") + " to the theme as they are needed") + } + layers.unshift(...dependencies); + + return { + result: { + ...theme, + layers: layers + }, + information + }; + } +} + +class PreparePersonalTheme extends DesugaringStep { + private readonly _state: DesugaringContext; + constructor(state: DesugaringContext) { + super("Adds every public layer to the personal theme",["layers"],"PreparePersonalTheme"); + this._state = state; + } + + convert(json: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors?: string[]; warnings?: string[]; information?: string[] } { + if(json.id !== "personal"){ + return {result: json} + } + + json.layers = Array.from(this._state.sharedLayers.keys()).filter(l => Constants.priviliged_layers.indexOf(l) < 0) + + return {result: json}; + } + +} + +export class PrepareTheme extends Fuse { + constructor(state: DesugaringContext) { + super( + "Fully prepares and expands a theme", + new PreparePersonalTheme(state), + new OnEveryConcat("layers", new SubstituteLayer(state)), + new SetDefault("socialImage", "assets/SocialImage.png", true), + new OnEvery("layers", new PrepareLayer(state)), + new ApplyOverrideAll(), + new AddDefaultLayers(state), + new AddDependencyLayersToTheme(state), + new AddImportLayers(), + new OnEvery("layers", new AddMiniMap(state)) + ); + } +} \ No newline at end of file diff --git a/Models/ThemeConfig/Conversion/Validation.ts b/Models/ThemeConfig/Conversion/Validation.ts new file mode 100644 index 0000000000..6837c5f387 --- /dev/null +++ b/Models/ThemeConfig/Conversion/Validation.ts @@ -0,0 +1,378 @@ +import {DesugaringStep, Fuse, OnEvery} from "./Conversion"; +import {LayerConfigJson} from "../Json/LayerConfigJson"; +import LayerConfig from "../LayerConfig"; +import {Utils} from "../../../Utils"; +import Constants from "../../Constants"; +import {Translation} from "../../../UI/i18n/Translation"; +import {LayoutConfigJson} from "../Json/LayoutConfigJson"; +import LayoutConfig from "../LayoutConfig"; +import {TagRenderingConfigJson} from "../Json/TagRenderingConfigJson"; +import {TagUtils} from "../../../Logic/Tags/TagUtils"; +import {ExtractImages} from "./FixImages"; +import ScriptUtils from "../../../scripts/ScriptUtils"; +import {And} from "../../../Logic/Tags/And"; + + +class ValidateLanguageCompleteness extends DesugaringStep { + private readonly _languages: string[]; + + constructor(...languages: string[]) { + super("Checks that the given object is fully translated in the specified languages", [], "ValidateLanguageCompleteness"); + this._languages = languages; + } + + convert(obj: any, context: string): { result: LayerConfig; errors: string[] } { + const errors = [] + const translations = Translation.ExtractAllTranslationsFrom( + obj + ) + for (const neededLanguage of this._languages ?? ["en"]) { + translations + .filter(t => t.tr.translations[neededLanguage] === undefined && t.tr.translations["*"] === undefined) + .forEach(missing => { + errors.push(context + "A theme should be translation-complete for " + neededLanguage + ", but it lacks a translation for " + missing.context + ".\n\tThe known translation is " + missing.tr.textFor('en')) + }) + } + + return { + result: obj, + errors + }; + } +} + +class ValidateTheme extends DesugaringStep { + /** + * The paths where this layer is originally saved. Triggers some extra checks + * @private + */ + private readonly _path?: string; + private readonly knownImagePaths: Set; + private readonly _isBuiltin: boolean; + + constructor(knownImagePaths: Set, path: string, isBuiltin: boolean) { + super("Doesn't change anything, but emits warnings and errors", [],"ValidateTheme"); + this.knownImagePaths = knownImagePaths; + this._path = path; + this._isBuiltin = isBuiltin; + } + + convert(json: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors: string[], warnings: string[], information: string[] } { + const errors = [] + const warnings = [] + const information = [] + { + // Legacy format checks + if (this._isBuiltin) { + if (json["units"] !== undefined) { + errors.push("The theme " + json.id + " has units defined - these should be defined on the layer instead. (Hint: use overrideAll: { '+units': ... }) ") + } + if (json["roamingRenderings"] !== undefined) { + errors.push("Theme " + json.id + " contains an old 'roamingRenderings'. Use an 'overrideAll' instead") + } + } + } + { + // Check images: are they local, are the licenses there, is the theme icon square, ... + const images = new ExtractImages(this._isBuiltin).convertStrict(json, "validation") + const remoteImages = images.filter(img => img.indexOf("http") == 0) + for (const remoteImage of remoteImages) { + errors.push("Found a remote image: " + remoteImage + " in theme " + json.id + ", please download it.") + } + for (const image of images) { + if (image.indexOf("{") >= 0) { + information.push("Ignoring image with { in the path: " + image) + continue + } + + if (image === "assets/SocialImage.png") { + continue + } + if (image.match(/[a-z]*/)) { + // This is a builtin img, e.g. 'checkmark' or 'crosshair' + continue; + } + + if (this.knownImagePaths !== undefined && !this.knownImagePaths.has(image)) { + const ctx = context === undefined ? "" : ` in a layer defined in the theme ${context}` + errors.push(`Image with path ${image} not found or not attributed; it is used in ${json.id}${ctx}`) + } + } + + if (json.icon.endsWith(".svg")) { + try { + ScriptUtils.ReadSvgSync(json.icon, svg => { + const width: string = svg.$.width; + const height: string = svg.$.height; + if (width !== height) { + const e = `the icon for theme ${json.id} is not square. Please square the icon at ${json.icon}` + + ` Width = ${width} height = ${height}`; + (json.hideFromOverview ? warnings : errors).push(e) + } + }) + } catch (e) { + console.error("Could not read " + json.icon + " due to " + e) + } + } + + } + try { + const theme = new LayoutConfig(json, true, "test") + if (theme.id !== theme.id.toLowerCase()) { + errors.push("Theme ids should be in lowercase, but it is " + theme.id) + } + + const filename = this._path.substring(this._path.lastIndexOf("/") + 1, this._path.length - 5) + if (theme.id !== filename) { + errors.push("Theme ids should be the same as the name.json, but we got id: " + theme.id + " and filename " + filename + " (" + this._path + ")") + } + if (!this.knownImagePaths.has(theme.icon)) { + errors.push("The theme image " + theme.icon + " is not attributed or not saved locally") + } + const dups = Utils.Dupiclates(json.layers.map(layer => layer["id"])) + if (dups.length > 0) { + errors.push(`The theme ${json.id} defines multiple layers with id ${dups.join(", ")}`) + } + if (json["mustHaveLanguage"] !== undefined) { + const checked = new ValidateLanguageCompleteness(...json["mustHaveLanguage"]) + .convert(theme, theme.id) + errors.push(...checked.errors) + } + if(!json.hideFromOverview && theme.id !== "personal"){ + // Official, public themes must have a full english translation + const checked = new ValidateLanguageCompleteness("en") + .convert(theme, theme.id) + errors.push(...checked.errors) + } + + } catch (e) { + errors.push(e) + } + + return { + result: json, + errors, + warnings, + information + }; + } +} + +export class ValidateThemeAndLayers extends Fuse { + constructor(knownImagePaths: Set, path: string, isBuiltin: boolean) { + super("Validates a theme and the contained layers", + new ValidateTheme(knownImagePaths, path, isBuiltin), + new OnEvery("layers", new ValidateLayer(knownImagePaths, undefined, false)) + ); + } +} + + +class OverrideShadowingCheck extends DesugaringStep { + + constructor() { + super("Checks that an 'overrideAll' does not override a single override",[],"OverrideShadowingCheck"); + } + + convert(json: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors?: string[]; warnings?: string[] } { + + const overrideAll = json.overrideAll; + if (overrideAll === undefined) { + return {result: json} + } + + const errors = [] + const withOverride = json.layers.filter(l => l["override"] !== undefined) + + for (const layer of withOverride) { + for (const key in overrideAll) { + if (layer["override"][key] !== undefined || layer["override"]["=" + key] !== undefined) { + const w = "The override of layer " + JSON.stringify(layer["builtin"]) + " has a shadowed property: " + key + " is overriden by overrideAll of the theme"; + errors.push(w) + } + } + } + + return {result: json, errors} + } + +} + +export class PrevalidateTheme extends Fuse { + + constructor() { + super("Various consistency checks on the raw JSON", + new OverrideShadowingCheck() + ); + + } + +} + +export class DetectShadowedMappings extends DesugaringStep { + constructor() { + super("Checks that the mappings don't shadow each other",[],"DetectShadowedMappings"); + } + + convert(json: TagRenderingConfigJson, context: string): { result: TagRenderingConfigJson; errors?: string[]; warnings?: string[] } { + const errors = [] + if (json.mappings === undefined || json.mappings.length === 0) { + return {result: json} + } + const parsedConditions = json.mappings.map(m => TagUtils.Tag(m.if)) + for (let i = 0; i < json.mappings.length; i++) { + if (!parsedConditions[i].isUsableAsAnswer()) { + continue + } + const keyValues = parsedConditions[i].asChange({}); + const properties = [] + keyValues.forEach(({k, v}) => { + properties[k] = v + }) + for (let j = 0; j < i; j++) { + const doesMatch = parsedConditions[j].matchesProperties(properties) + if (doesMatch) { + // The current mapping is shadowed! + errors.push(`Mapping ${i} is shadowed by mapping ${j} and will thus never be shown: + The mapping ${parsedConditions[i].asHumanString(false, false, {})} is fully matched by a previous mapping, which matches: + ${parsedConditions[j].asHumanString(false, false, {})}. + + Move the mapping up to fix this problem +`) + } + } + + } + + return { + errors, + result: json + }; + } +} + +export class ValidateLayer extends DesugaringStep { + /** + * The paths where this layer is originally saved. Triggers some extra checks + * @private + */ + private readonly _path?: string; + private readonly knownImagePaths?: Set; + private readonly _isBuiltin: boolean; + + constructor(knownImagePaths: Set, path: string, isBuiltin: boolean) { + super("Doesn't change anything, but emits warnings and errors", [],"ValidateLayer"); + this.knownImagePaths = knownImagePaths; + this._path = path; + this._isBuiltin = isBuiltin; + } + + convert(json: LayerConfigJson, context: string): { result: LayerConfigJson; errors: string[]; warnings?: string[] } { + const errors = [] + const warnings = [] + + if (typeof json === "string") { + errors.push(context + ": This layer hasn't been expanded: " + json) + return { + result: null, + errors + } + } + + if (json["builtin"] !== undefined) { + errors.push(context + ": This layer hasn't been expanded: " + json) + return { + result: null, + errors + } + } + + try { + { + // Some checks for legacy elements + + if (json["overpassTags"] !== undefined) { + errors.push("Layer " + json.id + "still uses the old 'overpassTags'-format. Please use \"source\": {\"osmTags\": }' instead of \"overpassTags\": (note: this isn't your fault, the custom theme generator still spits out the old format)") + } + const forbiddenTopLevel = ["icon", "wayHandling", "roamingRenderings", "roamingRendering", "label", "width", "color", "colour", "iconOverlays"] + for (const forbiddenKey of forbiddenTopLevel) { + if (json[forbiddenKey] !== undefined) + errors.push(context + ": layer " + json.id + " still has a forbidden key " + forbiddenKey) + } + if (json["hideUnderlayingFeaturesMinPercentage"] !== undefined) { + errors.push(context + ": layer " + json.id + " contains an old 'hideUnderlayingFeaturesMinPercentage'") + } + } + { + // CHeck location of layer file + const expected: string = `assets/layers/${json.id}/${json.id}.json` + if (this._path != undefined && this._path.indexOf(expected) < 0) { + errors.push("Layer is in an incorrect place. The path is " + this._path + ", but expected " + expected) + } + } + if (this._isBuiltin) { + // Check for correct IDs + if (json.tagRenderings?.some(tr => tr["id"] === "")) { + const emptyIndexes: number[] = [] + for (let i = 0; i < json.tagRenderings.length; i++) { + const tagRendering = json.tagRenderings[i]; + if (tagRendering["id"] === "") { + emptyIndexes.push(i) + } + } + errors.push(`Some tagrendering-ids are empty or have an emtpy string; this is not allowed (at ${context}.tagRenderings.[${emptyIndexes.join(",")}])`) + } + + const duplicateIds = Utils.Dupiclates((json.tagRenderings ?? [])?.map(f => f["id"]).filter(id => id !== "questions")) + if (duplicateIds.length > 0 && !Utils.runningFromConsole) { + errors.push(`Some tagRenderings have a duplicate id: ${duplicateIds} (at ${context}.tagRenderings)`) + } + + + if (json.description === undefined) { + + if (Constants.priviliged_layers.indexOf(json.id) >= 0) { + errors.push( + context + ": A priviliged layer must have a description" + ) + } else { + warnings.push( + context + ": A builtin layer should have a description" + ) + } + } + } + if (json.tagRenderings !== undefined) { + new DetectShadowedMappings().convertAll(json.tagRenderings, context + ".tagRenderings") + } + + if(json.presets !== undefined){ + + // Check that a preset will be picked up by the layer itself + const baseTags = TagUtils.Tag( json.source.osmTags) + for (let i = 0; i < json.presets.length; i++){ + const preset = json.presets[i]; + const tags : {k: string,v: string}[]= new And(preset.tags.map(t => TagUtils.Tag(t))).asChange({id:"node/-1"}) + const properties = {} + for (const tag of tags) { + properties[tag.k] = tag.v + } + const doMatch = baseTags.matchesProperties(properties) + if(!doMatch){ + errors.push(context+".presets["+i+"]: This preset does not match the required tags of this layer. This implies that a newly added point will not show up.\n A newly created point will have properties: "+JSON.stringify(properties)+"\n The required tags are: "+baseTags.asHumanString(false, false, {})) + } + } + } + + } catch (e) { + errors.push(e) + } + + + return { + result: json, + errors, + warnings + }; + } +} \ No newline at end of file diff --git a/Models/ThemeConfig/DependencyCalculator.ts b/Models/ThemeConfig/DependencyCalculator.ts index 93a3ed1315..c4d3663d3c 100644 --- a/Models/ThemeConfig/DependencyCalculator.ts +++ b/Models/ThemeConfig/DependencyCalculator.ts @@ -8,7 +8,7 @@ export default class DependencyCalculator { public static GetTagRenderingDependencies(tr: TagRenderingConfig): string[] { - if(tr === undefined){ + if (tr === undefined) { throw "Got undefined tag rendering in getTagRenderingDependencies" } const deps: string[] = [] @@ -74,11 +74,11 @@ export default class DependencyCalculator { getFeatureById: _ => undefined, getFeaturesWithin: (layerId, _) => { - if(layerId === '*'){ + if (layerId === '*') { // This is a wildcard return [] } - + // The important line: steal the dependencies! deps.push({ neededLayer: layerId, reason: "A calculated tag loads features from this layer", diff --git a/Models/ThemeConfig/ExtraLinkConfig.ts b/Models/ThemeConfig/ExtraLinkConfig.ts new file mode 100644 index 0000000000..641029f6fb --- /dev/null +++ b/Models/ThemeConfig/ExtraLinkConfig.ts @@ -0,0 +1,31 @@ +import ExtraLinkConfigJson from "./Json/ExtraLinkConfigJson"; +import {Translation} from "../../UI/i18n/Translation"; +import Translations from "../../UI/i18n/Translations"; + +export default class ExtraLinkConfig { + public readonly icon?: string + public readonly text?: Translation + public readonly href: string + public readonly newTab?: false | boolean + public readonly requirements?: Set<("iframe" | "no-iframe" | "welcome-message" | "no-welcome-message")> + + constructor(configJson: ExtraLinkConfigJson, context) { + this.icon = configJson.icon + this.text = Translations.T(configJson.text) + this.href = configJson.href + this.newTab = configJson.newTab + this.requirements = new Set(configJson.requirements) + + for (let requirement of configJson.requirements) { + + if (this.requirements.has(("no-" + requirement))) { + throw "Conflicting requirements found for " + context + ".extraLink: both '" + requirement + "' and 'no-" + requirement + "' found" + } + } + + if (this.icon === undefined && this.text === undefined) { + throw "At " + context + ".extraLink: define at least an icon or a text to show. Both are undefined, this is not allowed" + } + } + +} \ No newline at end of file diff --git a/Models/ThemeConfig/FilterConfig.ts b/Models/ThemeConfig/FilterConfig.ts index 32785a354b..b9060b3cd6 100644 --- a/Models/ThemeConfig/FilterConfig.ts +++ b/Models/ThemeConfig/FilterConfig.ts @@ -18,6 +18,7 @@ export default class FilterConfig { originalTagsSpec: string | AndOrTagConfigJson fields: { name: string, type: string }[] }[]; + public readonly defaultSelection? : number constructor(json: FilterConfigJson, context: string) { if (json.options === undefined) { @@ -35,6 +36,7 @@ export default class FilterConfig { throw `A filter was given where the options aren't a list at ${context}` } this.id = json.id; + let defaultSelection : number = undefined this.options = json.options.map((option, i) => { const ctx = `${context}.options[${i}]`; const question = Translations.T( @@ -54,8 +56,8 @@ export default class FilterConfig { const fields: { name: string, type: string }[] = ((option.fields) ?? []).map((f, i) => { const type = f.type ?? "string" - if (!ValidatedTextField.AllTypes.has(type)) { - throw `Invalid filter: ${type} is not a valid validated textfield type (at ${ctx}.fields[${i}])\n\tTry one of ${Array.from(ValidatedTextField.AllTypes.keys()).join(",")}` + if (!ValidatedTextField.ForType(type) === undefined) { + throw `Invalid filter: ${type} is not a valid validated textfield type (at ${ctx}.fields[${i}])\n\tTry one of ${Array.from(ValidatedTextField.AvailableTypes()).join(",")}` } if (f.name === undefined || f.name === "" || f.name.match(/[a-z0-9_-]+/) == null) { throw `Invalid filter: a variable name should match [a-z0-9_-]+ at ${ctx}.fields[${i}]` @@ -66,9 +68,18 @@ export default class FilterConfig { } }) + if(option.default){ + if(defaultSelection === undefined){ + defaultSelection = i; + }else{ + throw `Invalid filter: multiple filters are set as default, namely ${i} and ${defaultSelection} at ${context}` + } + } return {question: question, osmTags: osmTags, fields, originalTagsSpec: option.osmTags}; }); + + this.defaultSelection = defaultSelection if (this.options.some(o => o.fields.length > 0) && this.options.length > 1) { throw `Invalid filter at ${context}: a filter with textfields should only offer a single option.` @@ -77,6 +88,8 @@ export default class FilterConfig { if (this.options.length > 1 && this.options[0].osmTags !== undefined) { throw "Error in " + context + "." + this.id + ": the first option of a multi-filter should always be the 'reset' option and not have any filters" } + + } public initState(): UIEventSource { @@ -88,7 +101,15 @@ export default class FilterConfig { return "" + state.state } - const defaultValue = this.options.length > 1 ? "0" : "" + let defaultValue = "" + if(this.options.length > 1){ + defaultValue = ""+(this.defaultSelection ?? 0) + }else{ + // Only a single option + if(this.defaultSelection === 0){ + defaultValue = "true" + } + } const qp = QueryParameters.GetQueryParameter("filter-" + this.id, defaultValue, "State of filter " + this.id) if (this.options.length > 1) { diff --git a/Models/ThemeConfig/Json/ExtraLinkConfigJson.ts b/Models/ThemeConfig/Json/ExtraLinkConfigJson.ts new file mode 100644 index 0000000000..c48455aeb2 --- /dev/null +++ b/Models/ThemeConfig/Json/ExtraLinkConfigJson.ts @@ -0,0 +1,7 @@ +export default interface ExtraLinkConfigJson { + icon?: string, + text?: string | any, + href: string, + newTab?: false | boolean, + requirements?: ("iframe" | "no-iframe" | "welcome-message" | "no-welcome-message")[] +} \ No newline at end of file diff --git a/Models/ThemeConfig/Json/FilterConfigJson.ts b/Models/ThemeConfig/Json/FilterConfigJson.ts index 25bcd1ea81..493bf74c90 100644 --- a/Models/ThemeConfig/Json/FilterConfigJson.ts +++ b/Models/ThemeConfig/Json/FilterConfigJson.ts @@ -12,8 +12,9 @@ export default interface FilterConfigJson { * Filtering is done based on the given osmTags that are compared to the objects in that layer. */ options: { - question: string | any; - osmTags?: AndOrTagConfigJson | string, + question: string | any; + osmTags?: AndOrTagConfigJson | string, + default?: boolean, fields?: { name: string, type?: string | "string" diff --git a/Models/ThemeConfig/Json/LayerConfigJson.ts b/Models/ThemeConfig/Json/LayerConfigJson.ts index 6cc02f1956..5c32c19865 100644 --- a/Models/ThemeConfig/Json/LayerConfigJson.ts +++ b/Models/ThemeConfig/Json/LayerConfigJson.ts @@ -33,44 +33,65 @@ export interface LayerConfigJson { /** - * This determines where the data for the layer is fetched. - * There are some options: + * This determines where the data for the layer is fetched: from OSM or from an external geojson dataset. * - * # Query OSM directly - * source: {osmTags: "key=value"} - * will fetch all objects with given tags from OSM. - * Currently, this will create a query to overpass and fetch the data - in the future this might fetch from the OSM API + * If no 'geojson' is defined, data will be fetched from overpass and the OSM-API. * - * # Query OSM Via the overpass API with a custom script - * source: {overpassScript: ""} when you want to do special things. _This should be really rare_. - * This means that the data will be pulled from overpass with this script, and will ignore the osmTags for the query - * However, for the rest of the pipeline, the OsmTags will _still_ be used. This is important to enable layers etc... + * Every source _must_ define which tags _must_ be present in order to be picked up. * - * - * # A single geojson-file - * source: {geoJson: "https://my.source.net/some-geo-data.geojson"} - * fetches a geojson from a third party source - * - * # A tiled geojson source - * source: {geoJson: "https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson", geoJsonZoomLevel: 14} - * to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer - * - * Some API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max} - * Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true` in the source for this - * - * Note that both geojson-options might set a flag 'isOsmCache' indicating that the data originally comes from OSM too - * - * - * NOTE: the previous format was 'overpassTags: AndOrTagConfigJson | string', which is interpreted as a shorthand for source: {osmTags: "key=value"} - * While still supported, this is considered deprecated */ - source: ({ osmTags: AndOrTagConfigJson | string, overpassScript?: string } | - { osmTags: AndOrTagConfigJson | string, geoJson: string, geoJsonZoomLevel?: number, isOsmCache?: boolean, mercatorCrs?: boolean }) & ({ - /** - * The maximum amount of seconds that a tile is allowed to linger in the cache - */ - maxCacheAge?: number - }) + source: + ({ + /** + * Every source must set which tags have to be present in order to load the given layer. + */ + osmTags: AndOrTagConfigJson | string + /** + * The maximum amount of seconds that a tile is allowed to linger in the cache + */ + maxCacheAge?: number + }) & + ({ /* # Query OSM Via the overpass API with a custom script + * source: {overpassScript: ""} when you want to do special things. _This should be really rare_. + * This means that the data will be pulled from overpass with this script, and will ignore the osmTags for the query + * However, for the rest of the pipeline, the OsmTags will _still_ be used. This is important to enable layers etc... + */ + overpassScript?: string + } | + { + /** + * The actual source of the data to load, if loaded via geojson. + * + * # A single geojson-file + * source: {geoJson: "https://my.source.net/some-geo-data.geojson"} + * fetches a geojson from a third party source + * + * # A tiled geojson source + * source: {geoJson: "https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson", geoJsonZoomLevel: 14} + * to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer + * + * Some API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max} + */ + geoJson: string, + /** + * To load a tiled geojson layer, set the zoomlevel of the tiles + */ + geoJsonZoomLevel?: number, + /** + * Indicates that the upstream geojson data is OSM-derived. + * Useful for e.g. merging or for scripts generating this cache + */ + isOsmCache?: boolean, + /** + * Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true` in the source for this + */ + mercatorCrs?: boolean, + /** + * Some API's have an id-field, but give it a different name. + * Setting this key will rename this field into 'id' + */ + idKey?: string + }) /** * @@ -84,13 +105,13 @@ export interface LayerConfigJson { * * The specified tags are evaluated lazily. E.g. if a calculated tag is only used in the popup (e.g. the number of nearby features), * the expensive calculation will only be performed then for that feature. This avoids clogging up the contributors PC when all features are loaded. - * + * * If a tag has to be evaluated strictly, use ':=' instead: - * + * * [ * "_some_key:=some_javascript_expression" * ] - * + * */ calculatedTags?: string[]; @@ -111,6 +132,13 @@ export interface LayerConfigJson { */ isShown?: TagRenderingConfigJson; + /** + * Advanced option - might be set by the theme compiler + * + * If true, this data will _always_ be loaded, even if the theme is disabled + */ + forceLoad?: false | boolean + /** * The minimum needed zoomlevel required before loading of the data start @@ -124,7 +152,7 @@ export interface LayerConfigJson { * can be used to hide a layer from start, or to load the layer but only to show it where appropriate (e.g. for snapping to it) */ shownByDefault?: true | boolean; - + /** * The zoom level at which point the data is hidden again * Default: 100 (thus: always visible @@ -141,6 +169,8 @@ export interface LayerConfigJson { * If not specified, the OsmLink and wikipedia links will be used by default. * Use an empty array to hide them. * Note that "defaults" will insert all the default titleIcons (which are added automatically) + * + * Type: icon[] */ titleIcons?: (string | TagRenderingConfigJson)[] | ["defaults"]; @@ -183,6 +213,13 @@ export interface LayerConfigJson { */ description?: string | any, + /** + * Example images, which show real-life pictures of what such a feature might look like + * + * Type: image + */ + exampleImages?: string[] + /** * If set, the user will prompted to confirm the location before actually adding the data. * This will be with a 'drag crosshair'-method. @@ -225,9 +262,9 @@ export interface LayerConfigJson { */ tagRenderings?: (string | { builtin: string, override: any } | TagRenderingConfigJson | { rewrite: { - sourceString: string, - into: string[] - }[], + sourceString: string[], + into: (string | any)[][] + }, renderings: (string | { builtin: string, override: any } | TagRenderingConfigJson)[] }) [], @@ -235,7 +272,7 @@ export interface LayerConfigJson { /** * All the extra questions for filtering */ - filter?: (FilterConfigJson) [], + filter?: (FilterConfigJson) [] | { sameAs: string }, /** * This block defines under what circumstances the delete dialog is shown for objects of this layer. @@ -362,4 +399,13 @@ export interface LayerConfigJson { */ units?: UnitConfigJson[] + /** + * If set, synchronizes wether or not this layer is selected. + * + * no: Do not sync at all, always revert to default + * local: keep selection on local storage + * theme-only: sync via OSM, but this layer will only be toggled in this theme + * global: all layers with this ID will be synced accross all themes + */ + syncSelection?: "no" | "local" | "theme-only" | "global" } \ No newline at end of file diff --git a/Models/ThemeConfig/Json/LayoutConfigJson.ts b/Models/ThemeConfig/Json/LayoutConfigJson.ts index 79742b2fba..2128499dbb 100644 --- a/Models/ThemeConfig/Json/LayoutConfigJson.ts +++ b/Models/ThemeConfig/Json/LayoutConfigJson.ts @@ -1,5 +1,6 @@ import {LayerConfigJson} from "./LayerConfigJson"; import TilesourceConfigJson from "./TilesourceConfigJson"; +import ExtraLinkConfigJson from "./ExtraLinkConfigJson"; /** * Defines the entire theme. @@ -32,7 +33,7 @@ export interface LayoutConfigJson { credits?: string; /** - * Who does maintian this preset? + * Who does maintain this preset? */ maintainer: string; @@ -41,20 +42,16 @@ export interface LayoutConfigJson { * Should be sortable, where the higher value is the later version */ version: string; - /** - * The supported language(s). - * This should be a two-letter, lowercase code which identifies the language, e.g. "en", "nl", ... - * If the theme supports multiple languages, use a list: `["en","nl","fr"]` to allow the user to pick any of them - */ - language: string | string[]; /** - * Only used in 'generateLayerOverview': if present, every translation will be checked to make sure it is fully translated + * Only used in 'generateLayerOverview': if present, every translation will be checked to make sure it is fully translated. + * + * This must be a list of two-letter, lowercase codes which identifies the language, e.g. "en", "nl", ... */ mustHaveLanguage?: string[] /** - * The title, as shown in the welcome message and the more-screen + * The title, as shown in the welcome message and the more-screen. */ title: string | any; @@ -78,13 +75,17 @@ export interface LayoutConfigJson { * The icon representing this theme. * Used as logo in the more-screen and (for official themes) as favicon, webmanifest logo, ... * Either a URL or a base64 encoded value (which should include 'data:image/svg+xml;base64) + * + * Type: icon */ icon: string; /** * Link to a 'social image' which is included as og:image-tag on official themes. * Useful to share the theme on social media. - * See https://www.h3xed.com/web-and-internet/how-to-use-og-image-meta-tag-facebook-reddit for more information + * See https://www.h3xed.com/web-and-internet/how-to-use-og-image-meta-tag-facebook-reddit for more information$ + * + * Type: image */ socialImage?: string; @@ -202,7 +203,14 @@ export interface LayoutConfigJson { * } *``` */ - layers: (LayerConfigJson | string | { builtin: string | string[], override: any })[], + layers: (LayerConfigJson | string | + { builtin: string | string[], + override: any, + /** + * TagRenderings with any of these labels will be removed from the layer. + * Note that the 'id' and 'group' are considered labels too + */ + hideTagRenderingsWithLabels?: string[]})[], /** * If defined, data will be clustered. @@ -216,7 +224,7 @@ export interface LayoutConfigJson { maxZoom?: number, /** * The number of elements per tile needed to start clustering - * If clustering is defined, defaults to 25 + * If clustering is defined, defaults to 250 */ minNeededElements?: number } | false, @@ -232,23 +240,76 @@ export interface LayoutConfigJson { /** * If set to true, the basemap will not scroll outside of the area visible on initial zoom. - * If set to [[lat0, lon0], [lat1, lon1]], the map will not scroll outside of those bounds. + * If set to [[lon, lat], [lon, lat]], the map will not scroll outside of those bounds. * Off by default, which will enable panning to the entire world */ - lockLocation?: boolean | [[number, number], [number, number]] | number[][]; + lockLocation?: [[number, number], [number, number]] | number[][]; - enableUserBadge?: boolean; - enableShareScreen?: boolean; - enableMoreQuests?: boolean; - enableLayers?: boolean; - enableSearch?: boolean; - enableAddNewPoints?: boolean; - enableGeolocation?: boolean; - enableBackgroundLayerSelection?: boolean; - enableShowAllQuestions?: boolean; - enableDownload?: boolean; - enablePdfDownload?: boolean; - enableIframePopout?: true | boolean; + /** + * Adds an additional button on the top-left of the application. + * This can link to an arbitrary location. + * + * Note that {lat},{lon},{zoom}, {language} and {theme} will be replaced + * + * Default: {icon: "./assets/svg/pop-out.svg", href: 'https://mapcomplete.osm.be/{theme}.html?lat={lat}&lon={lon}&z={zoom}, requirements: ["iframe","no-welcome-message]}, + * + */ + extraLink?: ExtraLinkConfigJson + + /** + * If set to false, disables logging in. + * The userbadge will be hidden, all login-buttons will be hidden and editing will be disabled + */ + enableUserBadge?: true | boolean; + /** + * If false, hides the tab 'share'-tab in the welcomeMessage + */ + enableShareScreen?: true | boolean; + /** + * Hides the tab with more themes in the welcomeMessage + */ + enableMoreQuests?: true | boolean; + /** + * If false, the layer selection/filter view will be hidden + * The corresponding URL-parameter is 'fs-filters' instead of 'fs-layers' + */ + enableLayers?: true | boolean; + /** + * If set to false, hides the search bar + */ + enableSearch?: true | boolean; + /** + * If set to false, the ability to add new points or nodes will be disabled. + * Editing already existing features will still be possible + */ + enableAddNewPoints?: true | boolean; + /** + * If set to false, the 'geolocation'-button will be hidden. + */ + enableGeolocation?: true | boolean; + /** + * Enable switching the backgroundlayer. + * If false, the quickswitch-buttons are removed (bottom left) and the dropdown in the layer selection is removed as well + */ + enableBackgroundLayerSelection?: true | boolean; + /** + * If set to true, will show _all_ unanswered questions in a popup instead of just the next one + */ + enableShowAllQuestions?: false | boolean; + /** + * If set to true, download button for the data will be shown (offers downloading as geojson and csv) + */ + enableDownload?: false | boolean; + /** + * If set to true, exporting a pdf is enabled + */ + enablePdfDownload?: false | boolean; + + /** + * If true, notes will be loaded and parsed. If a note is an import (as created by the import_helper.html-tool from mapcomplete), + * these notes will be shown if a relevant layer is present. + */ + enableNoteImports?: true | boolean; /** * Set one or more overpass URLs to use for this theme.. diff --git a/Models/ThemeConfig/Json/PointRenderingConfigJson.ts b/Models/ThemeConfig/Json/PointRenderingConfigJson.ts index f214687ba8..5170f89534 100644 --- a/Models/ThemeConfig/Json/PointRenderingConfigJson.ts +++ b/Models/ThemeConfig/Json/PointRenderingConfigJson.ts @@ -26,7 +26,8 @@ export default interface PointRenderingConfigJson { * As a result, on could use a generic pin, then overlay it with a specific icon. * To make things even more practical, one can use all SVG's from the folder "assets/svg" and _substitute the color_ in it. * E.g. to draw a red pin, use "pin:#f00", to have a green circle with your icon on top, use `circle:#0f0;` - * + + * Type: icon */ icon?: string | TagRenderingConfigJson; @@ -36,7 +37,14 @@ export default interface PointRenderingConfigJson { * * Note: strings are interpreted as icons, so layering and substituting is supported. You can use `circle:white;./my_icon.svg` to add a background circle */ - iconBadges?: { if: string | AndOrTagConfigJson, then: string | TagRenderingConfigJson }[] + iconBadges?: { + if: string | AndOrTagConfigJson, + /** + * Badge to show + * Type: icon + */ + then: string | TagRenderingConfigJson + }[] /** diff --git a/Models/ThemeConfig/Json/TagRenderingConfigJson.ts b/Models/ThemeConfig/Json/TagRenderingConfigJson.ts index 75f91018cb..f1aee4ff60 100644 --- a/Models/ThemeConfig/Json/TagRenderingConfigJson.ts +++ b/Models/ThemeConfig/Json/TagRenderingConfigJson.ts @@ -9,7 +9,7 @@ export interface TagRenderingConfigJson { /** * The id of the tagrendering, should be an unique string. * Used to keep the translations in sync. Only used in the tagRenderings-array of a layerConfig, not requered otherwise. - * + * * Use 'questions' to trigger the question box of this group (if a group is defined) */ id?: string, @@ -20,14 +20,20 @@ export interface TagRenderingConfigJson { */ group?: string + /** + * A list of labels. These are strings that are used for various purposes, e.g. to filter them away + */ + labels?: string[] + /** * Renders this value. Note that "{key}"-parts are substituted by the corresponding values of the element. * If neither 'textFieldQuestion' nor 'mappings' are defined, this text is simply shown as default value. * * Note that this is a HTML-interpreted value, so you can add links as e.g. '{website}' or include images such as `This is of type A
` + * type: rendered */ render?: string | any, - + /** * If it turns out that this tagRendering doesn't match _any_ value, then we show this question. * If undefined, the question is never asked and this tagrendering is read-only @@ -56,6 +62,11 @@ export interface TagRenderingConfigJson { * See Docs/SpecialInputElements.md and UI/Input/ValidatedTextField.ts for supported values */ type?: string, + /** + * A (translated) text that is shown (as gray text) within the textfield + */ + placeholder?: string | any + /** * Extra parameters to initialize the input helper arguments. * For semantics, see the 'SpecialInputElements.md' @@ -104,8 +115,14 @@ export interface TagRenderingConfigJson { /** * If the condition `if` is met, the text `then` will be rendered. * If not known yet, the user will be presented with `then` as an option + * type: rendered */ then: string | any, + /** + * An icon supporting this mapping; typically shown pretty small + * Type: icon + */ + icon?: string /** * In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation). * diff --git a/Models/ThemeConfig/LayerConfig.ts b/Models/ThemeConfig/LayerConfig.ts index 62a1788f6b..f650aef5d5 100644 --- a/Models/ThemeConfig/LayerConfig.ts +++ b/Models/ThemeConfig/LayerConfig.ts @@ -15,7 +15,6 @@ import LineRenderingConfig from "./LineRenderingConfig"; import PointRenderingConfigJson from "./Json/PointRenderingConfigJson"; import LineRenderingConfigJson from "./Json/LineRenderingConfigJson"; import {TagRenderingConfigJson} from "./Json/TagRenderingConfigJson"; -import {UIEventSource} from "../../Logic/UIEventSource"; import BaseUIElement from "../../UI/BaseUIElement"; import Combine from "../../UI/Base/Combine"; import Title from "../../UI/Base/Title"; @@ -24,6 +23,7 @@ import Link from "../../UI/Base/Link"; import {Utils} from "../../Utils"; import {TagsFilter} from "../../Logic/Tags/TagsFilter"; import Table from "../../UI/Base/Table"; +import FilterConfigJson from "./Json/FilterConfigJson"; export default class LayerConfig extends WithContextLoader { @@ -58,7 +58,11 @@ export default class LayerConfig extends WithContextLoader { public readonly tagRenderings: TagRenderingConfig[]; public readonly filters: FilterConfig[]; - + public readonly filterIsSameAs: string; + public readonly forceLoad: boolean; + + public readonly syncSelection: "no" | "local" | "theme-only" | "global" + constructor( json: LayerConfigJson, context?: string, @@ -67,9 +71,9 @@ export default class LayerConfig extends WithContextLoader { context = context + "." + json.id; super(json, context) this.id = json.id; - - if(json.id === undefined){ - throw "Not a valid layer: id is undefined: "+JSON.stringify(json) + + if (json.id === undefined) { + throw "Not a valid layer: id is undefined: " + JSON.stringify(json) } if (json.source === undefined) { @@ -88,7 +92,7 @@ export default class LayerConfig extends WithContextLoader { } this.maxAgeOfCache = json.source.maxCacheAge ?? 24 * 60 * 60 * 30 - + this.syncSelection = json.syncSelection; const osmTags = TagUtils.Tag( json.source.osmTags, context + "source.osmTags" @@ -105,11 +109,13 @@ export default class LayerConfig extends WithContextLoader { this.source = new SourceConfig( { osmTags: osmTags, - geojsonSource: json.source["geoJson"], - geojsonSourceLevel: json.source["geoJsonZoomLevel"], + geojsonSource: json.source["geoJson"], + geojsonSourceLevel: json.source["geoJsonZoomLevel"], overpassScript: json.source["overpassScript"], isOsmCache: json.source["isOsmCache"], - mercatorCrs: json.source["mercatorCrs"] + mercatorCrs: json.source["mercatorCrs"], + idKey: json.source["idKey"] + }, json.id ); @@ -164,6 +170,7 @@ export default class LayerConfig extends WithContextLoader { this.minzoom = json.minzoom ?? 0; this.minzoomVisible = json.minzoomVisible ?? this.minzoom; this.shownByDefault = json.shownByDefault ?? true; + this.forceLoad = json.forceLoad ?? false; if (json.presets !== undefined && json.presets?.map === undefined) { throw "Presets should be a list of items (at " + context + ")" } @@ -205,6 +212,7 @@ export default class LayerConfig extends WithContextLoader { tags: pr.tags.map((t) => TagUtils.SimpleTag(t)), description: Translations.T(pr.description, `${context}.presets[${i}].description`), preciseInput: preciseInput, + exampleImages: pr.exampleImages } return config; }); @@ -230,8 +238,8 @@ export default class LayerConfig extends WithContextLoader { if (this.lineRendering.length === 0 && this.mapRendering.length === 0) { console.log(json.mapRendering) throw("The layer " + this.id + " does not have any maprenderings defined and will thus not show up on the map at all. If this is intentional, set maprenderings to 'null' instead of '[]'") - } else if (!hasCenterRendering && this.lineRendering.length === 0) { - throw "The layer " + this.id + " might not render ways. This might result in dropped information" + } else if (!hasCenterRendering && this.lineRendering.length === 0 && !this.source.geojsonSource?.startsWith("https://api.openstreetmap.org/api/0.6/notes.json")) { + throw "The layer " + this.id + " might not render ways. This might result in dropped information (at "+context+")" } } @@ -243,9 +251,14 @@ export default class LayerConfig extends WithContextLoader { this.tagRenderings = (Utils.NoNull(json.tagRenderings) ?? []).map((tr, i) => new TagRenderingConfig(tr, this.id + ".tagRenderings[" + i + "]")) - this.filters = (json.filter ?? []).map((option, i) => { - return new FilterConfig(option, `${context}.filter-[${i}]`) - }); + if(json.filter !== undefined && json.filter !== null && json.filter["sameAs"] !== undefined){ + this.filterIsSameAs = json.filter["sameAs"] + this.filters = [] + }else{ + this.filters = (json.filter ?? []).map((option, i) => { + return new FilterConfig(option, `${context}.filter-[${i}]`) + }); + } { const duplicateIds = Utils.Dupiclates(this.filters.map(f => f.id)) @@ -259,7 +272,7 @@ export default class LayerConfig extends WithContextLoader { } - this.titleIcons = this.ParseTagRenderings(( json.titleIcons), { + this.titleIcons = this.ParseTagRenderings((json.titleIcons), { readOnlyMode: true }); @@ -301,8 +314,11 @@ export default class LayerConfig extends WithContextLoader { if (mapRendering === undefined) { return undefined } - const defaultTags = new UIEventSource(TagUtils.changeAsProperties(this.source.osmTags.asChange({id: "node/-1"}))) - return mapRendering.GenerateLeafletStyle(defaultTags, false, {noSize: true}).html + return mapRendering.GetBaseIcon(this.GetBaseTags()) + } + + public GetBaseTags(): any{ + return TagUtils.changeAsProperties(this.source.osmTags.asChange({id: "node/-1"})) } public GenerateDocumentation(usedInThemes: string[], layerIsNeededBy: Map, dependencies: { @@ -355,12 +371,6 @@ export default class LayerConfig extends WithContextLoader { extraProps.push(new Combine(["This layer is needed as dependency for layer", new Link(revDep, "#" + revDep)])) } - const icon = Array.from(this.mapRendering[0]?.icon?.ExtractImages(true) ?? [])[0] - let iconImg = "" - if (icon !== undefined) { - iconImg = ` ` - } - let neededTags: TagsFilter[] = [this.source.osmTags] if (this.source.osmTags["and"] !== undefined) { neededTags = this.source.osmTags["and"] @@ -375,9 +385,9 @@ export default class LayerConfig extends WithContextLoader { return [ new Combine([ new Link( - "", - "https://taginfo.openstreetmap.org/keys/"+values.key+"#values" - ),Link.OsmWiki(values.key) + "", + "https://taginfo.openstreetmap.org/keys/" + values.key + "#values" + ), Link.OsmWiki(values.key) ]), values.type === undefined ? "Multiple choice" : new Link(values.type, "../SpecialInputElements.md#" + values.type), new Combine(embedded) @@ -392,6 +402,16 @@ export default class LayerConfig extends WithContextLoader { ]).SetClass("flex-col flex") } + const icon = this.mapRendering + .filter(mr => mr.location.has("point")) + .map(mr => mr.icon?.render?.txt) + .find(i => i !== undefined) + let iconImg = "" + if (icon !== undefined) { + // This is for the documentation, so we have to use raw HTML + iconImg = ` ` + } + return new Combine([ new Combine([ new Title(this.id, 1), @@ -425,24 +445,6 @@ export default class LayerConfig extends WithContextLoader { return Utils.NoNull([...this.tagRenderings, ...this.titleIcons, this.title, this.isShown]) } - public ExtractImages(): Set { - const parts: Set[] = []; - parts.push(...this.tagRenderings?.map((tr) => tr.ExtractImages(false))); - parts.push(...this.titleIcons?.map((tr) => tr.ExtractImages(true))); - for (const preset of this.presets) { - parts.push(new Set(preset.description?.ExtractImages(false))); - } - for (const pointRenderingConfig of this.mapRendering) { - parts.push(pointRenderingConfig.ExtractImages()) - } - const allIcons = new Set(); - for (const part of parts) { - part?.forEach(allIcons.add, allIcons); - } - - return allIcons; - } - public isLeftRightSensitive(): boolean { return this.lineRendering.some(lr => lr.leftRightSensitive) } diff --git a/Models/ThemeConfig/LayoutConfig.ts b/Models/ThemeConfig/LayoutConfig.ts index 7637825326..1875b8d99f 100644 --- a/Models/ThemeConfig/LayoutConfig.ts +++ b/Models/ThemeConfig/LayoutConfig.ts @@ -4,6 +4,8 @@ import LayerConfig from "./LayerConfig"; import {LayerConfigJson} from "./Json/LayerConfigJson"; import Constants from "../Constants"; import TilesourceConfig from "./TilesourceConfig"; +import {ExtractImages} from "./Conversion/FixImages"; +import ExtraLinkConfig from "./ExtraLinkConfig"; export default class LayoutConfig { public readonly id: string; @@ -41,7 +43,6 @@ export default class LayoutConfig { public readonly enableShowAllQuestions: boolean; public readonly enableExportButton: boolean; public readonly enablePdfDownload: boolean; - public readonly enableIframePopout: boolean; public readonly customCss?: string; @@ -51,29 +52,30 @@ export default class LayoutConfig { public readonly osmApiTileSize: number public readonly official: boolean; + public readonly usedImages: string[] + public readonly extraLink?: ExtraLinkConfig + constructor(json: LayoutConfigJson, official = true, context?: string) { this.official = official; this.id = json.id; - if(official){ - if(json.id.toLowerCase() !== json.id){ - throw "The id of a theme should be lowercase: "+json.id + if (official) { + if (json.id.toLowerCase() !== json.id) { + throw "The id of a theme should be lowercase: " + json.id } - if(json.id.match(/[a-z0-9-_]/) == null){ - throw "The id of a theme should match [a-z0-9-_]*: "+json.id + if (json.id.match(/[a-z0-9-_]/) == null) { + throw "The id of a theme should match [a-z0-9-_]*: " + json.id } } context = (context ?? "") + "." + this.id; this.maintainer = json.maintainer; this.credits = json.credits; this.version = json.version; - this.language = []; - - if (typeof json.language === "string") { - this.language = [json.language]; - } else { - this.language = json.language; - } + this.language = json.mustHaveLanguage ?? Array.from(Object.keys(json.title)); + this.usedImages = Array.from(new ExtractImages(official).convertStrict(json, "while extracting the images of " + json.id + " " + context ?? "")).sort() { + if (typeof json.title === "string") { + throw `The title of a theme should always be a translation, as it sets the corresponding languages (${context}.title). The themenID is ${this.id}; the offending object is ${JSON.stringify(json.title)} which is a ${typeof json.title})` + } if (this.language.length == 0) { throw `No languages defined. Define at least one language. (${context}.languages)` } @@ -102,9 +104,9 @@ export default class LayoutConfig { this.descriptionTail = json.descriptionTail === undefined ? undefined : new Translation(json.descriptionTail, context + ".descriptionTail"); this.icon = json.icon; this.socialImage = json.socialImage; - if(this.socialImage === null || this.socialImage === "" || this.socialImage === undefined){ - if(official){ - throw "Theme "+json.id+" has no social image defined" + if (this.socialImage === null || this.socialImage === "" || this.socialImage === undefined) { + if (official) { + throw "Theme " + json.id + " has no social image defined" } } this.startZoom = json.startZoom; @@ -117,10 +119,17 @@ export default class LayoutConfig { // At this point, layers should be expanded and validated either by the generateScript or the LegacyJsonConvert this.layers = json.layers.map(lyrJson => new LayerConfig(lyrJson, json.id + ".layers." + lyrJson["id"], official)); + this.extraLink = new ExtraLinkConfig(json.extraLink ?? { + icon: "./assets/svg/pop-out.svg", + href: "https://mapcomplete.osm.be/{theme}.html?lat={lat}&lon={lon}&z={zoom}&language={language}", + newTab: true, + requirements: ["iframe","no-welcome-message"] + }, context) + this.clustering = { maxZoom: 16, - minNeededElements: 25, + minNeededElements: 250, }; if (json.clustering === false) { this.clustering = { @@ -130,7 +139,7 @@ export default class LayoutConfig { } else if (json.clustering) { this.clustering = { maxZoom: json.clustering.maxZoom ?? 18, - minNeededElements: json.clustering.minNeededElements ?? 25, + minNeededElements: json.clustering.minNeededElements ?? 250, } } @@ -147,7 +156,6 @@ export default class LayoutConfig { this.enableShowAllQuestions = json.enableShowAllQuestions ?? false; this.enableExportButton = json.enableDownload ?? false; this.enablePdfDownload = json.enablePdfDownload ?? false; - this.enableIframePopout = json.enableIframePopout ?? true this.customCss = json.customCss; this.overpassUrl = Constants.defaultOverpassUrls if (json.overpassUrl !== undefined) { @@ -179,63 +187,6 @@ export default class LayoutConfig { return custom; } - public ExtractImages(): Set { - const icons = new Set() - for (const layer of this.layers) { - layer.ExtractImages().forEach(icons.add, icons) - } - icons.add(this.icon) - icons.add(this.socialImage) - return icons - } - - /** - * Replaces all the relative image-urls with a fixed image url - * This is to fix loading from external sources - * - * It should be passed the location where the original theme file is hosted. - * - * If no images are rewritten, the same object is returned, otherwise a new copy is returned - */ - public patchImages(originalURL: string, originalJson: string): LayoutConfig { - const allImages = Array.from(this.ExtractImages()) - const rewriting = new Map() - - // Needed for absolute urls: note that it doesn't contain a trailing slash - const origin = new URL(originalURL).origin - let path = new URL(originalURL).href - path = path.substring(0, path.lastIndexOf("/")) - for (const image of allImages) { - if (image == "" || image == undefined) { - continue - } - if (image.startsWith("http://") || image.startsWith("https://")) { - continue - } - if (image.startsWith("/")) { - // This is an absolute path - rewriting.set(image, origin + image) - } else if (image.startsWith("./assets/themes")) { - // Legacy workaround - rewriting.set(image, path + image.substring(image.lastIndexOf("/"))) - } else if (image.startsWith("./")) { - // This is a relative url - rewriting.set(image, path + image.substring(1)) - } else { - // This is a relative URL with only the path - rewriting.set(image, path + image) - } - } - if (rewriting.size == 0) { - return this; - } - rewriting.forEach((value, key) => { - console.log("Rewriting", key, "==>", value) - originalJson = originalJson.replace(new RegExp(key, "g"), value) - }) - return new LayoutConfig(JSON.parse(originalJson), false, "Layout rewriting") - } - public isLeftRightSensitive() { return this.layers.some(l => l.isLeftRightSensitive()) } diff --git a/Models/ThemeConfig/LineRenderingConfig.ts b/Models/ThemeConfig/LineRenderingConfig.ts index f2eed60d14..6b7f8082b2 100644 --- a/Models/ThemeConfig/LineRenderingConfig.ts +++ b/Models/ThemeConfig/LineRenderingConfig.ts @@ -44,7 +44,9 @@ export default class LineRenderingConfig extends WithContextLoader { if (tags === undefined) { return deflt } - if(tr === undefined){return deflt} + if (tr === undefined) { + return deflt + } const str = tr?.GetRenderValue(tags)?.txt ?? deflt; if (str === "") { return deflt @@ -59,7 +61,7 @@ export default class LineRenderingConfig extends WithContextLoader { "--catch-detail-color" ); } - + const style = { color, dashArray, @@ -73,13 +75,13 @@ export default class LineRenderingConfig extends WithContextLoader { if (fillStr !== undefined && fillStr !== "") { style["fill"] = fillStr === "yes" || fillStr === "true" } - + const fillColorStr = render(this.fillColor, undefined) - if(fillColorStr !== undefined){ + if (fillColorStr !== undefined) { style["fillColor"] = fillColorStr } return style - + } } \ No newline at end of file diff --git a/Models/ThemeConfig/PointRenderingConfig.ts b/Models/ThemeConfig/PointRenderingConfig.ts index 650dd50660..9bffc3d260 100644 --- a/Models/ThemeConfig/PointRenderingConfig.ts +++ b/Models/ThemeConfig/PointRenderingConfig.ts @@ -69,7 +69,7 @@ export default class PointRenderingConfig extends WithContextLoader { if (iconPath !== undefined && iconPath.startsWith(Utils.assets_path)) { const iconKey = iconPath.substr(Utils.assets_path.length); if (Svg.All[iconKey] === undefined) { - throw context+": builtin SVG asset not found: " + iconPath; + throw context + ": builtin SVG asset not found: " + iconPath; } } this.iconSize = this.tr("iconSize", "40,40,center"); @@ -89,7 +89,16 @@ export default class PointRenderingConfig extends WithContextLoader { if (match !== null && Svg.All[match[1] + ".svg"] !== undefined) { const svg = (Svg.All[match[1] + ".svg"] as string) const targetColor = match[2] - const img = new Img(svg.replace(/rgb\(0%,0%,0%\)/g, targetColor), true) + const img = new Img(svg + .replace(/(rgb\(0%,0%,0%\)|#000000|#000)/g, targetColor), true) + .SetStyle(style) + if (isBadge) { + img.SetClass("badge") + } + return img + } else if (Svg.All[htmlSpec + ".svg"] !== undefined) { + const svg = (Svg.All[htmlSpec + ".svg"] as string) + const img = new Img(svg, true) .SetStyle(style) if (isBadge) { img.SetClass("badge") @@ -115,18 +124,15 @@ export default class PointRenderingConfig extends WithContextLoader { } } - public ExtractImages(): Set { - const parts: Set[] = []; - parts.push(this.icon?.ExtractImages(true)); - parts.push( - ...this.iconBadges?.map((overlay) => overlay.then.ExtractImages(true)) - ); - - const allIcons = new Set(); - for (const part of parts) { - part?.forEach(allIcons.add, allIcons); + public GetBaseIcon(tags?: any): BaseUIElement { + tags = tags ?? {id: "node/-1"} + const rotation = Utils.SubstituteKeys(this.rotation?.GetRenderValue(tags)?.txt ?? "0deg", tags) + const htmlDefs = Utils.SubstituteKeys(this.icon.GetRenderValue(tags)?.txt, tags) + let defaultPin: BaseUIElement = undefined + if (this.label === undefined) { + defaultPin = Svg.teardrop_with_hole_green_svg() } - return allIcons; + return PointRenderingConfig.FromHtmlMulti(htmlDefs, rotation, false, defaultPin) } public GetSimpleIcon(tags: UIEventSource): BaseUIElement { @@ -134,23 +140,15 @@ export default class PointRenderingConfig extends WithContextLoader { if (this.icon === undefined) { return undefined; } - return new VariableUiElement(tags.map(tags => { - const rotation = Utils.SubstituteKeys(self.rotation?.GetRenderValue(tags)?.txt ?? "0deg", tags) - - const htmlDefs = Utils.SubstituteKeys(self.icon.GetRenderValue(tags)?.txt, tags) - let defaultPin: BaseUIElement = undefined - if (self.label === undefined) { - defaultPin = Svg.teardrop_with_hole_green_svg() - } - return PointRenderingConfig.FromHtmlMulti(htmlDefs, rotation, false, defaultPin) - })).SetClass("w-full h-full block") + return new VariableUiElement(tags.map(tags => self.GetBaseIcon(tags))).SetClass("w-full h-full block") } public GenerateLeafletStyle( tags: UIEventSource, clickable: boolean, options?: { - noSize: false | boolean + noSize?: false | boolean, + includeBadges?: true | boolean } ): { @@ -201,7 +199,11 @@ export default class PointRenderingConfig extends WithContextLoader { const icon = this.GetSimpleIcon(tags) - const iconAndBadges = new Combine([icon, this.GetBadges(tags)]) + let badges = undefined; + if (options?.includeBadges ?? true) { + badges = this.GetBadges(tags) + } + const iconAndBadges = new Combine([icon, badges]) .SetClass("block relative") if (!options?.noSize) { @@ -209,16 +211,16 @@ export default class PointRenderingConfig extends WithContextLoader { } else { iconAndBadges.SetClass("w-full h-full") } - + let label = this.GetLabel(tags) - let htmlEl : BaseUIElement; - if(icon === undefined && label === undefined){ + let htmlEl: BaseUIElement; + if (icon === undefined && label === undefined) { htmlEl = undefined - }else if(icon === undefined){ + } else if (icon === undefined) { htmlEl = new Combine([label]) - }else if(label === undefined){ - htmlEl = new Combine([iconAndBadges]) - }else { + } else if (label === undefined) { + htmlEl = new Combine([iconAndBadges]) + } else { htmlEl = new Combine([iconAndBadges, label]).SetStyle("flex flex-col") } diff --git a/Models/ThemeConfig/PresetConfig.ts b/Models/ThemeConfig/PresetConfig.ts index da823fcd28..4522d90792 100644 --- a/Models/ThemeConfig/PresetConfig.ts +++ b/Models/ThemeConfig/PresetConfig.ts @@ -11,6 +11,7 @@ export default interface PresetConfig { title: Translation, tags: Tag[], description?: Translation, + exampleImages?: string[], /** * If precise input is set, then an extra map is shown in which the user can drag the map to the precise location */ diff --git a/Models/ThemeConfig/SourceConfig.ts b/Models/ThemeConfig/SourceConfig.ts index 19afbcad16..0edd9b7b2c 100644 --- a/Models/ThemeConfig/SourceConfig.ts +++ b/Models/ThemeConfig/SourceConfig.ts @@ -9,6 +9,7 @@ export default class SourceConfig { public geojsonZoomLevel?: number; public isOsmCacheLayer: boolean; public readonly mercatorCrs: boolean; + public readonly idKey : string constructor(params: { mercatorCrs?: boolean; @@ -17,6 +18,7 @@ export default class SourceConfig { geojsonSource?: string, isOsmCache?: boolean, geojsonSourceLevel?: number, + idKey?: string }, context?: string) { let defined = 0; @@ -47,5 +49,6 @@ export default class SourceConfig { this.geojsonZoomLevel = params.geojsonSourceLevel; this.isOsmCacheLayer = params.isOsmCache ?? false; this.mercatorCrs = params.mercatorCrs ?? false; + this.idKey= params.idKey } } \ No newline at end of file diff --git a/Models/ThemeConfig/TagRenderingConfig.ts b/Models/ThemeConfig/TagRenderingConfig.ts index f85f6b19a1..11d17dee9e 100644 --- a/Models/ThemeConfig/TagRenderingConfig.ts +++ b/Models/ThemeConfig/TagRenderingConfig.ts @@ -19,32 +19,36 @@ import List from "../../UI/Base/List"; */ export default class TagRenderingConfig { - readonly id: string; - readonly group: string; - readonly render?: Translation; - readonly question?: Translation; - readonly condition?: TagsFilter; + public readonly id: string; + public readonly group: string; + public readonly render?: Translation; + public readonly question?: Translation; + public readonly condition?: TagsFilter; - readonly configuration_warnings: string[] = [] + public readonly configuration_warnings: string[] = [] - readonly freeform?: { + public readonly freeform?: { readonly key: string, readonly type: string, + readonly placeholder: Translation, readonly addExtraTags: TagsFilter[]; readonly inline: boolean, readonly default?: string, readonly helperArgs?: (string | number | boolean)[] }; - readonly multiAnswer: boolean; + public readonly multiAnswer: boolean; - readonly mappings?: { + public readonly mappings?: { readonly if: TagsFilter, readonly ifnot?: TagsFilter, - readonly then: Translation + readonly then: Translation, + readonly icon: string, readonly hideInAnswer: boolean | TagsFilter readonly addExtraTags: Tag[] }[] + public readonly labels: string[] + constructor(json: string | TagRenderingConfigJson, context?: string) { if (json === undefined) { throw "Initing a TagRenderingConfig with undefined in " + context; @@ -80,6 +84,7 @@ export default class TagRenderingConfig { this.group = json.group ?? ""; + this.labels = json.labels ?? [] this.render = Translations.T(json.render, context + ".render"); this.question = Translations.T(json.question, context + ".question"); this.condition = TagUtils.Tag(json.condition ?? {"and": []}, `${context}.condition`); @@ -88,9 +93,21 @@ export default class TagRenderingConfig { if (json.freeform.addExtraTags !== undefined && json.freeform.addExtraTags.map === undefined) { throw `Freeform.addExtraTags should be a list of strings - not a single string (at ${context})` } + const type = json.freeform.type ?? "string" + + let placeholder = Translations.T(json.freeform.placeholder) + if (placeholder === undefined) { + const typeDescription = Translations.t.validation[type]?.description + placeholder = Translations.T(json.freeform.key+" ("+type+")") + if(typeDescription !== undefined){ + placeholder = placeholder.Fuse(typeDescription, type) + } + } + this.freeform = { key: json.freeform.key, - type: json.freeform.type ?? "string", + type, + placeholder, addExtraTags: json.freeform.addExtraTags?.map((tg, i) => TagUtils.Tag(tg, `${context}.extratag[${i}]`)) ?? [], inline: json.freeform.inline ?? false, @@ -116,8 +133,8 @@ export default class TagRenderingConfig { } - if (!ValidatedTextField.AllTypes.has(this.freeform.type)) { - const knownKeys = ValidatedTextField.tpList.map(tp => tp.name).join(", "); + if (!ValidatedTextField.ForType(this.freeform.key) === undefined) { + const knownKeys = ValidatedTextField.AvailableTypes().join(", "); throw `Freeform.key ${this.freeform.key} is an invalid type. Known keys are ${knownKeys}` } if (this.freeform.addExtraTags) { @@ -162,11 +179,16 @@ export default class TagRenderingConfig { } else if (mapping.hideInAnswer !== undefined) { hideInAnswer = TagUtils.Tag(mapping.hideInAnswer, `${context}.mapping[${i}].hideInAnswer`); } + let icon = undefined; + if (mapping.icon !== "") { + icon = mapping.icon + } const mp = { if: TagUtils.Tag(mapping.if, `${ctx}.if`), ifnot: (mapping.ifnot !== undefined ? TagUtils.Tag(mapping.ifnot, `${ctx}.ifnot`) : undefined), then: Translations.T(mapping.then, `${ctx}.then`), - hideInAnswer: hideInAnswer, + hideInAnswer, + icon, addExtraTags: (mapping.addExtraTags ?? []).map((str, j) => TagUtils.SimpleTag(str, `${ctx}.addExtraTags[${j}]`)) }; if (this.question) { @@ -328,18 +350,18 @@ export default class TagRenderingConfig { * @param tags * @constructor */ - public GetRenderValues(tags: any): Translation[] { + public GetRenderValues(tags: any): { then: Translation, icon?: string }[] { if (!this.multiAnswer) { - return [this.GetRenderValue(tags)] + return [this.GetRenderValueWithImage(tags)] } // A flag to check that the freeform key isn't matched multiple times // If it is undefined, it is "used" already, or at least we don't have to check for it anymore let freeformKeyUsed = this.freeform?.key === undefined; // We run over all the mappings first, to check if the mapping matches - const applicableMappings: Translation[] = Utils.NoNull((this.mappings ?? [])?.map(mapping => { + const applicableMappings: { then: Translation, img?: string }[] = Utils.NoNull((this.mappings ?? [])?.map(mapping => { if (mapping.if === undefined) { - return mapping.then; + return mapping; } if (TagUtils.MatchesMultiAnswer(mapping.if, tags)) { if (!freeformKeyUsed) { @@ -348,7 +370,7 @@ export default class TagRenderingConfig { freeformKeyUsed = true; } } - return mapping.then; + return mapping; } return undefined; })) @@ -356,43 +378,43 @@ export default class TagRenderingConfig { if (!freeformKeyUsed && tags[this.freeform.key] !== undefined) { - applicableMappings.push(this.render) + applicableMappings.push({then: this.render}) } return applicableMappings } + public GetRenderValue(tags: any, defltValue: any = undefined): Translation { + return this.GetRenderValueWithImage(tags, defltValue).then + } + /** * Gets the correct rendering value (or undefined if not known) * Not compatible with multiAnswer - use GetRenderValueS instead in that case * @constructor */ - public GetRenderValue(tags: any, defltValue: any = undefined): Translation { + public GetRenderValueWithImage(tags: any, defltValue: any = undefined): { then: Translation, icon?: string } { if (this.mappings !== undefined && !this.multiAnswer) { for (const mapping of this.mappings) { if (mapping.if === undefined) { - return mapping.then; + return mapping; } if (mapping.if.matchesProperties(tags)) { - if(this.id === "uk_addresses_placename"){ - console.log("Matched",mapping.if,"with ",tags["addr:place"]) + if (this.id === "uk_addresses_placename") { + console.log("Matched", mapping.if, "with ", tags["addr:place"]) } - return mapping.then; + return mapping; } } } - if (this.id === "questions") { - return this.render + if (this.id === "questions" || + this.freeform?.key === undefined || + tags[this.freeform.key] !== undefined + ) { + return {then: this.render} } - if (this.freeform?.key === undefined) { - return this.render; - } - - if (tags[this.freeform.key] !== undefined) { - return this.render; - } - return defltValue; + return {then: defltValue}; } /** @@ -415,18 +437,6 @@ export default class TagRenderingConfig { return translations; } - public ExtractImages(isIcon: boolean): Set { - - const usedIcons = new Set() - this.render?.ExtractImages(isIcon)?.forEach(usedIcons.add, usedIcons) - - for (const mapping of this.mappings ?? []) { - mapping.then.ExtractImages(isIcon).forEach(usedIcons.add, usedIcons) - } - - return usedIcons; - } - FreeformValues(): { key: string, type?: string, values?: string [] } { try { @@ -487,12 +497,11 @@ export default class TagRenderingConfig { mappings = new List( this.mappings.map(m => { let txt = "**" + m.then.txt + "** corresponds with " + m.if.asHumanString(true, false, {}); - if(m.hideInAnswer === true) - { + if (m.hideInAnswer === true) { txt += "_This option cannot be chosen as answer_" } - if(m.ifnot !== undefined){ - txt += "Unselecting this answer will add "+m.ifnot.asHumanString(true, false, {}) + if (m.ifnot !== undefined) { + txt += "Unselecting this answer will add " + m.ifnot.asHumanString(true, false, {}) } return txt; } diff --git a/README.md b/README.md index a7640a580e..ae266060b1 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,8 @@ sent back to directly to OpenStreetMap. Furthermore, it shows images present in the `image` tag or, if a `wikidata` or `wikimedia_commons`-tag is present, it follows those to get these images too. -**An explicit non-goal** of MapComplete is to modify geometries of ways, especially generic geometry-editing. (Splitting roads is possible and in some restricted themes is geometry-conflation possible too) +**An explicit non-goal** of MapComplete is to modify geometries of ways, especially generic geometry-editing. (Splitting +roads is possible and in some restricted themes is geometry-conflation possible too) **More about MapComplete:** [Watch Pieter's talk on the 2021 State Of The Map Conference](https://media.ccc.de/v/sotm2021-9448-introduction-and-review-of-mapcomplete) ([YouTube](https://www.youtube.com/watch?v=zTtMn6fNbYY)) @@ -35,15 +36,15 @@ It is possible to quickly make and distribute your own theme ## Examples -- [An overview of all official themes](https://pietervdvn.github.io/mc/develop/index.html). +- [An overview of all official themes](https://mapcomplete.osm.be). - [Buurtnatuur.be](http://buurtnatuur.be), developed for the Belgian [Green party](https://www.groen.be/). They also funded the initial development! -- [Cyclofix](https://pietervdvn.github.io/MapComplete/index.html?layout=cyclofix), further development +- [Cyclofix](https://mapcomplete.osm.be/cyclofix.html), further development on [Open Summer of Code](https://summerofcode.be/) funded by [Brussels Mobility](https://mobilite-mobiliteit.brussels/en). Landing page at https://cyclofix.osm.be/ -- [Bookcases](https://pietervdvn.github.io/MapComplete/index.html?quests=bookcases#element) cause I like to collect +- [Bookcases](https://mapcomplete.osm.be/bookcases.html) cause I like to collect them. -- [Map of Maps](https://pietervdvn.github.io/MapComplete/index.html?layout=maps&z=14&lat=50.650&lon=4.2668#element), +- [Map of Maps](https://mapcomplete.osm.be/maps.html), after a tweet There are plenty more. [Discover them in the app](https://mapcomplete.osm.be/index.html). diff --git a/UI/AllThemesGui.ts b/UI/AllThemesGui.ts index ebdc645831..eb5e738f1d 100644 --- a/UI/AllThemesGui.ts +++ b/UI/AllThemesGui.ts @@ -10,6 +10,8 @@ import IndexText from "./BigComponents/IndexText"; import FeaturedMessage from "./BigComponents/FeaturedMessage"; import Toggle from "./Input/Toggle"; import {SubtleButton} from "./Base/SubtleButton"; +import {VariableUiElement} from "./Base/VariableUIElement"; +import Svg from "../Svg"; export default class AllThemesGui { constructor() { @@ -26,12 +28,21 @@ export default class AllThemesGui { ]); new Combine([ intro, - new FeaturedMessage(), + new FeaturedMessage().SetClass("mb-4 block"), new MoreScreen(state, true), new Toggle( undefined, new SubtleButton(undefined, Translations.t.index.logIn).SetStyle("height:min-content").onClick(() => state.osmConnection.AttemptLogin()), state.osmConnection.isLoggedIn), + new VariableUiElement(state.osmConnection.userDetails.map(ud => { + if (ud.csCount < Constants.userJourney.importHelperUnlock) { + return undefined; + } + return new Combine([ + new SubtleButton(undefined, Translations.t.importHelper.title, {url: "import_helper.html"}), + new SubtleButton(Svg.note_svg(), Translations.t.importInspector.title, {url: "import_viewer.html"}) + ]).SetClass("p-4 border-2 border-gray-500 m-4 block") + })), Translations.t.general.aboutMapcomplete .Subs({"osmcha_link": Utils.OsmChaLinkFor(7)}) .SetClass("link-underline"), diff --git a/UI/AutomatonGui.ts b/UI/AutomatonGui.ts index b462da25ce..bc69b44769 100644 --- a/UI/AutomatonGui.ts +++ b/UI/AutomatonGui.ts @@ -30,7 +30,7 @@ import DynamicGeoJsonTileSource from "../Logic/FeatureSource/TiledFeatureSource/ import * as themeOverview from "../assets/generated/theme_overview.json" -class AutomationPanel extends Combine{ +class AutomationPanel extends Combine { private static readonly openChangeset = new UIEventSource(undefined); constructor(layoutToUse: LayoutConfig, indices: number[], extraCommentText: UIEventSource, tagRenderingToAutomate: { layer: LayerConfig, tagRendering: TagRenderingConfig }) { @@ -39,10 +39,10 @@ class AutomationPanel extends Combine{ const tileState = LocalStorageSource.GetParsed("automation-tile_state-" + layerId + "-" + trId, {}) const logMessages = new UIEventSource([]) if (indices === undefined) { - throw ("No tiles loaded - can not automate") + throw ("No tiles loaded - can not automate") } const openChangeset = AutomationPanel.openChangeset; - + openChangeset.addCallbackAndRun(cs => console.trace("Sync current open changeset to:", cs)) const nextTileToHandle = tileState.map(handledTiles => { @@ -62,22 +62,22 @@ class AutomationPanel extends Combine{ if (tileIndex === undefined) { return new FixedUiElement("All done!").SetClass("thanks") } - console.warn("Triggered map on nextTileToHandle",tileIndex) + console.warn("Triggered map on nextTileToHandle", tileIndex) const start = new Date() return AutomationPanel.TileHandler(layoutToUse, tileIndex, layerId, tagRenderingToAutomate.tagRendering, extraCommentText, openChangeset, (result, logMessage) => { - const end = new Date() - const timeNeeded = (end.getTime() - start.getTime()) / 1000; - neededTimes.data.push(timeNeeded) - neededTimes.ping() - tileState.data[tileIndex] = result - tileState.ping(); - if(logMessage !== undefined){ - logMessages.data.push(logMessage) - logMessages.ping(); - } - }); + const end = new Date() + const timeNeeded = (end.getTime() - start.getTime()) / 1000; + neededTimes.data.push(timeNeeded) + neededTimes.ping() + tileState.data[tileIndex] = result + tileState.ping(); + if (logMessage !== undefined) { + logMessages.data.push(logMessage) + logMessages.ping(); + } + }); })) @@ -102,27 +102,27 @@ class AutomationPanel extends Combine{ ]).SetClass("flex flex-col") })) - super([statistics, automaton, - new SubtleButton(undefined, "Clear fixed").onClick(() => { + super([statistics, automaton, + new SubtleButton(undefined, "Clear fixed").onClick(() => { const st = tileState.data - for (const tileIndex in st) { - if(st[tileIndex] === "fixed"){ - delete st[tileIndex] - } - } - - tileState.ping(); - }), - new VariableUiElement(logMessages.map(logMessages => new List(logMessages)))]) - this.SetClass("flex flex-col") + for (const tileIndex in st) { + if (st[tileIndex] === "fixed") { + delete st[tileIndex] + } + } + + tileState.ping(); + }), + new VariableUiElement(logMessages.map(logMessages => new List(logMessages)))]) + this.SetClass("flex flex-col") } - private static TileHandler(layoutToUse: LayoutConfig, tileIndex: number, targetLayer: string, targetAction: TagRenderingConfig, extraCommentText: UIEventSource, + private static TileHandler(layoutToUse: LayoutConfig, tileIndex: number, targetLayer: string, targetAction: TagRenderingConfig, extraCommentText: UIEventSource, openChangeset: UIEventSource, whenDone: ((result: string, logMessage?: string) => void)): BaseUIElement { const state = new MapState(layoutToUse, {attemptLogin: false}) - extraCommentText.syncWith( state.changes.extraComment) + extraCommentText.syncWith(state.changes.extraComment) const [z, x, y] = Tiles.tile_from_index(tileIndex) state.locationControl.setData({ zoom: z, @@ -161,8 +161,6 @@ class AutomationPanel extends Combine{ whenDone("empty") return true; } - stateToShow.setData("Applying metatags") - pipeline.updateAllMetaTagging("triggered by automaton") stateToShow.setData("Gathering applicable elements") let handled = 0 @@ -178,7 +176,7 @@ class AutomationPanel extends Combine{ const feature = ffs.feature const renderingTr = targetAction.GetRenderValue(feature.properties) const rendering = renderingTr.txt - log.push(""+feature.properties.id+": "+new SubstitutedTranslation(renderingTr, new UIEventSource(feature.properties), state).ConstructElement().innerText) + log.push("" + feature.properties.id + ": " + new SubstitutedTranslation(renderingTr, new UIEventSource(feature.properties), undefined).ConstructElement().innerText) const actions = Utils.NoNull(SubstitutedTranslation.ExtractSpecialComponents(rendering) .map(obj => obj.special)) for (const action of actions) { @@ -203,11 +201,11 @@ class AutomationPanel extends Combine{ } if (handled === 0) { - whenDone("no-action","Inspected "+inspected+" elements: "+log.join("; ")) - }else{ + whenDone("no-action", "Inspected " + inspected + " elements: " + log.join("; ")) + } else { state.osmConnection.AttemptLogin() state.changes.flushChanges("handled tile automatically, time to flush!", openChangeset) - whenDone("fixed", "Updated " + handled+" elements, inspected "+inspected+": "+log.join("; ")) + whenDone("fixed", "Updated " + handled + " elements, inspected " + inspected + ": " + log.join("; ")) } return true; @@ -221,15 +219,11 @@ class AutomationPanel extends Combine{ } - class AutomatonGui { constructor() { const osmConnection = new OsmConnection({ - allElements: undefined, - changes: undefined, - layoutName: "automaton", singlePage: false, oauth_token: QueryParameters.GetQueryParameter("oauth_token", "OAuth token") }); @@ -244,7 +238,7 @@ class AutomatonGui { AutomatonGui.GenerateMainPanel(), new SubtleButton(Svg.osm_logo_svg(), "Login to get started").onClick(() => osmConnection.AttemptLogin()), osmConnection.isLoggedIn - )]) .SetClass("block p-4") + )]).SetClass("block p-4") .AttachTo("main") } @@ -252,36 +246,36 @@ class AutomatonGui { private static GenerateMainPanel(): BaseUIElement { const themeSelect = new DropDown("Select a theme", - Array.from(themeOverview).map(l => ({value: l.id, shown: l.id})) + Array.from(themeOverview).map(l => ({value: l.id, shown: l.id})) ) LocalStorageSource.Get("automation-theme-id", "missing_streets").syncWith(themeSelect.GetValue()) - - const tilepath = ValidatedTextField.InputForType("url", { + const tilepath = ValidatedTextField.ForType("url").ConstructInputElement({ placeholder: "Specifiy the path of the overview", + inputStyle: "width: 100%" }) tilepath.SetClass("w-full") LocalStorageSource.Get("automation-tile_path").syncWith(tilepath.GetValue(), true) - + let tilesToRunOver = tilepath.GetValue().bind(path => { if (path === undefined) { return undefined } - return UIEventSource.FromPromiseWithErr(Utils.downloadJsonCached(path,1000*60*60)) + return UIEventSource.FromPromiseWithErr(Utils.downloadJsonCached(path, 1000 * 60 * 60)) }) - + const targetZoom = 14 const tilesPerIndex = tilesToRunOver.map(tiles => { - + if (tiles === undefined || tiles["error"] !== undefined) { return undefined } - let indexes : number[] = []; + let indexes: number[] = []; const tilesS = tiles["success"] - DynamicGeoJsonTileSource.RegisterWhitelist(tilepath.GetValue().data , tilesS) + DynamicGeoJsonTileSource.RegisterWhitelist(tilepath.GetValue().data, tilesS) const z = Number(tilesS["zoom"]) for (const key in tilesS) { if (key === "zoom") { @@ -308,7 +302,7 @@ class AutomatonGui { return Array.from(rezoomed) }) - const extraComment = ValidatedTextField.InputForType("text") + const extraComment = ValidatedTextField.ForType("text").ConstructInputElement() LocalStorageSource.Get("automaton-extra-comment").syncWith(extraComment.GetValue()) return new Combine([ @@ -317,7 +311,7 @@ class AutomatonGui { tilepath, "Add an extra comment:", extraComment, - new VariableUiElement(extraComment.GetValue().map(c => "Your comment is "+(c?.length??0)+"/200 characters long")).SetClass("subtle"), + new VariableUiElement(extraComment.GetValue().map(c => "Your comment is " + (c?.length ?? 0) + "/200 characters long")).SetClass("subtle"), new VariableUiElement(tilesToRunOver.map(t => { if (t === undefined) { return "No path given or still loading..." diff --git a/UI/Base/Combine.ts b/UI/Base/Combine.ts index cead86ecb2..87eb30f5b4 100644 --- a/UI/Base/Combine.ts +++ b/UI/Base/Combine.ts @@ -31,6 +31,10 @@ export default class Combine extends BaseUIElement { } } + public getElements(): BaseUIElement[] { + return this.uiElements + } + protected InnerConstructElement(): HTMLElement { const el = document.createElement("span") try { @@ -57,9 +61,5 @@ export default class Combine extends BaseUIElement { return el; } - public getElements(): BaseUIElement[] { - return this.uiElements - } - } \ No newline at end of file diff --git a/UI/Base/Img.ts b/UI/Base/Img.ts index c2d85768ab..96d93593e3 100644 --- a/UI/Base/Img.ts +++ b/UI/Base/Img.ts @@ -29,6 +29,18 @@ export default class Img extends BaseUIElement { return ``; } + AsMarkdown(): string { + if (this._rawSvg === true) { + console.warn("Converting raw svgs to markdown is not supported"); + return undefined + } + let src = this._src + if (this._src.startsWith("./")) { + src = "https://mapcomplete.osm.be/" + src + } + return "![](" + src + ")"; + } + protected InnerConstructElement(): HTMLElement { const self = this; if (this._rawSvg) { @@ -53,17 +65,5 @@ export default class Img extends BaseUIElement { } return el; } - - AsMarkdown(): string { - if (this._rawSvg === true) { - console.warn("Converting raw svgs to markdown is not supported"); - return undefined - } - let src = this._src - if (this._src.startsWith("./")) { - src = "https://mapcomplete.osm.be/" + src - } - return "![](" + src + ")"; - } } diff --git a/UI/Base/LeftIndex.ts b/UI/Base/LeftIndex.ts new file mode 100644 index 0000000000..9cd61c6c25 --- /dev/null +++ b/UI/Base/LeftIndex.ts @@ -0,0 +1,25 @@ +import BaseUIElement from "../BaseUIElement"; +import Combine from "./Combine"; +import BackToIndex from "../BigComponents/BackToIndex"; + +export default class LeftIndex extends Combine { + + + constructor(leftContents: BaseUIElement[], mainContent: BaseUIElement, options?: { + hideBackButton: false | boolean + }) { + + let back: BaseUIElement = undefined; + if (options?.hideBackButton ?? true) { + back = new BackToIndex() + } + super([ + new Combine([ + new Combine([back, ...leftContents]).SetClass("sticky top-4"), + ]).SetClass("ml-4 block w-full md:w-2/6 lg:w-1/6"), + mainContent.SetClass("m-8 w-full mb-24") + ]) + this.SetClass("h-full block md:flex") + } + +} \ No newline at end of file diff --git a/UI/Base/Link.ts b/UI/Base/Link.ts index bfcb268e95..d0c40faa42 100644 --- a/UI/Base/Link.ts +++ b/UI/Base/Link.ts @@ -19,6 +19,17 @@ export default class Link extends BaseUIElement { } + public static OsmWiki(key: string, value?: string, hideKey = false) { + if (value !== undefined) { + let k = ""; + if (!hideKey) { + k = key + "=" + } + return new Link(k + value, `https://wiki.openstreetmap.org/wiki/Tag:${key}%3D${value}`) + } + return new Link(key, "https://wiki.openstreetmap.org/wiki/Key:" + key) + } + AsMarkdown(): string { // @ts-ignore return `[${this._embeddedShow.AsMarkdown()}](${this._href.data ?? this._href})`; @@ -44,15 +55,4 @@ export default class Link extends BaseUIElement { return el; } - public static OsmWiki(key: string, value?: string, hideKey = false) { - if (value !== undefined) { - let k = ""; - if (!hideKey) { - k = key + "=" - } - return new Link(k + value, `https://wiki.openstreetmap.org/wiki/Tag:${key}%3D${value}`) - } - return new Link(key, "https://wiki.openstreetmap.org/wiki/Key:" + key) - } - } \ No newline at end of file diff --git a/UI/Base/Loading.ts b/UI/Base/Loading.ts index e577f28471..835670534b 100644 --- a/UI/Base/Loading.ts +++ b/UI/Base/Loading.ts @@ -1,14 +1,16 @@ -import {Translation} from "../i18n/Translation"; import Combine from "./Combine"; import Svg from "../../Svg"; import Translations from "../i18n/Translations"; +import BaseUIElement from "../BaseUIElement"; export default class Loading extends Combine { - constructor(msg?: Translation | string) { - const t = Translations.T(msg) ?? Translations.t.general.loading.Clone(); + constructor(msg?: BaseUIElement | string) { + const t = Translations.W(msg) ?? Translations.t.general.loading; t.SetClass("pl-2") super([ - Svg.loading_svg().SetClass("animate-spin").SetStyle("width: 1.5rem; height: 1.5rem;"), + Svg.loading_svg() + .SetClass("animate-spin self-center") + .SetStyle("width: 1.5rem; height: 1.5rem; min-width: 1.5rem;"), t ]) this.SetClass("flex p-1") diff --git a/UI/Base/Minimap.ts b/UI/Base/Minimap.ts index 1b9d076418..03480a61ca 100644 --- a/UI/Base/Minimap.ts +++ b/UI/Base/Minimap.ts @@ -19,10 +19,13 @@ export interface MinimapOptions { export interface MinimapObj { readonly leafletMap: UIEventSource, + readonly location: UIEventSource; + readonly bounds: UIEventSource; installBounds(factor: number | BBox, showRange?: boolean): void TakeScreenshot(): Promise; + } export default class Minimap { @@ -31,15 +34,15 @@ export default class Minimap { * importing leaflet crashes node-ts, which is pretty annoying considering the fact that a lot of scripts use it */ + private constructor() { + } + /** * Construct a minimap */ - public static createMiniMap: (options: MinimapOptions) => (BaseUIElement & MinimapObj) = (_) => { + public static createMiniMap: (options?: MinimapOptions) => (BaseUIElement & MinimapObj) = (_) => { throw "CreateMinimap hasn't been initialized yet. Please call MinimapImplementation.initialize()" } - private constructor() { - } - } \ No newline at end of file diff --git a/UI/Base/MinimapImplementation.ts b/UI/Base/MinimapImplementation.ts index 2f70f85510..4a240bd56b 100644 --- a/UI/Base/MinimapImplementation.ts +++ b/UI/Base/MinimapImplementation.ts @@ -11,29 +11,30 @@ import {BBox} from "../../Logic/BBox"; import 'leaflet-polylineoffset' import {SimpleMapScreenshoter} from "leaflet-simple-map-screenshoter"; import BackgroundMapSwitch from "../BigComponents/BackgroundMapSwitch"; +import AvailableBaseLayersImplementation from "../../Logic/Actors/AvailableBaseLayersImplementation"; export default class MinimapImplementation extends BaseUIElement implements MinimapObj { private static _nextId = 0; public readonly leafletMap: UIEventSource + public readonly location: UIEventSource; + public readonly bounds: UIEventSource | undefined; private readonly _id: string; private readonly _background: UIEventSource; - private readonly _location: UIEventSource; private _isInited = false; private _allowMoving: boolean; private readonly _leafletoptions: any; private readonly _onFullyLoaded: (leaflet: L.Map) => void private readonly _attribution: BaseUIElement | boolean; - private readonly _bounds: UIEventSource | undefined; private readonly _addLayerControl: boolean; private readonly _options: MinimapOptions; - private constructor(options: MinimapOptions) { + private constructor(options?: MinimapOptions) { super() options = options ?? {} this.leafletMap = options.leafletMap ?? new UIEventSource(undefined) this._background = options?.background ?? new UIEventSource(AvailableBaseLayers.osmCarto) - this._location = options?.location ?? new UIEventSource({lat: 0, lon: 0, zoom: 1}) - this._bounds = options?.bounds; + this.location = options?.location ?? new UIEventSource({lat: 0, lon: 0, zoom: 1}) + this.bounds = options?.bounds; this._id = "minimap" + MinimapImplementation._nextId; this._allowMoving = options.allowMoving ?? true; this._leafletoptions = options.leafletOptions ?? {} @@ -42,23 +43,26 @@ export default class MinimapImplementation extends BaseUIElement implements Mini this._addLayerControl = options.addLayerControl ?? false this._options = options MinimapImplementation._nextId++ + this.SetClass("relative") } public static initialize() { + AvailableBaseLayers.implement(new AvailableBaseLayersImplementation()) Minimap.createMiniMap = options => new MinimapImplementation(options) } public installBounds(factor: number | BBox, showRange?: boolean) { this.leafletMap.addCallbackD(leaflet => { - let bounds; + let bounds : {getEast(), getNorth(), getWest(), getSouth()}; if (typeof factor === "number") { - bounds = leaflet.getBounds() - leaflet.setMaxBounds(bounds.pad(factor)) + const lbounds = leaflet.getBounds().pad(factor) + leaflet.setMaxBounds(lbounds) + bounds = lbounds; } else { // @ts-ignore leaflet.setMaxBounds(factor.toLeaflet()) - bounds = leaflet.getBounds() + bounds = factor } if (showRange) { @@ -97,9 +101,9 @@ export default class MinimapImplementation extends BaseUIElement implements Mini // @ts-ignore L.geoJSON(data, { style: { - color: "#f00", - weight: 2, - opacity: 0.4 + color: "#f44", + weight: 4, + opacity: 0.7 } }).addTo(leaflet) } @@ -153,7 +157,7 @@ export default class MinimapImplementation extends BaseUIElement implements Mini if (this._addLayerControl) { const switcher = new BackgroundMapSwitch({ - locationControl: this._location, + locationControl: this.location, backgroundLayer: this._background }, this._background @@ -180,7 +184,7 @@ export default class MinimapImplementation extends BaseUIElement implements Mini return; } this._isInited = true; - const location = this._location; + const location = this.location; const self = this; let currentLayer = this._background.data.layer() let latLon = <[number, number]>[location.data?.lat ?? 0, location.data?.lon ?? 0] @@ -268,8 +272,8 @@ export default class MinimapImplementation extends BaseUIElement implements Mini isRecursing = true; location.ping(); - if (self._bounds !== undefined) { - self._bounds.setData(BBox.fromLeafletBounds(map.getBounds())) + if (self.bounds !== undefined) { + self.bounds.setData(BBox.fromLeafletBounds(map.getBounds())) } @@ -288,15 +292,9 @@ export default class MinimapImplementation extends BaseUIElement implements Mini map.setView([loc.lat, loc.lon], loc.zoom) }) - location.map(loc => loc.zoom) - .addCallback(zoom => { - if (Math.abs(map.getZoom() - zoom) > 0.1) { - map.setZoom(zoom, {}); - } - }) - if (self._bounds !== undefined) { - self._bounds.setData(BBox.fromLeafletBounds(map.getBounds())) + if (self.bounds !== undefined) { + self.bounds.setData(BBox.fromLeafletBounds(map.getBounds())) } diff --git a/UI/Base/ScrollableFullScreen.ts b/UI/Base/ScrollableFullScreen.ts index 96fdb2eb00..c6dc803a50 100644 --- a/UI/Base/ScrollableFullScreen.ts +++ b/UI/Base/ScrollableFullScreen.ts @@ -5,7 +5,7 @@ import {FixedUiElement} from "./FixedUiElement"; import {UIEventSource} from "../../Logic/UIEventSource"; import Hash from "../../Logic/Web/Hash"; import BaseUIElement from "../BaseUIElement"; -import Img from "./Img"; +import Title from "./Title"; /** * @@ -23,8 +23,10 @@ export default class ScrollableFullScreen extends UIElement { private hashToShow: string; private _component: BaseUIElement; private _fullscreencomponent: BaseUIElement; + private _resetScrollSignal: UIEventSource = new UIEventSource(undefined); - constructor(title: ((mode: string) => BaseUIElement), content: ((mode: string) => BaseUIElement), + constructor(title: ((options: { mode: string }) => BaseUIElement), + content: ((options: { mode: string, resetScrollSignal: UIEventSource }) => BaseUIElement), hashToShow: string, isShown: UIEventSource = new UIEventSource(false) ) { @@ -35,13 +37,27 @@ export default class ScrollableFullScreen extends UIElement { if (hashToShow === undefined) { throw "HashToShow should be defined as it is vital for the 'back' key functionality" } + + const desktopOptions = { + mode: "desktop", + resetScrollSignal: this._resetScrollSignal + } + + const mobileOptions = { + mode: "mobile", + resetScrollSignal: this._resetScrollSignal + } - this._component = this.BuildComponent(title("desktop"), content("desktop"), isShown) - .SetClass("hidden md:block"); - this._fullscreencomponent = this.BuildComponent(title("mobile"), content("mobile").SetClass("pb-20"), isShown); + this._component = this.BuildComponent(title(desktopOptions), content(desktopOptions)) .SetClass("hidden md:block"); + this._fullscreencomponent = this.BuildComponent(title(mobileOptions), content(mobileOptions).SetClass("pb-20")); const self = this; + Hash.hash.addCallback(h => { + if (h === undefined) { + isShown.setData(false) + } + }) isShown.addCallback(isShown => { if (isShown) { // We first must set the hash, then activate the panel @@ -50,13 +66,16 @@ export default class ScrollableFullScreen extends UIElement { self.Activate(); } else { // Some cleanup... - ScrollableFullScreen.empty.AttachTo("fullscreen") + const fs = document.getElementById("fullscreen"); + if (fs !== null) { + ScrollableFullScreen.empty.AttachTo("fullscreen") + fs.classList.add("hidden") + } + ScrollableFullScreen._currentlyOpen?.isShown?.setData(false); - fs.classList.add("hidden") } }) - } InnerRender(): BaseUIElement { @@ -77,27 +96,32 @@ export default class ScrollableFullScreen extends UIElement { fs.classList.remove("hidden") } - private BuildComponent(title: BaseUIElement, content: BaseUIElement, isShown: UIEventSource) { + private BuildComponent(title: BaseUIElement, content: BaseUIElement) :BaseUIElement { const returnToTheMap = new Combine([ - new Img(Svg.back.replace(/#000000/g, "#cccccc"), true) - .SetClass("block md:hidden w-12 h-12 p-2"), - new Img(Svg.close.replace(/#000000/g, "#cccccc"), true) - .SetClass("hidden md:block w-12 h-12 p-3") + Svg.back_svg().SetClass("block md:hidden w-12 h-12 p-2 svg-foreground"), + Svg.close_svg() .SetClass("hidden md:block w-12 h-12 p-3 svg-foreground") ]).SetClass("rounded-full p-0 flex-shrink-0 self-center") returnToTheMap.onClick(() => { - isShown.setData(false) + this.isShown.setData(false) Hash.hash.setData(undefined) }) - title.SetClass("block text-l sm:text-xl md:text-2xl w-full font-bold p-0 max-h-20vh overflow-y-auto") - return new Combine([ + title = new Title(title, 2) + title.SetClass("text-l sm:text-xl md:text-2xl w-full p-0 max-h-20vh overflow-y-auto self-center") + const contentWrapper = new Combine([content]) + .SetClass("block p-2 md:pt-4 w-full h-full overflow-y-auto md:max-h-65vh") + + this._resetScrollSignal.addCallback(_ => { + contentWrapper.ScrollToTop(); + }) + + return new Combine([ new Combine([ new Combine([returnToTheMap, title]) .SetClass("border-b-1 border-black shadow bg-white flex flex-shrink-0 pt-1 pb-1 md:pt-0 md:pb-0"), - new Combine([content]) - .SetClass("block p-2 md:pt-4 w-full h-full overflow-y-auto md:max-h-65vh"), + contentWrapper , // We add an ornament which takes around 5em. This is in order to make sure the Web UI doesn't hide ]).SetClass("flex flex-col h-full relative bg-white") ]).SetClass("fixed top-0 left-0 right-0 h-screen w-screen md:max-h-65vh md:w-auto md:relative z-above-controls md:rounded-xl overflow-hidden"); diff --git a/UI/Base/SubtleButton.ts b/UI/Base/SubtleButton.ts index 5174d70d3f..f41680d5d4 100644 --- a/UI/Base/SubtleButton.ts +++ b/UI/Base/SubtleButton.ts @@ -5,6 +5,9 @@ import Link from "./Link"; import Img from "./Img"; import {UIEventSource} from "../../Logic/UIEventSource"; import {UIElement} from "../UIElement"; +import {VariableUiElement} from "./VariableUIElement"; +import Lazy from "./Lazy"; +import Loading from "./Loading"; export class SubtleButton extends UIElement { @@ -21,7 +24,7 @@ export class SubtleButton extends UIElement { } protected InnerRender(): string | BaseUIElement { - const classes = "block flex p-3 my-2 bg-blue-100 rounded-lg hover:shadow-xl hover:bg-blue-200 link-no-underline"; + const classes = "block flex p-3 my-2 bg-subtle rounded-lg hover:shadow-xl hover:bg-unsubtle transition-colors transition-shadow link-no-underline"; const message = Translations.W(this.message); let img; if ((this.imageUrl ?? "") === "") { @@ -31,29 +34,55 @@ export class SubtleButton extends UIElement { } else { img = this.imageUrl; } - img?.SetClass("block flex items-center justify-center h-11 w-11 flex-shrink0 mr-4") - const image = new Combine([img]) + const image = new Combine([img?.SetClass("block flex items-center justify-center h-11 w-11 flex-shrink0 mr-4")]) .SetClass("flex-shrink-0"); + message?.SetClass("block overflow-ellipsis no-images") + + const button = new Combine([ + image, + message + ]).SetClass("flex group w-full") + if (this.linkTo == undefined) { this.SetClass(classes) - return new Combine([ - image, - message?.SetClass("block overflow-ellipsis"), - ]).SetClass("flex group w-full"); + return button } return new Link( - new Combine([ - image, - message?.SetClass("block overflow-ellipsis") - ]).SetClass("flex group w-full"), + button, this.linkTo.url, this.linkTo.newTab ?? false ).SetClass(classes) } + public OnClickWithLoading( + loadingText: BaseUIElement | string, + action: () => Promise ) : BaseUIElement{ + const state = new UIEventSource<"idle" | "running">("idle") + const button = this; + + button.onClick(async() => { + state.setData("running") + try{ + await action() + }catch(e){ + console.error(e) + }finally { + state.setData("idle") + } + + }) + const loading = new Lazy(() => new Loading(loadingText) ) + return new VariableUiElement(state.map(st => { + console.log("State is: ", st) + if(st === "idle"){ + return button + } + return loading + })) + } } \ No newline at end of file diff --git a/UI/Base/TableOfContents.ts b/UI/Base/TableOfContents.ts index aa57f87dc9..b9f284fc81 100644 --- a/UI/Base/TableOfContents.ts +++ b/UI/Base/TableOfContents.ts @@ -18,9 +18,9 @@ export default class TableOfContents extends Combine { }) { let titles: Title[] if (elements instanceof Combine) { - titles = TableOfContents.getTitles(elements.getElements()) + titles = TableOfContents.getTitles(elements.getElements()) ?? [] } else { - titles = elements + titles = elements ?? [] } let els: { level: number, content: BaseUIElement }[] = [] @@ -29,11 +29,14 @@ export default class TableOfContents extends Combine { if (title.title instanceof Translation) { content = title.title.Clone() } else if (title.title instanceof FixedUiElement) { - content = title.title + content = new FixedUiElement(title.title.content) } else if (Utils.runningFromConsole) { content = new FixedUiElement(title.AsMarkdown()) - } else { + } else if (title["title"] !== undefined) { content = new FixedUiElement(title.title.ConstructElement().innerText) + } else { + console.log("Not generating a title for ", title) + continue } const vis = new Link(content, "#" + title.id) diff --git a/UI/Base/Title.ts b/UI/Base/Title.ts index f187818bc9..8c4d3f8f19 100644 --- a/UI/Base/Title.ts +++ b/UI/Base/Title.ts @@ -3,12 +3,11 @@ import {FixedUiElement} from "./FixedUiElement"; import {Utils} from "../../Utils"; export default class Title extends BaseUIElement { + private static readonly defaultClassesPerLevel = ["", "text-3xl font-bold", "text-2xl font-bold", "text-xl font-bold", "text-lg font-bold"] public readonly title: BaseUIElement; public readonly level: number; public readonly id: string - private static readonly defaultClassesPerLevel = ["", "text-3xl font-bold", "text-2xl font-bold", "text-xl font-bold", "text-lg font-bold"] - constructor(embedded: string | BaseUIElement, level: number = 3) { super() if (embedded === undefined) { diff --git a/UI/Base/Toggleable.ts b/UI/Base/Toggleable.ts index 31c68239b3..848fc80b65 100644 --- a/UI/Base/Toggleable.ts +++ b/UI/Base/Toggleable.ts @@ -25,17 +25,36 @@ export class Accordeon extends Combine { export default class Toggleable extends Combine { public readonly isVisible = new UIEventSource(false) - constructor(title: Title | BaseUIElement, content: BaseUIElement) { + constructor(title: Title | Combine | BaseUIElement, content: BaseUIElement, options?: { + closeOnClick: true | boolean + }) { super([title, content]) - content.SetClass("animate-height border-l-4 pl-2") + content.SetClass("animate-height border-l-4 pl-2 block") title.SetClass("background-subtle rounded-lg") const self = this - this.onClick(() => self.isVisible.setData(!self.isVisible.data)) + this.onClick(() => { + if (self.isVisible.data) { + if (options?.closeOnClick ?? true) { + self.isVisible.setData(false) + } + } else { + self.isVisible.setData(true) + } + }) const contentElement = content.ConstructElement() + if (title instanceof Combine) { + for (const el of title.getElements()) { + if (el instanceof Title) { + title = el; + break; + } + } + } + if (title instanceof Title) { Hash.hash.addCallbackAndRun(h => { - if (h === title.id) { + if (h === (title).id) { self.isVisible.setData(true) content.RemoveClass("border-gray-300") content.SetClass("border-red-300") @@ -46,7 +65,7 @@ export default class Toggleable extends Combine { }) this.isVisible.addCallbackAndRun(isVis => { if (isVis) { - Hash.hash.setData(title.id) + Hash.hash.setData((<Title>title).id) } }) } @@ -54,6 +73,7 @@ export default class Toggleable extends Combine { this.isVisible.addCallbackAndRun(isVisible => { if (isVisible) { contentElement.style.maxHeight = "100vh" + contentElement.style.overflowY = "auto" contentElement.style["-webkit-mask-image"] = "unset" } else { contentElement.style["-webkit-mask-image"] = "-webkit-gradient(linear, left top, left bottom, from(rgba(0,0,0,1)), to(rgba(0,0,0,0)))" @@ -62,4 +82,9 @@ export default class Toggleable extends Combine { }) } + public Collapse(): Toggleable { + this.isVisible.setData(false) + return this; + } + } \ No newline at end of file diff --git a/UI/Base/VariableUIElement.ts b/UI/Base/VariableUIElement.ts index 8427170de8..55538f2ce3 100644 --- a/UI/Base/VariableUIElement.ts +++ b/UI/Base/VariableUIElement.ts @@ -15,6 +15,17 @@ export class VariableUiElement extends BaseUIElement { this.isDestroyed = true; } + AsMarkdown(): string { + const d = this._contents.data; + if (typeof d === "string") { + return d; + } + if (d instanceof BaseUIElement) { + return d.AsMarkdown() + } + return new Combine(<BaseUIElement[]>d).AsMarkdown() + } + protected InnerConstructElement(): HTMLElement { const el = document.createElement("span"); const self = this; @@ -47,15 +58,4 @@ export class VariableUiElement extends BaseUIElement { }); return el; } - - AsMarkdown(): string { - const d = this._contents.data; - if (typeof d === "string") { - return d; - } - if (d instanceof BaseUIElement) { - return d.AsMarkdown() - } - return new Combine(<BaseUIElement[]>d).AsMarkdown() - } } diff --git a/UI/BaseUIElement.ts b/UI/BaseUIElement.ts index eb33637a85..2157fb2f12 100644 --- a/UI/BaseUIElement.ts +++ b/UI/BaseUIElement.ts @@ -8,10 +8,10 @@ import {Utils} from "../Utils"; export default abstract class BaseUIElement { protected _constructedHtmlElement: HTMLElement; + protected isDestroyed = false; private clss: Set<string> = new Set<string>(); private style: string; private _onClick: () => void; - protected isDestroyed = false; public onClick(f: (() => void)) { this._onClick = f; @@ -39,6 +39,10 @@ export default abstract class BaseUIElement { return this; } + + public ScrollToTop(){ + this._constructedHtmlElement?.scrollTo(0,0) + } /** * Adds all the relevant classes, space separated @@ -98,11 +102,6 @@ export default abstract class BaseUIElement { return this._constructedHtmlElement } - if (this.InnerConstructElement === undefined) { - throw "ERROR! This is not a correct baseUIElement: " + this.constructor.name - } - - try { const el = this.InnerConstructElement(); @@ -148,10 +147,10 @@ export default abstract class BaseUIElement { } public AsMarkdown(): string { - throw "AsMarkdown is not implemented by " + this.constructor.name+"; implement it in the subclass" + throw "AsMarkdown is not implemented; implement it in the subclass" } - - public Destroy(){ + + public Destroy() { this.isDestroyed = true; } diff --git a/UI/BigComponents/AddNewMarker.ts b/UI/BigComponents/AddNewMarker.ts index ccee99b504..9bd89e3f53 100644 --- a/UI/BigComponents/AddNewMarker.ts +++ b/UI/BigComponents/AddNewMarker.ts @@ -14,6 +14,9 @@ export default class AddNewMarker extends Combine { let last = undefined; for (const filteredLayer of filteredLayers) { const layer = filteredLayer.layerDef; + if(layer.name === undefined){ + continue + } for (const preset of filteredLayer.layerDef.presets) { const tags = TagUtils.KVtoProperties(preset.tags) const icon = layer.mapRendering[0].GenerateLeafletStyle(new UIEventSource<any>(tags), false).html @@ -27,8 +30,8 @@ export default class AddNewMarker extends Combine { } } } - if(icons.length === 0){ - return undefined + if (icons.length === 0) { + return undefined } if (icons.length === 1) { return icons[0] diff --git a/UI/BigComponents/AllDownloads.ts b/UI/BigComponents/AllDownloads.ts index 2586fef3f1..2d2fc66987 100644 --- a/UI/BigComponents/AllDownloads.ts +++ b/UI/BigComponents/AllDownloads.ts @@ -1,4 +1,3 @@ -import State from "../../State"; import Combine from "../Base/Combine"; import ScrollableFullScreen from "../Base/ScrollableFullScreen"; import Translations from "../i18n/Translations"; @@ -9,11 +8,39 @@ import {DownloadPanel} from "./DownloadPanel"; import {SubtleButton} from "../Base/SubtleButton"; import Svg from "../../Svg"; import ExportPDF from "../ExportPDF"; +import FilteredLayer from "../../Models/FilteredLayer"; +import FeaturePipeline from "../../Logic/FeatureSource/FeaturePipeline"; +import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"; +import {BBox} from "../../Logic/BBox"; +import BaseLayer from "../../Models/BaseLayer"; +import Loc from "../../Models/Loc"; + +interface DownloadState { + filteredLayers: UIEventSource<FilteredLayer[]> + featurePipeline: FeaturePipeline, + layoutToUse: LayoutConfig, + currentBounds: UIEventSource<BBox>, + backgroundLayer:UIEventSource<BaseLayer>, + locationControl: UIEventSource<Loc>, + featureSwitchExportAsPdf: UIEventSource<boolean>, + featureSwitchEnableExport: UIEventSource<boolean>, +} + + export default class AllDownloads extends ScrollableFullScreen { - constructor(isShown: UIEventSource<boolean>) { - super(AllDownloads.GenTitle, AllDownloads.GeneratePanel, "downloads", isShown); + constructor(isShown: UIEventSource<boolean>,state: { + filteredLayers: UIEventSource<FilteredLayer[]> + featurePipeline: FeaturePipeline, + layoutToUse: LayoutConfig, + currentBounds: UIEventSource<BBox>, + backgroundLayer:UIEventSource<BaseLayer>, + locationControl: UIEventSource<Loc>, + featureSwitchExportAsPdf: UIEventSource<boolean>, + featureSwitchEnableExport: UIEventSource<boolean>, + }) { + super(AllDownloads.GenTitle, () => AllDownloads.GeneratePanel(state), "downloads", isShown); } private static GenTitle(): BaseUIElement { @@ -22,17 +49,18 @@ export default class AllDownloads extends ScrollableFullScreen { .SetClass("text-2xl break-words font-bold p-2"); } - private static GeneratePanel(): BaseUIElement { + private static GeneratePanel(state: DownloadState): BaseUIElement { + const isExporting = new UIEventSource(false, "Pdf-is-exporting") const generatePdf = () => { isExporting.setData(true) new ExportPDF( { freeDivId: "belowmap", - background: State.state.backgroundLayer, - location: State.state.locationControl, - features: State.state.featurePipeline, - layout: State.state.layoutToUse, + background: state.backgroundLayer, + location: state.locationControl, + features: state.featurePipeline, + layout: state.layoutToUse, }).isRunning.addCallbackAndRun(isRunning => isExporting.setData(isRunning)) } @@ -57,13 +85,13 @@ export default class AllDownloads extends ScrollableFullScreen { text), undefined, - State.state.featureSwitchExportAsPdf + state.featureSwitchExportAsPdf ) const exportPanel = new Toggle( - new DownloadPanel(), + new DownloadPanel(state), undefined, - State.state.featureSwitchEnableExport + state.featureSwitchEnableExport ) return new Combine([pdf, exportPanel]).SetClass("flex flex-col"); diff --git a/UI/BigComponents/BackToIndex.ts b/UI/BigComponents/BackToIndex.ts new file mode 100644 index 0000000000..40f866bc48 --- /dev/null +++ b/UI/BigComponents/BackToIndex.ts @@ -0,0 +1,19 @@ +import {SubtleButton} from "../Base/SubtleButton"; +import Svg from "../../Svg"; +import Translations from "../i18n/Translations"; +import BaseUIElement from "../BaseUIElement"; + +export default class BackToIndex extends SubtleButton { + + constructor(message?: string | BaseUIElement) { + super( + Svg.back_svg().SetStyle("height: 1.5rem;"), + message ?? Translations.t.general.backToMapcomplete, + { + url: "index.html" + } + ) + } + + +} \ No newline at end of file diff --git a/UI/BigComponents/BackgroundMapSwitch.ts b/UI/BigComponents/BackgroundMapSwitch.ts index b675567fd5..fa601b3d39 100644 --- a/UI/BigComponents/BackgroundMapSwitch.ts +++ b/UI/BigComponents/BackgroundMapSwitch.ts @@ -84,7 +84,7 @@ class SingleLayerSelectionButton extends Toggle { previousLayer.setData(previousLayer.data ?? available.data) options.currentBackground.setData(previousLayer.data) }) - + options.currentBackground.addCallbackAndRunD(background => { if (background.category === options.preferredType) { previousLayer.setData(background) @@ -103,9 +103,9 @@ class SingleLayerSelectionButton extends Toggle { // The previously used layer doesn't match the current layer -> no need to switch return; } - + // Is the previous layer still valid? If so, we don't bother to switch - if(previousLayer.data.feature === null || GeoOperations.inside(locationControl.data, previousLayer.data.feature)){ + if (previousLayer.data.feature === null || GeoOperations.inside(locationControl.data, previousLayer.data.feature)) { return } diff --git a/UI/BigComponents/CopyrightPanel.ts b/UI/BigComponents/CopyrightPanel.ts index 187d21e36f..f717f13dd4 100644 --- a/UI/BigComponents/CopyrightPanel.ts +++ b/UI/BigComponents/CopyrightPanel.ts @@ -20,17 +20,18 @@ import Toggle from "../Input/Toggle"; import {OsmConnection} from "../../Logic/Osm/OsmConnection"; import Constants from "../../Models/Constants"; import ContributorCount from "../../Logic/ContributorCount"; +import Img from "../Base/Img"; export class OpenIdEditor extends VariableUiElement { - constructor(state : {locationControl: UIEventSource<Loc>}, iconStyle? : string, objectId?: string) { + constructor(state: { locationControl: UIEventSource<Loc> }, iconStyle?: string, objectId?: string) { const t = Translations.t.general.attribution super(state.locationControl.map(location => { let elementSelect = ""; - if(objectId !== undefined){ - const parts = objectId.split("/") + if (objectId !== undefined) { + const parts = objectId.split("/") const tp = parts[0] - if(parts.length === 2 && !isNaN(Number(parts[1])) && (tp === "node" || tp === "way" || tp === "relation")){ - elementSelect = "&"+ tp+"="+parts[1] + if (parts.length === 2 && !isNaN(Number(parts[1])) && (tp === "node" || tp === "way" || tp === "relation")) { + elementSelect = "&" + tp + "=" + parts[1] } } const idLink = `https://www.openstreetmap.org/edit?editor=id${elementSelect}#map=${location?.zoom ?? 0}/${location?.lat ?? 0}/${location?.lon ?? 0}` @@ -41,9 +42,9 @@ export class OpenIdEditor extends VariableUiElement { } export class OpenMapillary extends VariableUiElement { - constructor(state : {locationControl: UIEventSource<Loc>}, iconStyle? : string) { + constructor(state: { locationControl: UIEventSource<Loc> }, iconStyle?: string) { const t = Translations.t.general.attribution - super( state.locationControl.map(location => { + super(state.locationControl.map(location => { const mapillaryLink = `https://www.mapillary.com/app/?focus=map&lat=${location?.lat ?? 0}&lng=${location?.lon ?? 0}&z=${Math.max((location?.zoom ?? 2) - 1, 1)}` return new SubtleButton(Svg.mapillary_black_ui().SetStyle(iconStyle), t.openMapillary, { url: mapillaryLink, @@ -55,13 +56,13 @@ export class OpenMapillary extends VariableUiElement { export class OpenJosm extends Combine { - constructor(state : {osmConnection: OsmConnection, currentBounds: UIEventSource<BBox>,}, iconStyle? : string) { - const t = Translations.t.general.attribution - + constructor(state: { osmConnection: OsmConnection, currentBounds: UIEventSource<BBox>, }, iconStyle?: string) { + const t = Translations.t.general.attribution + const josmState = new UIEventSource<string>(undefined) // Reset after 15s josmState.stabilized(15000).addCallbackD(_ => josmState.setData(undefined)) - + const stateIndication = new VariableUiElement(josmState.map(state => { if (state === undefined) { return undefined @@ -72,23 +73,23 @@ export class OpenJosm extends Combine { } return t.josmNotOpened.SetClass("alert") })); - - const toggle = new Toggle( - new SubtleButton(Svg.josm_logo_ui().SetStyle(iconStyle), t.editJosm).onClick(() => { - const bounds: any = state.currentBounds.data; - if (bounds === undefined) { - return undefined - } - const top = bounds.getNorth(); - const bottom = bounds.getSouth(); - const right = bounds.getEast(); - const left = bounds.getWest(); - const josmLink = `http://127.0.0.1:8111/load_and_zoom?left=${left}&right=${right}&top=${top}&bottom=${bottom}` - Utils.download(josmLink).then(answer => josmState.setData(answer.replace(/\n/g, '').trim())).catch(_ => josmState.setData("ERROR")) - }), undefined, state.osmConnection.userDetails.map(ud => ud.loggedIn && ud.csCount >= Constants.userJourney.historyLinkVisible)) + + const toggle = new Toggle( + new SubtleButton(Svg.josm_logo_ui().SetStyle(iconStyle), t.editJosm).onClick(() => { + const bounds: any = state.currentBounds.data; + if (bounds === undefined) { + return undefined + } + const top = bounds.getNorth(); + const bottom = bounds.getSouth(); + const right = bounds.getEast(); + const left = bounds.getWest(); + const josmLink = `http://127.0.0.1:8111/load_and_zoom?left=${left}&right=${right}&top=${top}&bottom=${bottom}` + Utils.download(josmLink).then(answer => josmState.setData(answer.replace(/\n/g, '').trim())).catch(_ => josmState.setData("ERROR")) + }), undefined, state.osmConnection.userDetails.map(ud => ud.loggedIn && ud.csCount >= Constants.userJourney.historyLinkVisible)) super([stateIndication, toggle]); - + } @@ -112,7 +113,7 @@ export default class CopyrightPanel extends Combine { const t = Translations.t.general.attribution const layoutToUse = state.layoutToUse - const iconStyle = "height: 1.5rem; width: auto" + const iconStyle = "height: 1.5rem; width: auto" const actionButtons = [ new SubtleButton(Svg.liberapay_ui().SetStyle(iconStyle), t.donate, { url: "https://liberapay.com/pietervdvn/", @@ -131,19 +132,18 @@ export default class CopyrightPanel extends Combine { new OpenJosm(state, iconStyle) ] - const iconAttributions = Utils.NoNull(Array.from(layoutToUse.ExtractImages())) - .map(CopyrightPanel.IconAttribution) + const iconAttributions = layoutToUse.usedImages.map(CopyrightPanel.IconAttribution) let maintainer: BaseUIElement = undefined if (layoutToUse.maintainer !== undefined && layoutToUse.maintainer !== "" && layoutToUse.maintainer.toLowerCase() !== "mapcomplete") { maintainer = Translations.t.general.attribution.themeBy.Subs({author: layoutToUse.maintainer}) } - const contributions = new ContributorCount(state).Contributors - + const contributions = new ContributorCount(state).Contributors + super([ Translations.t.general.attribution.attributionContent, - new FixedUiElement("MapComplete "+Constants.vNumber).SetClass("font-bold"), + new FixedUiElement("MapComplete " + Constants.vNumber).SetClass("font-bold"), maintainer, new Combine(actionButtons).SetClass("block w-full"), new FixedUiElement(layoutToUse.credits), @@ -185,7 +185,7 @@ export default class CopyrightPanel extends Combine { ...iconAttributions ].map(e => e?.SetClass("mt-4"))); this.SetClass("flex flex-col link-underline overflow-hidden") - this.SetStyle("max-width: calc(100vw - 3em); width: 40rem; margin-left: 0.75rem; margin-right: 0.5rem") + this.SetStyle("max-width:100%; width: 40rem; margin-left: 0.75rem; margin-right: 0.5rem") } private static CodeContributors(): BaseUIElement { @@ -210,7 +210,11 @@ export default class CopyrightPanel extends Combine { private static IconAttribution(iconPath: string): BaseUIElement { if (iconPath.startsWith("http")) { + try{ iconPath = "." + new URL(iconPath).pathname; + }catch(e){ + console.error(e) + } } const license: SmallLicense = CopyrightPanel.LicenseObject[iconPath] @@ -224,23 +228,19 @@ export default class CopyrightPanel extends Combine { const sources = Utils.NoNull(Utils.NoEmpty(license.sources)) return new Combine([ - `<img src='${iconPath}' style="width: 50px; height: 50px; min-width: 50px; min-height: 50px; margin-right: 0.5em;">`, + new Img(iconPath).SetClass("w-12 min-h-12 mr-2 mb-2"), new Combine([ new FixedUiElement(license.authors.join("; ")).SetClass("font-bold"), - new Combine([license.license, - sources.length > 0 ? " - " : "", - ...sources.map(lnk => { + license.license, + new Combine([ ...sources.map(lnk => { let sourceLinkContent = lnk; try { sourceLinkContent = new URL(lnk).hostname } catch { console.error("Not a valid URL:", lnk) } - return new Link(sourceLinkContent, lnk, true); - }) - ] - ).SetClass("block m-2") - + return new Link(sourceLinkContent, lnk, true).SetClass("mr-2 mb-2"); + })]).SetClass("flex flex-wrap") ]).SetClass("flex flex-col").SetStyle("width: calc(100% - 50px - 0.5em); min-width: 12rem;") ]).SetClass("flex flex-wrap border-b border-gray-300 m-2 border-box") } diff --git a/UI/BigComponents/DownloadPanel.ts b/UI/BigComponents/DownloadPanel.ts index 5204736258..fefdeb64a4 100644 --- a/UI/BigComponents/DownloadPanel.ts +++ b/UI/BigComponents/DownloadPanel.ts @@ -13,15 +13,16 @@ import {UIEventSource} from "../../Logic/UIEventSource"; import SimpleMetaTagger from "../../Logic/SimpleMetaTagger"; import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"; import {BBox} from "../../Logic/BBox"; +import FilteredLayer, {FilterState} from "../../Models/FilteredLayer"; export class DownloadPanel extends Toggle { - constructor() { - const state: { - featurePipeline: FeaturePipeline, - layoutToUse: LayoutConfig, - currentBounds: UIEventSource<BBox> - } = State.state + constructor(state: { + filteredLayers: UIEventSource<FilteredLayer[]> + featurePipeline: FeaturePipeline, + layoutToUse: LayoutConfig, + currentBounds: UIEventSource<BBox> + }) { const t = Translations.t.general.download @@ -34,7 +35,7 @@ export class DownloadPanel extends Toggle { const buttonGeoJson = new SubtleButton(Svg.floppy_ui(), new Combine([t.downloadGeojson.Clone().SetClass("font-bold"), t.downloadGeoJsonHelper.Clone()]).SetClass("flex flex-col")) - .onClick(() => { + .OnClickWithLoading(t.exporting,async () => { const geojson = DownloadPanel.getCleanGeoJson(state, metaisIncluded.data) Utils.offerContentsAsDownloadableFile(JSON.stringify(geojson, null, " "), `MapComplete_${name}_export_${new Date().toISOString().substr(0, 19)}.geojson`, { @@ -46,7 +47,7 @@ export class DownloadPanel extends Toggle { const buttonCSV = new SubtleButton(Svg.floppy_ui(), new Combine( [t.downloadCSV.Clone().SetClass("font-bold"), t.downloadCSVHelper.Clone()]).SetClass("flex flex-col")) - .onClick(() => { + .OnClickWithLoading(t.exporting, async () => { const geojson = DownloadPanel.getCleanGeoJson(state, metaisIncluded.data) const csv = GeoOperations.toCSV(geojson.features) @@ -72,13 +73,41 @@ export class DownloadPanel extends Toggle { private static getCleanGeoJson(state: { featurePipeline: FeaturePipeline, - currentBounds: UIEventSource<BBox> + currentBounds: UIEventSource<BBox>, + filteredLayers: UIEventSource<FilteredLayer[]> }, includeMetaData: boolean) { const resultFeatures = [] - const featureList = state.featurePipeline.GetAllFeaturesWithin(state.currentBounds.data); + const neededLayers = state.filteredLayers.data.map(l => l.layerDef.id) + const bbox = state.currentBounds.data + const featureList = state.featurePipeline.GetAllFeaturesAndMetaWithin(bbox, new Set(neededLayers)); for (const tile of featureList) { - for (const feature of tile) { + const layer = state.filteredLayers.data.find(fl => fl.layerDef.id === tile.layer) + const filters = layer.appliedFilters.data + for (const feature of tile.features) { + + if(!bbox.overlapsWith(BBox.get(feature))){ + continue + } + + + if (filters !== undefined) { + let featureDoesMatchAllFilters = true; + for (let key of Array.from(filters.keys())) { + const filter: FilterState = filters.get(key) + if(filter?.currentFilter === undefined){ + continue + } + if (!filter.currentFilter.matchesProperties(feature.properties)) { + featureDoesMatchAllFilters = false; + break + } + } + if(!featureDoesMatchAllFilters){ + continue; // the outer loop + } + } + const cleaned = { type: feature.type, geometry: feature.geometry, diff --git a/UI/BigComponents/ExtraLinkButton.ts b/UI/BigComponents/ExtraLinkButton.ts new file mode 100644 index 0000000000..4d7c6e06c2 --- /dev/null +++ b/UI/BigComponents/ExtraLinkButton.ts @@ -0,0 +1,81 @@ +import {UIElement} from "../UIElement"; +import BaseUIElement from "../BaseUIElement"; +import {UIEventSource} from "../../Logic/UIEventSource"; +import ExtraLinkConfig from "../../Models/ThemeConfig/ExtraLinkConfig"; +import MapControlButton from "../MapControlButton"; +import Link from "../Base/Link"; +import Img from "../Base/Img"; +import {SubtleButton} from "../Base/SubtleButton"; +import Toggle from "../Input/Toggle"; +import Loc from "../../Models/Loc"; +import Locale from "../i18n/Locale"; +import {Utils} from "../../Utils"; + +export default class ExtraLinkButton extends UIElement{ + private readonly _config: ExtraLinkConfig; + private readonly state: { + layoutToUse: {id: string}; + featureSwitchWelcomeMessage: UIEventSource<boolean>, locationControl: UIEventSource<Loc>}; + + constructor(state: {featureSwitchWelcomeMessage: UIEventSource<boolean>, locationControl: UIEventSource<Loc>, layoutToUse: {id: string}}, + config: ExtraLinkConfig) { + super(); + this.state = state; + this._config = config; + } + + protected InnerRender(): BaseUIElement { + if(this._config === undefined){ + return undefined; + } + + const c = this._config; + + const isIframe = window !== window.top + + if(c.requirements.has("iframe") && !isIframe){ + return undefined + } + + if(c.requirements.has("no-iframe") && isIframe){ + return undefined + } + + let link : BaseUIElement + const theme = this.state.layoutToUse?.id ?? "" + const href = this.state.locationControl.map(loc => { + const subs = { + ...loc, + theme: theme, + language: Locale.language.data + } + return Utils.SubstituteKeys(c.href, subs) + }) + + if(c.text === undefined){ + link = new MapControlButton( + new Link(new Img(c.icon), href, c.newTab).SetClass("block w-full h-full p-1.5") + ) + }else { + let img : BaseUIElement = undefined + if(c.icon !== undefined){ + img = new Img(c.icon).SetClass("h-6") + } + + link = new SubtleButton(img,c.text, {url: + href, + newTab: c.newTab}) + } + + if(c.requirements.has("no-welcome-message")){ + link = new Toggle(undefined, link, this.state.featureSwitchWelcomeMessage) + } + + if(c.requirements.has("welcome-message")){ + link = new Toggle(link, undefined, this.state.featureSwitchWelcomeMessage) + } + + return link; + } + +} \ No newline at end of file diff --git a/UI/BigComponents/FeaturedMessage.ts b/UI/BigComponents/FeaturedMessage.ts index f1a3af01e0..aa3e2cf7d8 100644 --- a/UI/BigComponents/FeaturedMessage.ts +++ b/UI/BigComponents/FeaturedMessage.ts @@ -33,12 +33,12 @@ export default class FeaturedMessage extends Combine { public static WelcomeMessages(): { start_date: Date, end_date: Date, message: string, featured_theme?: string }[] { const all_messages: { start_date: Date, end_date: Date, message: string, featured_theme?: string }[] = [] - - const themesById = new Map<string, {id: string, title: any, shortDescription: any}>(); + + const themesById = new Map<string, { id: string, title: any, shortDescription: any }>(); for (const theme of themeOverview["default"]) { themesById.set(theme.id, theme); } - + for (const i in welcome_messages) { if (isNaN(Number(i))) { continue @@ -78,9 +78,9 @@ export default class FeaturedMessage extends Combine { const msg = new FixedUiElement(welcome_message.message).SetClass("link-underline font-lg") els.push(new Combine([title, msg]).SetClass("m-4")) if (welcome_message.featured_theme !== undefined) { - + const theme = themeOverview["default"].filter(th => th.id === welcome_message.featured_theme)[0]; - + els.push(MoreScreen.createLinkButton({}, theme) .SetClass("m-4 self-center md:w-160") .SetStyle("height: min-content;")) diff --git a/UI/BigComponents/FilterView.ts b/UI/BigComponents/FilterView.ts index e4cf5eaf7b..9c83a98895 100644 --- a/UI/BigComponents/FilterView.ts +++ b/UI/BigComponents/FilterView.ts @@ -18,9 +18,12 @@ import {SubstitutedTranslation} from "../SubstitutedTranslation"; import ValidatedTextField from "../Input/ValidatedTextField"; import {QueryParameters} from "../../Logic/Web/QueryParameters"; import {TagUtils} from "../../Logic/Tags/TagUtils"; +import {InputElement} from "../Input/InputElement"; +import {DropDown} from "../Input/DropDown"; export default class FilterView extends VariableUiElement { - constructor(filteredLayer: UIEventSource<FilteredLayer[]>, tileLayers: { config: TilesourceConfig, isDisplayed: UIEventSource<boolean> }[]) { + constructor(filteredLayer: UIEventSource<FilteredLayer[]>, + tileLayers: { config: TilesourceConfig, isDisplayed: UIEventSource<boolean> }[]) { const backgroundSelector = new Toggle( new BackgroundSelector(), undefined, @@ -28,8 +31,15 @@ export default class FilterView extends VariableUiElement { ) super( filteredLayer.map((filteredLayers) => { - let elements = filteredLayers?.map(l => FilterView.createOneFilteredLayerElement(l)) + // Create the views which toggle layers (and filters them) ... + let elements = filteredLayers + ?.map(l => FilterView.createOneFilteredLayerElement(l)?.SetClass("filter-panel")) + ?.filter(l => l !== undefined) + elements[0].SetClass("first-filter-panel") + + // ... create views for non-interactive layers ... elements = elements.concat(tileLayers.map(tl => FilterView.createOverlayToggle(tl))) + // ... and add the dropdown to select a different background return elements.concat(backgroundSelector); } ) @@ -91,11 +101,6 @@ export default class FilterView extends VariableUiElement { iconStyle ); - if (filteredLayer.layerDef.name === undefined) { - return; - } - - const name: Translation = Translations.WT( filteredLayer.layerDef.name ); @@ -114,17 +119,16 @@ export default class FilterView extends VariableUiElement { ) - const style = - "display:flex;align-items:center;padding:0.5rem 0;"; - const layerIcon = layer.defaultIcon()?.SetClass("w-8 h-8 ml-2") - const layerIconUnchecked = layer.defaultIcon()?.SetClass("opacity-50 w-8 h-8 ml-2") + const toggleClasses = "layer-toggle flex flex-wrap items-center pt-2 pb-2 px-0"; + const layerIcon = layer.defaultIcon()?.SetClass("flex-shrink-0 w-8 h-8 ml-2") + const layerIconUnchecked = layer.defaultIcon()?.SetClass("flex-shrink-0 opacity-50 w-8 h-8 ml-2") const layerChecked = new Combine([icon, layerIcon, styledNameChecked, zoomStatus]) - .SetStyle(style) + .SetClass(toggleClasses) .onClick(() => filteredLayer.isDisplayed.setData(false)); const layerNotChecked = new Combine([iconUnselected, layerIconUnchecked, styledNameUnChecked]) - .SetStyle(style) + .SetClass(toggleClasses) .onClick(() => filteredLayer.isDisplayed.setData(true)); @@ -143,15 +147,15 @@ export default class FilterView extends VariableUiElement { if (layer.filters.length === 0) { return undefined; } - - - const toShow : BaseUIElement [] = [] + + + const toShow: BaseUIElement [] = [] for (const filter of layer.filters) { - + const [ui, actualTags] = FilterView.createFilter(filter) - - ui.SetClass("mt-3") + + ui.SetClass("mt-1") toShow.push(ui) actualTags.addCallback(tagsToFilterFor => { flayer.appliedFilters.data.set(filter.id, tagsToFilterFor) @@ -159,15 +163,15 @@ export default class FilterView extends VariableUiElement { }) flayer.appliedFilters.map(dict => dict.get(filter.id)) .addCallbackAndRun(filters => actualTags.setData(filters)) - - + + } return new Combine(toShow) - .SetClass("flex flex-col ml-8 bg-gray-300 rounded-xl p-2") + .SetClass("flex flex-col p-2 ml-12 pl-1 pt-0 layer-filters") } - + // Filter which uses one or more textfields private static createFilterWithFields(filterConfig: FilterConfig): [BaseUIElement, UIEventSource<FilterState>] { @@ -177,7 +181,7 @@ export default class FilterView extends VariableUiElement { const properties = new UIEventSource<any>({}) for (const {name, type} of filter.fields) { const value = QueryParameters.GetQueryParameter("filter-" + filterConfig.id + "-" + name, "", "Value for filter " + filterConfig.id) - const field = ValidatedTextField.InputForType(type, { + const field = ValidatedTextField.ForType(type).ConstructInputElement({ value }).SetClass("inline-block") mappings.set(name, field) @@ -189,7 +193,7 @@ export default class FilterView extends VariableUiElement { allValid = allValid.map(previous => previous && field.IsValid(stable.data) && stable.data !== "", [stable]) } const tr = new SubstitutedTranslation(filter.question, new UIEventSource<any>({id: filterConfig.id}), State.state, mappings) - const trigger : UIEventSource<FilterState>= allValid.map(isValid => { + const trigger: UIEventSource<FilterState> = allValid.map(isValid => { if (!isValid) { return undefined } @@ -202,9 +206,9 @@ export default class FilterView extends VariableUiElement { } for (const key in props) { - v = (<string>v).replace("{"+key+"}", props[key]) + v = (<string>v).replace("{" + key + "}", props[key]) } - + return v } ) @@ -214,11 +218,11 @@ export default class FilterView extends VariableUiElement { state: JSON.stringify(props) } }, [properties]) - + return [tr, trigger]; } - - private static createCheckboxFilter(filterConfig: FilterConfig): [BaseUIElement, UIEventSource<FilterState>] { + + private static createCheckboxFilter(filterConfig: FilterConfig): [BaseUIElement, UIEventSource<FilterState>] { let option = filterConfig.options[0]; const icon = Svg.checkbox_filled_svg().SetClass("block mr-2 w-6"); @@ -231,39 +235,53 @@ export default class FilterView extends VariableUiElement { .ToggleOnClick() .SetClass("block m-1") - return [toggle, toggle.isEnabled.map(enabled => enabled ? {currentFilter: option.osmTags, state: "true"} : undefined, [], + return [toggle, toggle.isEnabled.map(enabled => enabled ? { + currentFilter: option.osmTags, + state: "true" + } : undefined, [], f => f !== undefined) ] } + private static createMultiFilter(filterConfig: FilterConfig): [BaseUIElement, UIEventSource<FilterState>] { let options = filterConfig.options; - const values : FilterState[] = options.map((f, i) => ({ + const values: FilterState[] = options.map((f, i) => ({ currentFilter: f.osmTags, state: i })) - const radio = new RadioButton( - options.map( - (option, i) => - new FixedInputElement(option.question.Clone().SetClass("block"), i) - ), - { - dontStyle: true - } - ); - return [radio, - radio.GetValue().map( + let filterPicker: InputElement<number> + + if (options.length <= 6) { + filterPicker = new RadioButton( + options.map( + (option, i) => + new FixedInputElement(option.question.Clone().SetClass("block"), i) + ), + { + dontStyle: true + } + ); + } else { + filterPicker = new DropDown("", options.map((option, i) => ({ + value: i, shown: option.question.Clone() + }))) + } + + return [filterPicker, + filterPicker.GetValue().map( i => values[i], [], selected => { const v = selected?.state - if(v === undefined || typeof v === "string"){ + if (v === undefined || typeof v === "string") { return undefined } return v } )] } + private static createFilter(filterConfig: FilterConfig): [BaseUIElement, UIEventSource<FilterState>] { if (filterConfig.options[0].fields.length > 0) { @@ -272,9 +290,11 @@ export default class FilterView extends VariableUiElement { if (filterConfig.options.length === 1) { - return FilterView.createCheckboxFilter(filterConfig) + return FilterView.createCheckboxFilter(filterConfig) } - return FilterView.createMultiFilter(filterConfig) + const filter = FilterView.createMultiFilter(filterConfig) + filter[0].SetClass("pl-2") + return filter } } diff --git a/UI/BigComponents/FullWelcomePaneWithTabs.ts b/UI/BigComponents/FullWelcomePaneWithTabs.ts index 957998b2e2..b9e149800f 100644 --- a/UI/BigComponents/FullWelcomePaneWithTabs.ts +++ b/UI/BigComponents/FullWelcomePaneWithTabs.ts @@ -56,10 +56,8 @@ export default class FullWelcomePaneWithTabs extends ScrollableFullScreen { isShown: UIEventSource<boolean>): { header: string | BaseUIElement; content: BaseUIElement }[] { - let welcome: BaseUIElement = new ThemeIntroductionPanel(isShown); - const tabs: { header: string | BaseUIElement, content: BaseUIElement }[] = [ - {header: `<img src='${state.layoutToUse.icon}'>`, content: welcome}, + {header: `<img src='${state.layoutToUse.icon}'>`, content: new ThemeIntroductionPanel(isShown)}, ] @@ -92,7 +90,7 @@ export default class FullWelcomePaneWithTabs extends ScrollableFullScreen { ) } tabs.push(copyright) - + const privacy = { header: Svg.eye_svg(), content: new PrivacyPolicy() diff --git a/UI/BigComponents/Histogram.ts b/UI/BigComponents/Histogram.ts index 015fdbe302..81daeef55d 100644 --- a/UI/BigComponents/Histogram.ts +++ b/UI/BigComponents/Histogram.ts @@ -22,9 +22,12 @@ export default class Histogram<T> extends VariableUiElement { constructor(values: UIEventSource<string[]>, title: string | BaseUIElement, countTitle: string | BaseUIElement, - assignColor?: (t0: string) => string + options?: { + assignColor?: (t0: string) => string, + sortMode?: "name" | "name-rev" | "count" | "count-rev" + } ) { - const sortMode = new UIEventSource<"name" | "name-rev" | "count" | "count-rev">("name") + const sortMode = new UIEventSource<"name" | "name-rev" | "count" | "count-rev">(options?.sortMode ?? "name") const sortName = new VariableUiElement(sortMode.map(m => { switch (m) { case "name": @@ -107,11 +110,11 @@ export default class Histogram<T> extends VariableUiElement { return Histogram.defaultPalette[index % Histogram.defaultPalette.length] }; let actualAssignColor = undefined; - if (assignColor === undefined) { + if (options?.assignColor === undefined) { actualAssignColor = fallbackColor; } else { actualAssignColor = (keyValue: string) => { - return assignColor(keyValue) ?? fallbackColor(keyValue) + return options.assignColor(keyValue) ?? fallbackColor(keyValue) } } @@ -127,7 +130,7 @@ export default class Histogram<T> extends VariableUiElement { ]), keys.map(_ => ["width: 20%"]) - ).SetClass("w-full"); + ).SetClass("w-full zebra-table"); }, [sortMode])); } } \ No newline at end of file diff --git a/UI/BigComponents/LeftControls.ts b/UI/BigComponents/LeftControls.ts index a996416f59..ea29a3e5a5 100644 --- a/UI/BigComponents/LeftControls.ts +++ b/UI/BigComponents/LeftControls.ts @@ -7,40 +7,16 @@ import Svg from "../../Svg"; import AllDownloads from "./AllDownloads"; import FilterView from "./FilterView"; import {UIEventSource} from "../../Logic/UIEventSource"; -import FeaturePipeline from "../../Logic/FeatureSource/FeaturePipeline"; -import Loc from "../../Models/Loc"; -import {BBox} from "../../Logic/BBox"; -import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"; -import FilteredLayer from "../../Models/FilteredLayer"; -import BaseLayer from "../../Models/BaseLayer"; -import {OsmConnection} from "../../Logic/Osm/OsmConnection"; import BackgroundMapSwitch from "./BackgroundMapSwitch"; -import {FeatureSourceForLayer} from "../../Logic/FeatureSource/FeatureSource"; import Lazy from "../Base/Lazy"; import {VariableUiElement} from "../Base/VariableUIElement"; import FeatureInfoBox from "../Popup/FeatureInfoBox"; -import {ElementStorage} from "../../Logic/ElementStorage"; -import FeatureSwitchState from "../../Logic/State/FeatureSwitchState"; import CopyrightPanel from "./CopyrightPanel"; +import FeaturePipelineState from "../../Logic/State/FeaturePipelineState"; export default class LeftControls extends Combine { - constructor(state: FeatureSwitchState & { - allElements: ElementStorage; - currentView: FeatureSourceForLayer; - featureSwitchBackgroundSelection: UIEventSource<boolean>; - layoutToUse: LayoutConfig, - featurePipeline: FeaturePipeline, - currentBounds: UIEventSource<BBox>, - locationControl: UIEventSource<Loc>, - overlayToggles: any, - featureSwitchEnableExport: UIEventSource<boolean>, - featureSwitchExportAsPdf: UIEventSource<boolean>, - filteredLayers: UIEventSource<FilteredLayer[]>, - featureSwitchFilter: UIEventSource<boolean>, - backgroundLayer: UIEventSource<BaseLayer>, - osmConnection: OsmConnection - }, + constructor(state: FeaturePipelineState, guiState: { currentViewControlIsOpened: UIEventSource<boolean>; downloadControlIsOpened: UIEventSource<boolean>, @@ -59,9 +35,7 @@ export default class LeftControls extends Combine { return defaultIcon; } const tags = {...feature.properties, button: "yes"} - const elem = currentViewFL.layerDef.mapRendering[0]?.GenerateLeafletStyle(new UIEventSource(tags), false, { - noSize: true - })?.html + const elem = currentViewFL.layerDef.mapRendering[0]?.GetSimpleIcon(new UIEventSource(tags)); if (elem === undefined) { return defaultIcon } @@ -74,10 +48,10 @@ export default class LeftControls extends Combine { } return new Lazy(() => { const tagsSource = state.allElements.getEventSourceById(feature.properties.id) - return new FeatureInfoBox(tagsSource, currentViewFL.layerDef, "currentview", guiState.currentViewControlIsOpened) + return new FeatureInfoBox(tagsSource, currentViewFL.layerDef, state, "currentview", guiState.currentViewControlIsOpened) .SetClass("md:floating-element-width") }) - })) + })).SetStyle("width: 40rem").SetClass("block") return new Toggle( @@ -97,7 +71,8 @@ export default class LeftControls extends Combine { const toggledDownload = new Toggle( new AllDownloads( - guiState.downloadControlIsOpened + guiState.downloadControlIsOpened, + state ).SetClass("block p-1 rounded-full md:floating-element-width"), new MapControlButton(Svg.download_svg()) .onClick(() => guiState.downloadControlIsOpened.setData(true)), diff --git a/UI/BigComponents/LicensePicker.ts b/UI/BigComponents/LicensePicker.ts index 7afe4d827f..19c608141a 100644 --- a/UI/BigComponents/LicensePicker.ts +++ b/UI/BigComponents/LicensePicker.ts @@ -10,26 +10,26 @@ export default class LicensePicker extends DropDown<string> { private static readonly ccbysa = "CC-BY-SA 4.0" private static readonly ccby = "CC-BY 4.0" - constructor(state: {osmConnection: OsmConnection}) { + constructor(state: { osmConnection: OsmConnection }) { super(Translations.t.image.willBePublished.Clone(), [ - {value:LicensePicker. cc0, shown: Translations.t.image.cco.Clone()}, - {value:LicensePicker. ccbysa, shown: Translations.t.image.ccbs.Clone()}, - {value: LicensePicker. ccby, shown: Translations.t.image.ccb.Clone()} + {value: LicensePicker.cc0, shown: Translations.t.image.cco.Clone()}, + {value: LicensePicker.ccbysa, shown: Translations.t.image.ccbs.Clone()}, + {value: LicensePicker.ccby, shown: Translations.t.image.ccb.Clone()} ], state?.osmConnection?.GetPreference("pictures-license") ?? new UIEventSource<string>("CC0") ) this.SetClass("flex flex-col sm:flex-row").SetStyle("float:left"); } - public static LicenseExplanations() : Map<string, Translation>{ + public static LicenseExplanations(): Map<string, Translation> { let dict = new Map<string, Translation>(); - - dict.set(LicensePicker. cc0, Translations.t.image.ccoExplanation) - dict.set(LicensePicker. ccby, Translations.t.image.ccbExplanation) - dict.set(LicensePicker. ccbysa, Translations.t.image.ccbsExplanation) + + dict.set(LicensePicker.cc0, Translations.t.image.ccoExplanation) + dict.set(LicensePicker.ccby, Translations.t.image.ccbExplanation) + dict.set(LicensePicker.ccbysa, Translations.t.image.ccbsExplanation) return dict } - + } \ No newline at end of file diff --git a/UI/BigComponents/MoreScreen.ts b/UI/BigComponents/MoreScreen.ts index 7118243009..1d3820cbe7 100644 --- a/UI/BigComponents/MoreScreen.ts +++ b/UI/BigComponents/MoreScreen.ts @@ -9,7 +9,7 @@ import BaseUIElement from "../BaseUIElement"; import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"; import {UIEventSource} from "../../Logic/UIEventSource"; import Loc from "../../Models/Loc"; -import {OsmConnection} from "../../Logic/Osm/OsmConnection"; +import UserDetails, {OsmConnection} from "../../Logic/Osm/OsmConnection"; import UserRelatedState from "../../Logic/State/UserRelatedState"; import Toggle from "../Input/Toggle"; import {Utils} from "../../Utils"; @@ -52,7 +52,8 @@ export default class MoreScreen extends Combine { id: string, icon: string, title: any, - shortDescription: any + shortDescription: any, + definition?: any }, isCustom: boolean = false ): BaseUIElement { @@ -87,6 +88,11 @@ export default class MoreScreen extends Combine { linkPrefix = `${path}/theme.html?userlayout=${layout.id}&` } + let hash = "" + if(layout.definition !== undefined){ + hash = "#"+btoa(JSON.stringify(layout.definition)) + } + const linkText = currentLocation?.map(currentLocation => { const params = [ ["z", currentLocation?.zoom], @@ -95,10 +101,11 @@ export default class MoreScreen extends Combine { ].filter(part => part[1] !== undefined) .map(part => part[0] + "=" + part[1]) .join("&") - return `${linkPrefix}${params}`; + return `${linkPrefix}${params}${hash}`; }) ?? new UIEventSource<string>(`${linkPrefix}`) + return new SubtleButton(layout.icon, new Combine([ `<dt class='text-lg leading-6 font-medium text-gray-900 group-hover:text-blue-800'>`, @@ -110,7 +117,7 @@ export default class MoreScreen extends Combine { ]), {url: linkText, newTab: false}); } - private static CreateProffessionalSerivesButton() { + public static CreateProffessionalSerivesButton() { const t = Translations.t.professional.indexPage; return new Combine([ new Title(t.hook, 4), @@ -119,17 +126,69 @@ export default class MoreScreen extends Combine { ]).SetClass("flex flex-col border border-gray-300 p-2 rounded-lg") } + private static createUnofficialButtonFor(state: UserRelatedState, id: string): BaseUIElement { + const allPreferences = state.osmConnection.preferencesHandler.preferences.data; + const length = Number(allPreferences[id + "-length"]) + let str = ""; + for (let i = 0; i < length; i++) { + str += allPreferences[id + "-" + i] + } + if(str === undefined || str === "undefined"){ + return undefined + } + try { + const value: { + id: string + icon: string, + title: any, + shortDescription: any, + definition?: any + } = JSON.parse(str) + + return MoreScreen.createLinkButton(state, value, true) + } catch (e) { + console.debug("Could not parse unofficial theme information for " + id, "The json is: ", str, e) + return undefined + } + } + private static createUnofficialThemeList(buttonClass: string, state: UserRelatedState, themeListClasses): BaseUIElement { - return new VariableUiElement(state.installedThemes.map(customThemes => { - if (customThemes.length <= 0) { - return undefined; - } - const customThemeButtons = customThemes.map(theme => MoreScreen.createLinkButton(state, theme, true)?.SetClass(buttonClass)) - return new Combine([ - Translations.t.general.customThemeIntro.Clone(), - new Combine(customThemeButtons).SetClass(themeListClasses) - ]); - })); + const prefix = "mapcomplete-unofficial-theme-"; + + var currentIds: UIEventSource<string[]> = state.osmConnection.preferencesHandler.preferences + .map(allPreferences => { + const ids: string[] = [] + + for (const key in allPreferences) { + if (key.startsWith(prefix) && key.endsWith("-combined-length")) { + const id = key.substring(0, key.length - "-length".length) + ids.push(id) + } + } + + return ids + }); + + var stableIds = UIEventSource.ListStabilized<string>(currentIds) + + return new VariableUiElement( + stableIds.map(ids => { + const allThemes: BaseUIElement[] = [] + for (const id of ids) { + const link = this.createUnofficialButtonFor(state, id) + if (link !== undefined) { + allThemes.push(link.SetClass(buttonClass)) + } + } + + if (allThemes.length <= 0) { + return undefined; + } + return new Combine([ + Translations.t.general.customThemeIntro.Clone(), + new Combine(allThemes).SetClass(themeListClasses) + ]); + })); } private static createPreviouslyVistedHiddenList(state: UserRelatedState, buttonClass: string, themeListStyle: string) { @@ -198,7 +257,7 @@ export default class MoreScreen extends Combine { } return button; }) - + const professional = MoreScreen.CreateProffessionalSerivesButton(); const customGeneratorLink = MoreScreen.createCustomGeneratorButton(state) buttons.splice(0, 0, customGeneratorLink, professional); diff --git a/UI/BigComponents/SimpleAddUI.ts b/UI/BigComponents/SimpleAddUI.ts index 56c7e9b6ea..cd86e1d52d 100644 --- a/UI/BigComponents/SimpleAddUI.ts +++ b/UI/BigComponents/SimpleAddUI.ts @@ -23,6 +23,7 @@ import FeaturePipeline from "../../Logic/FeatureSource/FeaturePipeline"; import {ElementStorage} from "../../Logic/ElementStorage"; import ConfirmLocationOfPoint from "../NewPoint/ConfirmLocationOfPoint"; import BaseLayer from "../../Models/BaseLayer"; +import Loading from "../Base/Loading"; /* * The SimpleAddUI is a single panel, which can have multiple states: @@ -35,14 +36,17 @@ import BaseLayer from "../../Models/BaseLayer"; export interface PresetInfo extends PresetConfig { name: string | BaseUIElement, icon: () => BaseUIElement, - layerToAddTo: FilteredLayer + layerToAddTo: FilteredLayer, + boundsFactor?: 0.25 | number } export default class SimpleAddUI extends Toggle { constructor(isShown: UIEventSource<boolean>, + resetScrollSignal: UIEventSource<void>, filterViewIsOpened: UIEventSource<boolean>, state: { + featureSwitchIsTesting: UIEventSource<boolean>, layoutToUse: LayoutConfig, osmConnection: OsmConnection, changes: Changes, @@ -65,6 +69,11 @@ export default class SimpleAddUI extends Toggle { const selectedPreset = new UIEventSource<PresetInfo>(undefined); + selectedPreset.addCallback(_ => { + resetScrollSignal.ping(); + }) + + isShown.addCallback(_ => selectedPreset.setData(undefined)) // Clear preset selection when the UI is closed/opened state.LastClickLocation.addCallback(_ => selectedPreset.setData(undefined)) @@ -91,7 +100,7 @@ export default class SimpleAddUI extends Toggle { return presetsOverview } - function confirm(tags:any[], location: {lat: number, lon:number}, snapOntoWayId?: string) { + function confirm(tags: any[], location: { lat: number, lon: number }, snapOntoWayId?: string) { if (snapOntoWayId === undefined) { createNewPoint(tags, location, undefined) } else { @@ -123,7 +132,7 @@ export default class SimpleAddUI extends Toggle { new Toggle( new Toggle( new Toggle( - Translations.t.general.add.stillLoading.Clone().SetClass("alert"), + new Loading(Translations.t.general.add.stillLoading).SetClass("alert"), addUi, state.featurePipeline.runningQuery ), @@ -155,6 +164,7 @@ export default class SimpleAddUI extends Toggle { private static CreateAllPresetsPanel(selectedPreset: UIEventSource<PresetInfo>, state: { + featureSwitchIsTesting: UIEventSource<boolean>; filteredLayers: UIEventSource<FilteredLayer[]>, featureSwitchFilter: UIEventSource<boolean>, osmConnection: OsmConnection @@ -162,26 +172,23 @@ export default class SimpleAddUI extends Toggle { const presetButtons = SimpleAddUI.CreatePresetButtons(state, selectedPreset) let intro: BaseUIElement = Translations.t.general.add.intro; - let testMode: BaseUIElement = undefined; - if (state.osmConnection?.userDetails?.data?.dryRun) { - testMode = Translations.t.general.testing.Clone().SetClass("alert") - } + let testMode: BaseUIElement = new Toggle(Translations.t.general.testing.SetClass("alert"), + undefined, + state.featureSwitchIsTesting); return new Combine([intro, testMode, presetButtons]).SetClass("flex flex-col") } - private static CreatePresetSelectButton(preset: PresetInfo, osmConnection: OsmConnection) { + private static CreatePresetSelectButton(preset: PresetInfo) { - const tagInfo = SimpleAddUI.CreateTagInfoFor(preset, osmConnection, false); return new SubtleButton( preset.icon(), new Combine([ Translations.t.general.add.addNew.Subs({ category: preset.name }).SetClass("font-bold"), - Translations.WT(preset.description)?.FirstSentence(), - tagInfo?.SetClass("subtle") + Translations.WT(preset.description)?.FirstSentence() ]).SetClass("flex flex-col") ) } @@ -215,16 +222,15 @@ export default class SimpleAddUI extends Toggle { let icon: () => BaseUIElement = () => layer.layerDef.mapRendering[0].GenerateLeafletStyle(new UIEventSource<any>(tags), false).html .SetClass("w-12 h-12 block relative"); const presetInfo: PresetInfo = { - tags: preset.tags, layerToAddTo: layer, name: preset.title, title: preset.title, - description: preset.description, icon: icon, - preciseInput: preset.preciseInput + preciseInput: preset.preciseInput, + ...preset } - const button = SimpleAddUI.CreatePresetSelectButton(presetInfo, state.osmConnection); + const button = SimpleAddUI.CreatePresetSelectButton(presetInfo); button.onClick(() => { selectedPreset.setData(presetInfo) }) diff --git a/UI/BigComponents/ThemeIntroductionPanel.ts b/UI/BigComponents/ThemeIntroductionPanel.ts index 1a5d24a45c..def06d7a91 100644 --- a/UI/BigComponents/ThemeIntroductionPanel.ts +++ b/UI/BigComponents/ThemeIntroductionPanel.ts @@ -26,7 +26,7 @@ export default class ThemeIntroductionPanel extends Combine { const loginStatus = new Toggle( new LoginToggle( - t.welcomeBack, + undefined, new Combine([Translations.t.general.loginWithOpenStreetMap.SetClass("text-xl font-bold"), Translations.t.general.loginOnlyNeededToEdit.Clone().SetClass("font-bold")] ).SetClass("flex flex-col"), diff --git a/UI/BigComponents/UserBadge.ts b/UI/BigComponents/UserBadge.ts index 19a1e86c5e..82adbe12ea 100644 --- a/UI/BigComponents/UserBadge.ts +++ b/UI/BigComponents/UserBadge.ts @@ -8,20 +8,12 @@ import Link from "../Base/Link"; import Toggle from "../Input/Toggle"; import Img from "../Base/Img"; import MapState from "../../Logic/State/MapState"; +import {LoginToggle} from "../Popup/LoginButton"; -export default class UserBadge extends Toggle { +export default class UserBadge extends LoginToggle { constructor(state: MapState) { - - const userDetails = state.osmConnection.userDetails; - - const loginButton = Translations.t.general.loginWithOpenStreetMap - .Clone() - .SetClass("userbadge-login inline-flex justify-center items-center w-full h-full text-lg font-bold min-w-[20em]") - .onClick(() => state.osmConnection.AttemptLogin()); - - const logout = Svg.logout_svg() .onClick(() => { @@ -34,7 +26,7 @@ export default class UserBadge extends Toggle { const homeButton = new VariableUiElement( userDetails.map((userinfo) => { if (userinfo.home) { - return Svg.home_ui(); + return Svg.home_svg(); } return " "; }) @@ -73,10 +65,11 @@ export default class UserBadge extends Toggle { ).SetClass("alert") } - let dryrun = new FixedUiElement(""); - if (user.dryRun) { - dryrun = new FixedUiElement("TESTING").SetClass("alert font-xs p-0 max-h-4"); - } + let dryrun = new Toggle( + new FixedUiElement("TESTING").SetClass("alert font-xs p-0 max-h-4"), + undefined, + state.featureSwitchIsTesting + ) const settings = new Link(Svg.gear, @@ -125,16 +118,14 @@ export default class UserBadge extends Toggle { } })); - userBadge.SetClass("inline-block m-0 w-full").SetStyle("pointer-events: all") + super( - userBadge, - loginButton, - state.osmConnection.isLoggedIn + new Combine([userBadge.SetClass("inline-block m-0 w-full").SetStyle("pointer-events: all")]) + .SetClass("shadow rounded-full h-min overflow-hidden block w-full md:w-max"), + Translations.t.general.loginWithOpenStreetMap, + state ) - - this.SetClass("shadow rounded-full h-min overflow-hidden block w-full md:w-max") - } diff --git a/UI/CenterMessageBox.ts b/UI/CenterMessageBox.ts index 500fc4609d..a05b091a5e 100644 --- a/UI/CenterMessageBox.ts +++ b/UI/CenterMessageBox.ts @@ -1,6 +1,7 @@ import Translations from "./i18n/Translations"; import {VariableUiElement} from "./Base/VariableUIElement"; import FeaturePipelineState from "../Logic/State/FeaturePipelineState"; +import Loading from "./Base/Loading"; export default class CenterMessageBox extends VariableUiElement { @@ -10,7 +11,7 @@ export default class CenterMessageBox extends VariableUiElement { const message = updater.runningQuery.map( isRunning => { if (isRunning) { - return {el: t.loadingData}; + return {el: new Loading(t.loadingData)}; } if (!updater.sufficientlyZoomed.data) { return {el: t.zoomIn} @@ -26,8 +27,8 @@ export default class CenterMessageBox extends VariableUiElement { super(message.map(toShow => toShow.el)) - this.SetClass("block " + - "rounded-3xl bg-white text-xl font-bold text-center pointer-events-none p-4") + this.SetClass("flex justify-center " + + "rounded-3xl bg-white text-xl font-bold pointer-events-none p-4") this.SetStyle("transition: opacity 750ms linear") message.addCallbackAndRun(toShow => { diff --git a/UI/DefaultGUI.ts b/UI/DefaultGUI.ts index d31c701613..7a9786787c 100644 --- a/UI/DefaultGUI.ts +++ b/UI/DefaultGUI.ts @@ -8,9 +8,7 @@ import Svg from "../Svg"; import Toggle from "./Input/Toggle"; import UserBadge from "./BigComponents/UserBadge"; import SearchAndGo from "./BigComponents/SearchAndGo"; -import Link from "./Base/Link"; import BaseUIElement from "./BaseUIElement"; -import {VariableUiElement} from "./Base/VariableUIElement"; import LeftControls from "./BigComponents/LeftControls"; import RightControls from "./BigComponents/RightControls"; import CenterMessageBox from "./CenterMessageBox"; @@ -19,7 +17,6 @@ import ScrollableFullScreen from "./Base/ScrollableFullScreen"; import Translations from "./i18n/Translations"; import SimpleAddUI from "./BigComponents/SimpleAddUI"; import StrayClickHandler from "../Logic/Actors/StrayClickHandler"; -import Lazy from "./Base/Lazy"; import {DefaultGuiState} from "./DefaultGuiState"; import LayerConfig from "../Models/ThemeConfig/LayerConfig"; import * as home_location_json from "../assets/layers/home_location/home_location.json"; @@ -27,6 +24,7 @@ import NewNoteUi from "./Popup/NewNoteUi"; import Combine from "./Base/Combine"; import AddNewMarker from "./BigComponents/AddNewMarker"; import FilteredLayer from "../Models/FilteredLayer"; +import ExtraLinkButton from "./BigComponents/ExtraLinkButton"; /** @@ -61,7 +59,6 @@ export default class DefaultGUI { const hasPresets = state.layoutToUse.layers.some(layer => layer.presets.length > 0); const noteLayer: FilteredLayer = state.filteredLayers.data.filter(l => l.layerDef.id === "note")[0] let addNewNoteDialog: (isShown: UIEventSource<boolean>) => BaseUIElement = undefined; - const t = Translations.t.notes if (noteLayer !== undefined) { addNewNoteDialog = (isShown) => new NewNoteUi(noteLayer, isShown, state) } @@ -73,10 +70,10 @@ export default class DefaultGUI { const newPointDialogIsShown = new UIEventSource<boolean>(false); const addNewPoint = new ScrollableFullScreen( () => hasPresets ? Translations.t.general.add.title : Translations.t.notes.createNoteTitle, - () => { + ({resetScrollSignal}) => { let addNew = undefined; if (hasPresets) { - addNew = new SimpleAddUI(newPointDialogIsShown, filterViewIsOpened, state); + addNew = new SimpleAddUI(newPointDialogIsShown, resetScrollSignal, filterViewIsOpened, state); } let addNote = undefined; if (noteLayer !== undefined) { @@ -94,11 +91,11 @@ export default class DefaultGUI { state.LastClickLocation.setData(undefined); } }); - + let noteMarker = undefined; - if(!hasPresets && addNewNoteDialog !== undefined){ + if (!hasPresets && addNewNoteDialog !== undefined) { noteMarker = new Combine( - [Svg.note_svg().SetClass("absolute bottom-0").SetStyle("height: 40px"), + [Svg.note_svg().SetClass("absolute bottom-0").SetStyle("height: 40px"), Svg.addSmall_svg().SetClass("absolute w-6 animate-pulse") .SetStyle("right: 10px; bottom: -8px;") ]) @@ -144,7 +141,8 @@ export default class DefaultGUI { leafletMap: state.leafletMap, layerToShow: new LayerConfig(home_location_json, "all_known_layers", true), features: state.homeLocation, - enablePopups: false, + popup: undefined, + state }) state.leafletMap.addCallbackAndRunD(_ => { @@ -161,31 +159,26 @@ export default class DefaultGUI { const guiState = this._guiState; const self = this - Toggle.If(state.featureSwitchUserbadge, - () => new UserBadge(state) - ).AttachTo("userbadge") + new Combine([ + Toggle.If(state.featureSwitchUserbadge, + () => new UserBadge(state) + ), + Toggle.If(state.featureSwitchExtraLinkEnabled, + () => new ExtraLinkButton(state, state.layoutToUse.extraLink) + ) + ]).SetClass("flex flex-col") + .AttachTo("userbadge") Toggle.If(state.featureSwitchSearch, () => new SearchAndGo(state)) .AttachTo("searchbox"); - let iframePopout: () => BaseUIElement = undefined; - - if (window !== window.top) { - // MapComplete is running in an iframe - iframePopout = () => new VariableUiElement(state.locationControl.map(loc => { - const url = `${window.location.origin}${window.location.pathname}?z=${loc.zoom ?? 0}&lat=${loc.lat ?? 0}&lon=${loc.lon ?? 0}`; - const link = new Link(Svg.pop_out_img, url, true).SetClass("block w-full h-full p-1.5") - return new MapControlButton(link) - })) - - } - - new Toggle(new Lazy(() => self.InitWelcomeMessage()), - Toggle.If(state.featureSwitchIframePopoutEnabled, iframePopout), - state.featureSwitchWelcomeMessage - ).AttachTo("messagesbox"); + Toggle.If( + state.featureSwitchWelcomeMessage, + () => self.InitWelcomeMessage() + ) + .AttachTo("messagesbox"); new LeftControls(state, guiState).AttachTo("bottom-left"); diff --git a/UI/DefaultGuiState.ts b/UI/DefaultGuiState.ts index 34b8cc6685..b67723c108 100644 --- a/UI/DefaultGuiState.ts +++ b/UI/DefaultGuiState.ts @@ -22,27 +22,27 @@ export class DefaultGuiState { )); this.welcomeMessageIsOpened = QueryParameters.GetBooleanQueryParameter( "welcome-control-toggle", - "false", + false, "Whether or not the welcome panel is shown" ) this.downloadControlIsOpened = QueryParameters.GetBooleanQueryParameter( "download-control-toggle", - "false", + false, "Whether or not the download panel is shown" ) this.filterViewIsOpened = QueryParameters.GetBooleanQueryParameter( "filter-toggle", - "false", + false, "Whether or not the filter view is shown" ) this.copyrightViewIsOpened = QueryParameters.GetBooleanQueryParameter( "copyright-toggle", - "false", + false, "Whether or not the copyright view is shown" ) this.currentViewControlIsOpened = QueryParameters.GetBooleanQueryParameter( "currentview-toggle", - "false", + false, "Whether or not the current view box is shown" ) const states = { @@ -56,7 +56,7 @@ export class DefaultGuiState { hash = hash.toLowerCase() states[hash]?.setData(true) }) - + if (Hash.hash.data === "" || Hash.hash.data === undefined) { this.welcomeMessageIsOpened.setData(true) } diff --git a/UI/ExportPDF.ts b/UI/ExportPDF.ts index 6f27794f85..c4b9f6b4bc 100644 --- a/UI/ExportPDF.ts +++ b/UI/ExportPDF.ts @@ -86,13 +86,18 @@ export default class ExportPDF { if (tile.layer.layerDef.minzoom > l.zoom) { return } + if(tile.layer.layerDef.id.startsWith("note_import")){ + // Don't export notes to import + return; + } new ShowDataLayer( { features: tile, leafletMap: minimap.leafletMap, layerToShow: tile.layer.layerDef, - enablePopups: false, - doShowLayer: tile.layer.isDisplayed + popup: undefined, + doShowLayer: tile.layer.isDisplayed, + state: undefined } ) }) diff --git a/UI/Image/DeleteImage.ts b/UI/Image/DeleteImage.ts index 23178dcc3b..03f8d7d9ba 100644 --- a/UI/Image/DeleteImage.ts +++ b/UI/Image/DeleteImage.ts @@ -11,7 +11,7 @@ import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"; export default class DeleteImage extends Toggle { - constructor(key: string, tags: UIEventSource<any>, state: {layoutToUse: LayoutConfig, changes?: Changes, osmConnection?: OsmConnection}) { + constructor(key: string, tags: UIEventSource<any>, state: { layoutToUse: LayoutConfig, changes?: Changes, osmConnection?: OsmConnection }) { const oldValue = tags.data[key] const isDeletedBadge = Translations.t.image.isDeleted.Clone() .SetClass("rounded-full p-1") @@ -30,7 +30,7 @@ export default class DeleteImage extends Toggle { await state?.changes?.applyAction( new ChangeTagAction(tags.data.id, new Tag(key, ""), tags.data, { changeType: "answer", - theme: "test" + theme: state.layoutToUse.id }) ) }); diff --git a/UI/Image/ImageCarousel.ts b/UI/Image/ImageCarousel.ts index ffa880bf07..92a7136fb8 100644 --- a/UI/Image/ImageCarousel.ts +++ b/UI/Image/ImageCarousel.ts @@ -12,9 +12,9 @@ import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"; export class ImageCarousel extends Toggle { - constructor(images: UIEventSource<{ key: string, url: string, provider: ImageProvider}[]>, + constructor(images: UIEventSource<{ key: string, url: string, provider: ImageProvider }[]>, tags: UIEventSource<any>, - state: {osmConnection?: OsmConnection, changes?: Changes, layoutToUse: LayoutConfig }) { + state: { osmConnection?: OsmConnection, changes?: Changes, layoutToUse: LayoutConfig }) { const uiElements = images.map((imageURLS: { key: string, url: string, provider: ImageProvider }[]) => { const uiElements: BaseUIElement[] = []; for (const url of imageURLS) { diff --git a/UI/Image/ImageUploadFlow.ts b/UI/Image/ImageUploadFlow.ts index 25bfe9c7a2..743b1b2c28 100644 --- a/UI/Image/ImageUploadFlow.ts +++ b/UI/Image/ImageUploadFlow.ts @@ -21,7 +21,7 @@ export class ImageUploadFlow extends Toggle { private static readonly uploadCountsPerId = new Map<string, UIEventSource<number>>() - constructor(tagsSource: UIEventSource<any>, + constructor(tagsSource: UIEventSource<any>, state: { osmConnection: OsmConnection; layoutToUse: LayoutConfig; @@ -75,7 +75,7 @@ export class ImageUploadFlow extends Toggle { const label = new Combine([ Svg.camera_plus_ui().SetClass("block w-12 h-12 p-1 text-4xl "), labelContent - ]).SetClass("p-2 border-4 border-black rounded-full font-bold h-full align-middle w-full flex justify-center") + ]).SetClass("p-2 border-4 border-detail rounded-full font-bold h-full align-middle w-full flex justify-center") const fileSelector = new FileSelectorButton(label) fileSelector.GetValue().addCallback(filelist => { diff --git a/UI/ImportFlow/AskMetadata.ts b/UI/ImportFlow/AskMetadata.ts new file mode 100644 index 0000000000..46562be4c2 --- /dev/null +++ b/UI/ImportFlow/AskMetadata.ts @@ -0,0 +1,100 @@ +import Combine from "../Base/Combine"; +import {FlowStep} from "./FlowStep"; +import {UIEventSource} from "../../Logic/UIEventSource"; +import ValidatedTextField from "../Input/ValidatedTextField"; +import {LocalStorageSource} from "../../Logic/Web/LocalStorageSource"; +import Title from "../Base/Title"; +import {AllKnownLayouts} from "../../Customizations/AllKnownLayouts"; +import {DropDown} from "../Input/DropDown"; +import LayerConfig from "../../Models/ThemeConfig/LayerConfig"; +import BaseUIElement from "../BaseUIElement"; +import {FixedUiElement} from "../Base/FixedUiElement"; + +export class AskMetadata extends Combine implements FlowStep<{ + features: any[], + wikilink: string, + intro: string, + source: string, + theme: string +}> { + + public readonly Value: UIEventSource<{ + features: any[], + wikilink: string, + intro: string, + source: string, + theme: string + }>; + public readonly IsValid: UIEventSource<boolean>; + + constructor(params: ({ features: any[], layer: LayerConfig })) { + + const introduction = ValidatedTextField.ForType("text").ConstructInputElement({ + value: LocalStorageSource.Get("import-helper-introduction-text"), + inputStyle: "width: 100%" + }) + + const wikilink = ValidatedTextField.ForType("string").ConstructInputElement({ + value: LocalStorageSource.Get("import-helper-wikilink-text"), + inputStyle: "width: 100%" + }) + + const source = ValidatedTextField.ForType("string").ConstructInputElement({ + value: LocalStorageSource.Get("import-helper-source-text"), + inputStyle: "width: 100%" + }) + + let options: { value: string, shown: BaseUIElement }[] = AllKnownLayouts.layoutsList + .filter(th => th.layers.some(l => l.id === params.layer.id)) + .filter(th => th.id !== "personal") + .map(th => ({ + value: th.id, + shown: th.title + })) + + options.splice(0, 0, { + shown: new FixedUiElement("Select a theme"), + value: undefined + }) + + const theme = new DropDown("Which theme should be linked in the note?", options) + + ValidatedTextField.ForType("string").ConstructInputElement({ + value: LocalStorageSource.Get("import-helper-theme-text"), + inputStyle: "width: 100%" + }) + + super([ + new Title("Set metadata"), + "Before adding " + params.features.length + " notes, please provide some extra information.", + "Please, write an introduction for someone who sees the note", + introduction.SetClass("w-full border border-black"), + "What is the source of this data? If 'source' is set in the feature, this value will be ignored", + source.SetClass("w-full border border-black"), + "On what wikipage can one find more information about this import?", + wikilink.SetClass("w-full border border-black"), + theme + ]); + this.SetClass("flex flex-col") + + this.Value = introduction.GetValue().map(intro => { + return { + features: params.features, + wikilink: wikilink.GetValue().data, + intro, + source: source.GetValue().data, + theme: theme.GetValue().data + + } + }, [wikilink.GetValue(), source.GetValue(), theme.GetValue()]) + + this.IsValid = this.Value.map(obj => { + if (obj === undefined) { + return false; + } + return obj.theme !== undefined && obj.features !== undefined && obj.wikilink !== undefined && obj.intro !== undefined && obj.source !== undefined; + }) + } + + +} \ No newline at end of file diff --git a/UI/ImportFlow/CompareToAlreadyExistingNotes.ts b/UI/ImportFlow/CompareToAlreadyExistingNotes.ts new file mode 100644 index 0000000000..6054e34349 --- /dev/null +++ b/UI/ImportFlow/CompareToAlreadyExistingNotes.ts @@ -0,0 +1,150 @@ +import Combine from "../Base/Combine"; +import {FlowStep} from "./FlowStep"; +import {BBox} from "../../Logic/BBox"; +import LayerConfig from "../../Models/ThemeConfig/LayerConfig"; +import {UIEventSource} from "../../Logic/UIEventSource"; +import {DesugaringContext} from "../../Models/ThemeConfig/Conversion/Conversion"; +import CreateNoteImportLayer from "../../Models/ThemeConfig/Conversion/CreateNoteImportLayer"; +import FilteredLayer, {FilterState} from "../../Models/FilteredLayer"; +import GeoJsonSource from "../../Logic/FeatureSource/Sources/GeoJsonSource"; +import MetaTagging from "../../Logic/MetaTagging"; +import RelationsTracker from "../../Logic/Osm/RelationsTracker"; +import FilteringFeatureSource from "../../Logic/FeatureSource/Sources/FilteringFeatureSource"; +import Minimap from "../Base/Minimap"; +import ShowDataLayer from "../ShowDataLayer/ShowDataLayer"; +import FeatureInfoBox from "../Popup/FeatureInfoBox"; +import {ImportUtils} from "./ImportUtils"; +import * as import_candidate from "../../assets/layers/import_candidate/import_candidate.json"; +import StaticFeatureSource from "../../Logic/FeatureSource/Sources/StaticFeatureSource"; +import Title from "../Base/Title"; +import Toggle from "../Input/Toggle"; +import Loading from "../Base/Loading"; +import {FixedUiElement} from "../Base/FixedUiElement"; +import {VariableUiElement} from "../Base/VariableUIElement"; +import * as known_layers from "../../assets/generated/known_layers.json" +import {LayerConfigJson} from "../../Models/ThemeConfig/Json/LayerConfigJson"; + +/** + * Filters out points for which the import-note already exists, to prevent duplicates + */ +export class CompareToAlreadyExistingNotes extends Combine implements FlowStep<{ bbox: BBox, layer: LayerConfig, geojson: any }> { + + public IsValid: UIEventSource<boolean> + public Value: UIEventSource<{ bbox: BBox, layer: LayerConfig, geojson: any }> + + + constructor(state, params: { bbox: BBox, layer: LayerConfig, geojson: { features: any[] } }) { + + const layerConfig = known_layers.layers.filter(l => l.id === params.layer.id)[0] + if (layerConfig === undefined) { + console.error("WEIRD: layer not found in the builtin layer overview") + } + const importLayerJson = new CreateNoteImportLayer(365).convertStrict(<LayerConfigJson>layerConfig, "CompareToAlreadyExistingNotes") + const importLayer = new LayerConfig(importLayerJson, "import-layer-dynamic") + const flayer: FilteredLayer = { + appliedFilters: new UIEventSource<Map<string, FilterState>>(new Map<string, FilterState>()), + isDisplayed: new UIEventSource<boolean>(true), + layerDef: importLayer + } + const allNotesWithinBbox = new GeoJsonSource(flayer, params.bbox.padAbsolute(0.0001)) + allNotesWithinBbox.features.map(f => MetaTagging.addMetatags( + f, + { + memberships: new RelationsTracker(), + getFeaturesWithin: (layerId, bbox: BBox) => [], + getFeatureById: (id: string) => undefined + }, + importLayer, + state, + { + includeDates: true, + // We assume that the non-dated metatags are already set by the cache generator + includeNonDates: true + } + ) + ) + const alreadyOpenImportNotes = new FilteringFeatureSource(state, undefined, allNotesWithinBbox) + alreadyOpenImportNotes.features.addCallbackD(features => console.log("Loaded and filtered features are", features)) + const map = Minimap.createMiniMap() + map.SetClass("w-full").SetStyle("height: 500px") + + const comparisonMap = Minimap.createMiniMap({ + location: map.location, + + }) + comparisonMap.SetClass("w-full").SetStyle("height: 500px") + + new ShowDataLayer({ + layerToShow: importLayer, + state, + zoomToFeatures: true, + leafletMap: map.leafletMap, + features: alreadyOpenImportNotes, + popup: (tags, layer) => new FeatureInfoBox(tags, layer, state) + }) + + + const maxDistance = new UIEventSource<number>(5) + + const partitionedImportPoints = ImportUtils.partitionFeaturesIfNearby(params.geojson, alreadyOpenImportNotes.features + .map(ff => ({features: ff.map(ff => ff.feature)})), maxDistance) + + + new ShowDataLayer({ + layerToShow: new LayerConfig(import_candidate), + state, + zoomToFeatures: true, + leafletMap: comparisonMap.leafletMap, + features: new StaticFeatureSource(partitionedImportPoints.map(p => p.hasNearby), false), + popup: (tags, layer) => new FeatureInfoBox(tags, layer, state) + }) + + super([ + new Title("Compare with already existing 'to-import'-notes"), + new VariableUiElement( + alreadyOpenImportNotes.features.map(notesWithImport => { + if (allNotesWithinBbox.features.data === undefined || allNotesWithinBbox.features.data.length === 0) { + return new Loading("Fetching notes from OSM") + } + if (notesWithImport.length === 0) { + return new FixedUiElement("No previous note to import found").SetClass("thanks") + } + return new Combine([ + map, + "The following (red) elements are elements to import which are nearby a matching element that is already up for import. These won't be imported", + + new Toggle( + new FixedUiElement("All of the proposed points have (or had) an import note already").SetClass("alert w-full block").SetStyle("padding: 0.5rem"), + new VariableUiElement(partitionedImportPoints.map(({noNearby}) => noNearby.length + " elements can be imported")).SetClass("thanks p-8"), + partitionedImportPoints.map(({noNearby}) => noNearby.length === 0) + ).SetClass("w-full"), + comparisonMap, + ]).SetClass("flex flex-col") + + }, [allNotesWithinBbox.features]) + ), + + + ]); + this.SetClass("flex flex-col") + this.Value = partitionedImportPoints.map(({noNearby}) => ({ + geojson: {features: noNearby, type: "FeatureCollection"}, + bbox: params.bbox, + layer: params.layer + })) + + this.IsValid = alreadyOpenImportNotes.features.map(ff => { + if (allNotesWithinBbox.features.data.length === 0) { + // Not yet loaded + return false + } + if (ff.length == 0) { + // No import notes at all + return true; + } + + return partitionedImportPoints.data.noNearby.length > 0; // at least _something_ can be imported + }, [partitionedImportPoints, allNotesWithinBbox.features]) + } + +} \ No newline at end of file diff --git a/UI/ImportFlow/ConfirmProcess.ts b/UI/ImportFlow/ConfirmProcess.ts new file mode 100644 index 0000000000..d541b94803 --- /dev/null +++ b/UI/ImportFlow/ConfirmProcess.ts @@ -0,0 +1,32 @@ +import Combine from "../Base/Combine"; +import {FlowStep} from "./FlowStep"; +import {UIEventSource} from "../../Logic/UIEventSource"; +import Link from "../Base/Link"; +import {FixedUiElement} from "../Base/FixedUiElement"; +import CheckBoxes from "../Input/Checkboxes"; +import Title from "../Base/Title"; + +export class ConfirmProcess<T> extends Combine implements FlowStep<T> { + + public IsValid: UIEventSource<boolean> + public Value: UIEventSource<T> + + constructor(v: T) { + + const toConfirm = [ + new Combine(["I have read the ", new Link("import guidelines on the OSM wiki", "https://wiki.openstreetmap.org/wiki/Import_guidelines", true)]), + new FixedUiElement("I did contact the (local) community about this import"), + new FixedUiElement("The license of the data to import allows it to be imported into OSM. They are allowed to be redistributed commercially, with only minimal attribution"), + new FixedUiElement("The process is documented on the OSM-wiki (you'll need this link later)") + ]; + + const licenseClear = new CheckBoxes(toConfirm) + super([ + new Title("Did you go through the import process?"), + licenseClear + ]); + this.SetClass("link-underline") + this.IsValid = licenseClear.GetValue().map(selected => toConfirm.length == selected.length) + this.Value = new UIEventSource<T>(v) + } +} \ No newline at end of file diff --git a/UI/ImportFlow/ConflationChecker.ts b/UI/ImportFlow/ConflationChecker.ts new file mode 100644 index 0000000000..b197d42684 --- /dev/null +++ b/UI/ImportFlow/ConflationChecker.ts @@ -0,0 +1,253 @@ +import {BBox} from "../../Logic/BBox"; +import LayerConfig from "../../Models/ThemeConfig/LayerConfig"; +import Combine from "../Base/Combine"; +import Title from "../Base/Title"; +import {Overpass} from "../../Logic/Osm/Overpass"; +import {UIEventSource} from "../../Logic/UIEventSource"; +import Constants from "../../Models/Constants"; +import RelationsTracker from "../../Logic/Osm/RelationsTracker"; +import {VariableUiElement} from "../Base/VariableUIElement"; +import {FixedUiElement} from "../Base/FixedUiElement"; +import {FlowStep} from "./FlowStep"; +import Loading from "../Base/Loading"; +import {SubtleButton} from "../Base/SubtleButton"; +import Svg from "../../Svg"; +import {Utils} from "../../Utils"; +import {IdbLocalStorage} from "../../Logic/Web/IdbLocalStorage"; +import Minimap from "../Base/Minimap"; +import BaseLayer from "../../Models/BaseLayer"; +import AvailableBaseLayers from "../../Logic/Actors/AvailableBaseLayers"; +import Loc from "../../Models/Loc"; +import Attribution from "../BigComponents/Attribution"; +import ShowDataLayer from "../ShowDataLayer/ShowDataLayer"; +import StaticFeatureSource from "../../Logic/FeatureSource/Sources/StaticFeatureSource"; +import ValidatedTextField from "../Input/ValidatedTextField"; +import {LocalStorageSource} from "../../Logic/Web/LocalStorageSource"; +import * as currentview from "../../assets/layers/current_view/current_view.json" +import * as import_candidate from "../../assets/layers/import_candidate/import_candidate.json" +import {GeoOperations} from "../../Logic/GeoOperations"; +import FeatureInfoBox from "../Popup/FeatureInfoBox"; +import {ImportUtils} from "./ImportUtils"; + +/** + * Given the data to import, the bbox and the layer, will query overpass for similar items + */ +export default class ConflationChecker extends Combine implements FlowStep<{ features: any[], layer: LayerConfig }> { + + public readonly IsValid + public readonly Value + + constructor( + state, + params: { bbox: BBox, layer: LayerConfig, geojson: any }) { + + + const bbox = params.bbox.padAbsolute(0.0001) + const layer = params.layer; + const toImport = params.geojson; + let overpassStatus = new UIEventSource<{ error: string } | "running" | "success" | "idle" | "cached">("idle") + const cacheAge = new UIEventSource<number>(undefined); + const fromLocalStorage = IdbLocalStorage.Get<[any, Date]>("importer-overpass-cache-" + layer.id, { + whenLoaded: (v) => { + if (v !== undefined) { + console.log("Loaded from local storage:", v) + const [geojson, date] = v; + const timeDiff = (new Date().getTime() - date.getTime()) / 1000; + console.log("Loaded ", geojson.features.length, " features; cache is ", timeDiff, "seconds old") + cacheAge.setData(timeDiff) + if (timeDiff < 24 * 60 * 60) { + // Recently cached! + overpassStatus.setData("cached") + return; + } + cacheAge.setData(-1) + } + // Load the data! + const url = Constants.defaultOverpassUrls[1] + const relationTracker = new RelationsTracker() + const overpass = new Overpass(params.layer.source.osmTags, [], url, new UIEventSource<number>(180), relationTracker, true) + console.log("Loading from overpass!") + overpassStatus.setData("running") + overpass.queryGeoJson(bbox).then( + ([data, date]) => { + console.log("Received overpass-data: ", data.features.length, "features are loaded at ", date); + overpassStatus.setData("success") + fromLocalStorage.setData([data, date]) + }, + (error) => { + overpassStatus.setData({error}) + }) + + } + }); + + + const geojson: UIEventSource<any> = fromLocalStorage.map(d => { + if (d === undefined) { + return undefined + } + return d[0] + }) + + const background = new UIEventSource<BaseLayer>(AvailableBaseLayers.osmCarto) + const location = new UIEventSource<Loc>({lat: 0, lon: 0, zoom: 1}) + const currentBounds = new UIEventSource<BBox>(undefined) + const zoomLevel = ValidatedTextField.ForType("pnat").ConstructInputElement() + zoomLevel.SetClass("ml-1 border border-black") + zoomLevel.GetValue().syncWith(LocalStorageSource.Get("importer-zoom-level", "14"), true) + const osmLiveData = Minimap.createMiniMap({ + allowMoving: true, + location, + background, + bounds: currentBounds, + attribution: new Attribution(location, state.osmConnection.userDetails, undefined, currentBounds) + }) + osmLiveData.SetClass("w-full").SetStyle("height: 500px") + const preview = new StaticFeatureSource(geojson.map(geojson => { + if (geojson?.features === undefined) { + return [] + } + const zoomedEnough: boolean = osmLiveData.location.data.zoom >= Number(zoomLevel.GetValue().data) + if (!zoomedEnough) { + return [] + } + const bounds = osmLiveData.bounds.data + return geojson.features.filter(f => BBox.get(f).overlapsWith(bounds)) + }, [osmLiveData.bounds, zoomLevel.GetValue()]), false); + + + new ShowDataLayer({ + layerToShow: new LayerConfig(currentview), + state, + leafletMap: osmLiveData.leafletMap, + popup: undefined, + zoomToFeatures: true, + features: new StaticFeatureSource([ + bbox.asGeoJson({}) + ], false) + }) + + + new ShowDataLayer({ + layerToShow: layer, + state, + leafletMap: osmLiveData.leafletMap, + popup: (tags, layer) => new FeatureInfoBox(tags, layer, state), + zoomToFeatures: false, + features: preview + }) + + new ShowDataLayer({ + layerToShow: new LayerConfig(import_candidate), + state, + leafletMap: osmLiveData.leafletMap, + popup: (tags, layer) => new FeatureInfoBox(tags, layer, state), + zoomToFeatures: false, + features: new StaticFeatureSource(toImport.features, false) + }) + + const nearbyCutoff = ValidatedTextField.ForType("pnat").ConstructInputElement() + nearbyCutoff.SetClass("ml-1 border border-black") + nearbyCutoff.GetValue().syncWith(LocalStorageSource.Get("importer-cutoff", "25"), true) + + const matchedFeaturesMap = Minimap.createMiniMap({ + allowMoving: true, + background + }) + matchedFeaturesMap.SetClass("w-full").SetStyle("height: 500px") + + // Featuresource showing OSM-features which are nearby a toImport-feature + const nearbyFeatures = new StaticFeatureSource(geojson.map(osmData => { + if (osmData?.features === undefined) { + return [] + } + const maxDist = Number(nearbyCutoff.GetValue().data) + return osmData.features.filter(f => + toImport.features.some(imp => + maxDist >= GeoOperations.distanceBetween(imp.geometry.coordinates, GeoOperations.centerpointCoordinates(f)))) + }, [nearbyCutoff.GetValue()]), false); + const paritionedImport = ImportUtils.partitionFeaturesIfNearby(toImport, geojson, nearbyCutoff.GetValue().map(Number)); + + // Featuresource showing OSM-features which are nearby a toImport-feature + const toImportWithNearby = new StaticFeatureSource(paritionedImport.map(els => els?.hasNearby ?? []), false); + + new ShowDataLayer({ + layerToShow: layer, + state, + leafletMap: matchedFeaturesMap.leafletMap, + popup: (tags, layer) => new FeatureInfoBox(tags, layer, state), + zoomToFeatures: true, + features: nearbyFeatures + }) + + new ShowDataLayer({ + layerToShow: new LayerConfig(import_candidate), + state, + leafletMap: matchedFeaturesMap.leafletMap, + popup: (tags, layer) => new FeatureInfoBox(tags, layer, state), + zoomToFeatures: false, + features: toImportWithNearby + }) + + + const conflationMaps = new Combine([ + new VariableUiElement( + geojson.map(geojson => { + if (geojson === undefined) { + return undefined; + } + return new SubtleButton(Svg.download_svg(), "Download the loaded geojson from overpass").onClick(() => { + Utils.offerContentsAsDownloadableFile(JSON.stringify(geojson, null, " "), "mapcomplete-" + layer.id + ".geojson", { + mimetype: "application/json+geo" + }) + }); + })), + new VariableUiElement(cacheAge.map(age => { + if (age === undefined) { + return undefined; + } + if (age < 0) { + return new FixedUiElement("Cache was expired") + } + return new FixedUiElement("Loaded data is from the cache and is " + Utils.toHumanTime(age) + " old") + })), + + new Title("Live data on OSM"), + osmLiveData, + new Combine(["The live data is shown if the zoomlevel is at least ", zoomLevel, ". The current zoom level is ", new VariableUiElement(osmLiveData.location.map(l => "" + l.zoom))]).SetClass("flex"), + + new Title("Nearby features"), + new Combine(["The following map shows features to import which have an OSM-feature within ", nearbyCutoff, "meter"]).SetClass("flex"), + new FixedUiElement("The red elements on the following map will <b>not</b> be imported!").SetClass("alert"), + "Set the range to 0 or 1 if you want to import them all", + matchedFeaturesMap]).SetClass("flex flex-col") + + super([ + new Title("Comparison with existing data"), + new VariableUiElement(overpassStatus.map(d => { + if (d === "idle") { + return new Loading("Checking local storage...") + } + if (d["error"] !== undefined) { + return new FixedUiElement("Could not load latest data from overpass: " + d["error"]).SetClass("alert") + } + if (d === "running") { + return new Loading("Querying overpass...") + } + if (d === "cached") { + return conflationMaps + } + if (d === "success") { + return conflationMaps + } + return new FixedUiElement("Unexpected state " + d).SetClass("alert") + })) + + ]) + + this.Value = paritionedImport.map(feats => ({features: feats?.noNearby, layer: params.layer})) + this.Value.addCallbackAndRun(v => console.log("ConflationChecker-step value is ", v)) + this.IsValid = this.Value.map(v => v?.features !== undefined && v.features.length > 0) + } + +} \ No newline at end of file diff --git a/UI/ImportFlow/CreateNotes.ts b/UI/ImportFlow/CreateNotes.ts new file mode 100644 index 0000000000..f364196f0f --- /dev/null +++ b/UI/ImportFlow/CreateNotes.ts @@ -0,0 +1,89 @@ +import Combine from "../Base/Combine"; +import {OsmConnection} from "../../Logic/Osm/OsmConnection"; +import {UIEventSource} from "../../Logic/UIEventSource"; +import Title from "../Base/Title"; +import Toggle from "../Input/Toggle"; +import Loading from "../Base/Loading"; +import {VariableUiElement} from "../Base/VariableUIElement"; +import {FixedUiElement} from "../Base/FixedUiElement"; +import {SubtleButton} from "../Base/SubtleButton"; +import Svg from "../../Svg"; + +export class CreateNotes extends Combine { + + constructor(state: { osmConnection: OsmConnection }, v: { features: any[]; wikilink: string; intro: string; source: string, theme: string }) { + + const createdNotes: UIEventSource<number[]> = new UIEventSource<number[]>([]) + const failed = new UIEventSource<string[]>([]) + const currentNote = createdNotes.map(n => n.length) + + for (const f of v.features) { + + const src = f.properties["source"] ?? f.properties["src"] ?? v.source + delete f.properties["source"] + delete f.properties["src"] + let extraNote = "" + if (f.properties["note"]) { + extraNote = f.properties["note"] + "\n" + delete f.properties["note"] + } + + const tags: string [] = [] + for (const key in f.properties) { + if (f.properties[key] === "") { + continue + } + tags.push(key + "=" + f.properties[key].replace(/=/, "\\=").replace(/;/g, "\\;").replace(/\n/g, "\\n")) + } + const lat = f.geometry.coordinates[1] + const lon = f.geometry.coordinates[0] + const text = [v.intro, + extraNote, + "Source: " + src, + 'More information at ' + v.wikilink, + '', + 'Import this point easily with', + `https://mapcomplete.osm.be/${v.theme}.html?z=18&lat=${lat}&lon=${lon}#import`, + ...tags].join("\n") + + state.osmConnection.openNote( + lat, lon, text) + .then(({id}) => { + createdNotes.data.push(id) + createdNotes.ping() + }, err => { + failed.data.push(err) + failed.ping() + }) + } + + super([ + new Title("Creating notes"), + "Hang on while we are importing...", + new Toggle( + new Loading(new VariableUiElement(currentNote.map(count => new FixedUiElement("Imported <b>" + count + "</b> out of " + v.features.length + " notes")))), + new Combine([ + new FixedUiElement("All done!").SetClass("thanks"), + new SubtleButton(Svg.note_svg(), "Inspect the progress of your notes in the 'import_viewer'", { + url: "import_viewer.html" + }) + ] + ), + currentNote.map(count => count < v.features.length) + ), + new VariableUiElement(failed.map(failed => { + + if (failed.length === 0) { + return undefined + } + return new Combine([ + new FixedUiElement("Some entries failed").SetClass("alert"), + ...failed + ]).SetClass("flex flex-col") + + })) + ]) + this.SetClass("flex flex-col"); + } + +} \ No newline at end of file diff --git a/UI/ImportFlow/FlowStep.ts b/UI/ImportFlow/FlowStep.ts new file mode 100644 index 0000000000..e0fde7b604 --- /dev/null +++ b/UI/ImportFlow/FlowStep.ts @@ -0,0 +1,146 @@ +import {UIEventSource} from "../../Logic/UIEventSource"; +import Combine from "../Base/Combine"; +import BaseUIElement from "../BaseUIElement"; +import {SubtleButton} from "../Base/SubtleButton"; +import Svg from "../../Svg"; +import Translations from "../i18n/Translations"; +import {VariableUiElement} from "../Base/VariableUIElement"; +import Toggle from "../Input/Toggle"; +import {UIElement} from "../UIElement"; +import {FixedUiElement} from "../Base/FixedUiElement"; + +export interface FlowStep<T> extends BaseUIElement { + readonly IsValid: UIEventSource<boolean> + readonly Value: UIEventSource<T> +} + +export class FlowPanelFactory<T> { + private _initial: FlowStep<any>; + private _steps: ((x: any) => FlowStep<any>)[]; + private _stepNames: (string | BaseUIElement)[]; + + private constructor(initial: FlowStep<any>, steps: ((x: any) => FlowStep<any>)[], stepNames: (string | BaseUIElement)[]) { + this._initial = initial; + this._steps = steps; + this._stepNames = stepNames; + } + + public static start<TOut>(name: string | BaseUIElement, step: FlowStep<TOut>): FlowPanelFactory<TOut> { + return new FlowPanelFactory(step, [], [name]) + } + + public then<TOut>(name: string | BaseUIElement, construct: ((t: T) => FlowStep<TOut>)): FlowPanelFactory<TOut> { + return new FlowPanelFactory<TOut>( + this._initial, + this._steps.concat([construct]), + this._stepNames.concat([name]) + ) + } + + public finish(name: string | BaseUIElement, construct: ((t: T, backButton?: BaseUIElement) => BaseUIElement)): { + flow: BaseUIElement, + furthestStep: UIEventSource<number>, + titles: (string | BaseUIElement)[] + } { + const furthestStep = new UIEventSource(0) + // Construct all the flowpanels step by step (in reverse order) + const nextConstr: ((t: any, back?: UIElement) => BaseUIElement)[] = this._steps.map(_ => undefined) + nextConstr.push(construct) + for (let i = this._steps.length - 1; i >= 0; i--) { + const createFlowStep: (value) => FlowStep<any> = this._steps[i]; + const isConfirm = i == this._steps.length - 1; + nextConstr[i] = (value, backButton) => { + const flowStep = createFlowStep(value) + furthestStep.setData(i + 1); + const panel = new FlowPanel(flowStep, nextConstr[i + 1], backButton, isConfirm); + panel.isActive.addCallbackAndRun(active => { + if (active) { + furthestStep.setData(i + 1); + } + }) + return panel + } + } + + const flow = new FlowPanel(this._initial, nextConstr[0]) + flow.isActive.addCallbackAndRun(active => { + if (active) { + furthestStep.setData(0); + } + }) + return { + flow, + furthestStep, + titles: this._stepNames + } + } + +} + +export class FlowPanel<T> extends Toggle { + public isActive: UIEventSource<boolean> + + constructor( + initial: (FlowStep<T>), + constructNextstep: ((input: T, backButton: BaseUIElement) => BaseUIElement), + backbutton?: BaseUIElement, + isConfirm = false + ) { + const t = Translations.t.general; + + const currentStepActive = new UIEventSource(true); + + let nextStep: UIEventSource<BaseUIElement> = new UIEventSource<BaseUIElement>(undefined) + const backButtonForNextStep = new SubtleButton(Svg.back_svg(), t.back).onClick(() => { + currentStepActive.setData(true) + }) + + let elements: (BaseUIElement | string)[] = [] + const isError = new UIEventSource(false) + if (initial !== undefined) { + // Startup the flow + elements = [ + initial, + + new Combine([ + backbutton, + new Toggle( + new SubtleButton( + isConfirm ? Svg.checkmark_svg() : + Svg.back_svg().SetStyle("transform: rotate(180deg);"), + isConfirm ? t.confirm : t.next + ).onClick(() => { + try { + + const v = initial.Value.data; + nextStep.setData(constructNextstep(v, backButtonForNextStep)) + currentStepActive.setData(false) + } catch (e) { + console.error(e) + isError.setData(true) + } + }), + "Select a valid value to continue", + initial.IsValid + ), + new Toggle( + new FixedUiElement("Something went wrong...").SetClass("alert"), + undefined, + isError), + ]).SetClass("flex w-full justify-end space-x-2"), + + + ] + } + + + super( + new Combine(elements).SetClass("h-full flex flex-col justify-between"), + new VariableUiElement(nextStep), + currentStepActive + ); + this.isActive = currentStepActive + } + + +} \ No newline at end of file diff --git a/UI/ImportFlow/ImportHelperGui.ts b/UI/ImportFlow/ImportHelperGui.ts new file mode 100644 index 0000000000..294a28049f --- /dev/null +++ b/UI/ImportFlow/ImportHelperGui.ts @@ -0,0 +1,77 @@ +import Combine from "../Base/Combine"; +import Toggle from "../Input/Toggle"; +import LanguagePicker from "../LanguagePicker"; +import UserRelatedState from "../../Logic/State/UserRelatedState"; +import BaseUIElement from "../BaseUIElement"; +import MinimapImplementation from "../Base/MinimapImplementation"; +import Translations from "../i18n/Translations"; +import {FlowPanelFactory} from "./FlowStep"; +import {RequestFile} from "./RequestFile"; +import {PreviewPanel} from "./PreviewPanel"; +import ConflationChecker from "./ConflationChecker"; +import {AskMetadata} from "./AskMetadata"; +import LayerConfig from "../../Models/ThemeConfig/LayerConfig"; +import {ConfirmProcess} from "./ConfirmProcess"; +import {CreateNotes} from "./CreateNotes"; +import {FixedUiElement} from "../Base/FixedUiElement"; +import {VariableUiElement} from "../Base/VariableUIElement"; +import List from "../Base/List"; +import {CompareToAlreadyExistingNotes} from "./CompareToAlreadyExistingNotes"; +import Introdution from "./Introdution"; +import LoginToImport from "./LoginToImport"; +import {MapPreview} from "./MapPreview"; +import LeftIndex from "../Base/LeftIndex"; +import {SubtleButton} from "../Base/SubtleButton"; + +export default class ImportHelperGui extends LeftIndex { + constructor() { + const state = new UserRelatedState(undefined) + + const {flow, furthestStep, titles} = + FlowPanelFactory + .start("Introduction", new Introdution()) + .then("Login", _ => new LoginToImport(state)) + .then("Select file", _ => new RequestFile()) + .then("Inspect attributes", geojson => new PreviewPanel(state, geojson)) + .then("Inspect data", geojson => new MapPreview(state, geojson)) + .then("Compare with open notes", v => new CompareToAlreadyExistingNotes(state, v)) + .then("Compare with existing data", v => new ConflationChecker(state, v)) + .then("License and community check", v => new ConfirmProcess(v)) + .then("Metadata", (v: { features: any[], layer: LayerConfig }) => new AskMetadata(v)) + .finish("Note creation", v => new CreateNotes(state, v)); + + const toc = new List( + titles.map((title, i) => new VariableUiElement(furthestStep.map(currentStep => { + if (i > currentStep) { + return new Combine([title]).SetClass("subtle"); + } + if (i == currentStep) { + return new Combine([title]).SetClass("font-bold"); + } + if (i < currentStep) { + return title + } + + + }))) + , true) + + const leftContents: BaseUIElement[] = [ + new SubtleButton(undefined, "Inspect your preview imports", { + url: "import_viewer.html" + }), + toc, + new Toggle(new FixedUiElement("Testmode - won't actually import notes").SetClass("alert"), undefined, state.featureSwitchIsTesting), + LanguagePicker.CreateLanguagePicker(Translations.t.importHelper.title.SupportedLanguages())?.SetClass("mt-4 self-end flex-col"), + ].map(el => el?.SetClass("pl-4")) + + super( + leftContents, + flow) + + } + +} + +MinimapImplementation.initialize() +new ImportHelperGui().AttachTo("main") \ No newline at end of file diff --git a/UI/ImportFlow/ImportUtils.ts b/UI/ImportFlow/ImportUtils.ts new file mode 100644 index 0000000000..db881a7097 --- /dev/null +++ b/UI/ImportFlow/ImportUtils.ts @@ -0,0 +1,30 @@ +import {UIEventSource} from "../../Logic/UIEventSource"; +import {GeoOperations} from "../../Logic/GeoOperations"; + +export class ImportUtils { + public static partitionFeaturesIfNearby(toPartitionFeatureCollection: ({ features: any[] }), compareWith: UIEventSource<{ features: any[] }>, cutoffDistanceInMeters: UIEventSource<number>): UIEventSource<{ hasNearby: any[], noNearby: any[] }> { + return compareWith.map(osmData => { + if (osmData?.features === undefined) { + return undefined + } + if (osmData.features.length === 0) { + return {noNearby: toPartitionFeatureCollection.features, hasNearby: []} + } + const maxDist = cutoffDistanceInMeters.data + + const hasNearby = [] + const noNearby = [] + for (const toImportElement of toPartitionFeatureCollection.features) { + const hasNearbyFeature = osmData.features.some(f => + maxDist >= GeoOperations.distanceBetween(toImportElement.geometry.coordinates, GeoOperations.centerpointCoordinates(f))) + if (hasNearbyFeature) { + hasNearby.push(toImportElement) + } else { + noNearby.push(toImportElement) + } + } + + return {hasNearby, noNearby} + }, [cutoffDistanceInMeters]); + } +} \ No newline at end of file diff --git a/UI/ImportFlow/ImportViewerGui.ts b/UI/ImportFlow/ImportViewerGui.ts new file mode 100644 index 0000000000..f0af1f059d --- /dev/null +++ b/UI/ImportFlow/ImportViewerGui.ts @@ -0,0 +1,325 @@ +import Combine from "../Base/Combine"; +import UserRelatedState from "../../Logic/State/UserRelatedState"; +import {VariableUiElement} from "../Base/VariableUIElement"; +import {Utils} from "../../Utils"; +import {UIEventSource} from "../../Logic/UIEventSource"; +import Title from "../Base/Title"; +import Translations from "../i18n/Translations"; +import Loading from "../Base/Loading"; +import {FixedUiElement} from "../Base/FixedUiElement"; +import Link from "../Base/Link"; +import {DropDown} from "../Input/DropDown"; +import BaseUIElement from "../BaseUIElement"; +import ValidatedTextField from "../Input/ValidatedTextField"; +import {SubtleButton} from "../Base/SubtleButton"; +import Svg from "../../Svg"; +import Toggle from "../Input/Toggle"; +import Table from "../Base/Table"; +import LeftIndex from "../Base/LeftIndex"; +import Toggleable, {Accordeon} from "../Base/Toggleable"; +import TableOfContents from "../Base/TableOfContents"; +import {LoginToggle} from "../Popup/LoginButton"; +import {QueryParameters} from "../../Logic/Web/QueryParameters"; + +interface NoteProperties { + "id": number, + "url": string, + "date_created": string, + closed_at?: string, + "status": "open" | "closed", + "comments": { + date: string, + uid: number, + user: string, + text: string, + html: string + }[] +} + +interface NoteState { + props: NoteProperties, + theme: string, + intro: string, + dateStr: string, + status: "imported" | "already_mapped" | "invalid" | "closed" | "not_found" | "open" | "has_comments" +} + +class MassAction extends Combine { + constructor(state: UserRelatedState, props: NoteProperties[]) { + const textField = ValidatedTextField.ForType("text").ConstructInputElement() + + const actions = new DropDown<{ + predicate: (p: NoteProperties) => boolean, + action: (p: NoteProperties) => Promise<void> + }>("On which notes should an action be performed?", [ + { + value: undefined, + shown: <string | BaseUIElement>"Pick an option..." + }, + { + value: { + predicate: p => p.status === "open", + action: async p => { + const txt = textField.GetValue().data + state.osmConnection.closeNote(p.id, txt) + } + }, + shown: "Add comment to every open note and close all notes" + }, + { + value: { + predicate: p => p.status === "open", + action: async p => { + const txt = textField.GetValue().data + state.osmConnection.addCommentToNode(p.id, txt) + } + }, + shown: "Add comment to every open note" + }, + /* + { + // This was a one-off for one of the first imports + value:{ + predicate: p => p.status === "open" && p.comments[0].text.split("\n").find(l => l.startsWith("note=")) !== undefined, + action: async p => { + const note = p.comments[0].text.split("\n").find(l => l.startsWith("note=")).substr("note=".length) + state.osmConnection.addCommentToNode(p.id, note) + } + }, + shown:"On every open note, read the 'note='-tag and and this note as comment. (This action ignores the textfield)" + },//*/ + + ]) + + const handledNotesCounter = new UIEventSource<number>(undefined) + const apply = new SubtleButton(Svg.checkmark_svg(), "Apply action") + .onClick(async () => { + const {predicate, action} = actions.GetValue().data + for (let i = 0; i < props.length; i++) { + handledNotesCounter.setData(i) + const prop = props[i] + if (!predicate(prop)) { + continue + } + await action(prop) + } + handledNotesCounter.setData(props.length) + }) + super([ + + actions, + textField.SetClass("w-full border border-black"), + new Toggle( + new Toggle( + apply, + + new Toggle( + new Loading(new VariableUiElement(handledNotesCounter.map(state => { + if (state === props.length) { + return "All done!" + } + return "Handling note " + (state + 1) + " out of " + props.length; + }))), + new Combine([Svg.checkmark_svg().SetClass("h-8"), "All done!"]).SetClass("thanks flex p-4"), + handledNotesCounter.map(s => s < props.length) + ), + handledNotesCounter.map(s => s === undefined) + ) + + , new VariableUiElement(textField.GetValue().map(txt => "Type a text of at least 15 characters to apply the action. Currently, there are " + (txt?.length ?? 0) + " characters")).SetClass("alert"), + actions.GetValue().map(v => v !== undefined && textField.GetValue()?.data?.length > 15, [textField.GetValue()]) + ), + new Toggle( + new FixedUiElement("Testmode enable").SetClass("alert"), undefined, + state.featureSwitchIsTesting + ) + ]); + } + +} + + +class BatchView extends Toggleable { + + private static icons = { + open: Svg.compass_svg, + has_comments: Svg.speech_bubble_svg, + imported: Svg.addSmall_svg, + already_mapped: Svg.checkmark_svg, + invalid: Svg.invalid_svg, + closed: Svg.close_svg, + not_found: Svg.not_found_svg, + } + + constructor(noteStates: NoteState[], state?: UserRelatedState) { + + noteStates.sort((a, b) => a.props.id - b.props.id) + + const {theme, intro, dateStr} = noteStates[0] + + const statusHist = new Map<string, number>() + for (const noteState of noteStates) { + const st = noteState.status + const c = statusHist.get(st) ?? 0 + statusHist.set(st, c + 1) + } + + const badges: (BaseUIElement)[] = [new FixedUiElement(dateStr).SetClass("literal-code rounded-full")] + statusHist.forEach((count, status) => { + const icon = BatchView.icons[status]().SetClass("h-6 m-1") + badges.push(new Combine([icon, count + " " + status]) + .SetClass("flex ml-1 mb-1 pl-1 pr-3 items-center rounded-full border border-black")) + }) + + const typicalComment = noteStates[0].props.comments[0].html + + + super( + new Combine([ + new Title(theme + ": " + intro, 2), + new Combine(badges).SetClass("flex flex-wrap"), + ]), + new Combine([ + new Title("Example note", 4), + new FixedUiElement(typicalComment).SetClass("literal-code link-underline"), + new Title("Mass apply an action"), + state !== undefined ? new MassAction(state, noteStates.map(ns => ns.props)).SetClass("block") : undefined, + new Table( + ["id", "status", "last comment"], + noteStates.map(ns => { + const link = new Link( + "" + ns.props.id, + "https://openstreetmap.org/note/" + ns.props.id, true + ) + let last_comment = ""; + if (ns.props.comments.length > 1) { + last_comment = ns.props.comments[ns.props.comments.length - 1].text + } + const statusIcon = BatchView.icons[ns.status]().SetClass("h-4 w-4 shrink-0") + return [link, new Combine([statusIcon, ns.status]).SetClass("flex"), last_comment] + }) + ).SetClass("zebra-table link-underline") + ]).SetClass("flex flex-col"), + { + closeOnClick: false + }) + + } +} + +class ImportInspector extends VariableUiElement { + + constructor(userDetails: { uid: number } | { display_name: string, search?: string }, state: UserRelatedState) { + let url; + + if (userDetails["uid"] !== undefined) { + url = "https://api.openstreetmap.org/api/0.6/notes/search.json?user=" + userDetails["uid"] + "&closed=730&limit=10000&sort=created_at&q=%23import" + } else { + url = "https://api.openstreetmap.org/api/0.6/notes/search.json?display_name=" + + encodeURIComponent(userDetails["display_name"]) + "&limit=10000&closed=730&sort=created_at&q=" + encodeURIComponent(userDetails["search"] ?? "#import") + } + + + const notes: UIEventSource<{ error: string } | { success: { features: { properties: NoteProperties }[] } }> = UIEventSource.FromPromiseWithErr(Utils.downloadJson(url)) + super(notes.map(notes => { + + if (notes === undefined) { + return new Loading("Loading notes which mention '#import'") + } + if (notes["error"] !== undefined) { + return new FixedUiElement("Something went wrong: " + notes["error"]).SetClass("alert") + } + // We only care about the properties here + const props: NoteProperties[] = notes["success"].features.map(f => f.properties) + const perBatch: NoteState[][] = Array.from(ImportInspector.SplitNotesIntoBatches(props).values()); + const els: Toggleable[] = perBatch.map(noteStates => new BatchView(noteStates, state)) + + const accordeon = new Accordeon(els) + let contents = []; + if (state?.osmConnection?.isLoggedIn?.data) { + contents = + [ + new Title(Translations.t.importInspector.title, 1), + new SubtleButton(undefined, "Create a new batch of imports", {url: 'import_helper.html'})] + } + contents.push(accordeon) + const content = new Combine(contents) + return new LeftIndex( + [new TableOfContents(content, {noTopLevel: true, maxDepth: 1}).SetClass("subtle")], + content + ) + + })); + } + + /** + * Creates distinct batches of note, where 'date', 'intro' and 'theme' are identical + */ + private static SplitNotesIntoBatches(props: NoteProperties[]): Map<string, NoteState[]> { + const perBatch = new Map<string, NoteState[]>() + const prefix = "https://mapcomplete.osm.be/" + for (const prop of props) { + const lines = prop.comments[0].text.split("\n") + const trigger = lines.findIndex(l => l.startsWith(prefix) && l.endsWith("#import")) + if (trigger < 0) { + continue + } + let theme = lines[trigger].substr(prefix.length) + theme = theme.substr(0, theme.indexOf(".")) + const date = Utils.ParseDate(prop.date_created) + const dateStr = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + const key = theme + lines[0] + dateStr + if (!perBatch.has(key)) { + perBatch.set(key, []) + } + let status: "open" | "closed" | "imported" | "invalid" | "already_mapped" | "not_found" | "has_comments" = "open" + if (prop.closed_at !== undefined) { + const lastComment = prop.comments[prop.comments.length - 1].text.toLowerCase() + if (lastComment.indexOf("does not exist") >= 0) { + status = "not_found" + } else if (lastComment.indexOf("already mapped") >= 0) { + status = "already_mapped" + } else if (lastComment.indexOf("invalid") >= 0 || lastComment.indexOf("incorrecto") >= 0) { + status = "invalid" + } else if (lastComment.indexOf("imported") >= 0) { + status = "imported" + } else { + status = "closed" + } + } else if (prop.comments.length > 1) { + status = "has_comments" + } + + perBatch.get(key).push({ + props: prop, + intro: lines[0], + theme, + dateStr, + status + }) + } + return perBatch; + } +} + +class ImportViewerGui extends LoginToggle { + + constructor() { + const state = new UserRelatedState(undefined) + const displayNameParam = QueryParameters.GetQueryParameter("user", "", "The username of the person whom you want to see the notes for"); + const searchParam = QueryParameters.GetQueryParameter("search", "", "A text that should be included in the first comment of the note to be shown") + super( + new VariableUiElement(state.osmConnection.userDetails.map(ud => { + const display_name = displayNameParam.data; + const search = searchParam.data; + if (display_name !== "" && search !== "") { + return new ImportInspector({display_name, search}, undefined); + } + return new ImportInspector(ud, state); + }, [displayNameParam, searchParam])), + "Login to inspect your import flows", state + ) + } +} + +new ImportViewerGui().AttachTo("main") \ No newline at end of file diff --git a/UI/ImportFlow/Introdution.ts b/UI/ImportFlow/Introdution.ts new file mode 100644 index 0000000000..859fd8e4b7 --- /dev/null +++ b/UI/ImportFlow/Introdution.ts @@ -0,0 +1,20 @@ +import Combine from "../Base/Combine"; +import {FlowStep} from "./FlowStep"; +import {UIEventSource} from "../../Logic/UIEventSource"; +import Translations from "../i18n/Translations"; +import Title from "../Base/Title"; + +export default class Introdution extends Combine implements FlowStep<void> { + readonly IsValid: UIEventSource<boolean> = new UIEventSource<boolean>(true); + readonly Value: UIEventSource<void> = new UIEventSource<void>(undefined); + + constructor() { + super([ + new Title(Translations.t.importHelper.title), + Translations.t.importHelper.description, + Translations.t.importHelper.importFormat, + ]); + this.SetClass("flex flex-col") + } + +} \ No newline at end of file diff --git a/UI/ImportFlow/LoginToImport.ts b/UI/ImportFlow/LoginToImport.ts new file mode 100644 index 0000000000..68991e53bf --- /dev/null +++ b/UI/ImportFlow/LoginToImport.ts @@ -0,0 +1,51 @@ +import Combine from "../Base/Combine"; +import {FlowStep} from "./FlowStep"; +import UserRelatedState from "../../Logic/State/UserRelatedState"; +import {UIEventSource} from "../../Logic/UIEventSource"; +import Translations from "../i18n/Translations"; +import Title from "../Base/Title"; +import {VariableUiElement} from "../Base/VariableUIElement"; +import {LoginToggle} from "../Popup/LoginButton"; +import Img from "../Base/Img"; +import Constants from "../../Models/Constants"; +import Toggle from "../Input/Toggle"; +import {SubtleButton} from "../Base/SubtleButton"; +import Svg from "../../Svg"; +import MoreScreen from "../BigComponents/MoreScreen"; + +export default class LoginToImport extends Combine implements FlowStep<UserRelatedState> { + readonly IsValid: UIEventSource<boolean>; + readonly Value: UIEventSource<UserRelatedState>; + + private static readonly whitelist = [15015689]; + + constructor(state: UserRelatedState) { + const t = Translations.t.importHelper + const isValid = state.osmConnection.userDetails.map(ud => LoginToImport.whitelist.indexOf(ud.uid) >= 0 || ud.csCount >= Constants.userJourney.importHelperUnlock) + super([ + new Title(t.userAccountTitle), + new LoginToggle( + new VariableUiElement(state.osmConnection.userDetails.map(ud => { + if (ud === undefined) { + return undefined + } + return new Combine([ + new Img(ud.img ?? "./assets/svgs/help.svg").SetClass("w-16 h-16 rounded-full"), + t.loggedInWith.Subs(ud), + new SubtleButton(Svg.logout_svg().SetClass("h-8"), Translations.t.general.logout) + .onClick(() => state.osmConnection.LogOut()) + ]); + })), + t.loginRequired, + state + ), + new Toggle(undefined, + new Combine( + [t.lockNotice.Subs(Constants.userJourney).SetClass("alert"), + MoreScreen.CreateProffessionalSerivesButton()]) + , isValid) + ]) + this.Value = new UIEventSource<UserRelatedState>(state) + this.IsValid = isValid; + } +} \ No newline at end of file diff --git a/UI/ImportFlow/MapPreview.ts b/UI/ImportFlow/MapPreview.ts new file mode 100644 index 0000000000..1929cd09aa --- /dev/null +++ b/UI/ImportFlow/MapPreview.ts @@ -0,0 +1,172 @@ +import Combine from "../Base/Combine"; +import {UIEventSource} from "../../Logic/UIEventSource"; +import {BBox} from "../../Logic/BBox"; +import UserRelatedState from "../../Logic/State/UserRelatedState"; +import Translations from "../i18n/Translations"; +import {AllKnownLayouts} from "../../Customizations/AllKnownLayouts"; +import Constants from "../../Models/Constants"; +import {DropDown} from "../Input/DropDown"; +import {Utils} from "../../Utils"; +import LayerConfig from "../../Models/ThemeConfig/LayerConfig"; +import BaseLayer from "../../Models/BaseLayer"; +import AvailableBaseLayers from "../../Logic/Actors/AvailableBaseLayers"; +import Loc from "../../Models/Loc"; +import Minimap from "../Base/Minimap"; +import Attribution from "../BigComponents/Attribution"; +import ShowDataMultiLayer from "../ShowDataLayer/ShowDataMultiLayer"; +import FilteredLayer, {FilterState} from "../../Models/FilteredLayer"; +import StaticFeatureSource from "../../Logic/FeatureSource/Sources/StaticFeatureSource"; +import Toggle from "../Input/Toggle"; +import {VariableUiElement} from "../Base/VariableUIElement"; +import {FixedUiElement} from "../Base/FixedUiElement"; +import {FlowStep} from "./FlowStep"; +import ScrollableFullScreen from "../Base/ScrollableFullScreen"; +import {AllTagsPanel} from "../SpecialVisualizations"; +import Title from "../Base/Title"; +import CheckBoxes from "../Input/Checkboxes"; + +class PreviewPanel extends ScrollableFullScreen { + + constructor(tags, layer) { + super( + _ => new FixedUiElement("Element to import"), + _ => new Combine(["The tags are:", + new AllTagsPanel(tags) + ]).SetClass("flex flex-col"), + "element" + ); + } + +} + +/** + * Shows the data to import on a map, asks for the correct layer to be selected + */ +export class MapPreview extends Combine implements FlowStep<{ bbox: BBox, layer: LayerConfig, geojson: any }> { + public readonly IsValid: UIEventSource<boolean>; + public readonly Value: UIEventSource<{ bbox: BBox, layer: LayerConfig, geojson: any }> + + constructor( + state: UserRelatedState, + geojson: { features: { properties: any, geometry: { coordinates: [number, number] } }[] }) { + const t = Translations.t.importHelper.mapPreview; + + const propertyKeys = new Set<string>() + for (const f of geojson.features) { + Object.keys(f.properties).forEach(key => propertyKeys.add(key)) + } + + + const availableLayers = AllKnownLayouts.AllPublicLayers().filter(l => l.name !== undefined && Constants.priviliged_layers.indexOf(l.id) < 0) + const layerPicker = new DropDown(t.selectLayer, + [{shown: t.selectLayer, value: undefined}].concat(availableLayers.map(l => ({ + shown: l.name, + value: l + }))) + ) + + let autodetected = new UIEventSource(false) + for (const layer of availableLayers) { + const mismatched = geojson.features.some(f => + !layer.source.osmTags.matchesProperties(f.properties) + ) + if (!mismatched) { + console.log("Autodected layer", layer.id) + layerPicker.GetValue().setData(layer); + layerPicker.GetValue().addCallback(_ => autodetected.setData(false)) + autodetected.setData(true) + break; + } + } + + const withId = geojson.features.map((f, i) => { + const copy = Utils.Clone(f) + copy.properties.id = "to-import/" + i + return copy + }) + + const matching: UIEventSource<{ properties: any, geometry: { coordinates: [number, number] } }[]> = layerPicker.GetValue().map((layer: LayerConfig) => { + if (layer === undefined) { + return []; + } + const matching: { properties: any, geometry: { coordinates: [number, number] } }[] = [] + + for (const feature of withId) { + if (layer.source.osmTags.matchesProperties(feature.properties)) { + matching.push(feature) + } + } + + return matching + }) + const background = new UIEventSource<BaseLayer>(AvailableBaseLayers.osmCarto) + const location = new UIEventSource<Loc>({lat: 0, lon: 0, zoom: 1}) + const currentBounds = new UIEventSource<BBox>(undefined) + const map = Minimap.createMiniMap({ + allowMoving: true, + location, + background, + bounds: currentBounds, + attribution: new Attribution(location, state.osmConnection.userDetails, undefined, currentBounds) + }) + map.SetClass("w-full").SetStyle("height: 500px") + + new ShowDataMultiLayer({ + layers: new UIEventSource<FilteredLayer[]>(AllKnownLayouts.AllPublicLayers() + .filter(l => l.source.geojsonSource === undefined) + .map(l => ({ + layerDef: l, + isDisplayed: new UIEventSource<boolean>(true), + appliedFilters: new UIEventSource<Map<string, FilterState>>(undefined) + }))), + zoomToFeatures: true, + features: new StaticFeatureSource(matching, false), + leafletMap: map.leafletMap, + popup: (tag, layer) => new PreviewPanel(tag, layer).SetClass("font-lg") + }) + var bbox = matching.map(feats => BBox.bboxAroundAll(feats.map(f => new BBox([f.geometry.coordinates])))) + + + const mismatchIndicator = new VariableUiElement(matching.map(matching => { + if (matching === undefined) { + return undefined + } + const diff = geojson.features.length - matching.length; + if (diff === 0) { + return undefined + } + const obligatory = layerPicker.GetValue().data?.source?.osmTags?.asHumanString(false, false, {}); + return t.mismatch.Subs({count: diff, tags: obligatory}).SetClass("alert") + })) + + const confirm = new CheckBoxes([t.confirm]); + super([ + new Title(t.title, 1), + layerPicker, + new Toggle(t.autodetected.SetClass("thank"), undefined, autodetected), + + mismatchIndicator, + map, + confirm + ]); + + this.Value = bbox.map(bbox => + ({ + bbox, + geojson, + layer: layerPicker.GetValue().data + }), [layerPicker.GetValue()]) + + this.IsValid = matching.map(matching => { + if (matching === undefined) { + return false + } + if (confirm.GetValue().data.length !== 1) { + return false + } + const diff = geojson.features.length - matching.length; + return diff === 0; + }, [confirm.GetValue()]) + + } +} \ No newline at end of file diff --git a/UI/ImportFlow/PreviewPanel.ts b/UI/ImportFlow/PreviewPanel.ts new file mode 100644 index 0000000000..fab9440c03 --- /dev/null +++ b/UI/ImportFlow/PreviewPanel.ts @@ -0,0 +1,108 @@ +import Combine from "../Base/Combine"; +import {UIEventSource} from "../../Logic/UIEventSource"; +import UserRelatedState from "../../Logic/State/UserRelatedState"; +import Translations from "../i18n/Translations"; +import {Utils} from "../../Utils"; +import {FlowStep} from "./FlowStep"; +import Title from "../Base/Title"; +import BaseUIElement from "../BaseUIElement"; +import Histogram from "../BigComponents/Histogram"; +import Toggleable from "../Base/Toggleable"; +import List from "../Base/List"; +import CheckBoxes from "../Input/Checkboxes"; + +/** + * Shows the data to import on a map, asks for the correct layer to be selected + */ +export class PreviewPanel extends Combine implements FlowStep<{ features: { properties: any, geometry: { coordinates: [number, number] } }[] }> { + public readonly IsValid: UIEventSource<boolean>; + public readonly Value: UIEventSource<{ features: { properties: any, geometry: { coordinates: [number, number] } }[] }> + + constructor( + state: UserRelatedState, + geojson: { features: { properties: any, geometry: { coordinates: [number, number] } }[] }) { + const t = Translations.t.importHelper; + + const propertyKeys = new Set<string>() + for (const f of geojson.features) { + Object.keys(f.properties).forEach(key => propertyKeys.add(key)) + } + + const attributeOverview: BaseUIElement[] = [] + + const n = geojson.features.length; + for (const key of Array.from(propertyKeys)) { + + const values = Utils.NoNull(geojson.features.map(f => f.properties[key])) + const allSame = !values.some(v => v !== values[0]) + let countSummary: BaseUIElement + if (values.length === n) { + countSummary = t.allAttributesSame + } else { + countSummary = t.someHaveSame.Subs({ + count: values.length, + percentage: Math.floor(100 * values.length / n) + }) + } + if (allSame) { + attributeOverview.push(new Title(key + "=" + values[0])) + attributeOverview.push(countSummary) + continue + } + + const uniqueCount = new Set(values).size + if (uniqueCount !== values.length && uniqueCount < 15) { + attributeOverview.push() + // There are some overlapping values: histogram time! + let hist: BaseUIElement = + new Combine([ + countSummary, + new Histogram( + new UIEventSource<string[]>(values), + "Value", + "Occurence", + { + sortMode: "count-rev" + }) + ]).SetClass("flex flex-col") + + + const title = new Title(key + "=*") + if (uniqueCount > 15) { + hist = new Toggleable(title, + hist.SetClass("block") + ).Collapse() + + } else { + attributeOverview.push(title) + } + + attributeOverview.push(hist) + continue + } + + // All values are different or too much unique values, we add a boring (but collapsable) list + attributeOverview.push(new Toggleable( + new Title(key + "=*"), + new Combine([ + countSummary, + new List(values) + ]) + )) + + } + + const confirm = new CheckBoxes([t.inspectLooksCorrect]) + + super([ + new Title(t.inspectDataTitle.Subs({count: geojson.features.length})), + "Extra remark: An attribute with 'source' or 'src' will be added as 'source' into the map pin; an attribute 'note' will be added into the map pin as well. These values won't be imported", + ...attributeOverview, + confirm + ]); + + this.Value = new UIEventSource<{ features: { properties: any; geometry: { coordinates: [number, number] } }[] }>(geojson) + this.IsValid = confirm.GetValue().map(selected => selected.length == 1) + + } +} \ No newline at end of file diff --git a/UI/ImportFlow/RequestFile.ts b/UI/ImportFlow/RequestFile.ts new file mode 100644 index 0000000000..dd6d877e85 --- /dev/null +++ b/UI/ImportFlow/RequestFile.ts @@ -0,0 +1,171 @@ +import Combine from "../Base/Combine"; +import {UIEventSource} from "../../Logic/UIEventSource"; +import Translations from "../i18n/Translations"; +import {SubtleButton} from "../Base/SubtleButton"; +import {VariableUiElement} from "../Base/VariableUIElement"; +import Title from "../Base/Title"; +import InputElementMap from "../Input/InputElementMap"; +import BaseUIElement from "../BaseUIElement"; +import FileSelectorButton from "../Input/FileSelectorButton"; +import {FlowStep} from "./FlowStep"; +import {parse} from "papaparse"; +import {FixedUiElement} from "../Base/FixedUiElement"; + +class FileSelector extends InputElementMap<FileList, { name: string, contents: Promise<string> }> { + constructor(label: BaseUIElement) { + super( + new FileSelectorButton(label, {allowMultiple: false, acceptType: "*"}), + (x0, x1) => { + // Total hack: x1 is undefined is the backvalue - we effectively make this a one-way-story + return x1 === undefined || x0 === x1; + }, + filelist => { + if (filelist === undefined) { + return undefined + } + const file = filelist.item(0) + return {name: file.name, contents: file.text()} + }, + _ => undefined + ) + } +} + +/** + * The first step in the import flow: load a file and validate that it is a correct geojson or CSV file + */ +export class RequestFile extends Combine implements FlowStep<any> { + + public readonly IsValid: UIEventSource<boolean> + /** + * The loaded GeoJSON + */ + public readonly Value: UIEventSource<any> + + constructor() { + const t = Translations.t.importHelper.selectFile; + const csvSelector = new FileSelector(new SubtleButton(undefined, t.description)) + const loadedFiles = new VariableUiElement(csvSelector.GetValue().map(file => { + if (file === undefined) { + return t.noFilesLoaded.SetClass("alert") + } + return t.loadedFilesAre.Subs({file: file.name}).SetClass("thanks") + })) + + const text = UIEventSource.flatten( + csvSelector.GetValue().map(v => { + if (v === undefined) { + return undefined + } + return UIEventSource.FromPromise(v.contents) + })) + + const asGeoJson: UIEventSource<any | { error: string | BaseUIElement }> = text.map(src => { + if (src === undefined) { + return undefined + } + try { + const parsed = JSON.parse(src) + if (parsed["type"] !== "FeatureCollection") { + return {error: t.errNotFeatureCollection} + } + if (parsed.features.some(f => f.geometry.type != "Point")) { + return {error: t.errPointsOnly} + } + return parsed; + + } catch (e) { + // Loading as CSV + var lines: string[][] = <any>parse(src).data; + const header = lines[0] + lines.splice(0, 1) + if (header.indexOf("lat") < 0 || header.indexOf("lon") < 0) { + return {error: t.errNoLatOrLon} + } + + if (header.some(h => h.trim() == "")) { + return {error: t.errNoName} + } + + + if (new Set(header).size !== header.length) { + return {error: t.errDuplicate} + } + + + const features = [] + for (let i = 0; i < lines.length; i++) { + const attrs = lines[i]; + if (attrs.length == 0 || (attrs.length == 1 && attrs[0] == "")) { + // empty line + continue + } + const properties = {} + for (let i = 0; i < header.length; i++) { + const v = attrs[i] + if (v === undefined || v === "") { + continue + } + properties[header[i]] = v; + } + const coordinates = [Number(properties["lon"]), Number(properties["lat"])] + delete properties["lat"] + delete properties["lon"] + if (coordinates.some(isNaN)) { + return {error: "A coordinate could not be parsed for line " + (i + 2)} + } + const f = { + type: "Feature", + properties, + geometry: { + type: "Point", + coordinates + } + }; + features.push(f) + } + + return { + type: "FeatureCollection", + features + } + } + }) + + + const errorIndicator = new VariableUiElement(asGeoJson.map(v => { + if (v === undefined) { + return undefined; + } + if (v?.error === undefined) { + return undefined; + } + let err: BaseUIElement; + if(typeof v.error === "string"){ + err = new FixedUiElement(v.error) + }else if(v.error.Clone !== undefined){ + err = v.error.Clone() + }else{ + err = v.error + } + return err.SetClass("alert"); + })) + + super([ + + new Title(t.title, 1), + t.fileFormatDescription, + t.fileFormatDescriptionCsv, + t.fileFormatDescriptionGeoJson, + csvSelector, + loadedFiles, + errorIndicator + + ]); + this.SetClass("flex flex-col wi") + this.IsValid = asGeoJson.map(geojson => geojson !== undefined && geojson["error"] === undefined) + this.Value = asGeoJson + } + + +} \ No newline at end of file diff --git a/UI/Input/CombinedInputElement.ts b/UI/Input/CombinedInputElement.ts index b1fa39a8e4..2409898cd4 100644 --- a/UI/Input/CombinedInputElement.ts +++ b/UI/Input/CombinedInputElement.ts @@ -5,7 +5,6 @@ import BaseUIElement from "../BaseUIElement"; export default class CombinedInputElement<T, J, X> extends InputElement<X> { - public readonly IsSelected: UIEventSource<boolean>; private readonly _a: InputElement<T>; private readonly _b: InputElement<J>; private readonly _combined: BaseUIElement; @@ -19,9 +18,6 @@ export default class CombinedInputElement<T, J, X> extends InputElement<X> { this._a = a; this._b = b; this._split = split; - this.IsSelected = this._a.IsSelected.map((isSelected) => { - return isSelected || b.IsSelected.data - }, [b.IsSelected]) this._combined = new Combine([this._a, this._b]); this._value = this._a.GetValue().map( t => combine(t, this._b?.GetValue()?.data), diff --git a/UI/Input/DropDown.ts b/UI/Input/DropDown.ts index 1930a2fe41..d7137a04bb 100644 --- a/UI/Input/DropDown.ts +++ b/UI/Input/DropDown.ts @@ -37,7 +37,7 @@ export class DropDown<T> extends InputElement<T> { el.id = "dropdown" + id; { - const labelEl = Translations.W(label).ConstructElement() + const labelEl = Translations.W(label)?.ConstructElement() if (labelEl !== undefined) { const labelHtml = document.createElement("label") labelHtml.appendChild(labelEl) diff --git a/UI/Input/FileSelectorButton.ts b/UI/Input/FileSelectorButton.ts index c6e1cf1f8b..1c03875af1 100644 --- a/UI/Input/FileSelectorButton.ts +++ b/UI/Input/FileSelectorButton.ts @@ -6,16 +6,22 @@ export default class FileSelectorButton extends InputElement<FileList> { private static _nextid; IsSelected: UIEventSource<boolean>; - private readonly _value = new UIEventSource(undefined); + private readonly _value = new UIEventSource<FileList>(undefined); private readonly _label: BaseUIElement; private readonly _acceptType: string; + private readonly allowMultiple: boolean; - constructor(label: BaseUIElement, acceptType: string = "image/*") { + constructor(label: BaseUIElement, options?: + { + acceptType: "image/*" | string, + allowMultiple: true | boolean + }) { super(); this._label = label; - this._acceptType = acceptType; + this._acceptType = options?.acceptType ?? "image/*"; this.SetClass("block cursor-pointer") label.SetClass("cursor-pointer") + this.allowMultiple = options?.allowMultiple ?? true } GetValue(): UIEventSource<FileList> { @@ -38,7 +44,7 @@ export default class FileSelectorButton extends InputElement<FileList> { actualInputElement.type = "file"; actualInputElement.accept = this._acceptType; actualInputElement.name = "picField"; - actualInputElement.multiple = true; + actualInputElement.multiple = this.allowMultiple; actualInputElement.id = "fileselector" + FileSelectorButton._nextid; FileSelectorButton._nextid++; @@ -59,6 +65,20 @@ export default class FileSelectorButton extends InputElement<FileList> { el.appendChild(actualInputElement) + el.addEventListener('dragover', (event) => { + event.stopPropagation(); + event.preventDefault(); + // Style the drag-and-drop as a "copy file" operation. + event.dataTransfer.dropEffect = 'copy'; + }); + + el.addEventListener('drop', (event) => { + event.stopPropagation(); + event.preventDefault(); + const fileList = event.dataTransfer.files; + this._value.setData(fileList) + }); + return el; } diff --git a/UI/Input/FixedInputElement.ts b/UI/Input/FixedInputElement.ts index 37e025b799..6dd39fc0d9 100644 --- a/UI/Input/FixedInputElement.ts +++ b/UI/Input/FixedInputElement.ts @@ -4,7 +4,6 @@ import Translations from "../i18n/Translations"; import BaseUIElement from "../BaseUIElement"; export class FixedInputElement<T> extends InputElement<T> { - public readonly IsSelected: UIEventSource<boolean> = new UIEventSource<boolean>(false); private readonly value: UIEventSource<T>; private readonly _comparator: (t0: T, t1: T) => boolean; @@ -21,17 +20,12 @@ export class FixedInputElement<T> extends InputElement<T> { this.value = new UIEventSource<T>(value); } - const selected = this.IsSelected; this._el = document.createElement("span") - this._el.addEventListener("mouseout", () => selected.setData(false)) const e = Translations.W(rendering)?.ConstructElement() if (e) { this._el.appendChild(e) } - this.onClick(() => { - selected.setData(true) - }) } GetValue(): UIEventSource<T> { diff --git a/UI/Input/InputElement.ts b/UI/Input/InputElement.ts index f9920b1d6a..f8a27eddde 100644 --- a/UI/Input/InputElement.ts +++ b/UI/Input/InputElement.ts @@ -3,7 +3,6 @@ import BaseUIElement from "../BaseUIElement"; export abstract class InputElement<T> extends BaseUIElement { - abstract IsSelected: UIEventSource<boolean>; abstract GetValue(): UIEventSource<T>; diff --git a/UI/Input/InputElementMap.ts b/UI/Input/InputElementMap.ts index a2a50f9d38..16b907f469 100644 --- a/UI/Input/InputElementMap.ts +++ b/UI/Input/InputElementMap.ts @@ -3,7 +3,6 @@ import {UIEventSource} from "../../Logic/UIEventSource"; export default class InputElementMap<T, X> extends InputElement<X> { - public readonly IsSelected: UIEventSource<boolean>; private readonly _inputElement: InputElement<T>; private isSame: (x0: X, x1: X) => boolean; private readonly fromX: (x: X) => T; @@ -21,7 +20,6 @@ export default class InputElementMap<T, X> extends InputElement<X> { this.fromX = fromX; this.toX = toX; this._inputElement = inputElement; - this.IsSelected = inputElement.IsSelected; const self = this; this._value = inputElement.GetValue().map( (t => { diff --git a/UI/Input/InputElementWrapper.ts b/UI/Input/InputElementWrapper.ts index 5a6633ade3..a671a00270 100644 --- a/UI/Input/InputElementWrapper.ts +++ b/UI/Input/InputElementWrapper.ts @@ -6,22 +6,20 @@ import {SubstitutedTranslation} from "../SubstitutedTranslation"; import FeaturePipelineState from "../../Logic/State/FeaturePipelineState"; export default class InputElementWrapper<T> extends InputElement<T> { - public readonly IsSelected: UIEventSource<boolean>; private readonly _inputElement: InputElement<T>; private readonly _renderElement: BaseUIElement constructor(inputElement: InputElement<T>, translation: Translation, key: string, tags: UIEventSource<any>, state: FeaturePipelineState) { super() this._inputElement = inputElement; - this.IsSelected = inputElement.IsSelected const mapping = new Map<string, BaseUIElement>() mapping.set(key, inputElement) // Bit of a hack: the SubstitutedTranslation expects a special rendering, but those are formatted '{key()}' instead of '{key}', so we substitute it first - const newTranslations ={} + const newTranslations = {} for (const lang in translation.translations) { - newTranslations[lang] = translation.translations[lang].replace("{"+key+"}", "{"+key+"()}") + newTranslations[lang] = translation.translations[lang].replace("{" + key + "}", "{" + key + "()}") } this._renderElement = new SubstitutedTranslation(new Translation(newTranslations), tags, state, mapping) } diff --git a/UI/Input/LocationInput.ts b/UI/Input/LocationInput.ts index 133244d89f..8e66d4270a 100644 --- a/UI/Input/LocationInput.ts +++ b/UI/Input/LocationInput.ts @@ -25,6 +25,8 @@ export default class LocationInput extends InputElement<Loc> implements MinimapO public readonly snappedOnto: UIEventSource<any> = new UIEventSource<any>(undefined) public readonly _matching_layer: LayerConfig; public readonly leafletMap: UIEventSource<any> + public readonly bounds; + public readonly location; private _centerLocation: UIEventSource<Loc>; private readonly mapBackground: UIEventSource<BaseLayer>; /** @@ -146,6 +148,7 @@ export default class LocationInput extends InputElement<Loc> implements MinimapO } ) this.leafletMap = this.map.leafletMap + this.location = this.map.location; } GetValue(): UIEventSource<Loc> { @@ -186,11 +189,10 @@ export default class LocationInput extends InputElement<Loc> implements MinimapO console.log("Constructing the snap-to layer", this._snapTo) new ShowDataMultiLayer({ features: new StaticFeatureSource(this._snapTo, true), - enablePopups: false, + popup: undefined, zoomToFeatures: false, leafletMap: this.map.leafletMap, - layers: State.state.filteredLayers, - allElements: State.state.allElements + layers: State.state.filteredLayers } ) // Show the central point @@ -202,11 +204,11 @@ export default class LocationInput extends InputElement<Loc> implements MinimapO }) new ShowDataLayer({ features: new StaticFeatureSource(matchPoint, true), - enablePopups: false, + popup: undefined, zoomToFeatures: false, leafletMap: this.map.leafletMap, layerToShow: this._matching_layer, - allElements: State.state.allElements, + state: State.state, selectedElement: State.state.selectedElement }) @@ -219,7 +221,7 @@ export default class LocationInput extends InputElement<Loc> implements MinimapO leaflet.setMaxZoom(layer.max_zoom) leaflet.setMinZoom(self._minZoom ?? layer.max_zoom - 2) - leaflet.setZoom(layer.max_zoom) + leaflet.setZoom(layer.max_zoom - 1) }, [this.map.leafletMap]) diff --git a/UI/Input/RadioButton.ts b/UI/Input/RadioButton.ts index 73310559b3..390a781223 100644 --- a/UI/Input/RadioButton.ts +++ b/UI/Input/RadioButton.ts @@ -4,7 +4,6 @@ import {Utils} from "../../Utils"; export class RadioButton<T> extends InputElement<T> { private static _nextId = 0; - IsSelected: UIEventSource<boolean> = new UIEventSource<boolean>(false); private readonly value: UIEventSource<T>; private _elements: InputElement<T>[]; private _selectFirstAsDefault: boolean; @@ -74,11 +73,7 @@ export class RadioButton<T> extends InputElement<T> { elements[i]?.onClick(() => { selectedElementIndex.setData(i); }); - elements[i].IsSelected.addCallback((isSelected) => { - if (isSelected) { - selectedElementIndex.setData(i); - } - }); + elements[i].GetValue().addCallback(() => { selectedElementIndex.setData(i); }); @@ -148,10 +143,10 @@ export class RadioButton<T> extends InputElement<T> { block.classList.add( "m-1", "border", - "rounded-3xl", - "border-gray-400", + "border-gray-400" ) } + block.style.borderRadius = "1.5rem" wrappers.push(block); form.appendChild(block); @@ -166,10 +161,10 @@ export class RadioButton<T> extends InputElement<T> { if (input.checked) { wrappers[i].classList.remove("border-gray-400"); - wrappers[i].classList.add("border-black"); + wrappers[i].classList.add("border-attention"); } else { wrappers[i].classList.add("border-gray-400"); - wrappers[i].classList.remove("border-black"); + wrappers[i].classList.remove("border-attention"); } } }); diff --git a/UI/Input/TextField.ts b/UI/Input/TextField.ts index a347613f39..905188a159 100644 --- a/UI/Input/TextField.ts +++ b/UI/Input/TextField.ts @@ -5,11 +5,11 @@ import BaseUIElement from "../BaseUIElement"; export class TextField extends InputElement<string> { public readonly enterPressed = new UIEventSource<string>(undefined); - public readonly IsSelected: UIEventSource<boolean> = new UIEventSource<boolean>(false); private readonly value: UIEventSource<string>; private _element: HTMLElement; private readonly _isValid: (s: string, country?: () => string) => boolean; - + private _rawValue: UIEventSource<string> + constructor(options?: { placeholder?: string | BaseUIElement, value?: UIEventSource<string>, @@ -24,13 +24,9 @@ export class TextField extends InputElement<string> { const self = this; options = options ?? {}; this.value = options?.value ?? new UIEventSource<string>(undefined); + this._rawValue = new UIEventSource<string>("") this._isValid = options.isValid ?? (_ => true); - this.onClick(() => { - self.IsSelected.setData(true) - }); - - const placeholder = Translations.W(options.placeholder ?? "").ConstructElement().innerText.replace("'", "'"); this.SetClass("form-text-field") @@ -83,6 +79,7 @@ export class TextField extends InputElement<string> { const endDistance = field.value.substring(field.selectionEnd).replace(/ /g, '').length; // @ts-ignore let val: string = field.value; + self._rawValue.setData(val) if (!self.IsValid(val)) { self.value.setData(undefined); } else { @@ -107,10 +104,6 @@ export class TextField extends InputElement<string> { }; - field.addEventListener("focusin", () => self.IsSelected.setData(true)); - field.addEventListener("focusout", () => self.IsSelected.setData(false)); - - field.addEventListener("keyup", function (event) { if (event.key === "Enter") { // @ts-ignore @@ -138,7 +131,11 @@ export class TextField extends InputElement<string> { GetValue(): UIEventSource<string> { return this.value; } - + + GetRawValue(): UIEventSource<string>{ + return this._rawValue + } + IsValid(t: string): boolean { if (t === undefined || t === null) { return false diff --git a/UI/Input/ValidatedTextField.ts b/UI/Input/ValidatedTextField.ts index c1101efb4b..75b561319d 100644 --- a/UI/Input/ValidatedTextField.ts +++ b/UI/Input/ValidatedTextField.ts @@ -23,45 +23,237 @@ import Table from "../Base/Table"; import Combine from "../Base/Combine"; import Title from "../Base/Title"; import InputElementMap from "./InputElementMap"; +import Translations from "../i18n/Translations"; +import {Translation} from "../i18n/Translation"; +import {NOTFOUND} from "dns"; + +export class TextFieldDef { + + public readonly name: string; + /* + * An explanation for the theme builder. + * This can indicate which special input element is used, ... + * */ + public readonly explanation: string; + protected inputmode?: string = undefined + + constructor(name: string, + explanation: string | BaseUIElement) { + this.name = name; + if (this.name.endsWith("textfield")) { + this.name = this.name.substr(0, this.name.length - "TextField".length) + } + if (this.name.endsWith("textfielddef")) { + this.name = this.name.substr(0, this.name.length - "TextFieldDef".length) + } + if (typeof explanation === "string") { + + this.explanation = explanation + } else { + this.explanation = explanation.AsMarkdown(); + } + } + + protectedisValid(s: string, _: (() => string) | undefined): boolean { + return true; + } + + public getFeedback(s: string): Translation { + const tr = Translations.t.validation[this.name] + if(tr !== undefined){ + return tr["feedback"] + } + } + + public ConstructInputElement(options: { + value?: UIEventSource<string>, + inputStyle?: string, + feedback?: UIEventSource<Translation> + placeholder?: string | BaseUIElement, + country?: () => string, + location?: [number /*lat*/, number /*lon*/], + mapBackgroundLayer?: UIEventSource<any>, + unit?: Unit, + args?: (string | number | boolean)[] // Extra arguments for the inputHelper, + feature?: any, + } = {}): InputElement<string> { + + if (options.placeholder === undefined) { + options.placeholder = Translations.t.validation[this.name]?.description ?? this.name + } + + options["textArea"] = this.name === "text"; + + const self = this; + + if (options.unit !== undefined) { + // Reformatting is handled by the unit in this case + options["isValid"] = str => { + const denom = options.unit.findDenomination(str); + if (denom === undefined) { + return false; + } + const stripped = denom[0] + return self.isValid(stripped, options.country) + } + } else { + options["isValid"] = self.isValid; + } + + + options["inputMode"] = this.inputmode; + if (this.inputmode === "text") { + options["htmlType"] = "area" + } + + + const textfield = new TextField(options); + let input: InputElement<string> = textfield + if (options.feedback) { + textfield.GetRawValue().addCallback(v => { + if(self.isValid(v, options.country)){ + options.feedback.setData(undefined) + }else{ + options.feedback.setData(self.getFeedback(v)) + } + }) + } + + + if (this.reformat && options.unit === undefined) { + input.GetValue().addCallbackAndRun(str => { + if (!options["isValid"](str, options.country)) { + return; + } + const formatted = this.reformat(str, options.country); + input.GetValue().setData(formatted); + }) + } + + if (options.unit) { + // We need to apply a unit. + // This implies: + // We have to create a dropdown with applicable denominations, and fuse those values + const unit = options.unit + + + const isSingular = input.GetValue().map(str => str?.trim() === "1") + + const unitDropDown = + unit.denominations.length === 1 ? + new FixedInputElement(unit.denominations[0].getToggledHuman(isSingular), unit.denominations[0]) + : new DropDown("", + unit.denominations.map(denom => { + return { + shown: denom.getToggledHuman(isSingular), + value: denom + } + }) + ) + unitDropDown.GetValue().setData(unit.defaultDenom) + unitDropDown.SetClass("w-min") + + const fixedDenom = unit.denominations.length === 1 ? unit.denominations[0] : undefined + input = new CombinedInputElement( + input, + unitDropDown, + // combine the value from the textfield and the dropdown into the resulting value that should go into OSM + (text, denom) => { + if (denom === undefined) { + return text + } + return denom?.canonicalValue(text, true) + }, + (valueWithDenom: string) => { + // Take the value from OSM and feed it into the textfield and the dropdown + const withDenom = unit.findDenomination(valueWithDenom); + if (withDenom === undefined) { + // Not a valid value at all - we give it undefined and leave the details up to the other elements (but we keep the previous denomination) + return [undefined, fixedDenom] + } + const [strippedText, denom] = withDenom + if (strippedText === undefined) { + return [undefined, fixedDenom] + } + return [strippedText, denom] + } + ).SetClass("flex") + } + const helper = this.inputHelper(input.GetValue(), { + location: options.location, + mapBackgroundLayer: options.mapBackgroundLayer, + args: options.args, + feature: options.feature + })?.SetClass("block") + if (helper !== undefined) { + input = new CombinedInputElement(input, helper, + (a, _) => a, // We can ignore b, as they are linked earlier + a => [a, a] + ).SetClass("block w-full"); + } + if (this.postprocess !== undefined) { + input = new InputElementMap<string, string>(input, + (a, b) => a === b, + this.postprocess, + this.undoPostprocess + ) + } + + return input; + } + + protected isValid(string: string, requestCountry: () => string): boolean { + return true; + } + + protected reformat(s: string, country?: () => string): string { + return s; + } -interface TextFieldDef { - name: string, - explanation: string, - isValid: ((s: string, country?: () => string) => boolean), - reformat?: ((s: string, country?: () => string) => string), /** * Modification to make before the string is uploaded to OSM */ - postprocess?: (s: string) => string; - undoPostprocess?: (s: string) => string; - inputHelper?: (value: UIEventSource<string>, options?: { + protected postprocess(s: string): string { + return s + } + + protected undoPostprocess(s: string): string { + return s; + } + + protected inputHelper(value: UIEventSource<string>, options?: { location: [number, number], mapBackgroundLayer?: UIEventSource<any>, args: (string | number | boolean | any)[] feature?: any - }) => InputElement<string>, - inputmode?: string + }): InputElement<string> { + return undefined + } + + } -class WikidataTextField implements TextFieldDef { - name = "wikidata" - explanation = - new Combine([ - "A wikidata identifier, e.g. Q42.", - new Title("Helper arguments"), - new Table(["name", "doc"], - [ - ["key", "the value of this tag will initialize search (default: name)"], - ["options", new Combine(["A JSON-object of type `{ removePrefixes: string[], removePostfixes: string[] }`.", - new Table( - ["subarg", "doc"], - [["removePrefixes", "remove these snippets of text from the start of the passed string to search"], - ["removePostfixes", "remove these snippets of text from the end of the passed string to search"], - ] - )]) - ]]), - new Title("Example usage"), - `The following is the 'freeform'-part of a layer config which will trigger a search for the wikidata item corresponding with the name of the selected feature. It will also remove '-street', '-square', ... if found at the end of the name +class WikidataTextField extends TextFieldDef { + + constructor() { + super( + "wikidata", + new Combine([ + "A wikidata identifier, e.g. Q42.", + new Title("Helper arguments"), + new Table(["name", "doc"], + [ + ["key", "the value of this tag will initialize search (default: name)"], + ["options", new Combine(["A JSON-object of type `{ removePrefixes: string[], removePostfixes: string[] }`.", + new Table( + ["subarg", "doc"], + [["removePrefixes", "remove these snippets of text from the start of the passed string to search"], + ["removePostfixes", "remove these snippets of text from the end of the passed string to search"], + ] + )]) + ]]), + new Title("Example usage"), + `The following is the 'freeform'-part of a layer config which will trigger a search for the wikidata item corresponding with the name of the selected feature. It will also remove '-street', '-square', ... if found at the end of the name \`\`\` "freeform": { @@ -81,10 +273,11 @@ class WikidataTextField implements TextFieldDef { ] } \`\`\`` - ]).AsMarkdown() + ])); + } - public isValid(str) { + public isValid(str): boolean { if (str === undefined) { return false; @@ -139,27 +332,29 @@ class WikidataTextField implements TextFieldDef { } } -class OpeningHoursTextField implements TextFieldDef { - name = "opening_hours" - explanation = - new Combine([ - "Has extra elements to easily input when a POI is opened.", - new Title("Helper arguments"), - new Table(["name", "doc"], - [ - ["options", new Combine([ - "A JSON-object of type `{ prefix: string, postfix: string }`. ", - new Table(["subarg", "doc"], - [ - ["prefix", "Piece of text that will always be added to the front of the generated opening hours. If the OSM-data does not start with this, it will fail to parse"], - ["postfix", "Piece of text that will always be added to the end of the generated opening hours"], - ]) +class OpeningHoursTextField extends TextFieldDef { - ]) - ] - ]), - new Title("Example usage"), - "To add a conditional (based on time) access restriction:\n\n```\n" + ` + constructor() { + super( + "opening_hours", + new Combine([ + "Has extra elements to easily input when a POI is opened.", + new Title("Helper arguments"), + new Table(["name", "doc"], + [ + ["options", new Combine([ + "A JSON-object of type `{ prefix: string, postfix: string }`. ", + new Table(["subarg", "doc"], + [ + ["prefix", "Piece of text that will always be added to the front of the generated opening hours. If the OSM-data does not start with this, it will fail to parse"], + ["postfix", "Piece of text that will always be added to the end of the generated opening hours"], + ]) + + ]) + ] + ]), + new Title("Example usage"), + "To add a conditional (based on time) access restriction:\n\n```\n" + ` "freeform": { "key": "access:conditional", "type": "opening_hours", @@ -169,8 +364,8 @@ class OpeningHoursTextField implements TextFieldDef { "postfix":")" } ] -}` + "\n```\n\n*Don't forget to pass the prefix and postfix in the rendering as well*: `{opening_hours_table(opening_hours,yes @ &LPARENS, &RPARENS )`"]).AsMarkdown() - +}` + "\n```\n\n*Don't forget to pass the prefix and postfix in the rendering as well*: `{opening_hours_table(opening_hours,yes @ &LPARENS, &RPARENS )`"]),); + } isValid() { return true @@ -194,12 +389,14 @@ class OpeningHoursTextField implements TextFieldDef { } } -class UrlTextfieldDef implements TextFieldDef { +class UrlTextfieldDef extends TextFieldDef { - name = "url" - explanation = "The validatedTextField will format URLs to always be valid and have a https://-header (even though the 'https'-part will be hidden from the user" inputmode: "url" + constructor() { + super("url", "The validatedTextField will format URLs to always be valid and have a https://-header (even though the 'https'-part will be hidden from the user") + } + postprocess(str: string) { if (str === undefined) { return undefined @@ -236,9 +433,9 @@ class UrlTextfieldDef implements TextFieldDef { "fbclid",// Oh god, how I hate the fbclid. Let it burn, burn in hell! "gclid", "cmpid", "agid", "utm", "utm_source", "utm_medium", - "campaignid","campaign","AdGroupId","AdGroup","TargetId","msclkid"] + "campaignid", "campaign", "AdGroupId", "AdGroup", "TargetId", "msclkid"] for (const dontLike of blacklistedTrackingParams) { - url.searchParams.delete(dontLike.toLowerCase() ) + url.searchParams.delete(dontLike.toLowerCase()) } let cleaned = url.toString(); if (cleaned.endsWith("/") && !str.endsWith("/")) { @@ -265,377 +462,382 @@ class UrlTextfieldDef implements TextFieldDef { } const url = new URL(str); const dotIndex = url.host.indexOf(".") - return dotIndex > 0 && url.host[url.host.length - 1 ] !== "."; + return dotIndex > 0 && url.host[url.host.length - 1] !== "."; } catch (e) { return false; } } } -export default class ValidatedTextField { +class StringTextField extends TextFieldDef { + constructor() { + super("string", "A simple piece of text"); + } +} - public static tpList: TextFieldDef[] = [ +class TextTextField extends TextFieldDef { + inputmode: "text" - ValidatedTextField.tp( - "string", - "A basic string"), - ValidatedTextField.tp( - "text", - "A string, but allows input of longer strings more comfortably and supports newlines (a text area)", - undefined, - undefined, - undefined, - "text"), + constructor() { + super("text", "A longer piece of text"); + } +} - ValidatedTextField.tp( - "date", - "A date", - (str) => { - return !isNaN(new Date(str).getTime()); - }, - (str) => { - const d = new Date(str); - let month = '' + (d.getMonth() + 1); - let day = '' + d.getDate(); - const year = d.getFullYear(); +class DateTextField extends TextFieldDef { + constructor() { + super("date", "A date with date picker"); + } - if (month.length < 2) - month = '0' + month; - if (day.length < 2) - day = '0' + day; + isValid = (str) => { + return !isNaN(new Date(str).getTime()); + } - return [year, month, day].join('-'); - }, - (value) => new SimpleDatePicker(value)), - ValidatedTextField.tp( - "direction", - "A geographical direction, in degrees. 0° is north, 90° is east, ... Will return a value between 0 (incl) and 360 (excl)", - (str) => { - str = "" + str; - return str !== undefined && str.indexOf(".") < 0 && !isNaN(Number(str)) && Number(str) >= 0 && Number(str) <= 360 - }, str => str, - (value, options) => { - const args = options.args ?? [] - let zoom = 19 - if (args[0]) { - zoom = Number(args[0]) - if (isNaN(zoom)) { - throw "Invalid zoom level for argument at 'length'-input" - } - } - const location = new UIEventSource<Loc>({ - lat: options.location[0], - lon: options.location[1], - zoom: zoom - }) - if (args[1]) { - // We have a prefered map! - options.mapBackgroundLayer = AvailableBaseLayers.SelectBestLayerAccordingTo( - location, new UIEventSource<string[]>(args[1].split(",")) - ) - } - const di = new DirectionInput(options.mapBackgroundLayer, location, value) - di.SetStyle("max-width: 25rem;"); + reformat(str) { + const d = new Date(str); + let month = '' + (d.getMonth() + 1); + let day = '' + d.getDate(); + const year = d.getFullYear(); - return di; - }, - "numeric" - ), - ValidatedTextField.tp( - "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\"]", - (str) => { - const t = Number(str) - return !isNaN(t) - }, - str => str, - (value, options) => { - const args = options.args ?? [] - let zoom = 19 - if (args[0]) { - zoom = Number(args[0]) - if (isNaN(zoom)) { - console.error("Invalid zoom level for argument at 'length'-input. The offending argument is: ", args[0], " (using 19 instead)") - zoom = 19 - } - } + if (month.length < 2) + month = '0' + month; + if (day.length < 2) + day = '0' + day; - // Bit of a hack: we project the centerpoint to the closes point on the road - if available - if (options.feature !== undefined && options.feature.geometry.type !== "Point") { - const lonlat: [number, number] = [...options.location] - lonlat.reverse() - options.location = <[number, number]>GeoOperations.nearestPoint(options.feature, lonlat).geometry.coordinates - options.location.reverse() - } + return [year, month, day].join('-'); + } - const location = new UIEventSource<Loc>({ - lat: options.location[0], - lon: options.location[1], - zoom: zoom - }) - if (args[1]) { - // We have a prefered map! - options.mapBackgroundLayer = AvailableBaseLayers.SelectBestLayerAccordingTo( - location, new UIEventSource<string[]>(args[1].split(",")) - ) - } - const li = new LengthInput(options.mapBackgroundLayer, location, value) - li.SetStyle("height: 20rem;") - return li; - }, - "decimal" - ), - new WikidataTextField(), + inputHelper(value) { + return new SimpleDatePicker(value) + } +} - ValidatedTextField.tp( - "int", - "A number", - (str) => { - str = "" + str; - return str !== undefined && str.indexOf(".") < 0 && !isNaN(Number(str)) - }, - str => "" + Number(str), - undefined, - "numeric"), - ValidatedTextField.tp( - "nat", - "A positive number or zero", - (str) => { - str = "" + str; - return str !== undefined && str.indexOf(".") < 0 && !isNaN(Number(str)) && Number(str) >= 0 - }, - str => "" + Number(str), - undefined, - "numeric"), - ValidatedTextField.tp( - "pnat", - "A strict positive number", - (str) => { - str = "" + str; - return str !== undefined && str.indexOf(".") < 0 && !isNaN(Number(str)) && Number(str) > 0 - }, - str => "" + Number(str), - undefined, - "numeric"), - ValidatedTextField.tp( - "float", - "A decimal", - (str) => !isNaN(Number(str)) && !str.endsWith(".") && !str.endsWith(","), - str => "" + Number(str), - undefined, - "decimal"), - ValidatedTextField.tp( - "pfloat", - "A positive decimal (incl zero)", - (str) => !isNaN(Number(str)) && Number(str) >= 0 && !str.endsWith(".") && !str.endsWith(","), - str => "" + Number(str), - undefined, - "decimal"), - ValidatedTextField.tp( - "email", - "An email adress", - (str) => { - if (str.startsWith("mailto:")) { - str = str.substring("mailto:".length) - } - return EmailValidator.validate(str); - }, - str => { - if (str === undefined) { - return undefined - } - if (str.startsWith("mailto:")) { - str = str.substring("mailto:".length) - } - return str; - }, - undefined, - "email"), - new UrlTextfieldDef(), - ValidatedTextField.tp( - "phone", - "A phone number", - (str, country: () => string) => { - if (str === undefined) { - return false; - } - if (str.startsWith("tel:")) { - str = str.substring("tel:".length) - } - return parsePhoneNumberFromString(str, (country())?.toUpperCase() as any)?.isValid() ?? false - }, - (str, country: () => string) => { - if (str.startsWith("tel:")) { - str = str.substring("tel:".length) - } - return parsePhoneNumberFromString(str, (country())?.toUpperCase() as any).formatInternational(); - }, - undefined, - "tel" - ), - new OpeningHoursTextField(), - ValidatedTextField.tp( - "color", - "Shows a color picker", - () => true, - str => str, - (value) => { - return new ColorPicker(value.map(color => { - return Utils.ColourNameToHex(color ?? ""); - }, [], str => Utils.HexToColourName(str))) - } + +class LengthTextField extends TextFieldDef { + inputMode: "decimal" + + constructor() { + super( + "decimal", "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\"]" ) - ] - /** - * {string (typename) --> TextFieldDef} - */ - public static AllTypes: Map<string, TextFieldDef> = ValidatedTextField.allTypesDict(); + } - public static InputForType(type: string, options?: { - placeholder?: string | BaseUIElement, - value?: UIEventSource<string>, - htmlType?: string, - textArea?: boolean, - inputMode?: string, - textAreaRows?: number, - isValid?: ((s: string, country: () => string) => boolean), - country?: () => string, - location?: [number /*lat*/, number /*lon*/], - mapBackgroundLayer?: UIEventSource<any>, - unit?: Unit, - args?: (string | number | boolean)[] // Extra arguments for the inputHelper, - feature?: any - }): InputElement<string> { - options = options ?? {}; - options.placeholder = options.placeholder ?? type; - const tp: TextFieldDef = ValidatedTextField.AllTypes.get(type) - const isValidTp = tp.isValid; - let isValid; - options.textArea = options.textArea ?? type === "text"; - if (options.isValid) { - const optValid = options.isValid; - isValid = (str, country) => { - if (str === undefined) { - return false; - } - if (options.unit) { - str = options.unit.stripUnitParts(str) - } - return isValidTp(str, country ?? options.country) && optValid(str, country ?? options.country); + isValid = (str) => { + const t = Number(str) + return !isNaN(t) + } + + inputHelper = (value, options) => { + options = options ?? {} + options.location = options.location ?? [0, 0] + + const args = options.args ?? [] + let zoom = 19 + if (args[0]) { + zoom = Number(args[0]) + if (isNaN(zoom)) { + console.error("Invalid zoom level for argument at 'length'-input. The offending argument is: ", args[0], " (using 19 instead)") + zoom = 19 } - } else { - isValid = isValidTp; } - if (options.unit !== undefined && isValid !== undefined) { - // Reformatting is handled by the unit in this case - options.isValid = str => { - const denom = options.unit.findDenomination(str); - if (denom === undefined) { - return false; - } - const stripped = denom[0] - console.log("Is valid? ", str, "stripped: ", stripped, "isValid:", isValid(stripped)) - return isValid(stripped) - } - } else { - options.isValid = isValid; - + // Bit of a hack: we project the centerpoint to the closes point on the road - if available + if (options?.feature !== undefined && options.feature.geometry.type !== "Point") { + const lonlat = <[number, number]>[...options.location] + lonlat.reverse() + options.location = <[number, number]>GeoOperations.nearestPoint(options.feature, lonlat).geometry.coordinates + options.location.reverse() } - options.inputMode = tp.inputmode; - if (tp.inputmode === "text") { - options.htmlType = "area" - } - - - let input: InputElement<string> = new TextField(options); - if (tp.reformat && options.unit === undefined) { - input.GetValue().addCallbackAndRun(str => { - if (!options.isValid(str, options.country)) { - return; - } - const formatted = tp.reformat(str, options.country); - input.GetValue().setData(formatted); - }) - } - - if (options.unit) { - // We need to apply a unit. - // This implies: - // We have to create a dropdown with applicable denominations, and fuse those values - const unit = options.unit - - - const isSingular = input.GetValue().map(str => str?.trim() === "1") - - const unitDropDown = - unit.denominations.length === 1 ? - new FixedInputElement(unit.denominations[0].getToggledHuman(isSingular), unit.denominations[0]) - : new DropDown("", - unit.denominations.map(denom => { - return { - shown: denom.getToggledHuman(isSingular), - value: denom - } - }) - ) - unitDropDown.GetValue().setData(unit.defaultDenom) - unitDropDown.SetClass("w-min") - - const fixedDenom = unit.denominations.length === 1 ? unit.denominations[0] : undefined - input = new CombinedInputElement( - input, - unitDropDown, - // combine the value from the textfield and the dropdown into the resulting value that should go into OSM - (text, denom) => { - if (denom === undefined) { - return text - } - return denom?.canonicalValue(text, true) - }, - (valueWithDenom: string) => { - // Take the value from OSM and feed it into the textfield and the dropdown - const withDenom = unit.findDenomination(valueWithDenom); - if (withDenom === undefined) { - // Not a valid value at all - we give it undefined and leave the details up to the other elements (but we keep the previous denomination) - return [undefined, fixedDenom] - } - const [strippedText, denom] = withDenom - if (strippedText === undefined) { - return [undefined, fixedDenom] - } - return [strippedText, denom] - } - ).SetClass("flex") - } - if (tp.inputHelper) { - const helper = tp.inputHelper(input.GetValue(), { - location: options.location, - mapBackgroundLayer: options.mapBackgroundLayer, - args: options.args, - feature: options.feature - }).SetClass("block") - input = new CombinedInputElement(input, helper, - (a, _) => a, // We can ignore b, as they are linked earlier - a => [a, a] - ).SetClass("block w-full"); - } - if (tp.postprocess !== undefined) { - input = new InputElementMap<string, string>(input, - (a, b) => a === b, - tp.postprocess, - tp.undoPostprocess + const location = new UIEventSource<Loc>({ + lat: options.location[0], + lon: options.location[1], + zoom: zoom + }) + if (args[1]) { + // We have a prefered map! + options.mapBackgroundLayer = AvailableBaseLayers.SelectBestLayerAccordingTo( + location, new UIEventSource<string[]>(args[1].split(",")) ) } + const li = new LengthInput(options?.mapBackgroundLayer, location, value) + li.SetStyle("height: 20rem;") + return li; + } +} - return input; +class FloatTextField extends TextFieldDef { + inputmode = "decimal" + + constructor(name?: string, explanation?: string) { + super(name ?? "float", explanation ?? "A decimal"); + } + + isValid(str) { + return !isNaN(Number(str)) && !str.endsWith(".") && !str.endsWith(",") + } + + reformat( str): string { + return "" + Number(str); + } + + getFeedback(s: string): Translation { + if (isNaN(Number(s))) { + return Translations.t.validation.nat.notANumber + } + + return undefined + } +} + +class IntTextField extends FloatTextField { + inputMode = "numeric" + + constructor(name?: string, explanation?: string) { + super(name ?? "int", explanation ?? "A number"); + } + + isValid(str): boolean { + str = "" + str; + return str !== undefined && str.indexOf(".") < 0 && !isNaN(Number(str)) + } + + getFeedback(s: string): Translation { + const n = Number(s) + if (isNaN(n)) { + return Translations.t.validation.nat.notANumber + } + if (Math.floor(n) !== n) { + return Translations.t.validation.nat.mustBeWhole + } + return undefined + } + +} + +class NatTextField extends IntTextField { + inputMode = "numeric" + + constructor(name?: string, explanation?: string) { + super(name ?? "nat", explanation ?? "A positive number or zero"); + } + + isValid(str): boolean { + if (str === undefined) { + return false; + } + str = "" + str; + + return str.indexOf(".") < 0 && !isNaN(Number(str)) && Number(str) >= 0 + } + + + getFeedback(s: string): Translation { + const spr = super.getFeedback(s) + if (spr !== undefined) { + return spr + } + const n = Number(s) + if (n < 0) { + return Translations.t.validation.nat.mustBePositive + } + return undefined + } +} + +class PNatTextField extends NatTextField { + inputmode = "numeric" + + constructor() { + super("pnat", "A strict positive number"); + } + + getFeedback(s: string): Translation { + const spr = super.getFeedback(s); + if (spr !== undefined) { + return spr + } + if (Number(s) === 0) { + return Translations.t.validation.pnat.noZero + } + return undefined + } + + isValid = (str) => { + if (!super.isValid(str)) { + return false + } + return Number(str) > 0 + } + +} + +class PFloatTextField extends FloatTextField { + inputmode = "decimal" + + constructor() { + super("pfloat", "A positive decimal (inclusive zero)"); + } + + isValid = (str) => !isNaN(Number(str)) && Number(str) >= 0 && !str.endsWith(".") && !str.endsWith(",") + + getFeedback(s: string): Translation { + const spr = super.getFeedback(s); + if (spr !== undefined) { + return spr + } + if (Number(s) < 0) { + return Translations.t.validation.nat.mustBePositive + } + return undefined; + } +} + +class EmailTextField extends TextFieldDef { + inputmode = "email" + + constructor() { + super("email", "An email adress"); + } + + isValid = (str) => { + if (str === undefined) { + return false + } + if (str.startsWith("mailto:")) { + str = str.substring("mailto:".length) + } + return EmailValidator.validate(str); + } + + reformat = str => { + if (str === undefined) { + return undefined + } + if (str.startsWith("mailto:")) { + str = str.substring("mailto:".length) + } + return str; + } + + getFeedback(s: string): Translation { + if(s.indexOf('@') < 0){return Translations.t.validation.email.noAt} + + return super.getFeedback(s); + } +} + +class PhoneTextField extends TextFieldDef { + inputmode = "tel" + + constructor() { + super("phone", "A phone number"); + } + + isValid(str, country: () => string): boolean { + if (str === undefined) { + return false; + } + if (str.startsWith("tel:")) { + str = str.substring("tel:".length) + } + let countryCode = undefined + if(country !== undefined){ + countryCode = (country())?.toUpperCase() + } + return parsePhoneNumberFromString(str, countryCode)?.isValid() ?? false + } + + reformat = (str, country: () => string) => { + if (str.startsWith("tel:")) { + str = str.substring("tel:".length) + } + return parsePhoneNumberFromString(str, (country())?.toUpperCase() as any).formatInternational(); + } +} + +class ColorTextField extends TextFieldDef { + constructor() { + super("color", "Shows a color picker"); + } + + inputHelper = (value) => { + return new ColorPicker(value.map(color => { + return Utils.ColourNameToHex(color ?? ""); + }, [], str => Utils.HexToColourName(str))) + } +} + +class DirectionTextField extends IntTextField { + inputMode = "numeric" + + constructor() { + super("direction", "A geographical direction, in degrees. 0° is north, 90° is east, ... Will return a value between 0 (incl) and 360 (excl)"); + } + + reformat(str): string { + const n = (Number(str) % 360) + return ""+n + } + + + inputHelper = (value, options) => { + const args = options.args ?? [] + options.location = options.location ?? [0, 0] + let zoom = 19 + if (args[0]) { + zoom = Number(args[0]) + if (isNaN(zoom)) { + throw "Invalid zoom level for argument at 'length'-input" + } + } + const location = new UIEventSource<Loc>({ + lat: options.location[0], + lon: options.location[1], + zoom: zoom + }) + if (args[1]) { + // We have a prefered map! + options.mapBackgroundLayer = AvailableBaseLayers.SelectBestLayerAccordingTo( + location, new UIEventSource<string[]>(args[1].split(",")) + ) + } + const di = new DirectionInput(options.mapBackgroundLayer, location, value) + di.SetStyle("max-width: 25rem;"); + + return di; + } +} + + +export default class ValidatedTextField { + + private static AllTextfieldDefs: TextFieldDef[] = [ + new StringTextField(), + new TextTextField(), + new DateTextField(), + new NatTextField(), + new IntTextField(), + new LengthTextField(), + new DirectionTextField(), + new WikidataTextField(), + new PNatTextField(), + new FloatTextField(), + new PFloatTextField(), + new EmailTextField(), + new UrlTextfieldDef(), + new PhoneTextField(), + new OpeningHoursTextField(), + new ColorTextField() + ] + public static allTypes: Map<string, TextFieldDef> = ValidatedTextField.allTypesDict(); + public static ForType(type: string = "string"): TextFieldDef { + return ValidatedTextField.allTypes.get(type) } public static HelpText(): BaseUIElement { const explanations: BaseUIElement[] = - ValidatedTextField.tpList.map(type => + ValidatedTextField.AllTextfieldDefs.map(type => new Combine([new Title(type.name, 3), type.explanation]).SetClass("flex flex-col")) return new Combine([ new Title("Available types for text fields", 1), @@ -644,41 +846,13 @@ export default class ValidatedTextField { ]).SetClass("flex flex-col") } - private static tp(name: string, - explanation: string, - isValid?: ((s: string, country?: () => string) => boolean), - reformat?: ((s: string, country?: () => string) => string), - inputHelper?: (value: UIEventSource<string>, options?: { - location: [number, number], - mapBackgroundLayer: UIEventSource<any>, - args: string[], - feature: any - }) => InputElement<string>, - inputmode?: string): TextFieldDef { - - if (isValid === undefined) { - isValid = () => true; - } - - if (reformat === undefined) { - reformat = (str, _) => str; - } - - - return { - name: name, - explanation: explanation, - isValid: isValid, - reformat: reformat, - inputHelper: inputHelper, - inputmode: inputmode - } + public static AvailableTypes(): string[] { + return ValidatedTextField.AllTextfieldDefs.map(tp => tp.name) } - private static allTypesDict(): Map<string, TextFieldDef> { const types = new Map<string, TextFieldDef>(); - for (const tp of ValidatedTextField.tpList) { + for (const tp of ValidatedTextField.AllTextfieldDefs) { types[tp.name] = tp; types.set(tp.name, tp); } diff --git a/UI/Input/VariableInputElement.ts b/UI/Input/VariableInputElement.ts index f7bb2d8f8f..e9a6aa3d97 100644 --- a/UI/Input/VariableInputElement.ts +++ b/UI/Input/VariableInputElement.ts @@ -5,7 +5,6 @@ import {VariableUiElement} from "../Base/VariableUIElement"; export default class VariableInputElement<T> extends InputElement<T> { - public readonly IsSelected: UIEventSource<boolean>; private readonly value: UIEventSource<T>; private readonly element: BaseUIElement private readonly upstream: UIEventSource<InputElement<T>>; @@ -16,7 +15,6 @@ export default class VariableInputElement<T> extends InputElement<T> { this.upstream = upstream; this.value = upstream.bind(v => v.GetValue()) this.element = new VariableUiElement(upstream) - this.IsSelected = upstream.bind(v => v.IsSelected) } GetValue(): UIEventSource<T> { diff --git a/UI/NewPoint/ConfirmLocationOfPoint.ts b/UI/NewPoint/ConfirmLocationOfPoint.ts index 7bdbb79bd7..dea2bbb82d 100644 --- a/UI/NewPoint/ConfirmLocationOfPoint.ts +++ b/UI/NewPoint/ConfirmLocationOfPoint.ts @@ -13,12 +13,15 @@ import Svg from "../../Svg"; import Toggle from "../Input/Toggle"; import SimpleAddUI, {PresetInfo} from "../BigComponents/SimpleAddUI"; import BaseLayer from "../../Models/BaseLayer"; +import Img from "../Base/Img"; +import Title from "../Base/Title"; export default class ConfirmLocationOfPoint extends Combine { constructor( state: { + featureSwitchIsTesting: UIEventSource<boolean>; osmConnection: OsmConnection, featurePipeline: FeaturePipeline, backgroundLayer?: UIEventSource<BaseLayer> @@ -34,6 +37,9 @@ export default class ConfirmLocationOfPoint extends Combine { let preciseInput: LocationInput = undefined if (preset.preciseInput !== undefined) { + // Create location input + + // We uncouple the event source const zloc = {...loc, zoom: 19} const locationSrc = new UIEventSource(zloc); @@ -62,8 +68,8 @@ export default class ConfirmLocationOfPoint extends Combine { maxSnapDistance: preset.preciseInput.maxSnapDistance, bounds: mapBounds }) - preciseInput.installBounds(0.15, true) - preciseInput.SetClass("h-32 rounded-xl overflow-hidden border border-gray").SetStyle("height: 12rem;") + preciseInput.installBounds(preset.boundsFactor ?? 0.25, true) + preciseInput.SetClass("h-40 rounded-xl overflow-hidden border border-gray").SetStyle("height: 12rem;") if (preset.preciseInput.snapToLayers && preset.preciseInput.snapToLayers.length > 0) { @@ -77,7 +83,7 @@ export default class ConfirmLocationOfPoint extends Combine { // return; } - bbox = bbox.pad(2); + bbox = bbox.pad(Math.max(preset.boundsFactor ?? 0.25, 2), Math.max(preset.boundsFactor ?? 0.25, 2)); loadedBbox = bbox; const allFeatures: { feature: any }[] = [] preset.preciseInput.snapToLayers.forEach(layerId => { @@ -138,7 +144,7 @@ export default class ConfirmLocationOfPoint extends Combine { ] ).SetClass("flex flex-col") ).onClick(() => { - + const appliedFilters = preset.layerToAddTo.appliedFilters; appliedFilters.data.forEach((_, k) => appliedFilters.data.set(k, undefined)) appliedFilters.ping() @@ -149,15 +155,14 @@ export default class ConfirmLocationOfPoint extends Combine { const hasActiveFilter = preset.layerToAddTo.appliedFilters .map(appliedFilters => { const activeFilters = Array.from(appliedFilters.values()).filter(f => f?.currentFilter !== undefined); - return activeFilters.length === 0; + return activeFilters.length === 0; }) - + // If at least one filter is active which _might_ hide a newly added item, this blocks the preset and requests the filter to be disabled const disableFiltersOrConfirm = new Toggle( openLayerOrConfirm, - disableFilter, + disableFilter, hasActiveFilter) - const tagInfo = SimpleAddUI.CreateTagInfoFor(preset, state.osmConnection); @@ -166,12 +171,26 @@ export default class ConfirmLocationOfPoint extends Combine { Translations.t.general.cancel ).onClick(cancel) + + let examples : BaseUIElement = undefined; + if(preset.exampleImages !== undefined && preset.exampleImages.length > 0){ + examples = new Combine([ + new Title( preset.exampleImages.length == 1 ? Translations.t.general.example : Translations.t.general.examples), + new Combine(preset.exampleImages.map(img => new Img(img).SetClass("h-64 m-1 w-auto rounded-lg"))).SetClass("flex flex-wrap items-stretch") + ]) + + } + super([ - state.osmConnection.userDetails.data.dryRun ? - Translations.t.general.testing.Clone().SetClass("alert") : undefined, + new Toggle( + Translations.t.general.testing.SetClass("alert"), + undefined, + state.featureSwitchIsTesting + ), disableFiltersOrConfirm, cancelButton, preset.description, + examples, tagInfo ]) diff --git a/UI/OpeningHours/OpeningHours.ts b/UI/OpeningHours/OpeningHours.ts index b30b522bd3..94f42b50f9 100644 --- a/UI/OpeningHours/OpeningHours.ts +++ b/UI/OpeningHours/OpeningHours.ts @@ -298,16 +298,16 @@ export class OH { } } - public static simplify(str: string): string{ + public static simplify(str: string): string { return OH.ToString(OH.MergeTimes(OH.Parse(str))) } - - public static Parse(rules: string) : OpeningHour[] { + + public static Parse(rules: string): OpeningHour[] { if (rules === undefined || rules === "") { return [] } - const ohs : OpeningHour[] = [] + const ohs: OpeningHour[] = [] const split = rules.split(";"); diff --git a/UI/OpeningHours/OpeningHoursPickerTable.ts b/UI/OpeningHours/OpeningHoursPickerTable.ts index 837bc10b0d..90fbd93c73 100644 --- a/UI/OpeningHours/OpeningHoursPickerTable.ts +++ b/UI/OpeningHours/OpeningHoursPickerTable.ts @@ -24,7 +24,6 @@ export default class OpeningHoursPickerTable extends InputElement<OpeningHour[]> Translations.t.general.weekdays.abbreviations.saturday, Translations.t.general.weekdays.abbreviations.sunday ] - public readonly IsSelected: UIEventSource<boolean>; /* These html-elements are an overlay over the table columns and act as a host for the ranges in the weekdays */ @@ -34,7 +33,6 @@ export default class OpeningHoursPickerTable extends InputElement<OpeningHour[]> constructor(source?: UIEventSource<OpeningHour[]>) { super(); this.source = source ?? new UIEventSource<OpeningHour[]>([]); - this.IsSelected = new UIEventSource<boolean>(false); this.SetStyle("width:100%;height:100%;display:block;"); } diff --git a/UI/OpeningHours/OpeningHoursVisualization.ts b/UI/OpeningHours/OpeningHoursVisualization.ts index 2414fc00f2..41744a4897 100644 --- a/UI/OpeningHours/OpeningHoursVisualization.ts +++ b/UI/OpeningHours/OpeningHoursVisualization.ts @@ -23,7 +23,7 @@ export default class OpeningHoursVisualization extends Toggle { Translations.t.general.weekdays.abbreviations.sunday, ] - constructor(tags: UIEventSource<any>, state:{osmConnection?: OsmConnection}, key: string, prefix = "", postfix = "") { + constructor(tags: UIEventSource<any>, state: { osmConnection?: OsmConnection }, key: string, prefix = "", postfix = "") { const tagsDirect = tags.data; const ohTable = new VariableUiElement(tags .map(tags => { diff --git a/UI/Popup/AutoApplyButton.ts b/UI/Popup/AutoApplyButton.ts index bf545e79b1..f4eb867254 100644 --- a/UI/Popup/AutoApplyButton.ts +++ b/UI/Popup/AutoApplyButton.ts @@ -19,6 +19,10 @@ import {OsmConnection} from "../../Logic/Osm/OsmConnection"; import Translations from "../i18n/Translations"; import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"; import {Changes} from "../../Logic/Osm/Changes"; +import {UIElement} from "../UIElement"; +import FilteredLayer from "../../Models/FilteredLayer"; +import TagRenderingConfig from "../../Models/ThemeConfig/TagRenderingConfig"; +import Lazy from "../Base/Lazy"; export interface AutoAction extends SpecialVisualization { supportsAutoAction: boolean @@ -29,6 +33,127 @@ export interface AutoAction extends SpecialVisualization { }, tagSource: UIEventSource<any>, argument: string[]): Promise<void> } +class ApplyButton extends UIElement { + private readonly icon: string; + private readonly text: string; + private readonly targetTagRendering: string; + private readonly target_layer_id: string; + private readonly state: FeaturePipelineState; + private readonly target_feature_ids: string[]; + private readonly buttonState = new UIEventSource<"idle" | "running" | "done" | { error: string }>("idle") + private readonly layer: FilteredLayer; + private readonly tagRenderingConfig: TagRenderingConfig; + + constructor(state: FeaturePipelineState, target_feature_ids: string[], options: { + target_layer_id: string, + targetTagRendering: string, + text: string, + icon: string + }) { + super() + this.state = state; + this.target_feature_ids = target_feature_ids; + this.target_layer_id = options.target_layer_id; + this.targetTagRendering = options.targetTagRendering; + this.text = options.text + this.icon = options.icon + this.layer = this.state.filteredLayers.data.find(l => l.layerDef.id === this.target_layer_id) + this.tagRenderingConfig = this.layer.layerDef.tagRenderings.find(tr => tr.id === this.targetTagRendering) + + } + + protected InnerRender(): string | BaseUIElement { + if (this.target_feature_ids.length === 0) { + return new FixedUiElement("No elements found to perform action") + } + + + if (this.tagRenderingConfig === undefined) { + return new FixedUiElement("Target tagrendering " + this.targetTagRendering + " not found").SetClass("alert") + } + const self = this; + const button = new SubtleButton( + new Img(this.icon), + this.text + ).onClick(() => { + this.buttonState.setData("running") + window.setTimeout(() => { + + self.Run(); + }, 50) + }); + + const explanation = new Combine(["The following objects will be updated: ", + ...this.target_feature_ids.map(id => new Combine([new Link(id, "https:/ /openstreetmap.org/" + id, true), ", "]))]).SetClass("subtle") + + const previewMap = Minimap.createMiniMap({ + allowMoving: false, + background: this.state.backgroundLayer, + addLayerControl: true, + }).SetClass("h-48") + + const features = this.target_feature_ids.map(id => this.state.allElements.ContainingFeatures.get(id)) + + new ShowDataLayer({ + leafletMap: previewMap.leafletMap, + popup: undefined, + zoomToFeatures: true, + features: new StaticFeatureSource(features, false), + state: this.state, + layerToShow: this.layer.layerDef, + }) + + + return new VariableUiElement(this.buttonState.map( + st => { + if (st === "idle") { + return new Combine([button, previewMap, explanation]); + } + if (st === "done") { + return new FixedUiElement("All done!").SetClass("thanks") + } + if (st === "running") { + return new Loading("Applying changes...") + } + const error = st.error + return new Combine([new FixedUiElement("Something went wrong...").SetClass("alert"), new FixedUiElement(error).SetClass("subtle")]).SetClass("flex flex-col") + } + )) + } + + private async Run() { + + + try { + console.log("Applying auto-action on " + this.target_feature_ids.length + " features") + + for (const targetFeatureId of this.target_feature_ids) { + const featureTags = this.state.allElements.getEventSourceById(targetFeatureId) + const rendering = this.tagRenderingConfig.GetRenderValue(featureTags.data).txt + const specialRenderings = Utils.NoNull(SubstitutedTranslation.ExtractSpecialComponents(rendering) + .map(x => x.special)) + .filter(v => v.func["supportsAutoAction"] === true) + + if (specialRenderings.length == 0) { + console.warn("AutoApply: feature " + targetFeatureId + " got a rendering without supported auto actions:", rendering) + } + + for (const specialRendering of specialRenderings) { + const action = <AutoAction>specialRendering.func + await action.applyActionOn(this.state, featureTags, specialRendering.args) + } + } + console.log("Flushing changes...") + await this.state.changes.flushChanges("Auto button") + this.buttonState.setData("done") + } catch (e) { + console.error("Error while running autoApply: ", e) + this.buttonState.setData({error: e}) + } + } + +} + export default class AutoApplyButton implements SpecialVisualization { public readonly docs: string; public readonly funcName: string = "auto_apply"; @@ -60,118 +185,6 @@ export default class AutoApplyButton implements SpecialVisualization { this.docs = AutoApplyButton.generateDocs(allSpecialVisualisations.filter(sv => sv["supportsAutoAction"] === true).map(sv => sv.funcName)) } - constr(state: FeaturePipelineState, tagSource: UIEventSource<any>, argument: string[], guistate: DefaultGuiState): BaseUIElement { - - if (!state.layoutToUse.official && !(state.featureSwitchIsTesting.data || state.osmConnection._oauth_config.url === OsmConnection.oauth_configs["osm-test"].url)) { - const t = Translations.t.general.add.import; - return new Combine([new FixedUiElement("The auto-apply button is only available in official themes (or in testing mode)").SetClass("alert"), t.howToTest]) - } - - const to_parse = tagSource.data[argument[1]] - if (to_parse === undefined) { - return new Loading("Gathering which elements support auto-apply... ") - } - try { - - - const target_layer_id = argument[0] - const target_feature_ids = <string[]>JSON.parse(to_parse) - - if(target_feature_ids.length === 0){ - return new FixedUiElement("No elements found to perform action") - } - - const targetTagRendering = argument[2] - const text = argument[3] - const icon = argument[4] - - const layer = state.filteredLayers.data.filter(l => l.layerDef.id === target_layer_id)[0] - - const tagRenderingConfig = layer.layerDef.tagRenderings.filter(tr => tr.id === targetTagRendering)[0] - - if (tagRenderingConfig === undefined) { - return new FixedUiElement("Target tagrendering " + targetTagRendering + " not found").SetClass("alert") - } - - const buttonState = new UIEventSource<"idle" | "running" | "done" | {error: string}>("idle") - - const button = new SubtleButton( - new Img(icon), - text - ).onClick(async () => { - buttonState.setData("running") - try { - - - for (const targetFeatureId of target_feature_ids) { - const featureTags = state.allElements.getEventSourceById(targetFeatureId) - const rendering = tagRenderingConfig.GetRenderValue(featureTags.data).txt - const specialRenderings = Utils.NoNull(SubstitutedTranslation.ExtractSpecialComponents(rendering) - .map(x => x.special)) - .filter(v => v.func["supportsAutoAction"] === true) - - for (const specialRendering of specialRenderings) { - const action = <AutoAction>specialRendering.func - await action.applyActionOn(state, featureTags, specialRendering.args) - } - } - console.log("Flushing changes...") - await state.changes.flushChanges("Auto button") - buttonState.setData("done") - } catch (e) { - console.error("Error while running autoApply: ", e) - buttonState.setData({error: e}) - } - }); - - const explanation = new Combine(["The following objects will be updated: ", - ...target_feature_ids.map(id => new Combine([new Link(id, "https:/ /openstreetmap.org/" + id, true), ", "]))]).SetClass("subtle") - - const previewMap = Minimap.createMiniMap({ - allowMoving: false, - background: state.backgroundLayer, - addLayerControl: true, - }).SetClass("h-48") - - const features = target_feature_ids.map(id => state.allElements.ContainingFeatures.get(id)) - - new ShowDataLayer({ - leafletMap: previewMap.leafletMap, - enablePopups: false, - zoomToFeatures: true, - features: new StaticFeatureSource(features, false), - allElements: state.allElements, - layerToShow: layer.layerDef, - }) - - - return new VariableUiElement(buttonState.map( - st => { - if (st === "idle") { - return new Combine([button, previewMap, explanation]); - } - if (st === "done") { - return new FixedUiElement("All done!").SetClass("thanks") - } - if (st === "running") { - return new Loading("Applying changes...") - } - const error =st.error - return new Combine([new FixedUiElement("Something went wrong...").SetClass("alert"), new FixedUiElement(error).SetClass("subtle")]).SetClass("flex flex-col") - } - )) - - - } catch (e) { - console.log("To parse is", to_parse) - return new FixedUiElement("Could not generate a auto_apply-button for key " + argument[0] + " due to " + e).SetClass("alert") - } - } - - getLayerDependencies(args: string[]): string[] { - return [args[0]] - } - private static generateDocs(supportedActions: string[]) { return [ "A button to run many actions for many features at once.\n", @@ -183,5 +196,49 @@ export default class AutoApplyButton implements SpecialVisualization { ].join("\n") } + constr(state: FeaturePipelineState, tagSource: UIEventSource<any>, argument: string[], guistate: DefaultGuiState): BaseUIElement { + try { + + if (!state.layoutToUse.official && !(state.featureSwitchIsTesting.data || state.osmConnection._oauth_config.url === OsmConnection.oauth_configs["osm-test"].url)) { + const t = Translations.t.general.add.import; + return new Combine([new FixedUiElement("The auto-apply button is only available in official themes (or in testing mode)").SetClass("alert"), t.howToTest]) + } + + const target_layer_id = argument[0] + const targetTagRendering = argument[2] + const text = argument[3] + const icon = argument[4] + const options = { + target_layer_id, targetTagRendering, text, icon + } + + return new Lazy(() => { + const to_parse = new UIEventSource(undefined) + // Very ugly hack: read the value every 500ms + UIEventSource.Chronic(500, () => to_parse.data === undefined).addCallback(() => { + const applicable = tagSource.data[argument[1]] + to_parse.setData(applicable) + }) + + const loading = new Loading("Gathering which elements support auto-apply... "); + return new VariableUiElement(to_parse.map(ids => { + if (ids === undefined) { + return loading + } + + return new ApplyButton(state, JSON.parse(ids), options); + })) + }) + + + } catch (e) { + return new FixedUiElement("Could not generate a auto_apply-button for key " + argument[0] + " due to " + e).SetClass("alert") + } + } + + getLayerDependencies(args: string[]): string[] { + return [args[0]] + } + } \ No newline at end of file diff --git a/UI/Popup/DeleteWizard.ts b/UI/Popup/DeleteWizard.ts index 5b66956f2a..ba289a2e24 100644 --- a/UI/Popup/DeleteWizard.ts +++ b/UI/Popup/DeleteWizard.ts @@ -1,5 +1,4 @@ import {VariableUiElement} from "../Base/VariableUIElement"; -import State from "../../State"; import Toggle from "../Input/Toggle"; import Translations from "../i18n/Translations"; import Svg from "../../Svg"; @@ -17,6 +16,10 @@ import TagRenderingConfig from "../../Models/ThemeConfig/TagRenderingConfig"; import {AndOrTagConfigJson} from "../../Models/ThemeConfig/Json/TagConfigJson"; import DeleteConfig from "../../Models/ThemeConfig/DeleteConfig"; import {OsmObject} from "../../Logic/Osm/OsmObject"; +import {ElementStorage} from "../../Logic/ElementStorage"; +import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"; +import {Changes} from "../../Logic/Osm/Changes"; +import {OsmConnection} from "../../Logic/Osm/OsmConnection"; export default class DeleteWizard extends Toggle { /** @@ -35,13 +38,21 @@ export default class DeleteWizard extends Toggle { * (Note that _delete_reason is used as trigger to do actual deletion - setting such a tag WILL delete from the database with that as changeset comment) * * @param id: The id of the element to remove + * @param state: the state of the application * @param options softDeletionTags: the tags to apply if the user doesn't have permission to delete, e.g. 'disused:amenity=public_bookcase', 'amenity='. After applying, the element should not be picked up on the map anymore. If undefined, the wizard will only show up if the point can be (hard) deleted */ constructor(id: string, + state: { + osmConnection: OsmConnection; + allElements: ElementStorage, + layoutToUse?: LayoutConfig, + changes?: Changes + }, options: DeleteConfig) { - const deleteAbility = new DeleteabilityChecker(id, options.neededChangesets) - const tagsSource = State.state.allElements.getEventSourceById(id) + + const deleteAbility = new DeleteabilityChecker(id, state, options.neededChangesets) + const tagsSource = state.allElements.getEventSourceById(id) const isDeleted = new UIEventSource(false) const allowSoftDeletion = !!options.softDeletionTags @@ -59,12 +70,12 @@ export default class DeleteWizard extends Toggle { const deleteAction = new DeleteAction(id, options.softDeletionTags, { - theme: State.state?.layoutToUse?.id ?? "unkown", + theme: state?.layoutToUse?.id ?? "unkown", specialMotivation: deleteReasonMatch[0]?.v }, deleteAbility.canBeDeleted.data.canBeDeleted ) - State.state.changes.applyAction(deleteAction) + state.changes?.applyAction(deleteAction) isDeleted.setData(true) } @@ -77,8 +88,9 @@ export default class DeleteWizard extends Toggle { return new TagRenderingQuestion( tagsSource, config, + state, { - cancelButton: cancelButton, + cancelButton, /*Using a custom save button constructor erases all logic to actually save, so we have to listen for the click!*/ saveButtonConstr: (v) => DeleteWizard.constructConfirmButton(v).onClick(() => { doDelete(v.data) @@ -112,7 +124,7 @@ export default class DeleteWizard extends Toggle { new Toggle( question, new SubtleButton(Svg.envelope_ui(), t.readMessages.Clone()), - State.state.osmConnection.userDetails.map(ud => ud.csCount > Constants.userJourney.addNewPointWithUnreadMessagesUnlock || ud.unreadMessages == 0) + state.osmConnection.userDetails.map(ud => ud.csCount > Constants.userJourney.addNewPointWithUnreadMessagesUnlock || ud.unreadMessages == 0) ), deleteButton, @@ -131,8 +143,8 @@ export default class DeleteWizard extends Toggle { , deleteAbility.canBeDeleted.map(cbd => allowSoftDeletion || cbd.canBeDeleted !== false)), - t.loginToDelete.Clone().onClick(State.state.osmConnection.AttemptLogin), - State.state.osmConnection.isLoggedIn + t.loginToDelete.Clone().onClick(state.osmConnection.AttemptLogin), + state.osmConnection.isLoggedIn ), isDeleted), undefined, @@ -275,11 +287,16 @@ class DeleteabilityChecker { public readonly canBeDeleted: UIEventSource<{ canBeDeleted?: boolean, reason: Translation }>; private readonly _id: string; private readonly _allowDeletionAtChangesetCount: number; + private readonly _state: { + osmConnection: OsmConnection + }; constructor(id: string, + state: { osmConnection: OsmConnection }, allowDeletionAtChangesetCount?: number) { this._id = id; + this._state = state; this._allowDeletionAtChangesetCount = allowDeletionAtChangesetCount ?? Number.MAX_VALUE; this.canBeDeleted = new UIEventSource<{ canBeDeleted?: boolean; reason: Translation }>({ @@ -299,6 +316,7 @@ class DeleteabilityChecker { const t = Translations.t.delete; const id = this._id; const state = this.canBeDeleted + const self = this; if (!id.startsWith("node")) { this.canBeDeleted.setData({ canBeDeleted: false, @@ -308,8 +326,7 @@ class DeleteabilityChecker { } // Does the currently logged in user have enough experience to delete this point? - - const deletingPointsOfOtherAllowed = State.state.osmConnection.userDetails.map(ud => { + const deletingPointsOfOtherAllowed = this._state.osmConnection.userDetails.map(ud => { if (ud === undefined) { return undefined; } @@ -320,15 +337,14 @@ class DeleteabilityChecker { }) const previousEditors = new UIEventSource<number[]>(undefined) - const allByMyself = previousEditors.map(previous => { if (previous === null || previous === undefined) { // Not yet downloaded return null; } - const userId = State.state.osmConnection.userDetails.data.uid; + const userId = self._state.osmConnection.userDetails.data.uid; return !previous.some(editor => editor !== userId) - }, [State.state.osmConnection.userDetails]) + }, [self._state.osmConnection.userDetails]) // User allowed OR only edited by self? diff --git a/UI/Popup/EditableTagRendering.ts b/UI/Popup/EditableTagRendering.ts index bd70be9b8a..0075d26514 100644 --- a/UI/Popup/EditableTagRendering.ts +++ b/UI/Popup/EditableTagRendering.ts @@ -3,19 +3,21 @@ import TagRenderingQuestion from "./TagRenderingQuestion"; import Translations from "../i18n/Translations"; import Combine from "../Base/Combine"; import TagRenderingAnswer from "./TagRenderingAnswer"; -import State from "../../State"; import Svg from "../../Svg"; import Toggle from "../Input/Toggle"; import BaseUIElement from "../BaseUIElement"; import TagRenderingConfig from "../../Models/ThemeConfig/TagRenderingConfig"; import {Unit} from "../../Models/Unit"; import Lazy from "../Base/Lazy"; +import {OsmConnection} from "../../Logic/Osm/OsmConnection"; +import {FixedUiElement} from "../Base/FixedUiElement"; export default class EditableTagRendering extends Toggle { constructor(tags: UIEventSource<any>, configuration: TagRenderingConfig, units: Unit [], + state, options: { editMode?: UIEventSource<boolean>, innerElementClasses?: string @@ -32,8 +34,14 @@ export default class EditableTagRendering extends Toggle { super( new Lazy(() => { const editMode = options.editMode ?? new UIEventSource<boolean>(false) - const rendering = EditableTagRendering.CreateRendering(tags, configuration, units, editMode); + let rendering = EditableTagRendering.CreateRendering(state, tags, configuration, units, editMode); rendering.SetClass(options.innerElementClasses) + if(state.featureSwitchIsDebugging.data || state.featureSwitchIsTesting.data){ + rendering = new Combine([ + new FixedUiElement(configuration.id).SetClass("self-end subtle"), + rendering + ]).SetClass("flex flex-col") + } return rendering }), undefined, @@ -41,12 +49,12 @@ export default class EditableTagRendering extends Toggle { ) } - private static CreateRendering(tags: UIEventSource<any>, configuration: TagRenderingConfig, units: Unit[], editMode: UIEventSource<boolean>): BaseUIElement { - const answer: BaseUIElement = new TagRenderingAnswer(tags, configuration, State.state) + private static CreateRendering(state: { featureSwitchUserbadge?: UIEventSource<boolean>, osmConnection: OsmConnection }, tags: UIEventSource<any>, configuration: TagRenderingConfig, units: Unit[], editMode: UIEventSource<boolean>): BaseUIElement { + const answer: BaseUIElement = new TagRenderingAnswer(tags, configuration, state) answer.SetClass("w-full") let rendering = answer; - if (configuration.question !== undefined && State.state?.featureSwitchUserbadge?.data) { + if (configuration.question !== undefined && state?.featureSwitchUserbadge?.data) { // We have a question and editing is enabled const answerWithEditButton = new Combine([answer, new Toggle(new Combine([Svg.pencil_ui()]).SetClass("block relative h-10 w-10 p-2 float-right").SetStyle("border: 1px solid black; border-radius: 0.7em") @@ -54,16 +62,16 @@ export default class EditableTagRendering extends Toggle { editMode.setData(true); }), undefined, - State.state.osmConnection.isLoggedIn) + state.osmConnection.isLoggedIn) ]).SetClass("flex justify-between w-full") const question = new Lazy(() => - new TagRenderingQuestion(tags, configuration, + new TagRenderingQuestion(tags, configuration, state, { units: units, cancelButton: Translations.t.general.cancel.Clone() - .SetClass("btn btn-secondary mr-3") + .SetClass("btn btn-secondary") .onClick(() => { editMode.setData(false) }), diff --git a/UI/Popup/FeatureInfoBox.ts b/UI/Popup/FeatureInfoBox.ts index 0bcfd6197c..55f1a0b671 100644 --- a/UI/Popup/FeatureInfoBox.ts +++ b/UI/Popup/FeatureInfoBox.ts @@ -3,7 +3,6 @@ import EditableTagRendering from "./EditableTagRendering"; import QuestionBox from "./QuestionBox"; import Combine from "../Base/Combine"; import TagRenderingAnswer from "./TagRenderingAnswer"; -import State from "../../State"; import ScrollableFullScreen from "../Base/ScrollableFullScreen"; import Constants from "../../Models/Constants"; import SharedTagRenderings from "../../Customizations/SharedTagRenderings"; @@ -16,18 +15,41 @@ import LayerConfig from "../../Models/ThemeConfig/LayerConfig"; import {Utils} from "../../Utils"; import MoveWizard from "./MoveWizard"; import Toggle from "../Input/Toggle"; +import {OsmConnection} from "../../Logic/Osm/OsmConnection"; +import {Changes} from "../../Logic/Osm/Changes"; +import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"; +import {ElementStorage} from "../../Logic/ElementStorage"; +import FilteredLayer from "../../Models/FilteredLayer"; +import BaseLayer from "../../Models/BaseLayer"; +import Lazy from "../Base/Lazy"; export default class FeatureInfoBox extends ScrollableFullScreen { + public constructor( tags: UIEventSource<any>, layerConfig: LayerConfig, + state: { + filteredLayers: UIEventSource<FilteredLayer[]>; + backgroundLayer: UIEventSource<BaseLayer>; + featureSwitchIsTesting: UIEventSource<boolean>; + featureSwitchIsDebugging: UIEventSource<boolean>; + featureSwitchShowAllQuestions: UIEventSource<boolean>; + osmConnection: OsmConnection, + featureSwitchUserbadge: UIEventSource<boolean>, + changes: Changes, + layoutToUse: LayoutConfig, + allElements: ElementStorage + }, hashToShow?: string, - isShown?: UIEventSource<boolean> + isShown?: UIEventSource<boolean>, ) { - super(() => FeatureInfoBox.GenerateTitleBar(tags, layerConfig), - () => FeatureInfoBox.GenerateContent(tags, layerConfig), - hashToShow ?? tags.data.id, + if (state === undefined) { + throw "State is undefined!" + } + super(() => FeatureInfoBox.GenerateTitleBar(tags, layerConfig, state), + () => FeatureInfoBox.GenerateContent(tags, layerConfig, state), + hashToShow ?? tags.data.id ?? "item", isShown); if (layerConfig === undefined) { @@ -37,11 +59,12 @@ export default class FeatureInfoBox extends ScrollableFullScreen { } private static GenerateTitleBar(tags: UIEventSource<any>, - layerConfig: LayerConfig): BaseUIElement { - const title = new TagRenderingAnswer(tags, layerConfig.title ?? new TagRenderingConfig("POI"), State.state) - .SetClass("break-words font-bold sm:p-0.5 md:p-1 sm:p-1.5 md:p-2"); + layerConfig: LayerConfig, + state: {}): BaseUIElement { + const title = new TagRenderingAnswer(tags, layerConfig.title ?? new TagRenderingConfig("POI"), state) + .SetClass("break-words font-bold sm:p-0.5 md:p-1 sm:p-1.5 md:p-2 text-2xl"); const titleIcons = new Combine( - layerConfig.titleIcons.map(icon => new TagRenderingAnswer(tags, icon, State.state, + layerConfig.titleIcons.map(icon => new TagRenderingAnswer(tags, icon, state, "block w-8 h-8 max-h-8 align-baseline box-content sm:p-0.5 w-10",) )) .SetClass("flex flex-row flex-wrap pt-0.5 sm:pt-1 items-center mr-2") @@ -52,20 +75,32 @@ export default class FeatureInfoBox extends ScrollableFullScreen { } private static GenerateContent(tags: UIEventSource<any>, - layerConfig: LayerConfig): BaseUIElement { + layerConfig: LayerConfig, + state: { + filteredLayers: UIEventSource<FilteredLayer[]>; + backgroundLayer: UIEventSource<BaseLayer>; + featureSwitchIsTesting: UIEventSource<boolean>; + featureSwitchIsDebugging: UIEventSource<boolean>; + featureSwitchShowAllQuestions: UIEventSource<boolean>; + osmConnection: OsmConnection, + featureSwitchUserbadge: UIEventSource<boolean>, + changes: Changes, + layoutToUse: LayoutConfig, + allElements: ElementStorage + }): BaseUIElement { let questionBoxes: Map<string, QuestionBox> = new Map<string, QuestionBox>(); const allGroupNames = Utils.Dedup(layerConfig.tagRenderings.map(tr => tr.group)) - if (State.state.featureSwitchUserbadge.data) { + if (state?.featureSwitchUserbadge?.data ?? true) { const questionSpecs = layerConfig.tagRenderings.filter(tr => tr.id === "questions") for (const groupName of allGroupNames) { const questions = layerConfig.tagRenderings.filter(tr => tr.group === groupName) const questionSpec = questionSpecs.filter(tr => tr.group === groupName)[0] - const questionBox = new QuestionBox({ + const questionBox = new QuestionBox(state, { tagsSource: tags, tagRenderings: questions, units: layerConfig.units, - showAllQuestionsAtOnce: questionSpec?.freeform?.helperArgs["showAllQuestions"] ?? State.state.featureSwitchShowAllQuestions + showAllQuestionsAtOnce: questionSpec?.freeform?.helperArgs["showAllQuestions"] ?? state.featureSwitchShowAllQuestions }); questionBoxes.set(groupName, questionBox) } @@ -86,10 +121,10 @@ export default class FeatureInfoBox extends ScrollableFullScreen { if (tr.render !== undefined) { questionBox.SetClass("text-sm") - const renderedQuestion = new TagRenderingAnswer(tags, tr,State.state, + const renderedQuestion = new TagRenderingAnswer(tags, tr, state, tr.group + " questions", "", { - specialViz: new Map<string, BaseUIElement>([["questions", questionBox]]) - }) + specialViz: new Map<string, BaseUIElement>([["questions", questionBox]]) + }) const possiblyHidden = new Toggle( renderedQuestion, undefined, @@ -109,7 +144,7 @@ export default class FeatureInfoBox extends ScrollableFullScreen { classes = "" } - const etr = new EditableTagRendering(tags, tr, layerConfig.units, { + const etr = new EditableTagRendering(tags, tr, layerConfig.units, state, { innerElementClasses: innerClasses }) if (isHeader) { @@ -121,8 +156,29 @@ export default class FeatureInfoBox extends ScrollableFullScreen { allRenderings.push(...renderingsForGroup) } + allRenderings.push( + new Toggle( + new Lazy(() => FeatureInfoBox.createEditElements(questionBoxes, layerConfig, tags, state)), + undefined, + state.featureSwitchUserbadge + )) + return new Combine(allRenderings).SetClass("block") + } + /** + * All the edit elements, together (note that the question boxes are passed though) + * @param questionBoxes + * @param layerConfig + * @param tags + * @param state + * @private + */ + private static createEditElements(questionBoxes: Map<string, QuestionBox>, + layerConfig: LayerConfig, + tags: UIEventSource<any>, + state: { filteredLayers: UIEventSource<FilteredLayer[]>; backgroundLayer: UIEventSource<BaseLayer>; featureSwitchIsTesting: UIEventSource<boolean>; featureSwitchIsDebugging: UIEventSource<boolean>; featureSwitchShowAllQuestions: UIEventSource<boolean>; osmConnection: OsmConnection; featureSwitchUserbadge: UIEventSource<boolean>; changes: Changes; layoutToUse: LayoutConfig; allElements: ElementStorage }) + : BaseUIElement { let editElements: BaseUIElement[] = [] questionBoxes.forEach(questionBox => { editElements.push(questionBox); @@ -131,10 +187,13 @@ export default class FeatureInfoBox extends ScrollableFullScreen { if (layerConfig.allowMove) { editElements.push( new VariableUiElement(tags.map(tags => tags.id).map(id => { - const feature = State.state.allElements.ContainingFeatures.get(id) + const feature = state.allElements.ContainingFeatures.get(id) + if (feature === undefined) { + return "This feature is not register in the state.allElements and cannot be moved" + } return new MoveWizard( feature, - State.state, + state, layerConfig.allowMove ); }) @@ -147,6 +206,7 @@ export default class FeatureInfoBox extends ScrollableFullScreen { new VariableUiElement(tags.map(tags => tags.id).map(id => new DeleteWizard( id, + state, layerConfig.deletion )) ).SetClass("text-base")) @@ -155,59 +215,45 @@ export default class FeatureInfoBox extends ScrollableFullScreen { if (layerConfig.allowSplit) { editElements.push( new VariableUiElement(tags.map(tags => tags.id).map(id => - new SplitRoadWizard(id)) + new SplitRoadWizard(id, state)) ).SetClass("text-base")) } editElements.push( new VariableUiElement( - State.state.osmConnection.userDetails + state.osmConnection.userDetails .map(ud => ud.csCount) .map(csCount => { if (csCount <= Constants.userJourney.historyLinkVisible - && State.state.featureSwitchIsDebugging.data == false - && State.state.featureSwitchIsTesting.data === false) { + && state.featureSwitchIsDebugging.data == false + && state.featureSwitchIsTesting.data === false) { return undefined } - return new TagRenderingAnswer(tags, SharedTagRenderings.SharedTagRendering.get("last_edit"), State.state); + return new TagRenderingAnswer(tags, SharedTagRenderings.SharedTagRendering.get("last_edit"), state); - }, [State.state.featureSwitchIsDebugging, State.state.featureSwitchIsTesting]) + }, [state.featureSwitchIsDebugging, state.featureSwitchIsTesting]) ) ) editElements.push( new VariableUiElement( - State.state.featureSwitchIsDebugging.map(isDebugging => { + state.featureSwitchIsDebugging.map(isDebugging => { if (isDebugging) { const config_all_tags: TagRenderingConfig = new TagRenderingConfig({render: "{all_tags()}"}, ""); const config_download: TagRenderingConfig = new TagRenderingConfig({render: "{export_as_geojson()}"}, ""); const config_id: TagRenderingConfig = new TagRenderingConfig({render: "{open_in_iD()}"}, ""); - return new Combine([new TagRenderingAnswer(tags, config_all_tags, State.state), - new TagRenderingAnswer(tags, config_download, State.state), - new TagRenderingAnswer(tags, config_id, State.state)]) + return new Combine([new TagRenderingAnswer(tags, config_all_tags, state), + new TagRenderingAnswer(tags, config_download, state), + new TagRenderingAnswer(tags, config_id, state)]) } }) ) ) - const editors = new VariableUiElement(State.state.featureSwitchUserbadge.map( - userbadge => { - if (!userbadge) { - return undefined - } - return new Combine(editElements).SetClass("flex flex-col") - } - )) - allRenderings.push(editors) - - return new Combine(allRenderings).SetClass("block") + return new Combine(editElements).SetClass("flex flex-col") } - - - - } diff --git a/UI/Popup/ImportButton.ts b/UI/Popup/ImportButton.ts index 1d65a24321..7ad8842e82 100644 --- a/UI/Popup/ImportButton.ts +++ b/UI/Popup/ImportButton.ts @@ -21,7 +21,7 @@ import ShowDataLayer from "../ShowDataLayer/ShowDataLayer"; import StaticFeatureSource from "../../Logic/FeatureSource/Sources/StaticFeatureSource"; import ShowDataMultiLayer from "../ShowDataLayer/ShowDataMultiLayer"; import CreateWayWithPointReuseAction, {MergePointConfig} from "../../Logic/Osm/Actions/CreateWayWithPointReuseAction"; -import OsmChangeAction, {OsmCreateAction} from "../../Logic/Osm/Actions/OsmChangeAction"; +import OsmChangeAction from "../../Logic/Osm/Actions/OsmChangeAction"; import FeatureSource from "../../Logic/FeatureSource/FeatureSource"; import {OsmObject, OsmWay} from "../../Logic/Osm/OsmObject"; import FeaturePipelineState from "../../Logic/State/FeaturePipelineState"; @@ -37,12 +37,17 @@ import LayerConfig from "../../Models/ThemeConfig/LayerConfig"; import * as conflation_json from "../../assets/layers/conflation/conflation.json"; import {GeoOperations} from "../../Logic/GeoOperations"; import {LoginToggle} from "./LoginButton"; +import {AutoAction} from "./AutoApplyButton"; +import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"; +import {Changes} from "../../Logic/Osm/Changes"; +import {ElementStorage} from "../../Logic/ElementStorage"; /** * A helper class for the various import-flows. - * An import-flow always starts with a 'Import this'-button. Upon click, a custom confirmation panel is provided + * An import-flow always starts with a 'Import this'-button. Upon click, a custom confirmation panel is provided */ abstract class AbstractImportButton implements SpecialVisualizations { + protected static importedIds = new Set<string>() public readonly funcName: string public readonly docs: string public readonly args: { name: string, defaultValue?: string, doc: string }[] @@ -136,12 +141,12 @@ ${Utils.special_visualizations_importRequirementDocs} // Explanation of the tags that will be applied onto the imported/conflated object - + let tagSpec = args.tags; - if(tagSpec.indexOf(" ")< 0 && tagSpec.indexOf(";") < 0 && tagSource.data[args.tags] !== undefined){ + if (tagSpec.indexOf(" ") < 0 && tagSpec.indexOf(";") < 0 && tagSource.data[args.tags] !== undefined) { // This is probably a key tagSpec = tagSource.data[args.tags] - console.warn("Using tagspec tagSource.data["+args.tags+"] which is ",tagSpec) + console.debug("The import button is using tags from properties[" + args.tags + "] of this object, namely ", tagSpec) } const importClicked = new UIEventSource(false); @@ -157,7 +162,10 @@ ${Utils.special_visualizations_importRequirementDocs} state.featureSwitchUserbadge) - const isImported = tagSource.map(tags => tags._imported === "yes") + const isImported = tagSource.map(tags => { + AbstractImportButton.importedIds.add(tags.id) + return tags._imported === "yes"; + }) /**** THe actual panel showing the import guiding map ****/ @@ -193,23 +201,6 @@ ${Utils.special_visualizations_importRequirementDocs} } - private parseArgs(argsRaw: string[], originalFeatureTags: UIEventSource<any>): { minzoom: string, max_snap_distance: string, snap_onto_layers: string, icon: string, text: string, tags: string, targetLayer: string, newTags: UIEventSource<Tag[]> } { - const baseArgs = Utils.ParseVisArgs(this.args, argsRaw) - if (originalFeatureTags !== undefined) { - - const tags = baseArgs.tags - if(tags.indexOf(" ") < 0 && tags.indexOf(";") < 0 && originalFeatureTags.data[tags] !== undefined){ - // This might be a property to expand... - const items : string = originalFeatureTags.data[tags] - console.warn("Using tagspec tagSource.data["+tags+"] which is ",items) - baseArgs["newTags"] = TagApplyButton.generateTagsToApply(items, originalFeatureTags) - }else{ - baseArgs["newTags"] = TagApplyButton.generateTagsToApply(tags, originalFeatureTags) - } - } - return baseArgs - } - getLayerDependencies(argsRaw: string[]) { const args = this.parseArgs(argsRaw, undefined) @@ -226,7 +217,6 @@ ${Utils.special_visualizations_importRequirementDocs} return dependsOnLayers } - protected abstract canBeImported(feature: any) protected createConfirmPanelForWay( @@ -246,10 +236,10 @@ ${Utils.special_visualizations_importRequirementDocs} // SHow all relevant data - including (eventually) the way of which the geometry will be replaced new ShowDataMultiLayer({ leafletMap: confirmationMap.leafletMap, - enablePopups: false, + popup: undefined, zoomToFeatures: true, features: new StaticFeatureSource([feature], false), - allElements: state.allElements, + state: state, layers: state.filteredLayers }) @@ -257,10 +247,10 @@ ${Utils.special_visualizations_importRequirementDocs} action.getPreview().then(changePreview => { new ShowDataLayer({ leafletMap: confirmationMap.leafletMap, - enablePopups: false, + popup: undefined, zoomToFeatures: false, features: changePreview, - allElements: state.allElements, + state, layerToShow: new LayerConfig(conflation_json, "all_known_layers", true) }) }) @@ -286,6 +276,23 @@ ${Utils.special_visualizations_importRequirementDocs} const cancel = new SubtleButton(Svg.close_ui(), Translations.t.general.cancel).onClick(onCancel) return new Combine([confirmationMap, confirmButton, cancel]).SetClass("flex flex-col") } + + protected parseArgs(argsRaw: string[], originalFeatureTags: UIEventSource<any>): { minzoom: string, max_snap_distance: string, snap_onto_layers: string, icon: string, text: string, tags: string, targetLayer: string, newTags: UIEventSource<Tag[]> } { + const baseArgs = Utils.ParseVisArgs(this.args, argsRaw) + if (originalFeatureTags !== undefined) { + + const tags = baseArgs.tags + if (tags.indexOf(" ") < 0 && tags.indexOf(";") < 0 && originalFeatureTags.data[tags] !== undefined) { + // This might be a property to expand... + const items: string = originalFeatureTags.data[tags] + console.debug("The import button is using tags from properties[" + tags + "] of this object, namely ", items) + baseArgs["newTags"] = TagApplyButton.generateTagsToApply(items, originalFeatureTags) + } else { + baseArgs["newTags"] = TagApplyButton.generateTagsToApply(tags, originalFeatureTags) + } + } + return baseArgs + } } export class ConflateButton extends AbstractImportButton { @@ -299,10 +306,6 @@ export class ConflateButton extends AbstractImportButton { ); } - protected canBeImported(feature: any) { - return feature.geometry.type === "LineString" || (feature.geometry.type === "Polygon" && feature.geometry.coordinates.length === 1) - } - getLayerDependencies(argsRaw: string[]): string[] { const deps = super.getLayerDependencies(argsRaw); // Force 'type_node' as dependency @@ -350,9 +353,14 @@ export class ConflateButton extends AbstractImportButton { ) } + protected canBeImported(feature: any) { + return feature.geometry.type === "LineString" || (feature.geometry.type === "Polygon" && feature.geometry.coordinates.length === 1) + } + } -export class ImportWayButton extends AbstractImportButton { +export class ImportWayButton extends AbstractImportButton implements AutoAction { + public readonly supportsAutoAction = true; constructor() { super("import_way_button", @@ -387,6 +395,39 @@ export class ImportWayButton extends AbstractImportButton { ) } + async applyActionOn(state: { layoutToUse: LayoutConfig; changes: Changes, allElements: ElementStorage }, + originalFeatureTags: UIEventSource<any>, + argument: string[]): Promise<void> { + const id = originalFeatureTags.data.id; + if (AbstractImportButton.importedIds.has(originalFeatureTags.data.id) + ) { + return; + } + AbstractImportButton.importedIds.add(originalFeatureTags.data.id) + const args = this.parseArgs(argument, originalFeatureTags) + const feature = state.allElements.ContainingFeatures.get(id) + console.log("Geometry to auto-import is:", feature) + const geom = feature.geometry + let coordinates: [number, number][] + if (geom.type === "LineString") { + coordinates = geom.coordinates + } else if (geom.type === "Polygon") { + coordinates = geom.coordinates[0] + } + + + const mergeConfigs = this.GetMergeConfig(args); + + const action = this.CreateAction( + feature, + args, + <FeaturePipelineState>state, + mergeConfigs, + coordinates + ) + await state.changes.applyAction(action) + } + canBeImported(feature: any) { const type = feature.geometry.type return type === "LineString" || type === "Polygon" @@ -421,7 +462,24 @@ export class ImportWayButton extends AbstractImportButton { } else if (geom.type === "Polygon") { coordinates = geom.coordinates[0] } + const mergeConfigs = this.GetMergeConfig(args); + + let action = this.CreateAction(feature, args, state, mergeConfigs, coordinates); + + return this.createConfirmPanelForWay( + state, + args, + feature, + originalFeatureTags, + action, + onCancel + ) + + } + + private GetMergeConfig(args: { max_snap_distance: string; snap_onto_layers: string; icon: string; text: string; tags: string; newTags: UIEventSource<any>; targetLayer: string }) + : MergePointConfig[] { const nodesMustMatch = args["snap_to_point_if"]?.split(";")?.map((tag, i) => TagUtils.Tag(tag, "TagsSpec for import button " + i)) const mergeConfigs = [] @@ -447,14 +505,21 @@ export class ImportWayButton extends AbstractImportButton { mergeConfigs.push(mergeConfig) } - let action: OsmCreateAction & { getPreview(): Promise<FeatureSource> }; + return mergeConfigs; + } + + private CreateAction(feature, + args: { max_snap_distance: string; snap_onto_layers: string; icon: string; text: string; tags: string; newTags: UIEventSource<any>; targetLayer: string }, + state: FeaturePipelineState, + mergeConfigs: any[], + coordinates: [number, number][]) { const coors = feature.geometry.coordinates if (feature.geometry.type === "Polygon" && coors.length > 1) { const outer = coors[0] const inner = [...coors] inner.splice(0, 1) - action = new CreateMultiPolygonWithPointReuseAction( + return new CreateMultiPolygonWithPointReuseAction( args.newTags.data, outer, inner, @@ -464,24 +529,13 @@ export class ImportWayButton extends AbstractImportButton { ) } else { - action = new CreateWayWithPointReuseAction( + return new CreateWayWithPointReuseAction( args.newTags.data, coordinates, state, mergeConfigs ) } - - - return this.createConfirmPanelForWay( - state, - args, - feature, - originalFeatureTags, - action, - onCancel - ) - } } @@ -498,29 +552,14 @@ export class ImportPointButton extends AbstractImportButton { name: "max_snap_distance", doc: "The maximum distance that the imported point will be moved to snap onto a way in an already existing layer (in meters). This is previewed to the contributor, similar to the 'add new point'-action of MapComplete", defaultValue: "5" - },{ - name:"note_id", - doc:"If given, this key will be read. The corresponding note on OSM will be closed, stating 'imported'" - }], + }, { + name: "note_id", + doc: "If given, this key will be read. The corresponding note on OSM will be closed, stating 'imported'" + }], false ) } - canBeImported(feature: any) { - return feature.geometry.type === "Point" - } - - getLayerDependencies(argsRaw: string[]): string[] { - const deps = super.getLayerDependencies(argsRaw); - const layerSnap = argsRaw["snap_onto_layers"] ?? "" - if (layerSnap === "") { - return deps - } - - deps.push(...layerSnap.split(";")) - return deps - } - private static createConfirmPanelForPoint( args: { max_snap_distance: string, snap_onto_layers: string, icon: string, text: string, newTags: UIEventSource<any>, targetLayer: string, note_id: string }, state: FeaturePipelineState, @@ -538,18 +577,27 @@ export class ImportPointButton extends AbstractImportButton { if (snapOntoWayId !== undefined) { snapOnto = await OsmObject.DownloadObjectAsync(snapOntoWayId) } + let specialMotivation = undefined + + let note_id = args.note_id + if (args.note_id !== undefined && isNaN(Number(args.note_id))) { + note_id = originalFeatureTags.data[args.note_id] + specialMotivation = "source: https://osm.org/note/" + note_id + } + const newElementAction = new CreateNewNodeAction(tags, location.lat, location.lon, { theme: state.layoutToUse.id, changeType: "import", - snapOnto: <OsmWay>snapOnto + snapOnto: <OsmWay>snapOnto, + specialMotivation: specialMotivation }) await state.changes.applyAction(newElementAction) state.selectedElement.setData(state.allElements.ContainingFeatures.get( newElementAction.newElementId )) - if(args.note_id !== undefined){ - state.osmConnection.closeNote(args.note_id, "imported") + if (note_id !== undefined) { + state.osmConnection.closeNote(note_id, "imported") originalFeatureTags.data["closed_at"] = new Date().toISOString() originalFeatureTags.ping() } @@ -564,7 +612,8 @@ export class ImportPointButton extends AbstractImportButton { preciseInput: { snapToLayers: args.snap_onto_layers?.split(";"), maxSnapDistance: Number(args.max_snap_distance) - } + }, + boundsFactor: 3 } const [lon, lat] = feature.geometry.coordinates @@ -575,6 +624,21 @@ export class ImportPointButton extends AbstractImportButton { } + canBeImported(feature: any) { + return feature.geometry.type === "Point" + } + + getLayerDependencies(argsRaw: string[]): string[] { + const deps = super.getLayerDependencies(argsRaw); + const layerSnap = argsRaw["snap_onto_layers"] ?? "" + if (layerSnap === "") { + return deps + } + + deps.push(...layerSnap.split(";")) + return deps + } + constructElement(state, args, originalFeatureTags, guiState, diff --git a/UI/Popup/LoginButton.ts b/UI/Popup/LoginButton.ts index 3ff24118ab..dd16d6411b 100644 --- a/UI/Popup/LoginButton.ts +++ b/UI/Popup/LoginButton.ts @@ -3,13 +3,16 @@ import BaseUIElement from "../BaseUIElement"; import Svg from "../../Svg"; import {OsmConnection} from "../../Logic/Osm/OsmConnection"; import Toggle from "../Input/Toggle"; +import {VariableUiElement} from "../Base/VariableUIElement"; +import Loading from "../Base/Loading"; +import Translations from "../i18n/Translations"; -export default class LoginButton extends SubtleButton { +class LoginButton extends SubtleButton { constructor(text: BaseUIElement | string, state: { osmConnection: OsmConnection - }) { - super(Svg.osm_logo_ui(), text); + }, icon?: BaseUIElement | string) { + super(icon ?? Svg.osm_logo_ui(), text); this.onClick(() => { state.osmConnection.AttemptLogin() }) @@ -17,10 +20,28 @@ export default class LoginButton extends SubtleButton { } -export class LoginToggle extends Toggle { +export class LoginToggle extends VariableUiElement { constructor(el, text: BaseUIElement | string, state: { osmConnection: OsmConnection }) { - super(el, new LoginButton(text, state), state.osmConnection.isLoggedIn) + const loading = new Loading("Trying to log in...") + const login = new LoginButton(text, state) + super( + state.osmConnection.loadingStatus.map(osmConnectionState => { + console.trace("Current osm state is ", osmConnectionState) + if(osmConnectionState === "loading"){ + return loading + } + if(osmConnectionState === "not-attempted"){ + return login + } + if(osmConnectionState === "logged-in"){ + return el + } + + // Error! + return new LoginButton(Translations.t.general.loginFailed, state, Svg.invalid_svg()) + }) + ) } } \ No newline at end of file diff --git a/UI/Popup/MoveWizard.ts b/UI/Popup/MoveWizard.ts index 8bb889ece3..6ed7d06575 100644 --- a/UI/Popup/MoveWizard.ts +++ b/UI/Popup/MoveWizard.ts @@ -139,7 +139,7 @@ export default class MoveWizard extends Toggle { minZoom: reason.minZoom, centerLocation: loc, mapBackground: new UIEventSource<BaseLayer>(preferredBackground) // We detach the layer - + }) if (reason.lockBounds) { diff --git a/UI/Popup/NewNoteUi.ts b/UI/Popup/NewNoteUi.ts index 0c526d3ca4..71fe2d7b9e 100644 --- a/UI/Popup/NewNoteUi.ts +++ b/UI/Popup/NewNoteUi.ts @@ -18,13 +18,16 @@ export default class NewNoteUi extends Toggle { isShown: UIEventSource<boolean>, state: { LastClickLocation: UIEventSource<{ lat: number, lon: number }>, - osmConnection: OsmConnection, layoutToUse: LayoutConfig, featurePipeline: FeaturePipeline + osmConnection: OsmConnection, + layoutToUse: LayoutConfig, + featurePipeline: FeaturePipeline, + selectedElement: UIEventSource<any> }) { const t = Translations.t.notes; const isCreated = new UIEventSource(false); state.LastClickLocation.addCallbackAndRun(_ => isCreated.setData(false)) // Reset 'isCreated' on every click - const text = ValidatedTextField.InputForType("text", { + const text = ValidatedTextField.ForType("text").ConstructInputElement({ value: LocalStorageSource.Get("note-text") }) text.SetClass("border rounded-sm border-grey-500") @@ -37,7 +40,27 @@ export default class NewNoteUi extends Toggle { } txt += "\n\n #MapComplete #" + state?.layoutToUse?.id const loc = state.LastClickLocation.data; - state?.osmConnection?.openNote(loc.lat, loc.lon, txt) + const id = await state?.osmConnection?.openNote(loc.lat, loc.lon, txt) + const feature = { + type:"Feature", + geometry:{ + type:"Point", + coordinates: [loc.lon, loc.lat] + }, + properties: { + id: ""+id.id, + date_created: new Date().toISOString(), + _first_comment : txt, + comments:JSON.stringify( [{ + text: txt, + html: txt, + user: state.osmConnection?.userDetails?.data?.name, + uid: state.osmConnection?.userDetails?.data?.uid + }]), + }, + }; + state?.featurePipeline?.InjectNewPoint(feature) + state.selectedElement?.setData(feature) text.GetValue().setData("") isCreated.setData(true) }) @@ -45,7 +68,13 @@ export default class NewNoteUi extends Toggle { new Title(t.createNoteTitle), t.createNoteIntro, text, - new Combine([new Toggle(undefined, t.warnAnonymous, state?.osmConnection?.isLoggedIn).SetClass("alert"), postNote]).SetClass("flex justify-end items-center") + new Combine([new Toggle(undefined, t.warnAnonymous.SetClass("alert"), state?.osmConnection?.isLoggedIn), + new Toggle(postNote, + t.textNeeded.SetClass("alert"), + text.GetValue().map(txt => txt.length > 3) + ) + + ]).SetClass("flex justify-end items-center") ]).SetClass("flex flex-col border-2 border-black rounded-xl p-4"); @@ -60,7 +89,6 @@ export default class NewNoteUi extends Toggle { super( new Toggle( - new Combine( [ t.noteLayerHasFilters.SetClass("alert"), diff --git a/UI/Popup/NoteCommentElement.ts b/UI/Popup/NoteCommentElement.ts index 4251204c41..effb794e74 100644 --- a/UI/Popup/NoteCommentElement.ts +++ b/UI/Popup/NoteCommentElement.ts @@ -29,7 +29,7 @@ export default class NoteCommentElement extends Combine { } else if (comment.action === "closed") { actionIcon = Svg.resolved_svg() } else { - actionIcon = Svg.addSmall_svg() + actionIcon = Svg.speech_bubble_svg() } let user: BaseUIElement @@ -70,15 +70,15 @@ export default class NoteCommentElement extends Combine { } - public static addCommentTo(txt: string, tags: UIEventSource<any>, state: {osmConnection: OsmConnection}){ + public static addCommentTo(txt: string, tags: UIEventSource<any>, state: { osmConnection: OsmConnection }) { const comments: any[] = JSON.parse(tags.data["comments"]) const username = state.osmConnection.userDetails.data.name var urlRegex = /(https?:\/\/[^\s]+)/g; - const html = txt.replace(urlRegex, function(url) { + const html = txt.replace(urlRegex, function (url) { return '<a href="' + url + '">' + url + '</a>'; }) - + comments.push({ "date": new Date().toISOString(), "uid": state.osmConnection.userDetails.data.uid, @@ -91,5 +91,5 @@ export default class NoteCommentElement extends Combine { tags.data["comments"] = JSON.stringify(comments) tags.ping() } - + } \ No newline at end of file diff --git a/UI/Popup/QuestionBox.ts b/UI/Popup/QuestionBox.ts index 6ca5a59694..fcc92ead41 100644 --- a/UI/Popup/QuestionBox.ts +++ b/UI/Popup/QuestionBox.ts @@ -16,7 +16,7 @@ export default class QuestionBox extends VariableUiElement { public readonly skippedQuestions: UIEventSource<number[]>; public readonly restingQuestions: UIEventSource<BaseUIElement[]>; - constructor(options: { + constructor(state, options: { tagsSource: UIEventSource<any>, tagRenderings: TagRenderingConfig[], units: Unit[], showAllQuestionsAtOnce?: boolean | UIEventSource<boolean> @@ -34,7 +34,7 @@ export default class QuestionBox extends VariableUiElement { const tagRenderingQuestions = tagRenderings .map((tagRendering, i) => - new Lazy(() => new TagRenderingQuestion(tagsSource, tagRendering, + new Lazy(() => new TagRenderingQuestion(tagsSource, tagRendering, state, { units: units, afterSave: () => { @@ -42,7 +42,7 @@ export default class QuestionBox extends VariableUiElement { skippedQuestions.ping(); }, cancelButton: Translations.t.general.skip.Clone() - .SetClass("btn btn-secondary mr-3") + .SetClass("btn btn-secondary") .onClick(() => { skippedQuestions.data.push(i); skippedQuestions.ping(); diff --git a/UI/Popup/SplitRoadWizard.ts b/UI/Popup/SplitRoadWizard.ts index daeb7bbb12..5bdd70667d 100644 --- a/UI/Popup/SplitRoadWizard.ts +++ b/UI/Popup/SplitRoadWizard.ts @@ -3,7 +3,6 @@ import Svg from "../../Svg"; import {UIEventSource} from "../../Logic/UIEventSource"; import {SubtleButton} from "../Base/SubtleButton"; import Minimap from "../Base/Minimap"; -import State from "../../State"; import ShowDataLayer from "../ShowDataLayer/ShowDataLayer"; import {GeoOperations} from "../../Logic/GeoOperations"; import {LeafletMouseEvent} from "leaflet"; @@ -17,6 +16,12 @@ import ShowDataMultiLayer from "../ShowDataLayer/ShowDataMultiLayer"; import LayerConfig from "../../Models/ThemeConfig/LayerConfig"; import {BBox} from "../../Logic/BBox"; import * as split_point from "../../assets/layers/split_point/split_point.json" +import {OsmConnection} from "../../Logic/Osm/OsmConnection"; +import {Changes} from "../../Logic/Osm/Changes"; +import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"; +import {ElementStorage} from "../../Logic/ElementStorage"; +import BaseLayer from "../../Models/BaseLayer"; +import FilteredLayer from "../../Models/FilteredLayer"; export default class SplitRoadWizard extends Toggle { // @ts-ignore @@ -28,8 +33,20 @@ export default class SplitRoadWizard extends Toggle { * A UI Element used for splitting roads * * @param id: The id of the road to remove + * @param state: the state of the application */ - constructor(id: string) { + constructor(id: string, state: { + filteredLayers: UIEventSource<FilteredLayer[]>; + backgroundLayer: UIEventSource<BaseLayer>; + featureSwitchIsTesting: UIEventSource<boolean>; + featureSwitchIsDebugging: UIEventSource<boolean>; + featureSwitchShowAllQuestions: UIEventSource<boolean>; + osmConnection: OsmConnection, + featureSwitchUserbadge: UIEventSource<boolean>, + changes: Changes, + layoutToUse: LayoutConfig, + allElements: ElementStorage + }) { const t = Translations.t.split; @@ -41,12 +58,12 @@ export default class SplitRoadWizard extends Toggle { // Toggle variable between show split button and map const splitClicked = new UIEventSource<boolean>(false); // Load the road with given id on the minimap - const roadElement = State.state.allElements.ContainingFeatures.get(id) + const roadElement = state.allElements.ContainingFeatures.get(id) // Minimap on which you can select the points to be splitted const miniMap = Minimap.createMiniMap( { - background: State.state.backgroundLayer, + background: state.backgroundLayer, allowMoving: true, leafletOptions: { minZoom: 14 @@ -62,22 +79,22 @@ export default class SplitRoadWizard extends Toggle { // Datalayer displaying the road and the cut points (if any) new ShowDataMultiLayer({ features: new StaticFeatureSource([roadElement], false), - layers: State.state.filteredLayers, + layers: state.filteredLayers, leafletMap: miniMap.leafletMap, - enablePopups: false, + popup: undefined, zoomToFeatures: true, - allElements: State.state.allElements, + state }) - + new ShowDataLayer({ features: new StaticFeatureSource(splitPoints, true), leafletMap: miniMap.leafletMap, zoomToFeatures: false, - enablePopups: false, + popup: undefined, layerToShow: SplitRoadWizard.splitLayerStyling, + state }) - /** * Handles a click on the overleaf map. @@ -127,15 +144,15 @@ export default class SplitRoadWizard extends Toggle { // Only show the splitButton if logged in, else show login prompt const loginBtn = t.loginToSplit.Clone() - .onClick(() => State.state.osmConnection.AttemptLogin()) + .onClick(() => state.osmConnection.AttemptLogin()) .SetClass("login-button-friendly"); - const splitToggle = new Toggle(splitButton, loginBtn, State.state.osmConnection.isLoggedIn) + const splitToggle = new Toggle(splitButton, loginBtn, state.osmConnection.isLoggedIn) // Save button const saveButton = new Button(t.split.Clone(), () => { hasBeenSplit.setData(true) - State.state.changes.applyAction(new SplitAction(id, splitPoints.data.map(ff => ff.feature.geometry.coordinates), { - theme: State.state?.layoutToUse?.id + state.changes.applyAction(new SplitAction(id, splitPoints.data.map(ff => ff.feature.geometry.coordinates), { + theme: state?.layoutToUse?.id })) }) diff --git a/UI/Popup/TagApplyButton.ts b/UI/Popup/TagApplyButton.ts index e09a6b179d..6bd8e774ba 100644 --- a/UI/Popup/TagApplyButton.ts +++ b/UI/Popup/TagApplyButton.ts @@ -38,6 +38,7 @@ export default class TagApplyButton implements AutoAction { doc: "If specified, applies the the tags onto _another_ object. The id will be read from properties[id_of_object_to_apply_this_one] of the selected object. The tags are still calculated based on the tags of the _selected_ element" } ]; + public readonly example = "`{tag_apply(survey_date=$_now:date, Surveyed today!)}`, `{tag_apply(addr:street=$addr:street, Apply the address, apply_icon.svg, _closest_osm_id)"; public static generateTagsToApply(spec: string, tagSource: UIEventSource<any>): UIEventSource<Tag[]> { @@ -79,12 +80,10 @@ export default class TagApplyButton implements AutoAction { } - public readonly example = "`{tag_apply(survey_date=$_now:date, Surveyed today!)}`, `{tag_apply(addr:street=$addr:street, Apply the address, apply_icon.svg, _closest_osm_id)"; - async applyActionOn(state: { layoutToUse: LayoutConfig, changes: Changes - }, tags: UIEventSource<any>, args: string[]) : Promise<void>{ + }, tags: UIEventSource<any>, args: string[]): Promise<void> { const tagsToApply = TagApplyButton.generateTagsToApply(args[0], tags) const targetIdKey = args[3] diff --git a/UI/Popup/TagRenderingAnswer.ts b/UI/Popup/TagRenderingAnswer.ts index 0e8bbf57e0..0d155384de 100644 --- a/UI/Popup/TagRenderingAnswer.ts +++ b/UI/Popup/TagRenderingAnswer.ts @@ -5,6 +5,8 @@ import {VariableUiElement} from "../Base/VariableUIElement"; import List from "../Base/List"; import {SubstitutedTranslation} from "../SubstitutedTranslation"; import TagRenderingConfig from "../../Models/ThemeConfig/TagRenderingConfig"; +import Combine from "../Base/Combine"; +import Img from "../Base/Img"; /*** * Displays the correct value for a known tagrendering @@ -13,9 +15,9 @@ export default class TagRenderingAnswer extends VariableUiElement { constructor(tagsSource: UIEventSource<any>, configuration: TagRenderingConfig, state: any, - contentClasses: string = "", contentStyle: string = "", options?:{ - specialViz: Map<string, BaseUIElement> - }) { + contentClasses: string = "", contentStyle: string = "", options?: { + specialViz: Map<string, BaseUIElement> + }) { if (configuration === undefined) { throw "Trying to generate a tagRenderingAnswer without configuration..." } @@ -38,11 +40,17 @@ export default class TagRenderingAnswer extends VariableUiElement { return undefined; } - const valuesToRender: BaseUIElement[] = trs.map(tr => new SubstitutedTranslation(tr, tagsSource, state, options?.specialViz)) + const valuesToRender: BaseUIElement[] = trs.map(tr => { + const text = new SubstitutedTranslation(tr.then, tagsSource, state, options?.specialViz); + if(tr.icon === undefined){ + return text + } + return new Combine([new Img(tr.icon).SetClass("w-6 max-h-6 pr-2"), text]).SetClass("flex") + }) if (valuesToRender.length === 1) { return valuesToRender[0]; } else if (valuesToRender.length > 1) { - return new List(valuesToRender) + return new Combine(valuesToRender).SetClass("flex flex-col") } return undefined; }).map((element: BaseUIElement) => element?.SetClass(contentClasses)?.SetStyle(contentStyle))) diff --git a/UI/Popup/TagRenderingQuestion.ts b/UI/Popup/TagRenderingQuestion.ts index 76313e2fd3..88e0a751ad 100644 --- a/UI/Popup/TagRenderingQuestion.ts +++ b/UI/Popup/TagRenderingQuestion.ts @@ -8,7 +8,6 @@ import {Utils} from "../../Utils"; import CheckBoxes from "../Input/Checkboxes"; import InputElementMap from "../Input/InputElementMap"; import {SaveButton} from "./SaveButton"; -import State from "../../State"; import {VariableUiElement} from "../Base/VariableUIElement"; import Translations from "../i18n/Translations"; import {FixedUiElement} from "../Base/FixedUiElement"; @@ -27,6 +26,9 @@ import TagRenderingConfig from "../../Models/ThemeConfig/TagRenderingConfig"; import {Unit} from "../../Models/Unit"; import VariableInputElement from "../Input/VariableInputElement"; import Toggle from "../Input/Toggle"; +import Img from "../Base/Img"; +import FeaturePipelineState from "../../Logic/State/FeaturePipelineState"; +import Title from "../Base/Title"; /** * Shows the question element. @@ -36,6 +38,7 @@ export default class TagRenderingQuestion extends Combine { constructor(tags: UIEventSource<any>, configuration: TagRenderingConfig, + state, options?: { units?: Unit[], afterSave?: () => void, @@ -71,23 +74,25 @@ export default class TagRenderingQuestion extends Combine { } options = options ?? {} const applicableUnit = (options.units ?? []).filter(unit => unit.isApplicableToKey(configuration.freeform?.key))[0]; - const question = new SubstitutedTranslation(configuration.question, tags, State.state) - .SetClass("question-text"); + const question = new Title(new SubstitutedTranslation(configuration.question, tags, state) + .SetClass("question-text"), 3); + const feedback = new UIEventSource<Translation>(undefined) const inputElement: InputElement<TagsFilter> = new VariableInputElement(applicableMappingsSrc.map(applicableMappings => - TagRenderingQuestion.GenerateInputElement(configuration, applicableMappings, applicableUnit, tags) + TagRenderingQuestion.GenerateInputElement(state, configuration, applicableMappings, applicableUnit, tags, feedback) )) + const save = () => { const selection = inputElement.GetValue().data; if (selection) { - (State.state?.changes) + (state?.changes) .applyAction(new ChangeTagAction( tags.data.id, selection, tags.data, { - theme: State.state?.layoutToUse?.id ?? "unkown", + theme: state?.layoutToUse?.id ?? "unkown", changeType: "answer", } )).then(_ => { @@ -101,13 +106,12 @@ export default class TagRenderingQuestion extends Combine { if (options.saveButtonConstr === undefined) { options.saveButtonConstr = v => new SaveButton(v, - State.state?.osmConnection) + state?.osmConnection) .onClick(save) } const saveButton = new Combine([ options.saveButtonConstr(inputElement.GetValue()), - new Toggle(Translations.t.general.testing.SetClass("alert"), undefined, State.state.featureSwitchIsTesting) ]) let bottomTags: BaseUIElement; @@ -117,7 +121,7 @@ export default class TagRenderingQuestion extends Combine { bottomTags = new VariableUiElement( inputElement.GetValue().map( (tagsFilter: TagsFilter) => { - const csCount = State.state?.osmConnection?.userDetails?.data?.csCount ?? 1000; + const csCount = state?.osmConnection?.userDetails?.data?.csCount ?? 1000; if (csCount < Constants.userJourney.tagsVisibleAt) { return ""; } @@ -136,25 +140,34 @@ export default class TagRenderingQuestion extends Combine { super([ question, inputElement, - options.cancelButton, - saveButton, - bottomTags]) + new Combine([ + new VariableUiElement(feedback.map(t => t?.SetStyle("padding-left: 0.75rem; padding-right: 0.75rem")?.SetClass("alert flex") ?? bottomTags)), + new Combine([ + new Combine([options.cancelButton]), + saveButton]).SetClass("flex justify-end flex-wrap-reverse") + + ]).SetClass("flex mt-2 justify-between"), + new Toggle(Translations.t.general.testing.SetClass("alert"), undefined, state.featureSwitchIsTesting) + ]) this.SetClass("question disable-links") } - private static GenerateInputElement(configuration: TagRenderingConfig, - applicableMappings: { if: TagsFilter, then: any, ifnot?: TagsFilter, addExtraTags: Tag[] }[], - applicableUnit: Unit, - tagsSource: UIEventSource<any>) - : InputElement<TagsFilter> { + private static GenerateInputElement( + state, + configuration: TagRenderingConfig, + applicableMappings: { if: TagsFilter, then: any, ifnot?: TagsFilter, addExtraTags: Tag[] }[], + applicableUnit: Unit, + tagsSource: UIEventSource<any>, + feedback: UIEventSource<Translation> + ): InputElement<TagsFilter> { // FreeForm input will be undefined if not present; will already contain a special input element if applicable - const ff = TagRenderingQuestion.GenerateFreeform(configuration, applicableUnit, tagsSource); - + const ff = TagRenderingQuestion.GenerateFreeform(state, configuration, applicableUnit, tagsSource, feedback); + const hasImages = applicableMappings.filter(mapping => mapping.then.ExtractImages().length > 0).length > 0 let inputEls: InputElement<TagsFilter>[]; @@ -188,7 +201,7 @@ export default class TagRenderingQuestion extends Combine { if (applicableMappings.length < 8 || configuration.multiAnswer || hasImages || ifNotsPresent) { - inputEls = (applicableMappings ?? []).map((mapping, i) => TagRenderingQuestion.GenerateMappingElement(tagsSource, mapping, allIfNotsExcept(i))); + inputEls = (applicableMappings ?? []).map((mapping, i) => TagRenderingQuestion.GenerateMappingElement(state, tagsSource, mapping, allIfNotsExcept(i))); inputEls = Utils.NoNull(inputEls); } else { const dropdown: InputElement<TagsFilter> = new DropDown("", @@ -336,11 +349,13 @@ export default class TagRenderingQuestion extends Combine { * Returns: [the element itself, the value to select if not selected. The contents of this UIEventSource might swap to undefined if the conditions to show the answer are unmet] */ private static GenerateMappingElement( + state, tagsSource: UIEventSource<any>, mapping: { if: TagsFilter, then: Translation, - addExtraTags: Tag[] + addExtraTags: Tag[], + img?: string }, ifNot?: TagsFilter[]): InputElement<TagsFilter> { let tagging: TagsFilter = mapping.if; @@ -351,13 +366,26 @@ export default class TagRenderingQuestion extends Combine { tagging = new And([tagging, ...mapping.addExtraTags]) } + return new FixedInputElement( - new SubstitutedTranslation(mapping.then, tagsSource, State.state), + TagRenderingQuestion.GenerateMappingContent(mapping, tagsSource, state), tagging, (t0, t1) => t1.isEquivalent(t0)); } - private static GenerateFreeform(configuration: TagRenderingConfig, applicableUnit: Unit, tags: UIEventSource<any>): InputElement<TagsFilter> { + private static GenerateMappingContent(mapping: { + then: Translation, + icon?: string + }, tagsSource: UIEventSource<any>, state: FeaturePipelineState): BaseUIElement { + const text = new SubstitutedTranslation(mapping.then, tagsSource, state) + if (mapping.icon === undefined) { + return text; + } + return new Combine([new Img(mapping.icon).SetClass("w-6 max-h-6 pr-2"), text]).SetClass("flex") + } + + private static GenerateFreeform(state, configuration: TagRenderingConfig, applicableUnit: Unit, tags: UIEventSource<any>, feedback: UIEventSource<Translation>) + : InputElement<TagsFilter> { const freeform = configuration.freeform; if (freeform === undefined) { return undefined; @@ -368,6 +396,9 @@ export default class TagRenderingQuestion extends Combine { if (string === "" || string === undefined) { return undefined; } + if (string.length >= 255) { + return undefined + } const tag = new Tag(freeform.key, string); @@ -397,18 +428,25 @@ export default class TagRenderingQuestion extends Combine { } const tagsData = tags.data; - const feature = State.state.allElements.ContainingFeatures.get(tagsData.id) - const input: InputElement<string> = ValidatedTextField.InputForType(configuration.freeform.type, { - isValid: (str) => (str.length <= 255), + const feature = state.allElements.ContainingFeatures.get(tagsData.id) + const input: InputElement<string> = ValidatedTextField.ForType(configuration.freeform.type).ConstructInputElement({ country: () => tagsData._country, location: [tagsData._lat, tagsData._lon], - mapBackgroundLayer: State.state.backgroundLayer, + mapBackgroundLayer: state.backgroundLayer, unit: applicableUnit, args: configuration.freeform.helperArgs, - feature: feature + feature, + placeholder: configuration.freeform.placeholder, + feedback }); - + input.GetValue().setData(tagsData[freeform.key] ?? freeform.default); + + input.GetValue().addCallbackD(v => { + if(v.length >= 255){ + feedback.setData(Translations.t.validation.tooLong.Subs({count: v.length})) + } + }) let inputTagsFilter: InputElement<TagsFilter> = new InputElementMap( input, (a, b) => a === b || (a?.isEquivalent(b) ?? false), @@ -418,7 +456,7 @@ export default class TagRenderingQuestion extends Combine { if (freeform.inline) { inputTagsFilter.SetClass("w-16-imp") - inputTagsFilter = new InputElementWrapper(inputTagsFilter, configuration.render, freeform.key, tags, State.state) + inputTagsFilter = new InputElementWrapper(inputTagsFilter, configuration.render, freeform.key, tags, state) inputTagsFilter.SetClass("block") } diff --git a/UI/ProfessionalGui.ts b/UI/ProfessionalGui.ts index e6f4476ef5..d4a0196bfe 100644 --- a/UI/ProfessionalGui.ts +++ b/UI/ProfessionalGui.ts @@ -6,9 +6,8 @@ import Toggleable, {Accordeon} from "./Base/Toggleable"; import List from "./Base/List"; import BaseUIElement from "./BaseUIElement"; import LanguagePicker from "./LanguagePicker"; -import {SubtleButton} from "./Base/SubtleButton"; -import Svg from "../Svg"; import TableOfContents from "./Base/TableOfContents"; +import LeftIndex from "./Base/LeftIndex"; class Snippet extends Toggleable { constructor(translations, ...extraContent: BaseUIElement[]) { @@ -21,26 +20,26 @@ class Snippet extends Toggleable { class SnippetContent extends Combine { - constructor(translations:any, ...extras: BaseUIElement[]) { - super([ - translations.intro, - new List([ - translations.li0, - translations.li1, - translations.li2, - translations.li3, - translations.li4, - translations.li5, - translations.li6, - ]), - translations.outro, - ...extras - ]) - this.SetClass("flex flex-col") + constructor(translations: any, ...extras: BaseUIElement[]) { + super([ + translations.intro, + new List([ + translations.li0, + translations.li1, + translations.li2, + translations.li3, + translations.li4, + translations.li5, + translations.li6, + ]), + translations.outro, + ...extras + ]) + this.SetClass("flex flex-col") } } -export default class ProfessionalGui { +class ProfessionalGui extends LeftIndex { constructor() { @@ -83,37 +82,26 @@ export default class ProfessionalGui { new Accordeon([ new Snippet(t.drawbacks.unsuitedData), new Snippet(t.drawbacks.licenseNuances, - new Title( t.drawbacks.licenseNuances.usecaseMapDifferentSources.title, 4), + new Title(t.drawbacks.licenseNuances.usecaseMapDifferentSources.title, 4), new SnippetContent(t.drawbacks.licenseNuances.usecaseMapDifferentSources), - new Title( t.drawbacks.licenseNuances.usecaseGatheringOpenData.title, 4), + new Title(t.drawbacks.licenseNuances.usecaseGatheringOpenData.title, 4), new SnippetContent(t.drawbacks.licenseNuances.usecaseGatheringOpenData) - ) + ) ]), ]).SetClass("flex flex-col pb-12 m-3 lg:w-3/4 lg:ml-10 link-underline") - const backToIndex = new Combine([new SubtleButton( - Svg.back_svg().SetStyle("height: 1.5rem;"), - t.backToMapcomplete, - { - url: "./index.html" - } - )]).SetClass("block") - const leftContents: BaseUIElement[] = [ - backToIndex, new TableOfContents(content, { noTopLevel: true, maxDepth: 2 }).SetClass("subtle"), - + LanguagePicker.CreateLanguagePicker(Translations.t.professional.title.SupportedLanguages())?.SetClass("mt-4 self-end flex-col"), ].map(el => el?.SetClass("pl-4")) - const leftBar = new Combine([ - new Combine(leftContents).SetClass("sticky top-4 m-4") - ]).SetClass("block w-full md:w-2/6 lg:w-1/6") - new Combine([leftBar, content]).SetClass("block md:flex").AttachTo("main") + + super(leftContents, content) } @@ -121,4 +109,4 @@ export default class ProfessionalGui { } new FixedUiElement("").AttachTo("decoration-desktop") -new ProfessionalGui() \ No newline at end of file +new ProfessionalGui().AttachTo("main") \ No newline at end of file diff --git a/UI/QueryParameterDocumentation.ts b/UI/QueryParameterDocumentation.ts index 684fcb32ba..017ac5b775 100644 --- a/UI/QueryParameterDocumentation.ts +++ b/UI/QueryParameterDocumentation.ts @@ -23,9 +23,9 @@ export default class QueryParameterDocumentation { ), "Finally, the URL-hash is the part after the `#`. It is `node/1234` in this case." ]) - + public static GenerateQueryParameterDocs(): BaseUIElement { - const docs : (string | BaseUIElement)[] = [...QueryParameterDocumentation.QueryParamDocsIntro]; + const docs: (string | BaseUIElement)[] = [...QueryParameterDocumentation.QueryParamDocsIntro]; for (const key in QueryParameters.documentation) { const c = new Combine([ new Title(key, 2), diff --git a/UI/ShowDataLayer/ShowDataLayer.ts b/UI/ShowDataLayer/ShowDataLayer.ts index 27ed05f150..bd9d6490e7 100644 --- a/UI/ShowDataLayer/ShowDataLayer.ts +++ b/UI/ShowDataLayer/ShowDataLayer.ts @@ -1,9 +1,9 @@ import {UIEventSource} from "../../Logic/UIEventSource"; import LayerConfig from "../../Models/ThemeConfig/LayerConfig"; -import FeatureInfoBox from "../Popup/FeatureInfoBox"; import {ShowDataLayerOptions} from "./ShowDataLayerOptions"; import {ElementStorage} from "../../Logic/ElementStorage"; import RenderingMultiPlexerFeatureSource from "../../Logic/FeatureSource/Sources/RenderingMultiPlexerFeatureSource"; +import ScrollableFullScreen from "../Base/ScrollableFullScreen"; /* // import 'leaflet-polylineoffset'; We don't actually import it here. It is imported in the 'MinimapImplementation'-class, which'll result in a patched 'L' object. @@ -44,12 +44,12 @@ export default class ShowDataLayer { */ private readonly leafletLayersPerId = new Map<string, { feature: any, leafletlayer: any }>() private readonly showDataLayerid: number; + private readonly createPopup: (tags: any, layer: LayerConfig) => ScrollableFullScreen constructor(options: ShowDataLayerOptions & { layerToShow: LayerConfig }) { this._leafletMap = options.leafletMap; this.showDataLayerid = ShowDataLayer.dataLayerIds; ShowDataLayer.dataLayerIds++ - this._enablePopups = options.enablePopups ?? true; if (options.features === undefined) { console.error("Invalid ShowDataLayer invocation: options.features is undefed") throw "Invalid ShowDataLayer invocation: options.features is undefed" @@ -57,7 +57,12 @@ export default class ShowDataLayer { this._features = new RenderingMultiPlexerFeatureSource(options.features, options.layerToShow); this._layerToShow = options.layerToShow; this._selectedElement = options.selectedElement - this.allElements = options.allElements; + this.allElements = options.state?.allElements; + this.createPopup = undefined; + this._enablePopups = options.popup !== undefined; + if (options.popup !== undefined) { + this.createPopup = options.popup + } const self = this; options.leafletMap.addCallback(_ => { @@ -68,7 +73,7 @@ export default class ShowDataLayer { this._features.features.addCallback(_ => self.update(options)); options.doShowLayer?.addCallback(doShow => { const mp = options.leafletMap.data; - if(mp === null){ + if (mp === null) { self.Destroy() return true; } @@ -137,7 +142,7 @@ export default class ShowDataLayer { } } - private update(options: ShowDataLayerOptions) : boolean{ + private update(options: ShowDataLayerOptions): boolean { if (this._features.features.data === undefined) { return; } @@ -147,13 +152,13 @@ export default class ShowDataLayer { } const mp = options.leafletMap.data; - if(mp === null){ + if (mp === null) { return true; // Unregister as the map has been destroyed } if (mp === undefined) { return; } - + this._cleanCount++ // clean all the old stuff away, if any if (this.geoLayer !== undefined) { @@ -300,14 +305,14 @@ export default class ShowDataLayer { leafletLayer.bindPopup(popup); - let infobox: FeatureInfoBox = undefined; - + let infobox: ScrollableFullScreen = undefined; const id = `popup-${feature.properties.id}-${feature.geometry.type}-${this.showDataLayerid}-${this._cleanCount}-${feature.pointRenderingIndex ?? feature.lineRenderingIndex}-${feature.multiLineStringIndex ?? ""}` popup.setContent(`<div style='height: 65vh' id='${id}'>Popup for ${feature.properties.id} ${feature.geometry.type} ${id} is loading</div>`) + const createpopup = this.createPopup; leafletLayer.on("popupopen", () => { if (infobox === undefined) { const tags = this.allElements?.getEventSourceById(feature.properties.id) ?? new UIEventSource<any>(feature.properties); - infobox = new FeatureInfoBox(tags, layer); + infobox = createpopup(tags, layer); infobox.isShown.addCallback(isShown => { if (!isShown) { diff --git a/UI/ShowDataLayer/ShowDataLayerOptions.ts b/UI/ShowDataLayer/ShowDataLayerOptions.ts index 4b811be68a..e79fe00d44 100644 --- a/UI/ShowDataLayer/ShowDataLayerOptions.ts +++ b/UI/ShowDataLayer/ShowDataLayerOptions.ts @@ -1,13 +1,15 @@ import FeatureSource from "../../Logic/FeatureSource/FeatureSource"; import {UIEventSource} from "../../Logic/UIEventSource"; import {ElementStorage} from "../../Logic/ElementStorage"; +import LayerConfig from "../../Models/ThemeConfig/LayerConfig"; +import ScrollableFullScreen from "../Base/ScrollableFullScreen"; export interface ShowDataLayerOptions { features: FeatureSource, selectedElement?: UIEventSource<any>, - allElements?: ElementStorage, leafletMap: UIEventSource<L.Map>, - enablePopups?: true | boolean, + popup?: undefined | ((tags: any, layer: LayerConfig) => ScrollableFullScreen), zoomToFeatures?: false | boolean, - doShowLayer?: UIEventSource<boolean> + doShowLayer?: UIEventSource<boolean>, + state?: { allElements?: ElementStorage } } \ No newline at end of file diff --git a/UI/ShowDataLayer/ShowTileInfo.ts b/UI/ShowDataLayer/ShowTileInfo.ts index 702e9d9c83..1b6cc1d85a 100644 --- a/UI/ShowDataLayer/ShowTileInfo.ts +++ b/UI/ShowDataLayer/ShowTileInfo.ts @@ -6,6 +6,7 @@ import StaticFeatureSource from "../../Logic/FeatureSource/Sources/StaticFeature import {GeoOperations} from "../../Logic/GeoOperations"; import {Tiles} from "../../Models/TileRange"; import * as clusterstyle from "../../assets/layers/cluster_style/cluster_style.json" +import State from "../../State"; export default class ShowTileInfo { public static readonly styling = new LayerConfig(clusterstyle, "ShowTileInfo", true) @@ -53,7 +54,9 @@ export default class ShowTileInfo { layerToShow: ShowTileInfo.styling, features: new StaticFeatureSource(metaFeature, false), leafletMap: options.leafletMap, - doShowLayer: options.doShowLayer + doShowLayer: options.doShowLayer, + state: State.state, + popup: undefined }) } diff --git a/UI/SpecialVisualizations.ts b/UI/SpecialVisualizations.ts index b15d58b8e2..8a4d6a2cb8 100644 --- a/UI/SpecialVisualizations.ts +++ b/UI/SpecialVisualizations.ts @@ -12,7 +12,6 @@ import MangroveReviews from "../Logic/Web/MangroveReviews"; import Translations from "./i18n/Translations"; import ReviewForm from "./Reviews/ReviewForm"; import OpeningHoursVisualization from "./OpeningHours/OpeningHoursVisualization"; -import State from "../State"; import BaseUIElement from "./BaseUIElement"; import Title from "./Base/Title"; import Table from "./Base/Table"; @@ -56,6 +55,45 @@ export interface SpecialVisualization { getLayerDependencies?: (argument: string[]) => string[] } +export class AllTagsPanel extends VariableUiElement { + + constructor(tags: UIEventSource<any>, state?) { + + const calculatedTags = [].concat( + SimpleMetaTagger.lazyTags, + ...(state?.layoutToUse?.layers?.map(l => l.calculatedTags?.map(c => c[0]) ?? []) ?? [])) + + + super(tags.map(tags => { + const parts = []; + for (const key in tags) { + if (!tags.hasOwnProperty(key)) { + continue + } + let v = tags[key] + if (v === "") { + v = "<b>empty string</b>" + } + parts.push([key, v ?? "<b>undefined</b>"]); + } + + for (const key of calculatedTags) { + const value = tags[key] + if (value === undefined) { + continue + } + parts.push(["<i>" + key + "</i>", value]) + } + + return new Table( + ["key", "value"], + parts + ) + .SetStyle("border: 1px solid black; border-radius: 1em;padding:1em;display:block;").SetClass("zebra-table") + })) + } +} + export default class SpecialVisualizations { public static specialVisualizations = SpecialVisualizations.init() @@ -100,37 +138,7 @@ export default class SpecialVisualizations { funcName: "all_tags", docs: "Prints all key-value pairs of the object - used for debugging", args: [], - constr: ((state: State, tags: UIEventSource<any>) => { - const calculatedTags = [].concat( - SimpleMetaTagger.lazyTags, - ...state.layoutToUse.layers.map(l => l.calculatedTags?.map(c => c[0]) ?? [])) - return new VariableUiElement(tags.map(tags => { - const parts = []; - for (const key in tags) { - if (!tags.hasOwnProperty(key)) { - continue - } - let v = tags[key] - if (v === "") { - v = "<b>empty string</b>" - } - parts.push([key, v ?? "<b>undefined</b>"]); - } - - for (const key of calculatedTags) { - const value = tags[key] - if (value === undefined) { - continue - } - parts.push(["<i>" + key + "</i>", value]) - } - - return new Table( - ["key", "value"], - parts - ) - })).SetStyle("border: 1px solid black; border-radius: 1em;padding:1em;display:block;") - }) + constr: ((state, tags: UIEventSource<any>) => new AllTagsPanel(tags, state)) }, { funcName: "image_carousel", @@ -140,7 +148,7 @@ export default class SpecialVisualizations { defaultValue: AllImageProviders.defaultKeys.join(","), doc: "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... " }], - constr: (state: State, tags, args) => { + constr: (state, tags, args) => { let imagePrefixes: string[] = undefined; if (args.length > 0) { imagePrefixes = [].concat(...args.map(a => a.split(","))); @@ -160,7 +168,7 @@ export default class SpecialVisualizations { doc: "The text to show on the button", defaultValue: "Add image" }], - constr: (state: State, tags, args) => { + constr: (state, tags, args) => { return new ImageUploadFlow(tags, state, args[0], args[1]) } }, @@ -259,11 +267,10 @@ export default class SpecialVisualizations { new ShowDataMultiLayer( { leafletMap: minimap["leafletMap"], - enablePopups: false, + popup: undefined, zoomToFeatures: true, - layers: State.state.filteredLayers, - features: new StaticFeatureSource(featuresToShow, true), - allElements: State.state.allElements + layers: state.filteredLayers, + features: new StaticFeatureSource(featuresToShow, true) } ) @@ -306,11 +313,11 @@ export default class SpecialVisualizations { new ShowDataLayer( { leafletMap: minimap["leafletMap"], - enablePopups: false, + popup: undefined, zoomToFeatures: true, layerToShow: new LayerConfig(left_right_style_json, "all_known_layers", true), features: new StaticFeatureSource([copy], false), - allElements: State.state.allElements + state } ) @@ -331,7 +338,7 @@ export default class SpecialVisualizations { name: "fallback", doc: "The identifier to use, if <i>tags[subjectKey]</i> as specified above is not available. This is effectively a fallback value" }], - constr: (state: State, tags, args) => { + constr: (state, tags, args) => { const tgs = tags.data; const key = args[0] ?? "name" let subject = tgs[key] ?? args[1]; @@ -341,7 +348,7 @@ export default class SpecialVisualizations { const mangrove = MangroveReviews.Get(Number(tgs._lon), Number(tgs._lat), encodeURIComponent(subject), state.mangroveIdentity, - state.osmConnection._dryRun + state.featureSwitchIsTesting.data ); const form = new ReviewForm((r, whenDone) => mangrove.AddReview(r, whenDone), state.osmConnection); return new ReviewElement(mangrove.GetSubjectUri(), mangrove.GetReviews(), form); @@ -364,7 +371,7 @@ export default class SpecialVisualizations { doc: "Remove this string from the end of the value before parsing. __Note: use `&RPARENs` to indicate `)` if needed__" }], example: "A normal opening hours table can be invoked with `{opening_hours_table()}`. A table for e.g. conditional access with opening hours can be `{opening_hours_table(access:conditional, no @ &LPARENS, &RPARENS)}`", - constr: (state: State, tagSource: UIEventSource<any>, args) => { + constr: (state, tagSource: UIEventSource<any>, args) => { return new OpeningHoursVisualization(tagSource, state, args[0], args[1], args[2]) } }, @@ -380,7 +387,7 @@ export default class SpecialVisualizations { }, { name: "path", doc: "The path (or shorthand) that should be returned" }], - constr: (state: State, tagSource: UIEventSource<any>, args) => { + constr: (state, tagSource: UIEventSource<any>, args) => { const url = args[0]; const shorthands = args[1]; const neededValue = args[2]; @@ -413,7 +420,7 @@ export default class SpecialVisualizations { } ], - constr: (state: State, tagSource: UIEventSource<any>, args: string[]) => { + constr: (state, tagSource: UIEventSource<any>, args: string[]) => { let assignColors = undefined; if (args.length >= 3) { @@ -448,7 +455,7 @@ export default class SpecialVisualizations { return undefined; } }) - return new Histogram(listSource, args[1], args[2], assignColors) + return new Histogram(listSource, args[1], args[2], {assignColor: assignColors}) } }, { @@ -461,7 +468,7 @@ export default class SpecialVisualizations { doc: "The url to share (default: current URL)", } ], - constr: (state: State, tagSource: UIEventSource<any>, args) => { + constr: (state, tagSource: UIEventSource<any>, args) => { if (window.navigator.share) { const generateShareData = () => { @@ -527,7 +534,7 @@ export default class SpecialVisualizations { funcName: "multi_apply", docs: "A button to apply the tagging of this object onto a list of other features. This is an advanced feature for which you'll need calculatedTags", args: [ - {name: "feature_ids", doc: "A JSOn-serialized list of IDs of features to apply the tagging on"}, + {name: "feature_ids", doc: "A JSON-serialized list of IDs of features to apply the tagging on"}, { name: "keys", doc: "One key (or multiple keys, seperated by ';') of the attribute that should be copied onto the other features." @@ -580,7 +587,7 @@ export default class SpecialVisualizations { funcName: "export_as_gpx", docs: "Exports the selected feature as GPX-file", args: [], - constr: (state, tagSource, args) => { + constr: (state, tagSource) => { const t = Translations.t.general.download; return new SubtleButton(Svg.download_ui(), @@ -605,7 +612,7 @@ export default class SpecialVisualizations { funcName: "export_as_geojson", docs: "Exports the selected feature as GeoJson-file", args: [], - constr: (state, tagSource, args) => { + constr: (state, tagSource) => { const t = Translations.t.general.download; return new SubtleButton(Svg.download_ui(), @@ -672,7 +679,7 @@ export default class SpecialVisualizations { doc: "Text to add onto the note when closing", } ], - constr: (state, tags, args, guiState) => { + constr: (state, tags, args) => { const t = Translations.t.notes; let icon = Svg.checkmark_svg() @@ -690,11 +697,11 @@ export default class SpecialVisualizations { const id = tags.data[args[2] ?? "id"] state.osmConnection.closeNote(id, args[3]) ?.then(_ => { - tags.data["closed_at"] = new Date().toISOString(); - tags.ping() - }) + tags.data["closed_at"] = new Date().toISOString(); + tags.ping() + }) }) - return new LoginToggle( new Toggle( + return new LoginToggle(new Toggle( t.isClosed.SetClass("thanks"), closeButton, isClosed @@ -711,14 +718,14 @@ export default class SpecialVisualizations { defaultValue: "id" } ], - constr: (state, tags, args, guiState) => { + constr: (state, tags, args) => { const t = Translations.t.notes; - const textField = ValidatedTextField.InputForType("text", {placeholder: t.addCommentPlaceholder}) + const textField = ValidatedTextField.ForType("text").ConstructInputElement({placeholder: t.addCommentPlaceholder}) textField.SetClass("rounded-l border border-grey") const txt = textField.GetValue() - const addCommentButton = new SubtleButton(Svg.addSmall_svg().SetClass("max-h-7"), t.addCommentPlaceholder) + const addCommentButton = new SubtleButton(Svg.speech_bubble_svg().SetClass("max-h-7"), t.addCommentPlaceholder) .onClick(async () => { const id = tags.data[args[1] ?? "id"] @@ -745,10 +752,6 @@ export default class SpecialVisualizations { return t.addCommentAndClose }))).onClick(() => { const id = tags.data[args[1] ?? "id"] - if (state.featureSwitchIsTesting.data) { - console.log("Testmode: Not actually closing note...") - return; - } state.osmConnection.closeNote(id, txt.data).then(_ => { tags.data["closed_at"] = new Date().toISOString(); tags.ping() @@ -762,10 +765,6 @@ export default class SpecialVisualizations { return t.reopenNoteAndComment }))).onClick(() => { const id = tags.data[args[1] ?? "id"] - if (state.featureSwitchIsTesting.data) { - console.log("Testmode: Not actually reopening note...") - return; - } state.osmConnection.reopenNote(id, txt.data).then(_ => { tags.data["closed_at"] = undefined; tags.ping() @@ -779,7 +778,9 @@ export default class SpecialVisualizations { new Combine([ new Title("Add a comment"), textField, - new Combine([addCommentButton.SetClass("mr-2"), stateButtons]).SetClass("flex justify-end") + new Combine([ + new Toggle(addCommentButton, undefined, textField.GetValue().map(t => t !==undefined && t.length > 1)).SetClass("mr-2") + , stateButtons]).SetClass("flex justify-end") ]).SetClass("border-2 border-black rounded-xl p-4 block"), t.loginToAddComment, state) } @@ -795,7 +796,7 @@ export default class SpecialVisualizations { }, { name: "start", - doc:"Drop the first 'start' comments", + doc: "Drop the first 'start' comments", defaultValue: "0" } ] @@ -805,7 +806,7 @@ export default class SpecialVisualizations { .map(commentsStr => { const comments: any[] = JSON.parse(commentsStr) const startLoc = Number(args[1] ?? 0) - if(!isNaN(startLoc) && startLoc > 0){ + if (!isNaN(startLoc) && startLoc > 0) { comments.splice(0, startLoc) } return new Combine(comments @@ -823,9 +824,9 @@ export default class SpecialVisualizations { defaultValue: "id" }], constr: (state, tags, args) => { - const isUploading = new UIEventSource(false); - const t = Translations.t.notes; - const id = tags.data[args[0] ?? "id"] + const isUploading = new UIEventSource(false); + const t = Translations.t.notes; + const id = tags.data[args[0] ?? "id"] const uploader = new ImgurUploader(url => { isUploading.setData(false) @@ -843,7 +844,7 @@ export default class SpecialVisualizations { fileSelector.GetValue().addCallback(filelist => { isUploading.setData(true) uploader.uploadMany("Image for osm.org/note/" + id, "CC0", filelist) - + }) const ti = Translations.t.image const uploadPanel = new Combine([ @@ -852,12 +853,26 @@ export default class SpecialVisualizations { ti.ccoExplanation.SetClass("subtle text-sm"), ti.respectPrivacy.SetClass("text-sm") ]).SetClass("flex flex-col") - return new LoginToggle( new Toggle( + return new LoginToggle(new Toggle( Translations.t.image.uploadingPicture.SetClass("alert"), uploadPanel, isUploading), t.loginToAddPicture, state) } + }, + { + funcName:"title", + args: [], + docs:"Shows the title of the popup. Useful for some cases, e.g. 'What is phone number of {title()}?'", + example:"`What is the phone number of {title()}`, which might automatically become `What is the phone number of XYZ`.", + constr: (state, tags, args, guistate) => + new VariableUiElement(tags.map(tags => { + const layer = state.layoutToUse.getMatchingLayer(tags) + console.log("Layer for tags", tags,"is", layer.id) + const title = layer?.title?.GetRenderValue(tags) + console.log("Title became: ", title) + return title + })) } ] diff --git a/UI/SubstitutedTranslation.ts b/UI/SubstitutedTranslation.ts index a71598d5f2..59d7ae50ba 100644 --- a/UI/SubstitutedTranslation.ts +++ b/UI/SubstitutedTranslation.ts @@ -36,7 +36,7 @@ export class SubstitutedTranslation extends VariableUiElement { super( Locale.language.map(language => { - let txt = translation.textFor(language); + let txt = translation?.textFor(language); if (txt === undefined) { return undefined } @@ -72,7 +72,7 @@ export class SubstitutedTranslation extends VariableUiElement { style: string } }[] { - + for (const knownSpecial of SpecialVisualizations.specialVisualizations.concat(extraMappings)) { // Note: the '.*?' in the regex reads as 'any character, but in a non-greedy way' diff --git a/UI/Wikipedia/WikidataPreviewBox.ts b/UI/Wikipedia/WikidataPreviewBox.ts index b54ec1e188..7a94c4e02a 100644 --- a/UI/Wikipedia/WikidataPreviewBox.ts +++ b/UI/Wikipedia/WikidataPreviewBox.ts @@ -81,6 +81,7 @@ export default class WikidataPreviewBox extends VariableUiElement { })) } + // @ts-ignore public static WikidataResponsePreview(wikidata: WikidataResponse): BaseUIElement { @@ -142,7 +143,7 @@ export default class WikidataPreviewBox extends VariableUiElement { continue } const value: string[] = Array.from(wikidata.claims.get(key)) - + if (display instanceof Translation) { els.push(display.Subs({value: value.join(", ")}).SetClass("m-2")) continue diff --git a/UI/i18n/Translation.ts b/UI/i18n/Translation.ts index b88cc7b379..a068be1997 100644 --- a/UI/i18n/Translation.ts +++ b/UI/i18n/Translation.ts @@ -7,13 +7,13 @@ export class Translation extends BaseUIElement { public static forcedLanguage = undefined; public readonly translations: object - + constructor(translations: object, context?: string) { super() if (translations === undefined) { throw `Translation without content (${context})` } - if(typeof translations === "string"){ + if (typeof translations === "string") { translations = {"*": translations}; } let count = 0; @@ -35,12 +35,7 @@ export class Translation extends BaseUIElement { get txt(): string { return this.textFor(Translation.forcedLanguage ?? Locale.language.data) - } - - Destroy() { - super.Destroy(); - this.isDestroyed = true; - } + } static ExtractAllTranslationsFrom(object: any, context = ""): { context: string, tr: Translation }[] { const allTranslations: { context: string, tr: Translation }[] = [] @@ -74,6 +69,11 @@ export class Translation extends BaseUIElement { return new Translation(translations); } + Destroy() { + super.Destroy(); + this.isDestroyed = true; + } + public textFor(language: string): string { if (this.translations["*"]) { return this.translations["*"]; @@ -100,7 +100,7 @@ export class Translation extends BaseUIElement { const el = document.createElement("span") const self = this Locale.language.addCallbackAndRun(_ => { - if(self.isDestroyed){ + if (self.isDestroyed) { return true } el.innerHTML = this.txt @@ -124,8 +124,8 @@ export class Translation extends BaseUIElement { } return langs; } - - public AllValues(): string[]{ + + public AllValues(): string[] { return this.SupportedLanguages().map(lng => this.translations[lng]); } @@ -142,6 +142,33 @@ export class Translation extends BaseUIElement { } + /** + * + * Given a translation such as `{en: "How much of bicycle_types are rented here}` (which is this translation) + * and a translation object `{ en: "electrical bikes" }`, plus the translation specification `bicycle_types`, will return + * a new translation: + * `{en: "How much electrical bikes are rented here?"}` + * + * @param translationObject + * @param stringToReplace + * @constructor + */ + public Fuse(translationObject: Translation, stringToReplace: string): Translation{ + const translations = this.translations + const newTranslations = {} + for (const lang in translations) { + const target = translationObject.textFor(lang) + if(target === undefined){ + continue + } + if(typeof target !== "string"){ + throw "Invalid object in Translation.fuse: translationObject['"+lang+"'] is not a string, it is: "+JSON.stringify(target) + } + newTranslations[lang] = this.translations[lang].replaceAll(stringToReplace, target) + } + return new Translation(newTranslations) + } + public replace(a: string, b: string) { if (a.startsWith("{") && a.endsWith("}")) { a = a.substr(1, a.length - 2); @@ -205,7 +232,7 @@ export class Translation extends BaseUIElement { } return allIcons.filter(icon => icon != undefined) } - + AsMarkdown(): string { return this.txt } diff --git a/UI/i18n/Translations.ts b/UI/i18n/Translations.ts index 6052d8b287..72ed3a4e5f 100644 --- a/UI/i18n/Translations.ts +++ b/UI/i18n/Translations.ts @@ -1,12 +1,13 @@ import {FixedUiElement} from "../Base/FixedUiElement"; -import AllTranslationAssets from "../../AllTranslationAssets"; import {Translation} from "./Translation"; import BaseUIElement from "../BaseUIElement"; +import * as known_languages from "../../assets/generated/used_languages.json" +import CompiledTranslations from "../../assets/generated/CompiledTranslations"; export default class Translations { - static t = AllTranslationAssets.t; - + static t = CompiledTranslations.t; + private static knownLanguages = new Set(known_languages.languages) constructor() { throw "Translations is static. If you want to intitialize a new translation, use the singular form" } @@ -89,4 +90,11 @@ export default class Translations { } + static isProbablyATranslation(transl: any) { + if(typeof transl !== "object"){ + return false; + } + // is a weird key found? + return !Object.keys(transl).some(key => !this.knownLanguages.has(key)) + } } diff --git a/Utils.ts b/Utils.ts index 25f8985758..cdf0cb26b6 100644 --- a/Utils.ts +++ b/Utils.ts @@ -21,7 +21,7 @@ Remark that the syntax is slightly different then expected; it uses '$' to note Note that these values can be prepare with javascript in the theme by using a [calculatedTag](calculatedTags.md#calculating-tags-with-javascript) ` - public static readonly imageExtensions = new Set(["jpg","png","svg","jpeg",".gif"]) + public static readonly imageExtensions = new Set(["jpg", "png", "svg", "jpeg", ".gif"]) public static readonly special_visualizations_importRequirementDocs = `#### Importing a dataset into OpenStreetMap: requirements @@ -255,7 +255,7 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be const date: Date = el; v = date.toISOString() } - + if (useLang !== undefined && v?.translations !== undefined) { v = v.translations[useLang] ?? v.translations["*"] ?? (v.textFor !== undefined ? v.textFor(useLang) : v); } @@ -269,7 +269,7 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be v = "" + v } v = v.replace(/\n/g, "<br/>") - }else{ + } else { // v === undefined v = "" } @@ -301,10 +301,20 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be * @return the second parameter as is */ static Merge(source: any, target: any) { + if (target === null) { + return source + } + for (const key in source) { if (!source.hasOwnProperty(key)) { continue } + if (key.startsWith("=")) { + const trimmedKey = key.substr(1); + target[trimmedKey] = source[key] + continue + } + if (key.startsWith("+") || key.endsWith("+")) { const trimmedKey = key.replace("+", ""); const sourceV = source[key]; @@ -321,10 +331,7 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be continue; } - const sourceV = source[key]; - if (target === null) { - return source - } + const sourceV = source[key] const targetV = target[key] if (typeof sourceV === "object") { if (sourceV === null) { @@ -343,16 +350,98 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be return target; } + + /** + * Walks the specified path into the object till the end. + * + * If a list is encountered, this is tranparently walked recursively on every object. + * + * The leaf objects are replaced by the function + */ + public static WalkPath(path: string[], object: any, replaceLeaf: ((leaf: any) => any)) { + const head = path[0] + if (path.length === 1) { + // We have reached the leaf + const leaf = object[head]; + if (leaf !== undefined) { + if(Array.isArray(leaf)){ + object[head] = leaf.map(replaceLeaf) + }else{ + object[head] = replaceLeaf(leaf) + } + } + return + + } + const sub = object[head] + if (sub === undefined) { + return; + } + if (typeof sub !== "object") { + return; + } + if (Array.isArray(sub)) { + sub.forEach(el => Utils.WalkPath(path.slice(1), el, replaceLeaf)) + return; + } + Utils.WalkPath(path.slice(1), sub, replaceLeaf) + } + + /** + * Walks the specified path into the object till the end. + * If a list is encountered, this is tranparently walked recursively on every object. + * + * The leaf objects are collected in the list + */ + public static CollectPath(path: string[], object: any, collectedList = []): any[] { + if (object === undefined || object === null) { + return collectedList; + } + const head = path[0] + if (path.length === 1) { + // We have reached the leaf + const leaf = object[head]; + if (leaf === undefined || leaf === null) { + return collectedList + } + if (Array.isArray(leaf)) { + collectedList.push(...leaf) + } else { + collectedList.push(leaf) + } + return collectedList + } + const sub = object[head] + if (sub === undefined || sub === null) { + return collectedList; + } + + if (Array.isArray(sub)) { + sub.forEach(el => Utils.CollectPath(path.slice(1), el, collectedList)) + return collectedList; + } + if (typeof sub !== "object") { + return collectedList; + } + return Utils.CollectPath(path.slice(1), sub, collectedList) + } + + /** + * Apply a function on every leaf of the JSON; used to rewrite parts of the JSON + * @param json + * @param f + * @constructor + */ static WalkJson(json: any, f: (v: number | string | boolean | undefined) => any) { - if(json === undefined){ + if (json === undefined) { return f(undefined) } const jtp = typeof json - if (jtp === "boolean" || jtp === "string" || jtp === "number"){ + if (jtp === "boolean" || jtp === "string" || jtp === "number") { return f(json) } if (json.map !== undefined) { - return json.map(sub => { + return json.map(sub => { return Utils.WalkJson(sub, f); }) } @@ -495,7 +584,10 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be } const data = await Utils.download(url, Utils.Merge({"accept": "application/json"}, headers ?? {})) try { - return JSON.parse(data) + if (typeof data === "string") { + return JSON.parse(data) + } + return data } catch (e) { console.error("Could not parse ", data, "due to", e, "\n", e.stack) throw e; @@ -626,6 +718,13 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be return JSON.parse(JSON.stringify(x)); } + public static ParseDate(str: string): Date { + if (str.endsWith(" UTC")) { + str = str.replace(" UTC", "+00") + } + return new Date(str) + } + private static colorDiff(c0: { r: number, g: number, b: number }, c1: { r: number, g: number, b: number }) { return Math.abs(c0.r - c1.r) + Math.abs(c0.g - c1.g) + Math.abs(c0.b - c1.b); } @@ -652,5 +751,27 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be b: parseInt(hex.substr(5, 2), 16), } } + + public static levenshteinDistance (str1: string, str2: string) { + const track = Array(str2.length + 1).fill(null).map(() => + Array(str1.length + 1).fill(null)); + for (let i = 0; i <= str1.length; i += 1) { + track[0][i] = i; + } + for (let j = 0; j <= str2.length; j += 1) { + track[j][0] = j; + } + for (let j = 1; j <= str2.length; j += 1) { + for (let i = 1; i <= str1.length; i += 1) { + const indicator = str1[i - 1] === str2[j - 1] ? 0 : 1; + track[j][i] = Math.min( + track[j][i - 1] + 1, // deletion + track[j - 1][i] + 1, // insertion + track[j - 1][i - 1] + indicator, // substitution + ); + } + } + return track[str2.length][str1.length]; + } } diff --git a/all_themes_index.ts b/all_themes_index.ts index dec4d68733..12abde8c54 100644 --- a/all_themes_index.ts +++ b/all_themes_index.ts @@ -6,14 +6,14 @@ import {QueryParameters} from "./Logic/Web/QueryParameters"; const layout = QueryParameters.GetQueryParameter("layout", undefined).data ?? "" const customLayout = QueryParameters.GetQueryParameter("userlayout", undefined).data ?? "" const l = window.location; -if( layout !== ""){ - if(window.location.host.startsWith("127.0.0.1")){ - window.location.replace(l.protocol + "//" + window.location.host+"/theme.html"+ l.search + "&layout="+layout + l.hash); - }else{ - window.location.replace(l.protocol + "//" + window.location.host+"/"+layout+".html"+ l.search + l.hash); +if (layout !== "") { + if (window.location.host.startsWith("127.0.0.1")) { + window.location.replace(l.protocol + "//" + window.location.host + "/theme.html" + l.search + "&layout=" + layout + l.hash); + } else { + window.location.replace(l.protocol + "//" + window.location.host + "/" + layout + ".html" + l.search + l.hash); } -}else if (customLayout !== ""){ - window.location.replace(l.protocol + "//" + window.location.host+"/theme.html"+ l.search + l.hash); +} else if (customLayout !== "") { + window.location.replace(l.protocol + "//" + window.location.host + "/theme.html" + l.search + l.hash); } diff --git a/assets/layers/address/address.json b/assets/layers/address/address.json index d26452cd8c..0d4a4c1c81 100644 --- a/assets/layers/address/address.json +++ b/assets/layers/address/address.json @@ -7,7 +7,9 @@ "hu": "Ismert címek az OSM-en", "nl": "Bekende adressen in OSM", "fr": "Adresses connues d’OpenStreetMap", - "ru": "Известные адреса в OSM" + "ru": "Известные адреса в OSM", + "id": "Alamat yang dikenal di OSM", + "es": "Direcciones conocidas en OSM" }, "minzoom": 18, "source": { @@ -32,7 +34,8 @@ "nl": "Bekend adres", "fr": "Adresse connue", "pl": "Znany adres", - "ru": "Известный адрес" + "ru": "Известный адрес", + "es": "Domicilio conocido" } }, "description": { @@ -43,7 +46,9 @@ "zh_Hant": "地址", "hu": "Címek", "fr": "Adresses", - "pl": "Adresy" + "pl": "Adresy", + "id": "Alamat", + "es": "Direcciones" }, "tagRenderings": [ { @@ -64,7 +69,8 @@ "nl": "Wat is het huisnummer van dit huis?", "fr": "Quel est le numéro de ce bâtiment ?", "pl": "Jaki jest numer tego domu?", - "ru": "Какой номер у этого дома?" + "ru": "Какой номер у этого дома?", + "es": "¿Cuál es el número de esta casa?" }, "freeform": { "key": "addr:housenumber", @@ -86,7 +92,9 @@ "hu": "Ennek az épületnek nincs házszáma", "fr": "Ce bâtiment n’a pas de numéro", "pl": "Ten budynek nie ma numeru", - "ru": "У этого здания нет номера" + "ru": "У этого здания нет номера", + "id": "Bangunan ini tidak memiliki nomor rumah", + "es": "Esta edificación no tiene número" } } ] @@ -108,7 +116,8 @@ "nl": "In welke straat bevindt dit adres zich?", "fr": "Dans quelle rue est située l’adresse ?", "pl": "Na jakiej ulicy znajduje się ten adres?", - "ru": "Какая эта улица?" + "ru": "Какая эта улица?", + "es": "¿En qué calle se encuentra esta dirección?" }, "freeform": { "key": "addr:street" @@ -145,7 +154,10 @@ "de": "Was sollte hier korrigiert werden? Bitte erläutern", "hu": "Mit kellene itt kijavítani? Légy szíves, magyarázd el", "fr": "Précisez ce qui devrait être corrigé ici", - "pl": "Co wymaga naprawy? Proszę wytłumaczyć" + "pl": "Co wymaga naprawy? Proszę wytłumaczyć", + "id": "Apa yang harus diperbaiki di sini? Tolong jelaskan", + "es": "¿Qué debe corregirse aquí? Expóngalo", + "nl": "Wat moet hier gecorrigeerd worden? Leg het uit" }, "freeform": { "key": "fixme" diff --git a/assets/layers/ambulancestation/ambulancestation.json b/assets/layers/ambulancestation/ambulancestation.json index 79ffd401e8..19fdae859f 100644 --- a/assets/layers/ambulancestation/ambulancestation.json +++ b/assets/layers/ambulancestation/ambulancestation.json @@ -7,7 +7,8 @@ "fr": "Couche des ambulances", "de": "Karte der Rettungswachen", "it": "Carta delle stazioni delle ambulanze", - "hu": "Mentőállomás-térkép" + "hu": "Mentőállomás-térkép", + "nl": "Kaart van ambulancestations" }, "minzoom": 12, "source": { @@ -25,7 +26,8 @@ "fr": "Station d’ambulances", "de": "Rettungswache", "it": "Stazione delle ambulanze", - "hu": "Mentőállomás" + "hu": "Mentőállomás", + "nl": "Ambulancestation" } }, "description": { @@ -35,7 +37,8 @@ "de": "Eine Rettungswache ist ein Ort, an dem Rettungsfahrzeuge, medizinische Ausrüstung, persönliche Schutzausrüstung und anderes medizinisches Material untergebracht sind.", "it": "La stazione delle ambulanze è un’area per lo stoccaggio delle ambulanze, dell’equipaggiamento medico, dei dispositivi di protezione individuale e di altre forniture medicali.", "hu": "A mentőállomás olyan terület, ahol mentőautókat, orvosi felszereléseket, egyéni védőfelszereléseket és egyéb orvosi felszereléseket tárolnak.", - "ru": "Станция скорой помощи это полигон для хранения транспорта, медицинского оборудования, средств индивидуальной защиты и других медицинских принадлежностей." + "ru": "Станция скорой помощи это полигон для хранения транспорта, медицинского оборудования, средств индивидуальной защиты и других медицинских принадлежностей.", + "nl": "Een ambulancestation is een plaats waar ambulances, medisch materiaal, persoonlijk beschermingsmateriaal en aanverwanten worden bewaard." }, "tagRenderings": [ { @@ -50,7 +53,8 @@ "fr": "Quel est le nom de cette station ?", "it": "Qual è il nome di questa stazione delle ambulanze?", "de": "Wie heißt diese Rettungswache?", - "hu": "Mi a neve ennek a menőtállomásnak?" + "hu": "Mi a neve ennek a menőtállomásnak?", + "nl": "Hoe heet dit ambulancestation?" }, "render": { "en": "This station is called {name}.", @@ -59,7 +63,8 @@ "fr": "Cette station s’appelle {name}.", "it": "Questa stazione è chiamata {name}.", "de": "Diese Rettungswache heißt {name}.", - "hu": "A mentőállomás neve: {name}." + "hu": "A mentőállomás neve: {name}.", + "nl": "Dit station heet {name}." } }, { @@ -74,7 +79,8 @@ "fr": " Quel est le nom de la rue où la station se situe ?", "it": " Come si chiama la strada in cui si trova questa stazione?", "de": " Wie lautet der Name der Straße, in der sich die Rettungswache befindet?", - "hu": " Mi a neve annak az utcának, amelyben az állomás található?" + "hu": " Mi a neve annak az utcának, amelyben az állomás található?", + "nl": " In welke straat ligt dit station?" }, "render": { "en": "This station is along a highway called {addr:street}.", @@ -83,7 +89,8 @@ "fr": "La station fait partie de {addr:street}.", "it": "Questa stazione si trova in {addr:street}.", "de": "Dieser Bahnhof liegt an der Straße {addr:street}.", - "hu": "Ez az állomás a következő utcában van: {addr:street}." + "hu": "Ez az állomás a következő utcában van: {addr:street}.", + "nl": "Straat waar dit station ligt: {addr:street}" } }, { @@ -95,7 +102,8 @@ "fr": "Dans quelle localité la station est-elle située ?", "it": "Dove si trova la stazione? (ad es. quartiere, paese o città)", "de": "Wo befindet sich die Rettungswache? (z. B. Name von Stadtviertel, Dorf oder Stadt)", - "hu": "Hol található az állomás? (Pl. a falu, kisváros vagy városrész neve.)" + "hu": "Hol található az állomás? (Pl. a falu, kisváros vagy városrész neve.)", + "nl": "Waar ligt het station? (v.b. naam van de buurt, dorp of stad)" }, "freeform": { "key": "addr:place" @@ -106,7 +114,8 @@ "fr": "La station fait partie de {addr:place}.", "it": "La stazione si trova a {addr:place}.", "de": "Diese Rettungswache befindet sich in {addr:place}.", - "hu": "Ez az állomás itt található: {addr:place}." + "hu": "Ez az állomás itt található: {addr:place}.", + "nl": "Dit station ligt in {addr:place}." } }, { @@ -118,7 +127,8 @@ "it": "Quale agenzia gestisce questa stazione?", "de": "Welches Unternehmen betreibt diese Rettungswache?", "hu": "Milyen szervezet működteti ezt az állomást?", - "ru": "Какая организация управляет этой станцией?" + "ru": "Какая организация управляет этой станцией?", + "nl": "Welke organisatie beheert dit station?" }, "render": { "en": "This station is operated by {operator}.", @@ -127,7 +137,8 @@ "it": "Questa stazione è gestita da {operator}.", "de": "Diese Rettungswache wird betrieben von {operator}.", "hu": "Az állomás üzemeltetője: {operator}.", - "ru": "Эта станция управляется {operator}." + "ru": "Эта станция управляется {operator}.", + "nl": "Dit station wordt beheerd door {operator}." }, "freeform": { "key": "operator" @@ -142,7 +153,8 @@ "fr": "Quel est le type d’exploitant ?", "it": "Com’è classificato il gestore della stazione?", "de": "Wie kann der Betreiber der Rettungswache eingestuft werden?", - "hu": "Hogyan sorolható be az állomás üzemeltetője?" + "hu": "Hogyan sorolható be az állomás üzemeltetője?", + "nl": "Wat voor een organisatie is de beheerder van dit station?" }, "render": { "en": "The operator is a(n) {operator:type} entity.", @@ -150,7 +162,8 @@ "fr": "L’exploitant est de type {operator:type}.", "it": "L’operatore è un ente {operator:type}.", "de": "Der Betreiber ist eine {operator:type}.", - "hu": "Az üzemeltető egy {operator:type} jellegű szervezet." + "hu": "Az üzemeltető egy {operator:type} jellegű szervezet.", + "nl": "De beheerder is van het type {operator:type}." }, "freeform": { "key": "operator:type" @@ -169,7 +182,8 @@ "it": "La stazione è gestita dal governo.", "de": "Die Rettungswache wird von einer Behörde betrieben.", "hu": "A mentőállomást a kormány üzemelteti.", - "ru": "Станция управляется правительством." + "ru": "Станция управляется правительством.", + "nl": "Dit station wordt beheerd door de overheid." } }, { @@ -185,7 +199,8 @@ "it": "La stazione è gestita dalla comunità o un’organizzazione non ufficiale.", "de": "Die Rettungswache wird von einer gemeindenahen oder informellen Organisation betrieben.", "hu": "Mentőállomást egy közösségi vagy nem hivatalos szervezet működteti.", - "ru": "Станция управляется волонтёрами или частной организацией." + "ru": "Станция управляется волонтёрами или частной организацией.", + "nl": "Dit station wordt beheerd door een informele of community organisatie." } }, { @@ -200,7 +215,8 @@ "fr": "La station est opérée par un groupe officiel de bénévoles.", "it": "La stazione è gestita da un gruppo ufficiale di volontari.", "de": "Die Rettungswache wird von einer Freiwilligenorganisation betrieben.", - "hu": "A mentőállomást egy önkéntesekből álló hivatalos csoport működteti." + "hu": "A mentőállomást egy önkéntesekből álló hivatalos csoport működteti.", + "nl": "Dit station wordt beheerd door een formele groep vrijwilligers." } }, { @@ -215,7 +231,8 @@ "fr": "La station est opérée par un groupe privé.", "it": "La stazione è gestita da un privato.", "de": "Die Rettungswache wird von einer privaten Organisation betrieben.", - "hu": "Az állomást egy magánkézben lévő szervezet működteti." + "hu": "Az állomást egy magánkézben lévő szervezet működteti.", + "nl": "Dit station wordt beheerd door een privé-organisatie." } } ] @@ -234,7 +251,8 @@ "fr": "Station d’ambulances", "de": "Rettungswache", "it": "Stazione delle ambulanze", - "hu": "Mentőállomás" + "hu": "Mentőállomás", + "nl": "Ambulancestation" }, "description": { "en": "Add an ambulance station to the map", @@ -243,7 +261,8 @@ "fr": "Ajouter une station d’ambulances à la carte", "de": "Eine Rettungsstation der Karte hinzufügen", "it": "Aggiungi una stazione delle ambulanza alla mappa", - "hu": "Mentőállomás hozzáadása a térképhez" + "hu": "Mentőállomás hozzáadása a térképhez", + "nl": "Voeg een ambulancestation toe aan de kaart" } } ], diff --git a/assets/layers/artwork/artwork.json b/assets/layers/artwork/artwork.json index ae391d1a20..bffc6f05f1 100644 --- a/assets/layers/artwork/artwork.json +++ b/assets/layers/artwork/artwork.json @@ -51,7 +51,7 @@ "id": "Karya Seni <i>{name}</i>", "it": "Opera <i>{name}</i>", "ru": "Художественная работа <i>{name}</i>", - "es": "Obra de arte <i>{nombre}</i>", + "es": "Obra de arte <i>{name}</i>", "ja": "アートワーク <i>{name}</i>", "zh_Hant": "藝術品<i>{name}</i>", "fi": "Taideteos <i>{name}</i>", @@ -134,7 +134,7 @@ "de": "Was ist die Art dieses Kunstwerks?", "it": "Che tipo di opera d’arte è questo?", "ru": "К какому типу относится эта работа?", - "es": "Cuál es el tipo de esta obra de arte?", + "es": "¿Qué tipo de obra es esta pieza?", "ja": "この作品の種類は何ですか?", "zh_Hant": "這是什麼類型的藝術品?", "nb_NO": "Hvilken type kunstverk er dette?", @@ -165,7 +165,8 @@ "id": "Arsitektur", "pt": "Arquitetura", "hu": "Építészet", - "pl": "Architektura" + "pl": "Architektura", + "es": "Arquitectura" } }, { @@ -183,7 +184,8 @@ "id": "Mural", "pt": "Mural", "hu": "Falfestmény", - "pl": "Mural" + "pl": "Mural", + "es": "Mural" } }, { @@ -201,7 +203,8 @@ "id": "Lukisan", "pt": "Pintura", "hu": "Festmény", - "pl": "Obraz" + "pl": "Obraz", + "es": "Pintura" } }, { @@ -219,7 +222,8 @@ "id": "Patung", "pt": "Escultura", "hu": "Absztrakt szobor", - "pl": "Rzeźba" + "pl": "Rzeźba", + "es": "Escultura" } }, { @@ -236,7 +240,8 @@ "nb_NO": "Statue", "pt": "Estátua", "hu": "Szobor", - "pl": "Posąg" + "pl": "Posąg", + "es": "Estatua" } }, { @@ -253,7 +258,8 @@ "nb_NO": "Byste", "pt": "Busto", "hu": "Mellszobor", - "pl": "Popiersie" + "pl": "Popiersie", + "es": "Busto" } }, { @@ -289,7 +295,8 @@ "id": "Instalasi", "pt": "Instalação", "hu": "Installáció", - "pl": "Instalacja artystyczna" + "pl": "Instalacja artystyczna", + "es": "Instalación" } }, { @@ -307,7 +314,8 @@ "id": "Graffiti", "pt": "Graffiti", "hu": "Graffiti", - "pl": "Graffiti" + "pl": "Graffiti", + "es": "Grafiti" } }, { diff --git a/assets/layers/barrier/barrier.json b/assets/layers/barrier/barrier.json index 6fa4a0cc8f..499a2157f6 100644 --- a/assets/layers/barrier/barrier.json +++ b/assets/layers/barrier/barrier.json @@ -6,7 +6,8 @@ "de": "Hindernisse", "ru": "Препятствия", "hu": "Akadályok", - "fr": "Barrières" + "fr": "Barrières", + "es": "Barreras" }, "description": { "en": "Obstacles while cycling, such as bollards and cycle barriers", @@ -30,7 +31,8 @@ "nl": "Barrière", "de": "Hindernis", "ru": "Препятствие", - "fr": "Barrière" + "fr": "Barrière", + "es": "Barrera" }, "mappings": [ { @@ -40,7 +42,8 @@ "nl": "Paaltje", "de": "Poller", "ru": "Прикол", - "fr": "Bollard" + "fr": "Bollard", + "es": "Bolardo" } }, { @@ -62,7 +65,8 @@ "de": "Poller", "ru": "Прикол", "fr": "Bollard", - "hu": "Terelőoszlop" + "hu": "Terelőoszlop", + "es": "Bolardo" }, "tags": [ "barrier=bollard" @@ -168,7 +172,8 @@ "nl": "Wat voor soort paal is dit?", "de": "Um was für einen Poller handelt es sich?", "fr": "Quel est le type de bollard (borne) ?", - "hu": "Milyen fajta terelőoszlop ez?" + "hu": "Milyen fajta terelőoszlop ez?", + "es": "¿Qué tipo de bolardo es este?" }, "condition": "barrier=bollard", "mappings": [ @@ -189,7 +194,8 @@ "nl": "Vaste paal", "de": "Feststehender Poller", "fr": "Bollard fixe", - "hu": "Rögzített terelőoszlop" + "hu": "Rögzített terelőoszlop", + "es": "Bolardo fijo" } }, { @@ -209,7 +215,8 @@ "nl": "Flexibele paal, meestal plastic", "de": "Flexibler Poller, meist aus Kunststoff", "fr": "Bollard flexible, généralement en plastique", - "hu": "Rugalmas (általában műanyag) terelőoszlop" + "hu": "Rugalmas (általában műanyag) terelőoszlop", + "es": "Bolardo flexible, normalmente plástico" } }, { @@ -219,7 +226,8 @@ "nl": "Verzonken poller", "de": "Ausfahrender Poller", "fr": "Bollard rétractable", - "hu": "Felemelkedő terelőoszlop" + "hu": "Felemelkedő terelőoszlop", + "es": "Bolardo levadizo" } } ], @@ -375,7 +383,8 @@ "en": "Overlap: {overlap} m", "de": "Überschneidung: {overlap} m", "hu": "Átfedés: {overlap} m", - "fr": "Chevauchement : {overlap} m" + "fr": "Chevauchement : {overlap} m", + "nl": "Overlap: {overlap} m" }, "question": { "en": "How much overlap do the barriers have?", diff --git a/assets/layers/bench/bench.json b/assets/layers/bench/bench.json index 0d88a0f893..c96a91085e 100644 --- a/assets/layers/bench/bench.json +++ b/assets/layers/bench/bench.json @@ -53,7 +53,7 @@ "de": "Rückenlehne: Ja", "fr": "Dossier : Oui", "nl": "Heeft een rugleuning", - "es": "Respaldo: Si", + "es": "Respaldo: sí", "hu": "Háttámla van", "id": "Sandaran: Ya", "it": "Schienale: Sì", @@ -74,7 +74,7 @@ "de": "Rückenlehne: Nein", "fr": "Dossier : Non", "nl": "Rugleuning ontbreekt", - "es": "Respaldo: No", + "es": "Respaldo: no", "hu": "Háttámla nincs", "id": "Sandaran: Tidak", "it": "Schienale: No", @@ -94,7 +94,7 @@ "de": "Hat diese Bank eine Rückenlehne?", "fr": "Ce banc dispose-t-il d'un dossier ?", "nl": "Heeft deze zitbank een rugleuning?", - "es": "¿Este banco tiene un respaldo?", + "es": "¿Este banco tiene respaldo?", "hu": "Van-e háttámlája ennek a padnak?", "id": "Apakah bangku ini memiliki sandaran?", "it": "Questa panchina ha lo schienale?", @@ -327,7 +327,8 @@ "zh_Hant": "坐在長椅時是面對那個方向?", "pt_BR": "Em que direção você olha quando está sentado no banco?", "pl": "W jakim kierunku patrzysz siedząc na ławce?", - "pt": "Em que direção olha quando está sentado no banco?" + "pt": "Em que direção olha quando está sentado no banco?", + "es": "¿En qué dirección se mira al sentarse en el banco?" }, "render": { "en": "When sitting on the bench, one looks towards {direction}°.", @@ -366,7 +367,8 @@ "fi": "Väri: {colour}", "pl": "Kolor: {colour}", "pt": "Cor: {colour}", - "eo": "Koloro: {colour}" + "eo": "Koloro: {colour}", + "es": "Color: {colour}" }, "question": { "en": "Which colour does this bench have?", @@ -380,7 +382,8 @@ "zh_Hant": "這個長椅是什麼顏色的?", "pt_BR": "Qual a cor dessa bancada?", "pl": "Jaki kolor ma ta ławka?", - "pt": "Qual a cor dessa bancada?" + "pt": "Qual a cor dessa bancada?", + "es": "¿De qué color es este banco?" }, "freeform": { "key": "colour", @@ -424,7 +427,8 @@ "fi": "Väri: vihreä", "pl": "Kolor: zielony", "pt": "Cor: verde", - "eo": "Koloro: verda" + "eo": "Koloro: verda", + "es": "Color: verde" } }, { @@ -444,7 +448,8 @@ "fi": "Väri: harmaa", "pl": "Kolor: szary", "pt": "Cor: cinzento", - "eo": "Koloro: griza" + "eo": "Koloro: griza", + "es": "Color: gris" } }, { @@ -464,7 +469,8 @@ "fi": "Väri: valkoinen", "pl": "Kolor: biały", "pt": "Cor: branco", - "eo": "Koloro: blanka" + "eo": "Koloro: blanka", + "es": "Color: blanco" } }, { @@ -484,7 +490,8 @@ "fi": "Väri: punainen", "pl": "Kolor: czerwony", "pt": "Cor: vermelho", - "eo": "Koloro: ruĝa" + "eo": "Koloro: ruĝa", + "es": "Color: rojo" } }, { @@ -504,7 +511,8 @@ "fi": "Väri: musta", "pl": "Kolor: czarny", "pt": "Cor: preto", - "eo": "Koloro: nigra" + "eo": "Koloro: nigra", + "es": "Color: negro" } }, { @@ -524,7 +532,8 @@ "fi": "Väri: sininen", "pl": "Kolor: niebieski", "pt": "Cor: azul", - "eo": "Koloro: blua" + "eo": "Koloro: blua", + "es": "Color: azul" } }, { @@ -544,7 +553,8 @@ "fi": "Väri: keltainen", "pl": "Kolor: żółty", "pt": "Cor: amarelo", - "eo": "Koloro: flava" + "eo": "Koloro: flava", + "es": "Color: amarillo" } } ], diff --git a/assets/layers/bench_at_pt/bench_at_pt.json b/assets/layers/bench_at_pt/bench_at_pt.json index 2131cbe0b8..e2525223e3 100644 --- a/assets/layers/bench_at_pt/bench_at_pt.json +++ b/assets/layers/bench_at_pt/bench_at_pt.json @@ -108,7 +108,8 @@ "fi": "{name}", "pl": "{name}", "pt": "{name}", - "eo": "{name}" + "eo": "{name}", + "es": "{name}" }, "freeform": { "key": "name" @@ -120,7 +121,8 @@ "question": { "en": "What kind of bench is this?", "nl": "Wat voor soort bank is dit?", - "de": "Was ist das für eine Bank?" + "de": "Was ist das für eine Bank?", + "es": "¿Qué tipo de banco es este?" }, "mappings": [ { @@ -179,6 +181,8 @@ } ], "description": { - "en": "A layer showing all public-transport-stops which do have a bench" + "en": "A layer showing all public-transport-stops which do have a bench", + "es": "Una capa que muestra todas las paradas de transporte público que tienen bancos", + "nl": "Een laag die stopplaatsen van openbaar vervoer toont waar er een zitbank is" } } \ No newline at end of file diff --git a/assets/layers/bicycle_rental/bicycle_rental.json b/assets/layers/bicycle_rental/bicycle_rental.json new file mode 100644 index 0000000000..57eee94cc9 --- /dev/null +++ b/assets/layers/bicycle_rental/bicycle_rental.json @@ -0,0 +1,305 @@ +{ + "id": "bicycle_rental", + "name": { + "en": "Bicycle rental", + "nl": "Fietsverhuur" + }, + "source": { + "osmTags": { + "or": [ + "amenity=bicycle_rental", + "bicycle_rental~*", + "service:bicycle:rental=yes", + "rental~.*bicycle.*" + ] + } + }, + "minzoom": 12, + "title": { + "render": { + "en": "Bicycle rental", + "nl": "Fietsverhuur", + "es": "Alquiler de bicicletas" + }, + "mappings": [ + { + "if": { + "and": [ + "name~*" + ] + }, + "then": { + "en": "{name}", + "nl": "{name}" + } + } + ] + }, + "description": { + "en": "Bicycle rental stations", + "nl": "Fietsverhuustations" + }, + "tagRenderings": [ + { + "id": "bicycle_rental_type", + "question": { + "en": "What kind of bicycle rental is this?", + "nl": "Wat voor fietsverhuur is dit?" + }, + "mappings": [ + { + "if": { + "and": [ + "shop=bicycle_rental", + "bicycle_rental=shop" + ] + }, + "then": { + "en": "This is a shop whose main focus is bicycle rental", + "nl": "Dit is een zaak die focust op fietsverhuur" + } + }, + { + "if": { + "and": [ + "shop=rental" + ] + }, + "then": { + "en": "This is a rental buisiness which rents out various objects and/or vehicles. It rents out bicycles too, but this is not the main focus", + "nl": "Dit is een zaak die verschillende voorwerpen en/of voertuigen verhuurt, waaronder ook fietsen; al zijn fietsen niet de hoofdfocus" + }, + "hideInAnswer": true + }, + { + "if": { + "and": [ + "service:bicycle:rental=yes", + "shop=bicycle" + ] + }, + "then": { + "en": "This is a shop which sells or repairs bicycles, but also rents out bicycles", + "nl": "Dit is een fietsenmaker of fietswinkel die ook fietsen veruurt" + } + }, + { + "if": "bicycle_rental=docking_station", + "then": { + "en": "This is an automated docking station, where a bicycle is mechanically locked into a structure", + "nl": "Dit is een docking station waar de fietsen mechanisch in een grotere structuur worden vastgemaakt" + } + }, + { + "if": "bicycle_rental=key_dispensing_machine", + "then": { + "en": "A machine is present which dispenses and accepts keys, eventually after authentication and/or payment. The bicycles are parked nearby", + "nl": "Hier is een machine die fietssleutels verdeelt en terugneemt, eventueel na aanmelden of betaling. De fietsen staan in de buurt geparkeerd" + } + }, + { + "if": "bicycle_rental=dropoff_point", + "then": { + "en": "This is a dropoff point: a designated bicycle parking for this cycle rental", + "nl": "Dit is een afzetpunt: een parking met duidelijke signalisatie waar (enkel) fietsen van deze fietsverhuur gezet worden", + "hu": "Ez egy leadási pont: ennek a kerékpárkölcsönzőnek a kijelölt kerékpártárolója" + } + } + ] + }, + "website", + "email", + "phone", + { + "builtin": "opening_hours", + "override": { + "condition": { + "or": [ + "shop~*", + "opening_hours~*" + ] + } + } + }, + { + "builtin": "payment-options", + "override": { + "condition": "shop~*" + } + }, + { + "builtin": "payment-options-advanced", + "override": { + "condition": "shop=" + } + }, + { + "id": "bicycle-types", + "question": { + "en": "What kind of bicycles and accessories are rented here?", + "nl": "Wat voor soort fietsen en fietstoebehren worden hier verhuurd?" + }, + "render": { + "en": "{rental} is rented here", + "nl": "{rental} wordt hier uitgeleend" + }, + "freeform": { + "key": "rental" + }, + "multiAnswer": true, + "mappings": [ + { + "if": "rental=city_bike", + "then": { + "en": "Normal city bikes can be rented here", + "nl": "Gewone stadsfietsen kunnen hier gehuurd worden" + } + }, + { + "if": "rental=ebike", + "then": { + "en": "Electrical bikes can be rented here", + "nl": "Elektrische fietsen kunnen hier gehuurd worden" + } + }, + { + "if": "rental=bmx", + "then": { + "en": "BMX bikes can be rented here", + "nl": "BMX-fietsen kunnen hier gehuurd worden" + } + }, + { + "if": "rental=mtb", + "then": { + "en": "Mountainbikes can be rented here", + "nl": "Mountainbikes kunnen hier gehuurd worden" + } + }, + { + "if": "rental=kid_bike", + "then": { + "en": "Bikes for childs can be rented here", + "nl": "Kinderfietsen kunnen hier gehuurd worden" + } + } + ] + }, + { + "rewrite": { + "sourceString": [ + "bicycle_type", + "type_plural" + ], + "into": [ + [ + "city_bike", + { + "en": "city bikes", + "nl": "Stadsfietsen" + } + ], + [ + "ebike", + { + "en": "electrical bikes", + "nl": "elektrische fietsen" + } + ], + [ + "kid_bike", + { + "en": "bikes for children", + "nl": "Kinderfietsen" + } + ], + [ + "bmx", + { + "en": "BMX bikes", + "nl": "BMX-fietsen" + } + ], + [ + "mtb", + { + "en": "mountainbike", + "nl": "mountainbike" + } + ], + [ + "bicycle_pannier", + { + "en": "bicycle panniers", + "nl": "Fietstassen" + } + ] + ] + }, + "renderings": [ + { + "id": "rental-capacity-bicycle-type", + "group": "", + "question": { + "en": "How much type_plural can be rented here? ", + "nl": "Hoeveel type_plural kunnen hier uitgeleend worden?" + }, + "render": { + "en": "{capacity:bicycle_type} type_plural can be rented here", + "nl": "{capacity:bicycle_type} type_plural kunnen hier uitgeleend worden" + }, + "freeform": { + "key": "capacity:bicycle_type", + "type": "pnat" + }, + "condition": "rental~.*bicycle_type.*" + } + ] + } + ], + "presets": [ + { + "title": { + "en": "bicycle rental shop", + "nl": "fietsverhuurzaak" + }, + "tags": [ + "amenity=bicycle_rental", + "bicycle_rental=shop" + ], + "description": { + "en": "A manned shop which focuses on bicycle rental", + "nl": "Een bemande winkel die focust op fietsverhuur" + } + }, + { + "title": { + "en": "bicycle rental", + "nl": "fietsverhuur" + }, + "tags": [ + "amenity=bicycle_rental" + ] + } + ], + "mapRendering": [ + { + "icon": "./assets/themes/bicycle_rental/logo.svg", + "iconSize": { + "render": "40,40,center" + }, + "location": [ + "point", + "centroid" + ] + }, + { + "color": { + "render": "#3333aa88" + }, + "width": { + "render": "2" + } + } + ] +} \ No newline at end of file diff --git a/assets/layers/bicycle_rental/license_info.json b/assets/layers/bicycle_rental/license_info.json new file mode 100644 index 0000000000..0996432254 --- /dev/null +++ b/assets/layers/bicycle_rental/license_info.json @@ -0,0 +1,13 @@ +[ + { + "path": "rental.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderenn" + ] + } +] \ No newline at end of file diff --git a/assets/layers/bicycle_rental/rental.svg b/assets/layers/bicycle_rental/rental.svg new file mode 100644 index 0000000000..b66b2c214e --- /dev/null +++ b/assets/layers/bicycle_rental/rental.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 141.73 141.73"><defs><style>.cls-1{fill:#fff;}.cls-2{fill:#3c3d3c;}</style></defs><g id="Laag_1" data-name="Laag 1"><circle class="cls-1" cx="70.87" cy="70.87" r="70.87"/></g><g id="Laag_2" data-name="Laag 2"><path class="cls-2" d="M102.39,75a18.18,18.18,0,0,0-3.92.43L92.87,57a7,7,0,0,0-6.77-5H80.67v2.59H86.1a4.45,4.45,0,0,1,4.29,3.19l1.72,5.66H55.54l-2-4.89h3.72S62,57.77,62,54.14H46.39v4.33h4.35l2.55,6.25L47.67,76.27A18.31,18.31,0,1,0,59,96.27h8l1-.43L93.33,67.37,96,76.15a18.28,18.28,0,1,0,6.4-1.17ZM41,109a15.72,15.72,0,1,1,5.58-30.4l-7.69,15.8L40,96.27H56.38A15.74,15.74,0,0,1,41,109Zm15.7-15.33H42.07l6.8-14a15.71,15.71,0,0,1,7.8,13.56C56.67,93.42,56.66,93.55,56.65,93.68ZM50,77.39l4.61-9.45,10.5,25.74H59.24c0-.13,0-.26,0-.39A18.33,18.33,0,0,0,50,77.39ZM67.45,92.56,56.59,66H91.13ZM102.39,109a15.71,15.71,0,0,1-5.65-30.38l4.56,15,2.48-.76-4.56-15A15.72,15.72,0,1,1,102.39,109Z"/><path class="cls-2" d="M78.72,40.26a13.89,13.89,0,0,1-5.58,1.25,9.86,9.86,0,0,1-5.6-1.61,9,9,0,0,1-3.39-4.41h9.4l1.07-2.89-.13-.36h-11a2.91,2.91,0,0,1,0-.4v-.57c0-.4,0-.79.05-1.17h12l1.08-2.93L76.36,27H64.13a8.69,8.69,0,0,1,3.48-4.43A10.82,10.82,0,0,1,73.55,21a16.47,16.47,0,0,1,4.55.68l.13,0,1.08-3-.15-.05a16.56,16.56,0,0,0-5.3-.81,14.91,14.91,0,0,0-8.42,2.35A11.73,11.73,0,0,0,60.66,27h-2.3l-1.08,2.93.19.19h2.69c0,.16,0,.32,0,.49v1.23c0,.14,0,.29,0,.42h-1.8L57.28,35.3l.19.19h3.21a12.2,12.2,0,0,0,4.48,6.72,12.47,12.47,0,0,0,7.64,2.46A16.44,16.44,0,0,0,79,43.39l.09,0v-3l-.28-.16Z"/></g></svg> \ No newline at end of file diff --git a/assets/layers/bicycle_tube_vending_machine/bicycle_tube_vending_machine.json b/assets/layers/bicycle_tube_vending_machine/bicycle_tube_vending_machine.json index f5e743672a..6558cc5d25 100644 --- a/assets/layers/bicycle_tube_vending_machine/bicycle_tube_vending_machine.json +++ b/assets/layers/bicycle_tube_vending_machine/bicycle_tube_vending_machine.json @@ -286,6 +286,7 @@ } ], "description": { - "en": "A layer showing vending machines for bicycle tubes (either purpose-built bicycle tube vending machines or classical vending machines with bicycle tubes and optionally additional bicycle related objects such as lights, gloves, locks, ...)" + "en": "A layer showing vending machines for bicycle tubes (either purpose-built bicycle tube vending machines or classical vending machines with bicycle tubes and optionally additional bicycle related objects such as lights, gloves, locks, ...)", + "nl": "Een laag met verkoopsautomaten met binnenbanden voor fietsen (dit kan een automaat zijn met énkel fietsbanden, of een gewone automaat met fietsbanden en andere fietsaccessoires zoals lichten, handschoenen, sloten,...)" } } \ No newline at end of file diff --git a/assets/layers/bike_cafe/bike_cafe.json b/assets/layers/bike_cafe/bike_cafe.json index 235ed421c2..becb7d4071 100644 --- a/assets/layers/bike_cafe/bike_cafe.json +++ b/assets/layers/bike_cafe/bike_cafe.json @@ -162,7 +162,8 @@ "zh_Hant": "這裡是否有工具修理你的單車嗎?", "ru": "Есть ли здесь инструменты для починки вашего велосипеда?", "pt_BR": "Há ferramentas aqui para consertar sua bicicleta?", - "pt": "Há ferramentas aqui para consertar a sua própria bicicleta?" + "pt": "Há ferramentas aqui para consertar a sua própria bicicleta?", + "es": "¿Hay herramientas para reparar su propia bicicleta?" }, "mappings": [ { @@ -356,7 +357,7 @@ "mapRendering": [ { "icon": { - "render": "./assets/layers/bike_cafe/bike_cafe.svg" + "render": "pin:#684c2b;./assets/layers/bike_cafe/bike_cafe.svg" }, "iconSize": { "render": "50,50,bottom" @@ -376,6 +377,7 @@ } ], "description": { - "en": "A bike café is a café geared towards cyclists, for example with services such as a pump, with lots of bicycle-related decoration, ..." + "en": "A bike café is a café geared towards cyclists, for example with services such as a pump, with lots of bicycle-related decoration, ...", + "nl": "Een fietscafé is een café dat gericht is op fietsers, bijvoorbeeld omdat het een fietspomp heeft, fietsgerelateerde decoratie heeft enzovoorts." } } \ No newline at end of file diff --git a/assets/layers/bike_cafe/bike_cafe.svg b/assets/layers/bike_cafe/bike_cafe.svg index ce47ecc031..c00702f70b 100644 --- a/assets/layers/bike_cafe/bike_cafe.svg +++ b/assets/layers/bike_cafe/bike_cafe.svg @@ -1,34 +1,19 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="296px" height="374px" viewBox="0 0 296 374" version="1.1"> - <defs> - <image id="image7" width="296" height="374" xlink:href="data:image/png;base64,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"/> - <pattern id="pattern2" patternUnits="userSpaceOnUse" width="296" height="374"> - <use xlink:href="#image7"/> - </pattern> - <pattern id="pattern1" patternUnits="userSpaceOnUse" width="296" height="374"> - <use xlink:href="#surface8"/> - </pattern> - <pattern id="pattern0" patternUnits="userSpaceOnUse" width="296" height="374"> - <use xlink:href="#surface10"/> - </pattern> - <clipPath id="clip2"> - <rect x="0" y="0" width="296" height="374"/> - </clipPath> - <clipPath id="clip1"> - <rect x="0" y="0" width="296" height="374"/> - </clipPath> - <g id="surface8" clip-path="url(#clip2)"> - <rect x="0" y="0" width="296" height="374" style="fill:url(#pattern2);stroke:none;"/> - </g> - <g id="surface10" clip-path="url(#clip1)"> - <rect x="0" y="0" width="296" height="374" style="fill:url(#pattern1);stroke:none;"/> - </g> - </defs> - <g id="surface1"> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(41.176471%,30.588236%,17.647059%);fill-opacity:1;" d="M 166.257812 344.121094 C 160.871094 355.847656 144.191406 355.847656 138.804688 344.121094 L 45.949219 142.015625 C 41.359375 132.023438 48.667969 120.644531 59.675781 120.644531 L 245.386719 120.644531 C 256.394531 120.644531 263.703125 132.023438 259.113281 142.015625 Z M 166.257812 344.121094 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(41.176471%,30.588236%,17.647059%);fill-opacity:1;" d="M 296 147.789062 C 296 229.414062 229.738281 295.582031 148 295.582031 C 66.261719 295.582031 0 229.414062 0 147.789062 C 0 66.167969 66.261719 0 148 0 C 229.738281 0 296 66.167969 296 147.789062 Z M 296 147.789062 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 203.878906 230.25 L 187.398438 230.25 C 196.949219 223.46875 204.742188 213.929688 209.847656 202.648438 L 226.207031 202.648438 C 239.851562 202.648438 250.949219 190.390625 250.949219 175.324219 C 250.949219 160.257812 239.851562 148 226.207031 148 L 216.472656 148 L 216.472656 134.199219 C 216.472656 131.148438 214.234375 128.679688 211.472656 128.679688 L 77.488281 128.679688 C 74.726562 128.679688 72.488281 131.148438 72.488281 134.199219 L 72.488281 171.617188 C 72.488281 196.207031 84.097656 217.847656 101.566406 230.25 L 82.5625 230.25 C 79.804688 230.25 77.488281 232.722656 77.488281 235.769531 C 77.488281 238.820312 79.804688 241.289062 82.5625 241.289062 L 203.878906 241.289062 C 206.636719 241.289062 208.40625 238.308594 208.40625 235.257812 C 208.40625 232.207031 206.636719 230.25 203.878906 230.25 Z M 226.207031 159.039062 C 234.339844 159.039062 240.953125 166.34375 240.953125 175.324219 C 240.953125 184.304688 234.339844 191.609375 226.207031 191.609375 L 213.8125 191.609375 C 215.535156 185.273438 216.472656 178.566406 216.472656 171.617188 L 216.472656 159.039062 Z M 112.207031 68.859375 C 120.167969 60.070312 120.167969 45.769531 112.207031 36.980469 L 111.835938 36.570312 C 109.882812 34.414062 109.882812 30.917969 111.835938 28.761719 C 113.785156 26.605469 116.949219 26.605469 118.902344 28.761719 L 119.277344 29.175781 C 131.132812 42.269531 131.132812 63.574219 119.277344 76.664062 C 115.421875 80.921875 113.300781 86.582031 113.300781 92.601562 C 113.300781 98.625 115.421875 104.285156 119.277344 108.542969 C 121.230469 110.695312 121.230469 114.191406 119.277344 116.347656 C 118.300781 117.425781 117.023438 117.964844 115.742188 117.964844 C 114.464844 117.964844 113.183594 117.425781 112.207031 116.347656 C 106.464844 110.003906 103.300781 101.574219 103.300781 92.601562 C 103.300781 83.632812 106.464844 75.199219 112.207031 68.859375 Z M 141.144531 68.859375 C 145 64.601562 147.121094 58.941406 147.121094 52.917969 C 147.121094 46.898438 145 41.238281 141.144531 36.980469 L 140.769531 36.566406 C 138.816406 34.414062 138.816406 30.917969 140.769531 28.761719 C 142.722656 26.605469 145.886719 26.605469 147.839844 28.761719 L 148.214844 29.175781 C 153.957031 35.515625 157.121094 43.949219 157.121094 52.917969 C 157.121094 61.890625 153.957031 70.320312 148.214844 76.664062 C 144.359375 80.921875 142.234375 86.582031 142.234375 92.601562 C 142.234375 98.625 144.359375 104.28125 148.214844 108.539062 C 150.167969 110.695312 150.167969 114.191406 148.214844 116.347656 C 147.238281 117.425781 145.957031 117.964844 144.679688 117.964844 C 143.398438 117.964844 142.121094 117.425781 141.144531 116.347656 C 135.398438 110.003906 132.238281 101.570312 132.238281 92.601562 C 132.238281 83.632812 135.402344 75.199219 141.144531 68.859375 Z M 170.082031 68.855469 C 178.039062 60.070312 178.039062 45.769531 170.082031 36.980469 L 169.707031 36.570312 C 167.753906 34.414062 167.753906 30.917969 169.707031 28.761719 C 171.660156 26.605469 174.824219 26.605469 176.777344 28.761719 L 177.148438 29.175781 C 189.003906 42.269531 189.003906 63.574219 177.148438 76.664062 C 173.292969 80.921875 171.171875 86.582031 171.171875 92.601562 C 171.171875 98.625 173.292969 104.285156 177.148438 108.539062 C 179.101562 110.695312 179.101562 114.191406 177.148438 116.347656 C 176.171875 117.425781 174.894531 117.964844 173.613281 117.964844 C 172.332031 117.964844 171.054688 117.425781 170.078125 116.347656 C 164.335938 110.003906 161.171875 101.574219 161.171875 92.601562 C 161.171875 83.632812 164.335938 75.199219 170.082031 68.855469 Z M 170.082031 68.855469 "/> - <path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(41.176471%,30.588236%,17.647059%);stroke-opacity:1;stroke-miterlimit:4;" d="M 66.006709 62.713612 C 66.006709 66.448739 63.069658 69.427515 59.50407 69.427515 C 55.937188 69.427515 53.000136 66.448739 53.000136 62.713612 C 53.000136 58.97978 55.937188 55.999708 59.50407 55.999708 C 63.069658 55.999708 66.006709 58.97978 66.006709 62.713612 Z M 66.006709 62.713612 " transform="matrix(3.020408,0,0,3.016129,0,0)"/> - <rect x="0" y="0" width="296" height="374" style="fill:url(#pattern0);stroke:none;"/> - </g> -</svg> \ No newline at end of file +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + width="296" + height="352.91602" + viewBox="0 0 296 352.91602" + version="1.1" + id="svg37" + sodipodi:docname="bike_cafe.svg" + inkscape:version="1.1.1 (1:1.1+202109281949+c3084ef5ed)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <path + id="path30" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.08999" + d="m 113.289,19.239135 c -1.39388,0 -2.78884,0.587574 -3.85116,1.762725 -2.12891,2.3503 -2.12891,6.161023 0,8.511323 l 0.40449,0.447068 c 8.67737,9.580028 8.67737,25.167797 0,34.747823 -6.25897,6.910389 -9.70777,16.102966 -9.70777,25.878849 0,9.780147 3.4488,18.968477 9.70777,25.883127 1.06444,1.17514 2.46099,1.76272 3.8533,1.76272 1.39655,0 2.78886,-0.58758 3.8533,-1.76272 2.1289,-2.3503 2.1289,-6.16103 0,-8.50707 -4.20243,-4.64099 -6.51443,-10.810552 -6.51443,-17.376057 0,-6.561261 2.312,-12.730793 6.51443,-17.371781 12.9224,-14.267857 12.9224,-37.489843 0,-51.761956 l -0.40875,-0.451326 c -1.06444,-1.175151 -2.45728,-1.762725 -3.85118,-1.762725 z m 31.53959,0 c -1.39443,0 -2.78885,0.587574 -3.85329,1.762725 -2.1289,2.3503 -2.12889,6.161023 0,8.507065 l 0.40875,0.451326 c 4.20242,4.640991 6.51441,10.81053 6.51441,17.371785 0,6.565512 -2.31199,12.735049 -6.51441,17.376038 -6.25896,6.910389 -9.70778,16.102966 -9.70778,25.878849 0,9.775887 3.44457,18.968477 9.70778,25.883127 1.06443,1.17514 2.45673,1.76272 3.85329,1.76272 1.39229,0 2.78886,-0.58758 3.8533,-1.76272 2.1289,-2.3503 2.1289,-6.16103 0,-8.51133 -4.20244,-4.64099 -6.51868,-10.806292 -6.51868,-17.371797 0,-6.561261 2.31624,-12.730793 6.51868,-17.371781 6.25896,-6.914652 9.70777,-16.102962 9.70777,-25.883106 0,-9.775887 -3.44881,-18.968456 -9.70777,-25.87885 L 148.6819,21.00186 c -1.06445,-1.175151 -2.45888,-1.762725 -3.85331,-1.762725 z m 31.54171,0 c -1.39443,0 -2.78885,0.587574 -3.85329,1.762725 -2.1289,2.3503 -2.1289,6.161023 0,8.511323 l 0.40875,0.447068 c 8.67311,9.580028 8.67311,25.167797 0,34.743572 -6.26321,6.914651 -9.71203,16.107217 -9.71203,25.8831 0,9.780157 3.44882,18.968477 9.70776,25.883127 1.06446,1.17514 2.45675,1.76272 3.8533,1.76272 1.39655,0 2.78885,-0.58758 3.8533,-1.76272 2.12889,-2.3503 2.12889,-6.16103 0,-8.51133 -4.20244,-4.63673 -6.51441,-10.806281 -6.51441,-17.371797 0,-6.56125 2.31197,-12.730793 6.51441,-17.371781 12.9224,-14.267851 12.9224,-37.489843 0,-51.761956 l -0.40448,-0.451326 c -1.06445,-1.175151 -2.45888,-1.762725 -3.85331,-1.762725 z M 71.999083,129.91189 c -3.010258,0 -5.449972,2.69093 -5.449972,6.01626 v 40.78538 c 0,26.80278 12.654149,50.39095 31.694993,63.90943 H 77.529953 c -3.006,0 -5.53087,2.69518 -5.53087,6.01625 0,3.32534 2.52487,6.01626 5.53087,6.01626 H 209.76415 c 3.006,0 4.93478,-3.2487 4.93478,-6.57403 0,-3.32533 -1.92878,-5.45848 -4.93478,-5.45848 h -17.96362 c 10.4103,-7.39153 18.90459,-17.78905 24.46953,-30.08555 h 17.83163 c 14.87246,0 26.96884,-13.36095 26.96884,-29.78324 0,-16.4223 -12.09639,-29.78325 -26.96884,-29.78325 h -10.61042 v -15.04277 c 0,-3.32533 -2.43972,-6.01626 -5.44997,-6.01626 z m 88.579077,11.42791 c 0.81086,-0.004 1.61952,0.004 2.42694,0.0766 3.58742,0.38582 6.69486,2.99532 8.08342,6.26747 2.57254,8.06356 5.11881,16.13676 7.67679,24.20555 3.39008,-0.54043 6.89256,-0.37316 10.21444,0.4939 6.41522,1.64685 12.06543,5.99554 15.32805,11.75576 3.22469,5.58846 4.09847,12.45306 2.44397,18.68318 -1.65819,6.39151 -5.99828,12.01695 -11.74086,15.27057 -5.7657,3.32877 -12.8912,4.15322 -19.27502,2.28218 -6.36383,-1.81882 -11.89096,-6.31471 -15.00019,-12.15387 -3.16393,-5.83898 -3.8078,-12.96351 -1.78188,-19.28353 1.99707,-6.38206 6.70647,-11.84475 12.70949,-14.78518 -0.43908,-1.38525 -0.87869,-2.77034 -1.31778,-4.1556 -9.91301,9.85953 -19.82612,19.71876 -29.73854,29.57887 h -8.89452 c -0.0858,0.68737 -0.19861,1.37257 -0.34275,2.05013 -1.36045,6.60173 -5.56794,12.53931 -11.31721,16.04974 -5.44198,3.38766 -12.22121,4.49822 -18.46817,3.08476 -6.56326,-1.43147 -12.433775,-5.68287 -15.881558,-11.4428 -3.379299,-5.53743 -4.413427,-12.42414 -2.87188,-18.71938 1.562332,-6.58867 5.973379,-12.42158 11.862204,-15.75596 5.708014,-3.29393 12.750434,-4.14006 19.083424,-2.33114 2.18379,-4.52348 4.36682,-9.04609 6.55061,-13.56958 -0.85225,-2.11581 -1.70454,-4.23254 -2.55681,-6.34836 h -1.3561 c -1.16679,-0.0304 -2.34297,0.0631 -3.50416,-0.0489 -1.09571,-0.13589 -1.87346,-1.15226 -1.96284,-2.21405 -0.098,-1.07616 -0.13112,-2.17867 0.0574,-3.24657 0.17266,-1.01912 1.04502,-1.85308 2.08419,-1.93091 3.62158,-0.0395 7.24576,-0.005 10.86801,-0.017 2.16502,0.0172 4.33416,-0.035 6.49739,0.0255 1.82583,0.17852 3.32654,1.87067 3.2934,3.70429 0.0336,1.83379 -1.46725,3.52423 -3.2934,3.70214 -1.54442,0.0624 -3.09463,0.01 -4.64099,0.0277 0.3557,0.88119 0.71087,1.76292 1.06657,2.64409 h 38.7906 c -0.42599,-1.34597 -0.85133,-2.69254 -1.27733,-4.0385 -0.23733,-1.0882 -1.05213,-2.14096 -2.18638,-2.36095 -1.49019,-0.0738 -2.98811,-0.0111 -4.48133,-0.0319 -0.96955,-0.0472 -1.9645,0.10973 -2.91658,-0.11283 -1.06102,-0.26396 -1.66176,-1.34959 -1.7095,-2.38436 -0.0416,-1.09799 -0.13677,-2.23365 0.16392,-3.30404 0.26881,-1.01704 1.28866,-1.69292 2.32263,-1.66054 0.85305,-0.003 1.70585,5.7e-4 2.55893,0 0.80976,0.0168 1.62247,-0.001 2.43333,-0.007 z m -30.68803,21.35921 c 3.56454,8.83999 7.12889,17.67963 10.69345,26.51964 8.84037,-8.84001 17.68139,-17.67965 26.52177,-26.51964 z m 93.60114,0.30442 h 10.61042 c 8.86472,0 16.07315,7.96208 16.07315,17.75074 0,9.78866 -7.20844,17.75072 -16.07315,17.75072 h -13.50998 c 1.87769,-6.90613 2.89956,-14.21675 2.89956,-21.79136 z m -99.39173,5.28393 c -1.11787,2.31461 -2.23726,4.62983 -3.35514,6.94445 -0.32331,0.33986 -0.007,0.49418 0.28314,0.66847 5.48325,3.70688 9.37413,9.68398 10.49546,16.21154 0.72719,5.1e-4 1.45493,-3.7e-4 2.18211,0 -3.20182,-7.94092 -6.40374,-15.88353 -9.60557,-23.82446 z m -17.08013,10.72963 c -0.93324,0.002 -1.86759,0.0735 -2.78885,0.22353 -5.166072,0.7976 -9.856332,4.08771 -12.405076,8.64545 -2.754361,4.79711 -2.995135,10.92233 -0.63654,15.92413 2.20495,4.81297 6.715398,8.49003 11.881356,9.6588 0.259,0.0608 0.68895,0.14274 0.84731,0.17457 3.85975,0.69458 7.95219,0.0635 11.39811,-1.81808 4.60966,-2.46312 7.98529,-7.09671 8.88175,-12.24966 h -15.52603 c -1.27953,-0.0536 -2.66696,0.21679 -3.82989,-0.46836 -1.60395,-0.85184 -2.36118,-2.9509 -1.66054,-4.62822 2.40999,-5.04682 4.86164,-10.07745 7.28721,-15.11729 -1.13407,-0.2327 -2.29162,-0.34051 -3.44881,-0.34487 z m 75.66094,0 c -0.54548,-3.3e-4 -1.08981,0.0319 -1.63286,0.0809 0.69428,2.19962 1.37767,4.4033 2.05438,6.60809 0.96776,3.18427 1.95695,6.36402 2.85698,9.56725 0.38753,1.82476 -0.82133,3.80018 -2.62493,4.27908 -1.78838,0.56253 -3.88086,-0.47363 -4.51539,-2.23747 -1.65259,-5.30756 -3.25503,-10.63118 -4.88794,-15.94543 -1.37012,0.79511 -2.62914,1.77728 -3.73621,2.9102 -3.30398,3.35019 -5.13582,8.08255 -4.95181,12.78402 0.1335,4.95939 2.53442,9.78643 6.38668,12.9075 3.63241,3.01317 8.52519,4.41556 13.20341,3.8171 0.28869,-0.0345 0.74182,-0.10551 0.92394,-0.13837 2.69842,-0.47811 5.2784,-1.60911 7.45965,-3.26786 3.98021,-2.98652 6.56951,-7.74342 6.87633,-12.71376 0.34931,-4.7246 -1.34106,-9.55053 -4.57074,-13.0182 -3.24546,-3.56201 -8.02111,-5.66335 -12.84149,-5.63305 z m -65.3805,3.35088 c -1.56818,3.24791 -3.13455,6.49605 -4.70273,9.74395 h 11.32572 c -0.98342,-3.86593 -3.35612,-7.35117 -6.57189,-9.70776 l -0.002,-0.002 z" /> +</svg> diff --git a/assets/layers/bike_cleaning/bike_cleaning.json b/assets/layers/bike_cleaning/bike_cleaning.json index 0d472248ee..ace20b610b 100644 --- a/assets/layers/bike_cleaning/bike_cleaning.json +++ b/assets/layers/bike_cleaning/bike_cleaning.json @@ -42,7 +42,8 @@ "or": [ "service:bicycle:cleaning=yes", "service:bicycle:cleaning=diy", - "amenity=bicycle_wash" + "amenity=bicycle_wash", + "amenity=bike_wash" ] } }, @@ -64,23 +65,25 @@ ] } ], - "titleIcons": [ - { - "render": "<img src='./assets/layers/bike_cleaning/bike_cleaning_icon.svg'/>" - } - ], "tagRenderings": [ "images", { "question": { "en": "How much does it cost to use the cleaning service?", - "de": "Wie viel kostet die Nutzung des Reinigungsdienstes?" + "de": "Wie viel kostet die Nutzung des Reinigungsdienstes?", + "nl": "Hoeveel kost het gebruik van het fietsschoonmaakpunt?" }, "render": { "en": "Using the cleaning service costs {service:bicycle:cleaning:charge}", - "de": "Nutzung des Reinigungsservice kostet {service:bicycle:cleaning:charge}" + "de": "Nutzung des Reinigungsservice kostet {service:bicycle:cleaning:charge}", + "nl": "Het gebruik van het fietsschoonmaakpunt kost {service:bicycle:cleaning:charge}" + }, + "condition": { + "and": [ + "amenity!=bike_wash", + "amenity!=bicycle_wash" + ] }, - "condition": "amenity!=bike_wash", "freeform": { "key": "service:bicycle:cleaning:charge", "addExtraTags": [ @@ -93,23 +96,27 @@ "if": "service:bicycle:cleaning:fee=no&service:bicycle:cleaning:charge=", "then": { "en": "The cleaning service is free to use", - "de": "Der Reinigungsservice ist kostenlos" + "de": "Der Reinigungsservice ist kostenlos", + "nl": "Het fietsschoonmaakpunt is gratis" } }, { "if": "service:bicycle:cleaning:fee=no", "then": { "en": "Free to use", - "de": "Kostenlose Nutzung" + "de": "Kostenlose Nutzung", + "nl": "Gratis te gebruiken" }, "hideInAnswer": true }, { - "if": "service:bicycle:cleaning:fee=yes", + "if": "service:bicycle:cleaning:fee=yes&service:bicycle:cleaning:charge=", "then": { "en": "The cleaning service has a fee, but the amount is not known", - "de": "Der Reinigungsdienst ist kostenpflichtig, aber der Betrag ist nicht bekannt" - } + "de": "Der Reinigungsdienst ist kostenpflichtig, aber der Betrag ist nicht bekannt", + "nl": "Het fietsschoonmaakpunt is betalend, maar de prijs is onbekend" + }, + "hideInAnswer": true } ], "id": "bike_cleaning-service:bicycle:cleaning:charge" @@ -117,13 +124,20 @@ { "question": { "en": "How much does it cost to use the cleaning service?", - "de": "Wie viel kostet die Nutzung des Reinigungsdienstes?" + "de": "Wie viel kostet die Nutzung des Reinigungsdienstes?", + "nl": "Hoeveel kost het gebruik van het fietsschoonmaakpunt?" }, "render": { "en": "Using the cleaning service costs {charge}", - "de": "Die Nutzung des Reinigungsdienstes kostet {charge}" + "de": "Die Nutzung des Reinigungsdienstes kostet {charge}", + "nl": "Het gebruik van het fietsschoonmaakpunt kost {charge}" + }, + "condition": { + "or": [ + "amenity=bike_wash", + "amenity=bicycle_wash" + ] }, - "condition": "amenity=bike_wash", "freeform": { "key": "charge", "addExtraTags": [ @@ -135,14 +149,16 @@ "if": "fee=no&charge=", "then": { "en": "Free to use cleaning service", - "de": "Kostenloser Reinigungsservice" + "de": "Kostenloser Reinigungsservice", + "nl": "Gratis fietsschoonmaakpunt" } }, { "if": "fee=no", "then": { "en": "Free to use", - "de": "Kostenlose Nutzung" + "de": "Kostenlose Nutzung", + "nl": "Gratis te gebruiken" }, "hideInAnswer": true }, @@ -150,7 +166,8 @@ "if": "fee=yes", "then": { "en": "The cleaning service has a fee", - "de": "Der Reinigungsservice ist kostenpflichtig" + "de": "Der Reinigungsservice ist kostenpflichtig", + "nl": "Je moet betalen voor het fietsschoonmaakpunt" } } ], @@ -180,7 +197,8 @@ "if": { "and": [ "service:bicycle:cleaning~*", - "amenity!=bike_wash" + "amenity!=bike_wash", + "amenity!=bicycle_wash" ] }, "then": { @@ -197,6 +215,7 @@ } ], "description": { - "en": "A layer showing facilities where one can clean their bike" + "en": "A layer showing facilities where one can clean their bike", + "nl": "Een laag die plaatsen toont waar je je fiets kunt wassen" } } \ No newline at end of file diff --git a/assets/layers/bike_parking/bike_parking.json b/assets/layers/bike_parking/bike_parking.json index d98379b06a..07ebe7f37f 100644 --- a/assets/layers/bike_parking/bike_parking.json +++ b/assets/layers/bike_parking/bike_parking.json @@ -480,7 +480,7 @@ "if": "cargo_bike=designated", "then": { "en": "This parking has designated (official) spots for cargo bikes.", - "nl": "Er zijn speciale plaatsen voorzien voor bakfietsen", + "nl": "Er zijn speciale plaatsen voorzien voor bakfietsen.", "gl": "Este aparcadoiro ten espazos designados (oficiais) para bicicletas de carga.", "de": "Dieser Parkplatz verfügt über ausgewiesene (offizielle) Plätze für Lastenfahrräder.", "fr": "Ce parking a des emplacements (officiellement) destinés aux vélos cargo.", @@ -519,7 +519,7 @@ }, "render": { "en": "This parking fits {capacity:cargo_bike} cargo bikes", - "nl": "Deze parking heeft plaats voor {capacity:cargo_bike} fietsen", + "nl": "Deze parking heeft plaats voor {capacity:cargo_bike} bakfietsen", "fr": "Ce parking a de la place pour {capacity:cargo_bike} vélos de transport", "gl": "Neste aparcadoiro caben {capacity:cargo_bike} bicicletas de carga", "de": "Auf diesen Parkplatz passen {capacity:cargo_bike} Lastenfahrräder", @@ -551,7 +551,7 @@ "mapRendering": [ { "icon": { - "render": "./assets/layers/bike_parking/parking.svg" + "render": "pin:#5473de;./assets/layers/bike_parking/parking.svg" }, "iconSize": "40,40,bottom", "location": [ @@ -565,6 +565,7 @@ } ], "description": { - "en": "A layer showing where you can park your bike" + "en": "A layer showing where you can park your bike", + "nl": "Een laag die toont waar je je fiets kunt parkeren" } } \ No newline at end of file diff --git a/assets/layers/bike_parking/license_info.json b/assets/layers/bike_parking/license_info.json index 67709100a1..3aa7716596 100644 --- a/assets/layers/bike_parking/license_info.json +++ b/assets/layers/bike_parking/license_info.json @@ -33,20 +33,6 @@ "https://osoc.be/editions/2020/cyclofix" ] }, - { - "path": "parking_old.svg", - "license": "CC-BY-SA", - "authors": [ - "Pieter Fiers", - "Thibault Declercq", - "Pierre Barban", - "Joost Schouppe", - "Pieter Vander Vennet" - ], - "sources": [ - "https://osoc.be/editions/2020/cyclofix" - ] - }, { "path": "rack.svg", "license": "CC-BY-SA", diff --git a/assets/layers/bike_parking/parking.svg b/assets/layers/bike_parking/parking.svg index 24f58cff91..c9158418a1 100644 --- a/assets/layers/bike_parking/parking.svg +++ b/assets/layers/bike_parking/parking.svg @@ -1,23 +1,38 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="295px" height="374px" viewBox="0 0 295 374" version="1.1"> - <defs> - <image id="image6" width="295" height="374" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAScAAAF2CAYAAAAsiF4TAAAABmJLR0QA/wD/AP+gvaeTAAAV8ElEQVR4nO3df4wc5X3H8e8zt7u3Zx/4EFDbxHVtsKllTOOi6KiK5AhauSkFLCNo1BoEgpRfLmor/mjFH41lC5SUYIUfwfyQI+FQTEIoCTUFmaQVAluBAxvjgqkBnyOfsQ/jM1zubm9vf0z/8K499+wzP3bv2d3Z2/dLGu3sr5nx7u3H3+eZZ2ZEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmkQ1ewNQE5XP51cppZY0e0MsGhWRCdd1MyIyLiLjrusez+fzAwMDA0cXL148YXiP29hNRCMRTq1j0nfluu5WEfl2k7alGQZF5IiIfFIsFt93Xff9XC63p6ur67eG1xJa0wDhFH/G76gNw8nPCRHZWSwWt+fz+e2dnZ3/pz1PULUowineTN+PEhEpFApbHcf56wZvTys4KCKv5vP5f08mkzu05wiqFuI0ewPgSw8m5XmM/1T8LRCROxKJxBuu637kuu53M5nMgtJzSiZ/jogxwimeTMFUvuXHFd2FIvLddDr9seu6W7LZ7B96nuOzjDnCKX6iBJNyXZcfVXQdInJDKpX6oFgs/iybzep7OQmpGCKc4iVSMBleh2gcpdR1qVRqb6FQePCDDz6YqT3PZxsjhFN8+QWTIyIOldOUdDiO809Lly59P5fLrZTg/j00CeEUb6aKSYmIUywW+fFM3cJEIvFqoVB46p133ukS/8oVTUA4xZPfEIJTlVNjN2d6cxznlksuuWTnl19++QdCFRUb/JHHh9+PoqJJJzTrrFNKfX3WrFlvZzKZy8UcSHzeDUY4xU+kkKJZVxfnpNPp/8pms6tL9wmoJiKc4knfK0fl1DipVCq1NZvNXivmvaM08xqEcIo/Y9OOyqmukqlU6rlMJvM34j8qn8+/zhLN3gAE0kPJ+iDM0dHRjwYHB3faWNZUOI6TSCaTM1Op1BmJRKK7q6vr91Kp1DzHcdJN2qSOdDr945GRkaPd3d3/IyePy1My+fg8/T4sIpziS29KiHiadbZWcvz48fcvuOCCR20tbwpMP3J3zZo156xevXrx0qVLl82ePfvinp6ebziOM6NB25ScOXPm1sHBwT+ZPXv2QSGgGorSND70PiZHmzrk5H8mHSKS+Oqrr54488wzr57qSvv7+39+/vnnf9/n6Wb/6Fx9fsGCBamNGzd+o7e394q5c+f+heM4+ihv+xvhunteffXVFVdeeeWoZ5v0z6bZn9W0Q59T/Pjtxq7n4St6EJabkKbHGzl1aPMdBw8ezF977bW/mTdv3n0rVqz4y76+vu+Nj48PWP48JlFKfX3lypU/kuAzQ/AfvWWEU/wZ99zZ6hAv9V1N6s8SQx9XEye/wOzYsWNHpre394UFCxZct3PnzvtyudxxG5+JSUdHxw3Dw8NXebZLPLeoA8Ip3oIqKCtK4eRXlTV7t3lYYDoi4gwODhYvu+yyX15xxRXXHTp06D/qtTHd3d0Pbdu27QzxDyjCyiLCKb6Cmg31/BHo/TymvhVbU5Rt0V/nW129+eabY/Pnz//+Sy+99M+FQmEsyj+2Gkqp+StXrvxXqQxyAqoOCKfWUu9KxtvZq0/F0mQznIqGyRRgQYFWEVarVq16ff369d/JZrNHpvh5VEgmk2s//PDDBUJA1R3h1Boq/tgtjxDXA0MPjoKYg6TeU1Aoere97FRgrF+/vv/mm2/+u0wmY7uzPLlo0aJ7pDIUYRnhFH+mP3xrPwallKmCKcjpQCpoj9VzMq3bFIzeEBUxV1Ty3HPPHb/jjjv+fnx8/OhUPiNdMpm8ua+vb54YdlR4XkZgTRHh1Hqs/tGXwikooAoiktfmbU/6svV16iGlB5apolIiorZs2fL5hg0b7ikWixkrH9hJnRdffPE/iLlyIqAsIZwgUhlI3oDQ5+sRTKb7fgEV1MTU+6lEROT+++/vf+WVV75n44MqS6VSf7tmzZpOoXlXN4RTm3McxxVzU6qelZJ3ytX4vrDAmlRJXXXVVa8dPnz4NSsfmogopc7ZuHHjn4n/+KxTL7W1znZDOLU5rc/JFEre+VqDJEpA5bR1BK1L3z5TQFU09e6+++6HC4XCiI3PTUSkp6fn2zJ5gKgXoTRFhFOb84RTtZVSztJkqqKihmBY39SkoHrxxReP79q16ye2PrtkMnn1PffcM0OCKycx3EcEhFObKzXrTJVTUFDZrKDCluUXZKYqylRJeffsubfffvsL+XzeSvWklJpx11139QpNurognCASvHu/Hs24qQaX/niUTnNXRNzdu3eP7d+//xe2Prhzzz33Mpl8WI0I1ZMVhFObCxnn5BdWNoIrrH/LdL/a5epB5YpI8cknn9xm59MTSafTfyrm4/7KCKUaEU5tzjDOybTXzi9QpjLgMmyZ1YSYqQ+qfFtRQT300EO/HRkZ+cTG55dIJHp7e3tTYj6cheppCggniFQeKuI3QluvRmoNpqhVmqlC0wMoKJh8m3kHDhx43cYHp5SasW7duvnCeCfrCKc2V+oQNx3DFnbcm6kqiTpFCSu/eb/KLahp591eV0Tc99577z0rH6CILFy4cKFMHlIQtvcOERBOEAk/A0HYQbm1TrUEYZTmoSm8Ji3z0Ucf3eu6btHGh9fT07NQCCTruMABRMxnJQg7D5ONc2b7nQLF+5ypD6fcAe16bl05eSpf77yvvr6+0fHx8YGurq75NW99SVdX1/liDiYllf9G02MwIJxgYuNEcVNZtzLcL9+W573B5Giv99LD7dQ0NjZ22EY4dXR0zC1tQ1Eqg0n/tyAimnUQCT5XUlDlVI8paNl+zUFT883UVzWpaTcyMvJZzZ+YR+lSVfQ1WUbl1OZKQwl0puab7SadnyjL9lZR5Saeqf+oULpVcjqoTr1nbGxsaMpbKyJKqZnadtC0s4BwQhBTGPnN22KqNrz9T6Z1eptT5dd5J28olV9bzOVyVs7xVLp2XpQ+J0KpCoQTvKrpT6rXj8yvz8j7nN+P3Nvc876/HErlyZGT4WTlIghKqRlSWTWZRokTTFUgnBB3euWhP+alh1I5jPRwKoqIUxrjZYO3MjNVcIRSDQgntJIoe7+81ZMS/3AqptPptI2NKhQK3uYhneGWEE5oNfr4Jz2gTMFUbnJN2tuXTCY7rWyQ62aksq9Jv6V6qhJDCdCqTKEUNAShYkhCOp0+08aGlC6eYOoM997qqKxCEE6YDkx7EEPHVHV3d59nY+X5fL4cTmWm4AkLK2gIJ7QyU/VUvg0dxJlOp79mYyMymUz5unhhp0xBFQgntDq/waKBI9DnzZvndHZ2TvnQFRGR4eHhQxItiAirKhBOmO6Mh8Y8+OCDS5RSXTZWcOTIkfIlz4PGOKFKhBOmq8DjBJcvX/7Htla0b9++gZCXEFA1IJww3fiNfZr03Ny5c79pZWWum9u0aVNYOKEGhBOmA7+Oce/8qdvrr79+Znd392U2VpzJZP537969E1JZHVEtTRHhhOkk0kDHDRs2fEspZWUA5tDQ0G4by0ElwgltZ+HChd+xtawDBw7ssrUsTEY4oa28++6730ylUsssLa74zDPPUDnVCeGE6SRoFLaaM2eOs2zZsn+xtbKRkZHdTz311Beluxw7ZxnhhOkgaFzRqXFHu3btujWVSlkbQvDpp5++EvA0YTVFhBOmq0mDIbdv375ozpw599pauOu6xUceeeS18l1by8VphBOmO3Xvvfd2X3755T9RSp1ha6HDw8Nvbd68+Zj4D/QU7XFUiXBCqzP1M506jOTWW2/tXLdu3ZZEIrHE5kpff/31LdpDfgFEMNWIcMJ0Mqkpd+edd6Yff/zxZ5PJ5J/bXMno6Oi+VatW7SjdNR0mY3pcDPcRgDNhopX5nsitr6/va8uXL382kUhcanulO3bs+LEYDiYWw2EyHo24rNa0QjihVfleCurEiRNXzpo160ml1Lm2Vzo6Orp/9erVvxZz/1Icrl4zbdCsQysyDh3o7++fl8/nf9rT0/NiPYJJRIpPP/30fWNjY+WLdZrOFWV6nCCqAZUTWonx4NrBwcGFZ5999j92dHTcIiIz6rXy/v7+n69du3Zv6W7Qye1gAeGEWjXqiiLGfqU9e/bMWLJkydXJZHKNUupbUue/5Ww2+/kNN9zwI4lwbnIhpKwgnODldxZHbxDp8w3x8ccfp84777w/SqfTK5RSlyulVoiItXFLQYrFYm7z5s337ty5c0QmX81Fv6pL4KmBG7Gt0wnh1OaSyeQ5L7zwwsXpdLrQ2dlZ6O7uzqdSqeLMmTMLnZ2dxUQi4abT6WIymXQTiYRbeo/1H1rpFCYzlFIpETlbKTXbcZy5ruv+vlLqIhFZLE36e33jjTceWLt27R6pvFhC1CAioGrACbHiQ2mTU5o6PFNCRJIikhgaGnrsrLPO+qsmbWvb+OSTT55fvHjxD+TkJcfLUz5g8r5u0tVehJCqCnvrAB+fffbZry699NIfivnyUqaJfieLCCfAYGBgYPuyZcvWDQ0N5SW8KRcWSoRUDehzAjT9/f2/vOiiix7IZDLlYPJWRkFVUzX9UAhB5QSUuK5b6Ovr23ThhRf+WyaTKUhlyFQbTMbV1PUfMY0QToCcHMf08MMPr+3t7X0mn897gyZKH5NfMNHvNAU069D2Dh8+/N+33HLLD7Zv3/6VRAulsI5wkcmhREDVgHBC28pkMoeef/75H950002/KT0UtRkXJaRMCKkqEE5oO/l8/qvdu3c/e8011/z06NGjudLDYYFU8Hmcw1jqhHBC28jlcsf37dv3i9tuu+1nb7311ojnqbCKqeC5jRJSJoRUlQgnTHfFEydO7Hn77bf/88Ybb/zVsWPHCtrzfqFU8Lk1VVFUTHVAOGFaGhsb6z9w4MCvN23a9Mpjjz32mVSea9zbce0dDqCHkD6FDSPwIqCmgHDCtJDL5b4YGhp6b//+/X1bt259e9OmTUfEfPEDfTe/N1z05pupetKPmYtSORFSNSCc0FJc182Pj48fHB4ePnDs2LFPDx482L9t27aPnnjiiaMyOYz8rv6rh5Opf8lv4ni6BiKc2lw2m/18dHT0YPm+Usr443Icp54/OndiYuJ3IiITExMjIlKcmJgYHx8f/92XX375xbFjx44fOnRoaPfu3cdefvnloaNHj5b7jfQzOfidj0okuGIyVUem6sl731Q16evS51EFwqnNDQwMvLlo0aIHJPyYsEb/yPxOeidy+sgG/XG/Kqk87xdMYeFE1dQEhBNEKoMg6IDVev0AfS/zFGHe7/2mailqMJmCKsrwAaomSwinNlcsFvX+GVeb1/duNeoEhab1BK3bL0T9xjB5O8CjBFSUw1UIJosIJ4hMDqC4nR01yvaYQsFvD1rQ6G+/PXRBQwcYQlAnhBOiatTVVnRh6/TrG9ObcH7BFHXQpV51+fXNwRLCCSL+lYf+nN97Gi2oUvLOm4LJ1NcUNgI8rGKiOVcHhFOb8wwRiHMfSlB/Uvk2qBnnF05+QUQwxQDhBBHznqdmhVOUSi0sUPWKKSicagklgqkBCKc2Vxp0afpRR23e2VRLMHnnpxJOptf4VWNB2wpLCKc2VwonU0dvsfSSZjbvwvrC9MAwBUpQOAUFUjVBTVDVAeEEkfCmjBhuG6GacArqb9JDKug2rFIimBqEcGpzpQ5x/Xgx/Uct0tzmnV9AVBNOQZVRlIGVhFKDEU5tTmvWmfphTD9a24KWW21/U5SQMj2nL0tfX9TthSWEU5vzhJNp8GFQODW6gqq1egqb9GX4rdfvPuqEcGpzpWadd8xP1OPI6q2Wpp1+v5rH9XUSSk1GOEGk+qPvG/VD9QuLoOad37xfqAWtJ+gx1Bnh1OZ8+pyiVE8izQ2pKLdRX6vPBz2GBiGc2pxnEKbfAbDegBLDbb0FNa+CQiZqEBFKMUU4QcT/gFjvEINmVk6m9dma91s+moxwanOlDnFvMOn3m9kp7hWlwqm1Q5tQiiHCCSKV4WMKqjhUTkHrrbZ5RiDFHOEEkcpgMu12b3blFGWdU30eMUI4wSQsnJr9I69m/c3eVtSIcIJIcId3nCqnMHHcJtSIcGpzPhfRrGbQYjM0e/1oAMIJQWoZIwRY4YS/BG2kmv4kggl1RTgBiCXCCUAsEU4AYolwAhBLhBOAWCKcAMQS4QQglggnALFEOAGIJcIJQCwRTgBiiXACEEuEE4BYIpwAxBLhBCCWCCcAsUQ4AYglwglALBFOAGKJcAIQS4QTgFginADEEuEEIJYIJwCxRDgBiCXCCUAsJZq9AaiaKyKSzWaPT0xMHHJdV4mIlG/1+TKllKvPK6Xc8fHxE97lAnFR8UeMplHa5HimhIh0lG7LU1K73+GZvMtxPVPBM+U9U067X36+6Jm8yxEhzFBnNOtalzco9MfD5sOWATQdzbrWEBQgrs9U7Wuirg9oCMKpdfgFzFTCqdrQAhqGcIqvoGZb2FQUc59TtaFEWKFpCKf4MwVIUBiJ+HeI+3Vw+y0XaBrCKX7KoWDak2oKJW8w6eGkv69omKIEEmGFhiOc4sWVylAyBZIjp0NJr5pciVY56QEVJagIKDQM4RRf5YAw9Rt5A6ng856gyqk81ilqMw9oOMIp/oKCSW/OecNJ5HSwiQRXTtU08STkOcAKwinevEHjDSa9KVd+3tQ57n1Or578mnbe9wFNQTjFk7dT3FQ5lZ8Tz+PlQ130akoM76+mcqJph6YgnOJHr5bKt0Wf1wY1+YJeFzWkvMsAGoZwii9TMOjVk/cxvSNcDyf9/UXDvN8ENBzhFB96xWQKF1OTzpHgqsm7DFMFZbrVA4kKCg1HOMWbKQj0cU76uCZvMHn31pWX5zf5VU9AUxBO8eUd46QzDScQw62+PP02bPK+Hmgowile9Oac/pz+OtPhKkEnEDTtgatmzxxBhYbhTJjxpH8vpsooqFoKqpy8834Bpb/edB+oK8IpvsICyu8x030R/7AJCi2/9wJ1RzjFl+m7CQuhKN9nWPCYgohwQsN1NHsDEMovcGr9j6Wa8CGU0DRUTq0hyvdUzXcZJXQIJjQV4dR66vmdEUiIDcJpeqjleySIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEb6f/N7sEfOsXTfAAAAAElFTkSuQmCC"/> - <pattern id="pattern1" patternUnits="userSpaceOnUse" width="295" height="374"> - <use xlink:href="#image6"/> - </pattern> - <pattern id="pattern0" patternUnits="userSpaceOnUse" width="295" height="374"> - <use xlink:href="#surface7"/> - </pattern> - <clipPath id="clip1"> - <rect x="0" y="0" width="295" height="374"/> - </clipPath> - <g id="surface7" clip-path="url(#clip1)"> - <rect x="0" y="0" width="295" height="374" style="fill:url(#pattern1);stroke:none;"/> - </g> - </defs> - <g id="surface1"> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(33.725491%,45.882353%,87.450981%);fill-opacity:1;" d="M 158.574219 338.785156 C 153.472656 351.515625 135.445312 351.515625 130.34375 338.785156 L 75.121094 201.015625 C 71.121094 191.03125 78.476562 180.160156 89.238281 180.160156 L 199.679688 180.160156 C 210.441406 180.160156 217.796875 191.03125 213.792969 201.015625 Z M 158.574219 338.785156 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(33.725491%,45.882353%,87.450981%);fill-opacity:1;" d="M 295 144.429688 C 295 224.199219 228.960938 288.863281 147.5 288.863281 C 66.039062 288.863281 0 224.199219 0 144.429688 C 0 64.664062 66.039062 0 147.5 0 C 228.960938 0 295 64.664062 295 144.429688 Z M 295 144.429688 "/> - <rect x="0" y="0" width="295" height="374" style="fill:url(#pattern0);stroke:none;"/> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + width="295" + height="348.33301" + viewBox="0 0 295 348.33301" + version="1.1" + id="svg24" + sodipodi:docname="parking.svg" + inkscape:version="1.1.1 (1:1.1+202109281949+c3084ef5ed)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <sodipodi:namedview + id="namedview26" + pagecolor="#505050" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:pageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="0" + showgrid="false" + inkscape:zoom="1.6454142" + inkscape:cx="160.44592" + inkscape:cy="171.38541" + inkscape:current-layer="svg24" /> + <g + aria-label="P" + transform="translate(-16.798674,-61.651243)" + id="text3337" + style="font-size:266.667px;line-height:1.25;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect3339);fill:#ffffff"> + <path + d="m 173.23565,108.00102 q 36.80005,0 53.60007,16.00002 17.06668,15.73336 17.06668,43.46672 0,16.53336 -6.93334,31.20004 -6.93334,14.40002 -23.20003,23.20003 -16.00002,8.80001 -43.73338,8.80001 h -17.33336 v 67.73342 H 112.43558 V 108.00102 Z m -2.13334,33.06671 h -18.40002 v 56.5334 h 13.33335 q 17.06669,0 26.93337,-6.66667 10.13334,-6.93334 10.13334,-22.13336 0,-27.73337 -32.00004,-27.73337 z" + style="font-weight:bold" + id="path19001" /> </g> -</svg> \ No newline at end of file +</svg> diff --git a/assets/layers/bike_parking/parking_old.svg b/assets/layers/bike_parking/parking_old.svg deleted file mode 100644 index 006493f920..0000000000 --- a/assets/layers/bike_parking/parking_old.svg +++ /dev/null @@ -1,110 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="295px" height="374px" viewBox="0 0 295 374" version="1.1"> - <defs> - <image id="image6" width="295" height="374" xlink:href="data:image/png;base64,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"/> - <image id="image11" width="295" height="374" xlink:href="data:image/png;base64,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"/> - <image id="image16" width="295" height="374" xlink:href="data:image/png;base64,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"/> - <image id="image21" width="295" height="374" xlink:href="data:image/png;base64,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"/> - <image id="image26" width="295" height="374" xlink:href="data:image/png;base64,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"/> - <image id="image31" width="295" height="374" xlink:href="data:image/png;base64,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"/> - <image id="image36" width="295" height="374" xlink:href="data:image/png;base64,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"/> - <pattern id="pattern1" patternUnits="userSpaceOnUse" width="295" height="374"> - <use xlink:href="#image6"/> - </pattern> - <pattern id="pattern0" patternUnits="userSpaceOnUse" width="295" height="374"> - <use xlink:href="#surface7"/> - </pattern> - <pattern id="pattern3" patternUnits="userSpaceOnUse" width="295" height="374"> - <use xlink:href="#image11"/> - </pattern> - <pattern id="pattern2" patternUnits="userSpaceOnUse" width="295" height="374"> - <use xlink:href="#surface12"/> - </pattern> - <pattern id="pattern5" patternUnits="userSpaceOnUse" width="295" height="374"> - <use xlink:href="#image16"/> - </pattern> - <pattern id="pattern4" patternUnits="userSpaceOnUse" width="295" height="374"> - <use xlink:href="#surface17"/> - </pattern> - <pattern id="pattern7" patternUnits="userSpaceOnUse" width="295" height="374"> - <use xlink:href="#image21"/> - </pattern> - <pattern id="pattern6" patternUnits="userSpaceOnUse" width="295" height="374"> - <use xlink:href="#surface22"/> - </pattern> - <pattern id="pattern9" patternUnits="userSpaceOnUse" width="295" height="374"> - <use xlink:href="#image26"/> - </pattern> - <pattern id="pattern8" patternUnits="userSpaceOnUse" width="295" height="374"> - <use xlink:href="#surface27"/> - </pattern> - <pattern id="pattern11" patternUnits="userSpaceOnUse" width="295" height="374"> - <use xlink:href="#image31"/> - </pattern> - <pattern id="pattern10" patternUnits="userSpaceOnUse" width="295" height="374"> - <use xlink:href="#surface32"/> - </pattern> - <pattern id="pattern13" patternUnits="userSpaceOnUse" width="295" height="374"> - <use xlink:href="#image36"/> - </pattern> - <pattern id="pattern12" patternUnits="userSpaceOnUse" width="295" height="374"> - <use xlink:href="#surface37"/> - </pattern> - <clipPath id="clip1"> - <rect x="0" y="0" width="295" height="374"/> - </clipPath> - <clipPath id="clip2"> - <rect x="0" y="0" width="295" height="374"/> - </clipPath> - <clipPath id="clip3"> - <rect x="0" y="0" width="295" height="374"/> - </clipPath> - <clipPath id="clip4"> - <rect x="0" y="0" width="295" height="374"/> - </clipPath> - <clipPath id="clip5"> - <rect x="0" y="0" width="295" height="374"/> - </clipPath> - <clipPath id="clip6"> - <rect x="0" y="0" width="295" height="374"/> - </clipPath> - <clipPath id="clip7"> - <rect x="0" y="0" width="295" height="374"/> - </clipPath> - <g id="surface7" clip-path="url(#clip1)"> - <rect x="0" y="0" width="295" height="374" style="fill:url(#pattern1);stroke:none;"/> - </g> - <g id="surface12" clip-path="url(#clip2)"> - <rect x="0" y="0" width="295" height="374" style="fill:url(#pattern3);stroke:none;"/> - </g> - <g id="surface17" clip-path="url(#clip3)"> - <rect x="0" y="0" width="295" height="374" style="fill:url(#pattern5);stroke:none;"/> - </g> - <g id="surface22" clip-path="url(#clip4)"> - <rect x="0" y="0" width="295" height="374" style="fill:url(#pattern7);stroke:none;"/> - </g> - <g id="surface27" clip-path="url(#clip5)"> - <rect x="0" y="0" width="295" height="374" style="fill:url(#pattern9);stroke:none;"/> - </g> - <g id="surface32" clip-path="url(#clip6)"> - <rect x="0" y="0" width="295" height="374" style="fill:url(#pattern11);stroke:none;"/> - </g> - <g id="surface37" clip-path="url(#clip7)"> - <rect x="0" y="0" width="295" height="374" style="fill:url(#pattern13);stroke:none;"/> - </g> - </defs> - <g id="surface1"> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(33.725491%,45.882353%,87.450981%);fill-opacity:1;" d="M 158.574219 338.785156 C 153.472656 351.515625 135.445312 351.515625 130.34375 338.785156 L 75.121094 201.015625 C 71.121094 191.03125 78.476562 180.160156 89.238281 180.160156 L 199.679688 180.160156 C 210.441406 180.160156 217.796875 191.03125 213.792969 201.015625 Z M 158.574219 338.785156 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(33.725491%,45.882353%,87.450981%);fill-opacity:1;" d="M 295 144.429688 C 295 224.199219 228.960938 288.863281 147.5 288.863281 C 66.039062 288.863281 0 224.199219 0 144.429688 C 0 64.664062 66.039062 0 147.5 0 C 228.960938 0 295 64.664062 295 144.429688 Z M 295 144.429688 "/> - <path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:4;" d="M 61.000053 76.999627 L 61.000053 55.952779 L 62.480998 54.485679 C 64.429476 52.554811 67.569902 52.554811 69.518379 54.485679 L 71.000609 55.952779 L 71.000609 76.999627 " transform="matrix(3.041237,0,0,3.04065,0,0)"/> - <path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:4;" d="M 66.000331 53.000594 L 66.000331 16.00064 " transform="matrix(3.041237,0,0,3.04065,0,0)"/> - <path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:4;" d="M 43.000079 78.000389 L 71.999894 78.000389 " transform="matrix(3.041237,0,0,3.04065,0,0)"/> - <rect x="0" y="0" width="295" height="374" style="fill:url(#pattern0);stroke:none;"/> - <rect x="0" y="0" width="295" height="374" style="fill:url(#pattern2);stroke:none;"/> - <rect x="0" y="0" width="295" height="374" style="fill:url(#pattern4);stroke:none;"/> - <rect x="0" y="0" width="295" height="374" style="fill:url(#pattern6);stroke:none;"/> - <rect x="0" y="0" width="295" height="374" style="fill:url(#pattern8);stroke:none;"/> - <rect x="0" y="0" width="295" height="374" style="fill:url(#pattern10);stroke:none;"/> - <rect x="0" y="0" width="295" height="374" style="fill:url(#pattern12);stroke:none;"/> - </g> -</svg> \ No newline at end of file diff --git a/assets/layers/bike_repair_station/bike_repair_station.json b/assets/layers/bike_repair_station/bike_repair_station.json index 558456c486..9dfe80c03f 100644 --- a/assets/layers/bike_repair_station/bike_repair_station.json +++ b/assets/layers/bike_repair_station/bike_repair_station.json @@ -1,8 +1,8 @@ { "id": "bike_repair_station", "name": { - "en": "Bike stations (repair, pump or both)", - "nl": "Fietspunten (herstel, pomp of allebei)", + "en": "Bicycle pump and repair", + "nl": "Fietspomp and fietsherstel", "fr": "Station velo (réparation, pompe à vélo)", "gl": "Estación de bicicletas (arranxo, bomba de ar ou ambos)", "de": "Fahrradstationen (Reparatur, Pumpe oder beides)", @@ -138,8 +138,8 @@ { "id": "bike_repair_station-available-services", "question": { - "en": "Which services are available at this bike station?", - "nl": "Welke functies biedt dit fietspunt?", + "en": "Which services are available at this location?", + "nl": "Welke functies biedt locatie?", "fr": "Quels services sont valables à cette station vélo ?", "gl": "Que servizos están dispoñíbeis nesta estación de bicicletas?", "de": "Welche Einrichtungen stehen an dieser Fahrradstation zur Verfügung?", @@ -206,62 +206,45 @@ }, { "question": { - "en": "Who maintains this cycle pump?", - "nl": "Wie beheert deze fietspomp?", - "fr": "Qui maintient cette pompe à vélo ?", - "it": "Chi gestisce questa pompa per bici?", - "de": "Wer wartet diese Fahrradpumpe?", - "pt_BR": "Quem faz a manutenção desta bomba de ciclo?", - "pt": "Quem faz a manutenção desta bomba de ciclo?" - }, - "render": { - "nl": "Beheer door {operator}", - "en": "Maintained by {operator}", - "fr": "Mantenue par {operator}", - "it": "Manutenuta da {operator}", - "de": "Gewartet von {operator}", - "pt_BR": "Mantida por {operator}", - "pt": "Mantida por {operator}" - }, - "freeform": { - "key": "operator" + "en": "Is the bike pump still operational?", + "nl": "Werkt de fietspomp nog?", + "fr": "La pompe à vélo fonctionne-t-elle toujours ?", + "gl": "Segue a funcionar a bomba de ar?", + "de": "Ist die Fahrradpumpe noch funktionstüchtig?", + "it": "La pompa per bici è sempre funzionante?", + "ru": "Велосипедный насос все еще работает?", + "pl": "Czy pompka rowerowa jest nadal sprawna?" }, + "condition": "service:bicycle:pump=yes", "mappings": [ { - "if": "operator=De Fietsambassade Gent", - "then": "<a href='https://fietsambassade.gent.be/' target='_blank'>De Fietsambassade Gent</a>", - "hideInAnswer": "_country!=be" + "if": "service:bicycle:pump:operational_status=broken", + "then": { + "en": "The bike pump is broken", + "nl": "De fietspomp is kapot", + "fr": "La pompe à vélo est cassée", + "gl": "A bomba de ar está estragada", + "de": "Die Fahrradpumpe ist kaputt", + "it": "La pompa per bici è guasta", + "ru": "Велосипедный насос сломан", + "pl": "Pompka rowerowa jest zepsuta" + } + }, + { + "if": "service:bicycle:pump:operational_status=operational", + "then": { + "en": "The bike pump is operational", + "nl": "De fietspomp werkt nog", + "fr": "La pompe est opérationnelle", + "gl": "A bomba de ar está operativa", + "de": "Die Fahrradpumpe ist betriebsbereit", + "it": "La pompa per bici funziona", + "ru": "Велосипедный насос работает", + "pl": "Pompka rowerowa jest sprawna" + } } ], - "id": "bike_repair_station-operator" - }, - { - "question": { - "en": "What is the email address of the maintainer?", - "nl": "Wat is het email-adres van de beheerder?", - "de": "Wie lautet die E-Mail-Adresse des Betreuers?", - "fr": "Quelle est l'adresse email du service de maintenance ?" - }, - "freeform": { - "key": "email", - "type": "email" - }, - "render": "<a href='mailto:{email}'>{email}</a>", - "id": "bike_repair_station-email" - }, - { - "question": { - "en": "What is the phone number of the maintainer?", - "nl": "Wat is het telefoonnummer van de beheerder?", - "de": "Wie lautet die Telefonnummer des Betreibers?", - "fr": "Quel est le numéro de téléphone du service de maintenance ?" - }, - "freeform": { - "key": "phone", - "type": "phone" - }, - "render": "<a href='tel:{phone}'>{phone}</a>", - "id": "bike_repair_station-phone" + "id": "Operational status" }, { "question": { @@ -290,23 +273,119 @@ "pt_BR": "Sempre aberto", "pt": "Sempre aberto" } - }, - { - "if": "opening_hours=", - "then": { - "nl": "Dag en nacht open", - "en": "Always open", - "fr": "Ouvert en permanence", - "it": "Sempre aperto", - "de": "Immer geöffnet", - "pt_BR": "Sempre aberto", - "pt": "Sempre aberto" - }, - "hideInAnswer": true } ], "id": "bike_repair_station-opening_hours" }, + { + "id": "access", + "question": { + "en": "Who is allowed to use this repair station?", + "nl": "Wie kan dit herstelpunt gebruiken?" + }, + "mappings": [ + { + "if": "access=yes", + "then": { + "en": "Publicly accessible", + "nl": "Publiek toegankelijk" + } + }, + { + "if": "access=public", + "then": { + "en": "Publicly accessible", + "nl": "Publiek toegankelijk" + }, + "hideInAnswer": true + }, + { + "if": "access=customers", + "then": { + "en": "Only for customers", + "nl": "Enkel voor klanten van de bijhorende zaak" + } + }, + { + "if": "access=private", + "then": { + "en": "Not accessible to the general public", + "nl": "Niet publiek toegankelijk" + }, + "icon": "./assets/svg/invalid.svg" + }, + { + "if": "access=no", + "then": { + "en": "Not accessible to the general public", + "nl": "Niet publiek toegankelijk" + }, + "icon": "./assets/svg/invalid.svg", + "hideInAnswer": true + } + ] + }, + { + "labels": [ + "operator-info" + ], + "question": { + "en": "Who maintains this cycle pump?", + "nl": "Wie beheert deze fietspomp?", + "fr": "Qui maintient cette pompe à vélo ?", + "it": "Chi gestisce questa pompa per bici?", + "de": "Wer wartet diese Fahrradpumpe?", + "pt_BR": "Quem faz a manutenção desta bomba de ciclo?", + "pt": "Quem faz a manutenção desta bomba de ciclo?" + }, + "render": { + "nl": "Beheer door {operator}", + "en": "Maintained by {operator}", + "fr": "Mantenue par {operator}", + "it": "Manutenuta da {operator}", + "de": "Gewartet von {operator}", + "pt_BR": "Mantida por {operator}", + "pt": "Mantida por {operator}" + }, + "freeform": { + "key": "operator" + }, + "id": "bike_repair_station-operator" + }, + { + "labels": [ + "operator-info" + ], + "question": { + "en": "What is the email address of the maintainer?", + "nl": "Wat is het email-adres van de beheerder?", + "de": "Wie lautet die E-Mail-Adresse des Betreuers?", + "fr": "Quelle est l'adresse email du service de maintenance ?" + }, + "freeform": { + "key": "email", + "type": "email" + }, + "render": "<a href='mailto:{email}'>{email}</a>", + "id": "bike_repair_station-email" + }, + { + "labels": [ + "operator-info" + ], + "question": { + "en": "What is the phone number of the maintainer?", + "nl": "Wat is het telefoonnummer van de beheerder?", + "de": "Wie lautet die Telefonnummer des Betreibers?", + "fr": "Quel est le numéro de téléphone du service de maintenance ?" + }, + "freeform": { + "key": "phone", + "type": "phone" + }, + "render": "<a href='tel:{phone}'>{phone}</a>", + "id": "bike_repair_station-phone" + }, { "id": "bike_repair_station-bike-chain-tool", "question": { @@ -387,48 +466,6 @@ } ] }, - { - "question": { - "en": "Is the bike pump still operational?", - "nl": "Werkt de fietspomp nog?", - "fr": "La pompe à vélo fonctionne-t-elle toujours ?", - "gl": "Segue a funcionar a bomba de ar?", - "de": "Ist die Fahrradpumpe noch funktionstüchtig?", - "it": "La pompa per bici è sempre funzionante?", - "ru": "Велосипедный насос все еще работает?", - "pl": "Czy pompka rowerowa jest nadal sprawna?" - }, - "condition": "service:bicycle:pump=yes", - "mappings": [ - { - "if": "service:bicycle:pump:operational_status=broken", - "then": { - "en": "The bike pump is broken", - "nl": "De fietspomp is kapot", - "fr": "La pompe à vélo est cassée", - "gl": "A bomba de ar está estragada", - "de": "Die Fahrradpumpe ist kaputt", - "it": "La pompa per bici è guasta", - "ru": "Велосипедный насос сломан", - "pl": "Pompka rowerowa jest zepsuta" - } - }, - { - "if": "service:bicycle:pump:operational_status=", - "then": { - "en": "The bike pump is operational", - "nl": "De fietspomp werkt nog", - "fr": "La pompe est opérationnelle", - "gl": "A bomba de ar está operativa", - "de": "Die Fahrradpumpe ist betriebsbereit", - "it": "La pompa per bici funziona", - "ru": "Велосипедный насос работает", - "pl": "Pompka rowerowa jest sprawna" - } - } - ], - "id": "Operational status" - }, { "condition": { "and": [ @@ -513,7 +550,7 @@ "id": "bike_repair_station-electrical_pump", "question": { "en": "Is this an electric bike pump?", - "nl": "Is dit een electrische fietspomp?", + "nl": "Is dit een elektrische fietspomp?", "fr": "Est-ce que cette pompe est électrique ?", "gl": "Esta é unha bomba de ar eléctrica?", "de": "Ist dies eine elektrische Fahrradpumpe?", @@ -542,7 +579,7 @@ "if": "manual=no", "then": { "en": "Electrical pump", - "nl": "Electrische pomp", + "nl": "Elektrische pomp", "fr": "Pompe électrique", "gl": "Bomba de ar eléctrica", "de": "Elektrische Pumpe", @@ -620,16 +657,16 @@ "presets": [ { "title": { - "en": "Bike pump", - "nl": "Fietspomp", - "fr": "Pompe à vélo", - "gl": "Bomba de ar", - "de": "Fahrradpumpe", - "it": "Pompa per bici", - "ru": "Велосипедный насос", - "fi": "Pyöräpumppu", - "pl": "Pompka do roweru", - "pt_BR": "Bomba de bicicleta" + "en": "bike pump", + "nl": "fietspomp", + "fr": "pompe à vélo", + "gl": "bomba de ar", + "de": "fahrradpumpe", + "it": "pompa per bici", + "ru": "bелосипедный насос", + "fi": "pyöräpumppu", + "pl": "pompka do roweru", + "pt_BR": "bomba de bicicleta" }, "tags": [ "amenity=bicycle_repair_station", @@ -637,25 +674,30 @@ "service:bicycle:pump=yes" ], "description": { - "en": "A device to inflate your tires on a fixed location in the public space.<h3>Examples of bicycle pumps</h3><div style='width: 100%; display: flex; align-items: stretch;'><img src='./assets/layers/bike_repair_station/pump_example_manual.jpg' style='height: 200px; width: auto;'/><img src='./assets/layers/bike_repair_station/pump_example.png' style='height: 200px; width: auto;'/><img src='./assets/layers/bike_repair_station/pump_example_round.jpg' style='height: 200px; width: auto;'/></div>", - "nl": "Een apparaat waar je je fietsbanden kan oppompen, beschikbaar in de publieke ruimte. De fietspomp in je kelder telt dus niet.<h3>Voorbeelden</h3><h3>Examples of bicycle pumps</h3><div style='width: 100%; display: flex; align-items: stretch;'><img src='./assets/layers/bike_repair_station/pump_example_manual.jpg' style='height: 200px; width: auto;'/><img src='./assets/layers/bike_repair_station/pump_example.png' style='height: 200px; width: auto;'/><img src='./assets/layers/bike_repair_station/pump_example_round.jpg' style='height: 200px; width: auto;'/></div>", - "it": "Un dispositivo per gonfiare le proprie gomme in un luogo fisso pubblicamente accessibile.<h3>Esempi di pompe per biciclette</h3><div style='width: 100%; display: flex; align-items: stretch;'><img src='./assets/layers/bike_repair_station/pump_example_manual.jpg' style='height: 200px; width: auto;'/><img src='./assets/layers/bike_repair_station/pump_example.png' style='height: 200px; width: auto;'/><img src='./assets/layers/bike_repair_station/pump_example_round.jpg' style='height: 200px; width: auto;'/></div>", - "fr": "Un dispositif pour gonfler vos pneus sur un emplacement fixe dans l'espace public.<h3>Exemples de pompes à vélo</h3><div style='width: 100%; display: flex; align-items: stretch;'><img src='./assets/layers/bike_repair_station/pump_example_manual.jpg' style='height: 200px; width: auto;'/><img src='./assets/layers/bike_repair_station/pump_example.png' style='height: 200px; width: auto;'/><img src='./assets/layers/bike_repair_station/pump_example_round.jpg' style='height: 200px; width: auto;'/></div>", - "de": "Ein Gerät zum Aufpumpen von Reifen an einem festen Standort im öffentlichen Raum.<h3>Beispiele für Fahrradpumpen</h3><div style='width: 100%; display: flex; align-items: stretch;'><img src='./assets/layers/bike_repair_station/pump_example_manual.jpg' style='height: 200px; width: auto;'/><img src='./assets/layers/bike_repair_station/pump_example.png' style='height: 200px; width: auto;'/><img src='./assets/layers/bike_repair_station/pump_example_round.jpg' style='height: 200px; width: auto;'/></div>", - "pl": "Urządzenie do pompowania opon w stałym miejscu w przestrzeni publicznej.<h3>Przykłady pompek rowerowych</h3><div style='width: 100%; display: flex; align-items: stretch;'><img src='./assets/layers/bike_repair_station/pump_example_manual.jpg' style='height: 200px; width: auto;'/><img src='./assets/layers/bike_repair_station/pump_example.png' style='height: 200px; width: auto;'/><img src='./assets/layers/bike_repair_station/pump_example_round.jpg' style='height: 200px; width: auto;'/></div>", - "pt_BR": "Um dispositivo para encher seus pneus em um local fixa no espaço público<h3>Exemplos de bombas de bicicletas</h3><div style='width: 100%; display: flex; align-items: stretch;'><img src='./assets/layers/bike_repair_station/pump_example_manual.jpg' style='height: 200px; width: auto;'/><img src='./assets/layers/bike_repair_station/pump_example.png' style='height: 200px; width: auto;'/><img src='./assets/layers/bike_repair_station/pump_example_round.jpg' style='height: 200px; width: auto;'/></div>", - "pt": "Um aparelho para encher os seus pneus num local fixa no espaço público<h3>Exemplos de bombas de bicicletas</h3><div style='width: 100%; display: flex; align-items: stretch;'><img src='./assets/layers/bike_repair_station/pump_example_manual.jpg' style='height: 200px; width: auto;'/><img src='./assets/layers/bike_repair_station/pump_example.png' style='height: 200px; width: auto;'/><img src='./assets/layers/bike_repair_station/pump_example_round.jpg' style='height: 200px; width: auto;'/></div>" - } + "en": "A device to inflate your tires on a fixed location in the public space.", + "nl": "Een fietspomp in de publieke ruimte zonder extra gereedschap. De fietspomp in je kelder telt dus niet.", + "it": "Un dispositivo per gonfiare le proprie gomme in un luogo fisso pubblicamente accessibile.", + "fr": "Un dispositif pour gonfler vos pneus sur un emplacement fixe dans l'espace public.", + "de": "Ein Gerät zum Aufpumpen von Reifen an einem festen Standort im öffentlichen Raum.", + "pl": "Urządzenie do pompowania opon w stałym miejscu w przestrzeni publicznej.", + "pt_BR": "Um dispositivo para encher seus pneus em um local fixa no espaço público", + "pt": "Um aparelho para encher os seus pneus num local fixa no espaço público" + }, + "exampleImages": [ + "./assets/layers/bike_repair_station/pump_example_round.jpg", + "./assets/layers/bike_repair_station/pump_example.png", + "./assets/layers/bike_repair_station/pump_example_manual.jpg" + ] }, { "title": { - "en": "Bike repair station and pump", - "nl": "Herstelpunt en pomp", - "fr": "Point de réparation vélo avec pompe", - "gl": "Estación de arranxo de bicicletas con bomba de ar", - "de": "Fahrrad-Reparaturstation und Pumpe", - "it": "Stazione di riparazione bici e pompa", - "pl": "Stacja naprawy rowerów i pompka" + "en": "bike repair station and pump", + "nl": "herstelpunt en pomp", + "fr": "point de réparation vélo avec pompe", + "gl": "estación de arranxo de bicicletas con bomba de ar", + "de": "fahrrad-Reparaturstation und Pumpe", + "it": "stazione di riparazione bici e pompa", + "pl": "stacja naprawy rowerów i pompka" }, "tags": [ "amenity=bicycle_repair_station", @@ -663,27 +705,35 @@ "service:bicycle:pump=yes" ], "description": { - "en": "A device with tools to repair your bike combined with a pump at a fixed location. The tools are often secured with chains against theft.<h3>Example</h3><img src='./assets/layers/bike_repair_station/repair_station_example.jpg' height='200'/>", - "nl": "Een apparaat met zowel gereedschap om je fiets te herstellen, met een pomp. Deze zijn op een vastgemaakt op een plaats in de publieke ruimte, bv. aan een paal.<h3>Voorbeeld</h3><img src='./assets/layers/bike_repair_station/repair_station_example.jpg' height='200'/>", - "fr": "Un dispositif avec des outils pour réparer votre vélo combiné à une pompe a un emplacement fixe. Les outils sont souvent attachés par une chaîne pour empêcher le vol.<h3>Exemple</h3><img src='./assets/layers/bike_repair_station/repair_station_example.jpg' height='200'/>", - "it": "Un dispositivo con attrezzi per riparare la tua bici e una pompa in un luogo fisso. Gli attrezzi sono spesso attaccati ad una catena per prevenire il furto.<h3>Esempio</h3><img src='./assets/layers/bike_repair_station/repair_station_example.jpg' height='200'/>", - "de": "Ein Gerät mit Werkzeugen zur Reparatur von Fahrrädern kombiniert mit einer Pumpe an einem festen Standort. Die Werkzeuge sind oft mit Ketten gegen Diebstahl gesichert.<h3>Beispiel</h3><img src='./assets/layers/bike_repair_station/repair_station_example.jpg' height='200'/>" - } + "en": "A bicycle pump and tools to repair your bike in the public space. The tools are often secured with chains against theft.", + "nl": "Een fietspomp en gereedschap om je fiets te herstellen in de publieke ruimte. Deze zijn op een vastgemaakt, bijvoorbeeld aan een paal.", + "fr": "Un dispositif avec des outils pour réparer votre vélo combiné à une pompe a un emplacement fixe. Les outils sont souvent attachés par une chaîne pour empêcher le vol.", + "it": "Un dispositivo con attrezzi per riparare la tua bici e una pompa in un luogo fisso. Gli attrezzi sono spesso attaccati ad una catena per prevenire il furto.", + "de": "Ein Gerät mit Werkzeugen zur Reparatur von Fahrrädern kombiniert mit einer Pumpe an einem festen Standort. Die Werkzeuge sind oft mit Ketten gegen Diebstahl gesichert." + }, + "exampleImages": [ + "./assets/layers/bike_repair_station/repair_station_example_2.jpg", + "./assets/layers/bike_repair_station/repair_station_example_3.jpg" + ] }, { "title": { - "en": "Bike repair station without pump", - "nl": "Herstelpunt zonder pomp", - "fr": "Point de réparation vélo sans pompe", - "gl": "Estación de arranxo de bicicletas sin bomba de ar", - "de": "Fahrrad-Reparaturstation ohne Pumpe", - "it": "Stazione di riparazione bici senza pompa" + "en": "bike repair station without pump", + "nl": "herstelpunt zonder pomp", + "fr": "point de réparation vélo sans pompe", + "gl": "estación de arranxo de bicicletas sin bomba de ar", + "de": "fahrrad-Reparaturstation ohne Pumpe", + "it": "stazione di riparazione bici senza pompa" }, "tags": [ "amenity=bicycle_repair_station", "service:bicycle:tools=yes", "service:bicycle:pump=no" - ] + ], + "description": { + "en": "Tools to repair your bike in the public space (without pump). The tools are secured against theft.", + "nl": "Gereedschap om je fiets te herstellen in de publieke ruimte (zonder pomp). Deze zijn op een vastgemaakt, bijvoorbeeld aan een paal." + } } ], "deletion": { @@ -702,16 +752,17 @@ "mapRendering": [ { "icon": { - "render": "./assets/layers/bike_repair_station/repair_station.svg", + "render": "pin:#88d32c;./assets/layers/bike_repair_station/repair_station.svg", "mappings": [ { "if": { "and": [ - "service:bicycle:pump=no", + "service:bicycle:pump=yes", + "service:bicycle:tools=yes", "service:bicycle:pump:operational_status=broken" ] }, - "then": "./assets/layers/bike_repair_station/repair_station.svg" + "then": "pin:#88d32c;./assets/layers/bike_repair_station/repair_station_broken_pump.svg" }, { "if": { @@ -720,7 +771,7 @@ "service:bicycle:tools=yes" ] }, - "then": "./assets/layers/bike_repair_station/repair_station_pump.svg" + "then": "pin:#30abf0;./assets/layers/bike_repair_station/repair_station_pump.svg" }, { "if": { @@ -729,7 +780,7 @@ "service:bicycle:tools=no" ] }, - "then": "./assets/layers/bike_repair_station/broken_pump_2.svg" + "then": "pin:black;./assets/layers/bike_repair_station/broken_pump.svg" }, { "if": { @@ -743,7 +794,7 @@ } ] }, - "then": "./assets/layers/bike_repair_station/pump.svg" + "then": "pin:#e1783a;./assets/layers/bike_repair_station/pump.svg" } ] }, @@ -751,6 +802,15 @@ { "if": "operator=De Fietsambassade Gent", "then": "./assets/themes/cyclofix/fietsambassade_gent_logo_small.svg" + }, + { + "if": { + "or": [ + "access=no", + "access=private" + ] + }, + "then": "invalid" } ], "iconSize": { @@ -760,14 +820,6 @@ "point", "centroid" ] - }, - { - "color": { - "render": "#00f" - }, - "width": { - "render": "1" - } } ], "description": { diff --git a/assets/layers/bike_repair_station/broken_pump.svg b/assets/layers/bike_repair_station/broken_pump.svg index 65545acf35..653b710289 100644 --- a/assets/layers/bike_repair_station/broken_pump.svg +++ b/assets/layers/bike_repair_station/broken_pump.svg @@ -1,23 +1,61 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="317px" height="374px" viewBox="0 0 317 374" version="1.1"> - <defs> - <clipPath id="clip1"> - <path d="M 3 6 L 292 6 L 292 294 L 3 294 Z M 3 6 "/> - </clipPath> - <clipPath id="clip2"> - <path d="M 3.046875 149.71875 L 147.035156 6.082031 L 291.027344 149.71875 L 147.035156 293.359375 Z M 3.046875 149.71875 "/> - </clipPath> - <image id="image21" width="317" height="374" xlink:href="data:image/png;base64,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"/> - </defs> - <g id="surface1"> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(9.019608%,8.627451%,8.235294%);fill-opacity:1;" d="M 183.019531 343.878906 C 177.585938 355.699219 160.75 355.699219 155.316406 343.878906 L 61.609375 140.128906 C 56.976562 130.058594 64.355469 118.585938 75.460938 118.585938 L 262.875 118.585938 C 273.984375 118.585938 281.359375 130.058594 276.726562 140.128906 Z M 183.019531 343.878906 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(9.019608%,8.627451%,8.235294%);fill-opacity:1;" d="M 317 148.992188 C 317 231.277344 250.132812 297.984375 167.644531 297.984375 C 85.15625 297.984375 18.289062 231.277344 18.289062 148.992188 C 18.289062 66.707031 85.15625 0 167.644531 0 C 250.132812 0 317 66.707031 317 148.992188 Z M 317 148.992188 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(94.117647%,5.098039%,5.098039%);fill-opacity:1;" d="M 220.730469 163.773438 L 284.890625 224.675781 L 268.378906 241.984375 L 204.222656 181.082031 Z M 220.730469 163.773438 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(94.117647%,5.098039%,5.098039%);fill-opacity:1;" d="M 207.921875 224.734375 L 270.097656 164.195312 L 286.519531 180.980469 L 224.34375 241.515625 Z M 207.921875 224.734375 "/> - <g clip-path="url(#clip1)" clip-rule="nonzero"> - <g clip-path="url(#clip2)" clip-rule="nonzero"> - <use xlink:href="#image21"/> - </g> - </g> - </g> -</svg> \ No newline at end of file +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + width="298.77734" + height="353.68652" + viewBox="0 0 298.77734 353.68652" + version="1.1" + id="svg33" + sodipodi:docname="broken_pump.svg" + inkscape:version="1.1.1 (1:1.1+202109281949+c3084ef5ed)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs37" /> + <sodipodi:namedview + id="namedview35" + pagecolor="#505050" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:pageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="0" + showgrid="false" + inkscape:zoom="1.1046974" + inkscape:cx="79.659823" + inkscape:cy="175.6137" + inkscape:current-layer="svg33" /> + <path + style="fill:#fffaff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:10.6982;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="m 103.38281,59.257787 66.23047,30.83593 -5.13672,11.031253 -66.23047,-30.839833 z m 0,0" + id="path6" /> + <path + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 124.39063,87.843747 h 19.86718 v 27.390623 h -19.86718 z m 0,0" + id="path8" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:24.2043;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" + d="m 123.09764,231.88278 72.62499,0.64062" + id="path10" /> + <path + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:8.7561;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="m 124.39061,115.23438 22.34769,-4.36704 21.08983,107.84766 -22.34375,4.37109 z m 0,0" + id="path12" /> + <path + id="path14" + style="color:#000000;fill:#ffffff;-inkscape-stroke:none" + d="M 204.20312 88.146484 C 196.93654 88.146484 192.12015 91.921743 189.92188 95.601562 C 187.72361 99.281385 187.58008 102.9668 187.58008 102.9668 L 187.57617 103.06445 L 187.57617 144.36914 C 188.56092 144.19884 189.57533 144.10547 190.61133 144.10547 C 192.31225 144.10547 193.95297 144.34895 195.50195 144.79492 L 195.50195 103.33203 C 195.50395 103.29813 195.63436 101.49628 196.72656 99.667969 C 197.82907 97.822405 199.34472 96.072266 204.20312 96.072266 C 209.12026 96.072266 210.54669 97.740038 211.55273 99.410156 C 212.55878 101.08027 212.63477 102.72266 212.63477 102.72266 L 212.66406 112.42188 A 14.995412 20.715036 0 0 1 217.91992 111.07031 A 14.995412 20.715036 0 0 1 220.58594 111.4043 L 220.56055 102.56445 L 220.56055 102.51953 C 220.56055 102.51953 220.50175 98.906051 218.3418 95.320312 C 216.18183 91.734577 211.41098 88.146484 204.20312 88.146484 z M 212.7793 151.20312 L 212.9043 193.71484 L 220.83008 193.69141 L 220.70703 152.0957 A 14.995412 20.715036 0 0 1 217.91992 152.50195 A 14.995412 20.715036 0 0 1 212.7793 151.20312 z M 195.50195 175.66016 C 193.95309 176.10722 192.3121 176.34961 190.61133 176.34961 C 189.57533 176.34961 188.56092 176.25671 187.57617 176.08594 L 187.57617 198.28516 C 187.57617 201.26822 186.65359 202.68864 185.00195 204.01953 C 183.35032 205.35042 180.71842 206.33143 177.87109 206.84961 C 172.17644 207.88597 166.13086 207.15625 166.13086 207.15625 L 165.11133 215.01562 C 165.11133 215.01562 172.02475 215.97046 179.28906 214.64844 C 182.92122 213.98742 186.76858 212.7764 189.97656 210.19141 C 193.18454 207.60641 195.50195 203.38606 195.50195 198.28516 L 195.50195 175.66016 z " /> + <path + style="fill:#fffdff;fill-opacity:1;fill-rule:nonzero;stroke:#fffdff;stroke-width:6.09756;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.970149" + d="m 210.60153,186.38278 12.25,-0.0937 0.38281,14.14844 9.14843,-0.1914 0.31641,12.87109 -11.53515,-0.0781 c -8.32422,-0.82422 -11.21094,-3.68359 -10.62891,-10.88281 z m 0,0" + id="path16" /> + <path + style="fill:none;stroke:#ff002e;stroke-width:27.9635;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" + d="m 69.01175,241.01174 59.85157,-58.8086" + id="path18" /> + <path + style="fill:none;stroke:#ff002e;stroke-width:27.9635;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" + d="m 69.22269,181.05861 58.8086,59.85547" + id="path20" /> +</svg> diff --git a/assets/layers/bike_repair_station/broken_pump_2.svg b/assets/layers/bike_repair_station/broken_pump_2.svg deleted file mode 100644 index ce3f9b1c12..0000000000 --- a/assets/layers/bike_repair_station/broken_pump_2.svg +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<svg xmlns="http://www.w3.org/2000/svg" width="375px" height="375px" viewBox="0 0 375 375" version="1.1"> - <g id="surface1"> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(3.137255%,0%,0%);fill-opacity:1;" d="M 202.777344 351.15625 C 197.339844 363.003906 180.503906 363.003906 175.066406 351.15625 L 81.335938 146.859375 C 76.703125 136.761719 84.082031 125.257812 95.191406 125.257812 L 282.648438 125.257812 C 293.757812 125.257812 301.136719 136.761719 296.503906 146.859375 Z M 202.777344 351.15625 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(3.137255%,0%,0%);fill-opacity:1;" d="M 336.785156 155.746094 C 336.785156 238.253906 269.902344 305.136719 187.398438 305.136719 C 104.890625 305.136719 38.007812 238.253906 38.007812 155.746094 C 38.007812 73.238281 104.890625 6.355469 187.398438 6.355469 C 269.902344 6.355469 336.785156 73.238281 336.785156 155.746094 Z M 336.785156 155.746094 "/> - <path style="fill-rule:nonzero;fill:rgb(100%,98.823529%,100%);fill-opacity:1;stroke-width:3.509;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:4;" d="M 46.171488 1.138089 L 70.134195 1.137316 L 70.134107 5.128611 L 46.170859 5.128222 Z M 46.171488 1.138089 " transform="matrix(2.763856,1.286919,-1.286919,2.763856,15.243902,3.04878)"/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 162.398438 94.199219 L 182.265625 94.199219 L 182.265625 121.589844 L 162.398438 121.589844 Z M 162.398438 94.199219 "/> - <path style="fill:none;stroke-width:7.939;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:4;" d="M 47.842594 77.142156 L 71.663594 77.352281 " transform="matrix(3.04878,0,0,3.04878,15.243902,3.04878)"/> - <path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:2.872;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:4;" d="M 39.906794 47.422458 L 47.375477 47.423509 L 47.374981 83.467558 L 39.907308 83.468011 Z M 39.906794 47.422458 " transform="matrix(2.992099,-0.585154,0.585154,2.992099,15.243902,3.04878)"/> - <path style="fill:none;stroke-width:2.6;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:4;" d="M 61.790281 70.320781 C 61.790281 70.320781 70.291375 71.425219 70.291375 66.122125 L 70.291375 34.921125 C 70.291375 34.921125 70.468187 31.296469 74.445188 31.296469 C 78.422188 31.296469 78.510594 34.744312 78.510594 34.744312 L 78.599 64.619219 " transform="matrix(3.04878,0,0,3.04878,15.243902,3.04878)"/> - <path style="fill-rule:nonzero;fill:rgb(100%,99.607843%,100%);fill-opacity:1;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(100%,99.607843%,100%);stroke-opacity:0.970149;stroke-miterlimit:4;" d="M 76.543875 62.218156 L 80.561875 62.187406 L 80.687438 66.828094 L 83.688125 66.765313 L 83.791906 70.987031 L 80.008375 70.961406 C 77.278031 70.691063 76.331187 69.753188 76.522094 67.391844 Z M 76.543875 62.218156 " transform="matrix(3.04878,0,0,3.04878,15.243902,3.04878)"/> - <path style="fill:none;stroke-width:7.939;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(100%,0%,18.431373%);stroke-opacity:1;stroke-miterlimit:4;" d="M 80.687958 63.907347 L 97.680165 47.211245 " transform="matrix(3.522295,0,0,3.522295,-177.187233,22.266677)"/> - <path style="fill:none;stroke-width:7.939;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(100%,0%,18.431373%);stroke-opacity:1;stroke-miterlimit:4;" d="M 80.747844 46.886306 L 97.443947 63.879622 " transform="matrix(3.522295,0,0,3.522295,-177.187233,22.266677)"/> - <path style="fill:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(100%,94.901961%,96.862745%);stroke-opacity:1;stroke-miterlimit:4;" d="M 42.637887 56.720158 L 32.870883 59.580638 " transform="matrix(-1.178466,1.00587,-1.00587,-1.178466,365.374612,120.626496)"/> - <path style="fill:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(100%,94.901961%,96.862745%);stroke-opacity:1;stroke-miterlimit:4;" d="M 41.55656 54.849198 L 31.428801 53.8683 " transform="matrix(-1.178466,1.00587,-1.00587,-1.178466,365.374612,120.626496)"/> - <path style="fill:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(100%,94.901961%,96.862745%);stroke-opacity:1;stroke-miterlimit:4;" d="M 42.911561 53.009269 L 34.051947 48.002847 " transform="matrix(-1.178466,1.00587,-1.00587,-1.178466,365.374612,120.626496)"/> - <path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(99.607843%,100%,100%);stroke-opacity:1;stroke-miterlimit:4;" d="M 31.023895 63.11541 C 33.069142 68.653119 23.128614 70.652831 25.25787 62.542742 C 25.337356 62.236026 25.733795 61.934668 25.226578 62.4862 C 18.565831 69.691807 9.067782 58.551886 21.410346 56.398142 C 9.319759 58.345993 13.883841 42.575569 25.69225 49.979582 C 13.805759 42.900056 25.043684 35.8192 28.701331 45.467778 C 28.735151 45.556309 28.745959 45.625199 28.739218 45.539893 C 28.157219 39.192704 33.498017 41.082971 34.319875 45.079263 " transform="matrix(-1.178466,1.00587,-1.00587,-1.178466,365.374612,120.626496)"/> - <path style="fill-rule:nonzero;fill:rgb(3.137255%,0%,0%);fill-opacity:1;stroke-width:0.563483;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0.392157%,0%);stroke-opacity:1;stroke-miterlimit:4;" d="M 84.762375 33.734031 C 84.762375 34.267031 84.308813 34.700094 83.750188 34.700094 C 83.191563 34.700094 82.738 34.267031 82.738 33.734031 C 82.738 33.201031 83.191563 32.76925 83.750188 32.76925 C 84.308813 32.76925 84.762375 33.201031 84.762375 33.734031 Z M 84.762375 33.734031 " transform="matrix(3.04878,0,0,3.04878,0,0)"/> - </g> -</svg> \ No newline at end of file diff --git a/assets/layers/bike_repair_station/license_info.json b/assets/layers/bike_repair_station/license_info.json index 1ae3b7f3d7..4ad68baaf5 100644 --- a/assets/layers/bike_repair_station/license_info.json +++ b/assets/layers/bike_repair_station/license_info.json @@ -27,20 +27,6 @@ "https://osoc.be/editions/2020/cyclofix" ] }, - { - "path": "broken_pump_2.svg", - "license": "CC-BY-SA", - "authors": [ - "Pieter Fiers", - "Thibault Declercq", - "Pierre Barban", - "Joost Schouppe", - "Pieter Vander Vennet" - ], - "sources": [ - "https://osoc.be/editions/2020/cyclofix" - ] - }, { "path": "pump.svg", "license": "CC-BY-SA", @@ -108,6 +94,26 @@ "https://wiki.openstreetmap.org/wiki/File:Public_Bike_Repair_Station.jpg" ] }, + { + "path": "repair_station_example_2.jpg", + "license": "CC-BY-SA 4.0 International", + "authors": [ + "MOs810" + ], + "sources": [ + "https://wiki.openstreetmap.org/wiki/File:Bike_repair_station,_Poznan_Kaponiera.jpg" + ] + }, + { + "path": "repair_station_example_3.jpg", + "license": "CC-BY-SA 3.0 Unported", + "authors": [ + "Thelmadatter" + ], + "sources": [ + "https://wiki.openstreetmap.org/wiki/File:BikeRepairMonterrey.JPG" + ] + }, { "path": "repair_station_pump.svg", "license": "CC-BY-SA", diff --git a/assets/layers/bike_repair_station/pump.svg b/assets/layers/bike_repair_station/pump.svg index e4c6ba4317..002cd28689 100644 --- a/assets/layers/bike_repair_station/pump.svg +++ b/assets/layers/bike_repair_station/pump.svg @@ -1,21 +1,77 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="301px" height="373px" viewBox="0 0 301 373" version="1.1"> - <defs> - <clipPath id="clip1"> - <path d="M 3 6 L 291 6 L 291 293 L 3 293 Z M 3 6 "/> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + width="297.96094" + height="351.7998" + viewBox="0 0 297.96094 351.7998" + version="1.1" + id="svg22" + sodipodi:docname="pump.svg" + inkscape:version="1.1.1 (1:1.1+202109281949+c3084ef5ed)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <sodipodi:namedview + id="namedview24" + pagecolor="#505050" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:pageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="0" + showgrid="false" + inkscape:zoom="2.2546917" + inkscape:cx="147.24851" + inkscape:cy="161.44114" + inkscape:current-layer="svg22" /> + <defs + id="defs9"> + <clipPath + id="clip1"> + <path + d="M 3,6 H 291 V 293 H 3 Z m 0,0" + id="path2" /> </clipPath> - <clipPath id="clip2"> - <path d="M 3.039062 149.320312 L 146.667969 6.066406 L 290.292969 149.320312 L 146.667969 292.574219 Z M 3.039062 149.320312 "/> + <clipPath + id="clip2"> + <path + d="M 3.039062,149.32031 146.66797,6.066406 l 143.625,143.253904 -143.625,143.25391 z m 0,0" + id="path5" /> </clipPath> - <image id="image21" width="301" height="373" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAS0AAAF1CAYAAAC9Prx0AAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3df5Ab5Z3n8W93j+TxeACzGDtc1mCMg0ko7DU24HUWgp0flQoQEjbhWFh22YK9nC8HCRAXV9SmykthSEKlFrIkRVJkHX4txIS7gj3Cj8oWZUx83GEOMD4WDIUxZI0DDpixxzOjkbrvD6vHjx49T3dLarVa0vtV1aVfrVaPpP7M93n66ZYIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIDafTK4CW8PnZBZ1eAbQHX/r8c0REXn/99eL8+fP/2nXdxSIy0OF16iq+779TKpXumT59+tvVuwi0LkZo5VPN57Jjx45p8+bN2ygip3dofXrByOTk5OeKxeIW7X4CrMsQWvli/Dwqlcp/dV33R1mvTA/a6DjOSstjhFeXcDu9AphiCiynOi3LeF161Wly6D3V8Q+8SxBa+aBvMOqG5YjItGxXp2cNSu37anrfkXOEVufZNhxH7FUBmqe/rwRXlyG08kXfkBwRcYIgYENKjymweH+7CLvOO8sxXNc3KjaodJnez6B6f6DMQ8d8TlFpdU6SwHJFxKXSSpVbnWzvuRiuI0cIrfxQNxJ1w3J932cDSs/U+yq133/e4y5BaHWe/t9dnVxhY0qb+r6adnbwfuccodUZtiEOpsCieZgutdIyve8q3vccIrTyRw8umofpUpve7OjoQuw97KyopiEd8e0R/qMO9xiqwcXewy5AaHWeaYiD2lFMpZUuNbTU4Aqvh48hp2geZs8WQKZKKwwvpMfWlxX1uSBH2CDywdZMpHmYvqg+Ld7nLkBodU7cQdLsPWwPfe+hCHsOuwqh1Xlx4cXGk66495f3O+cIrc6ybTA1fS2lUml/pmvVo3zfHxFzPxbB1UUIrfzQN6CpDWvHjh3PdGaVesvIyMgmsQcWQdUlCK18iNxgTj/99Md27959t7Arvmnj4+Ov3HzzzTfGzEZwdQE+pOxFjskSEU8Ojp/zRKRQvT4gIgO33HLLiWecccaiQqEwVKlUXN/3nUqlMtVR7/t+6ufeOuaYYz5+8skn/0Vay9uzZ88LL7744r+mtTwREcdxAtd1g/C653m+67rhZXnnzp1vrlmzZsvOnTvHRaRsmCoi4itToEwi/LPIFUIre0lDK2oK51GfF9dP05Rbb7110be+9a1/TGNZIiKvvvrqf//kJz95W0qLU0MlnNTwqYg5pAitLkbzML/iNpRWH0+2EvkdbpHk7yNsehCH8eSDvnGZKgjTf339sVCzh6PUBZTjOFlt+M2+ju09slVJtvcMXYLQyo+klYNt0udrtELSDxLOosKyhXWjz497X6Lep1ZeHx1AaOWLbUPTJ19qD/T1pf7sBXEboB5KxqBLu9KqLs9WNeoaaQKq743+XiUNenQBQquz1FOh6PebgioMJ/U+9fmNdMKb5lGf30y1lpQpuNIMLb1T3RRcYriNLkBodY4tFKLCKrxuGsEdLq/RA4BN809VceFQgrRUlxeGbSNVl87Wt9docKHLEFr5ENUUVDdCRw7untefazvFSiOhZTyEqE0d8VF9T+pl3DJsy9NDKyq4krxWkuY2MkJoZS+q2WVq6oQBUpH6UFL7sxoZoxVVXdVMaVda1RCM62dqpOoyNfXC5VemTZsW3HXXXZ9atmzZkqOOOurEwcHBYzzPm+V53gwRGXAcJwiCYG8QBGMi8nYQBDt9398yMjKy+eijj343jb8Z6SK08kPtQLd1uleUeQM5NLBUnUek8dCyTa7neX7905unhFZUcDXbVJx6z7797W8f/Z3vfOcv58yZc/7AwMAxMesUXl0RXpk1a5YfBMEzlUrljk2bNj24cuVKtcKl6uogQqvz1M54U1iFj+kVlinUGg0t2+j88DL1vYdKn1ZUs00Ml1Gm5p03b5731FNPffO44477huM401pZVRE5y/O8s84+++z/ViqVrigWi1uqj+mfBTLEiPjOiuqX0TfuijZFHZYyGfO47VCWuqlNlZbxtZpYZ3XdyxdddNHwyy+//E/z5s27qsXA0i0qFAqbyuXyxaY/STgcLlNUWp2h92uZqi09LNQwMzUL46os2zmjwqpK3UPphTOl3adVpYexWm2FlyINVDHf+973Pn711VffUywW56e8rqFpnufdU6lUPuZ53j8Y1o3O+owQWvliahrZwksPrFaahqafig9ERNrYp1XRLuNCy7oD47LLLjvsmmuu+UWhUGhXYIUc13VvKZfLuwcGBu43rGOzh0+hATQPOy9q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P8dxjE08S/MwyditvkdooWvt27dv0yWXXPL1G2644XfK3YF2XQ8rW6CJiATr169//8477/x2EASTKa2m8QczgiCwdcRHjZKHEFroQpVK5cPXXntt3fz58//2oYceGlEeMgaRmINKvay5vnr16pcfeuiha33fjxuc2rSYIQ+2sCLEhNBCFymVSm++8847/3DBBRecfdJJJ63fs2dPOHBTD6aWp69//eubb7311tXj4+O72/G3+L4fyKHAUoMrREBZ0BGPXNi3b9+z5XL5QxGR6p7DwPf9A2NjY7tGR0d//5vf/OZ/rV69eofUbugmavj4Yq609PmM1di11177/x555JG/Wr9+/TePP/748yJes2G7d+/eIdHNQvYcWpDmvct02ErYHPGUaUAOntN8oFwuv+R53swOrKvce++9F1966aX/V0QqcjBswsAJxfUBqUHla8sJp3C+qPcinNT73euuu+6E1atXXzx37tyVrusOtvK3TkxMvLZs2bJztm3bNiYi5eq6hpf636+ut3rZt2geIheUjmnXMtn6fPTKSt/g9dt6FWaqxuru+/73v//mvHnz1i1evPjLDz744N+9+uqrv3r//fefP3DgwDsTExN7yuXyPtNUqVRGwmliYuJ3v//97zdceeWVl27btq0s9RWWCYWFhuZhb+q6L7o2bin8Z2r6UQjTRm5q4unB42vzu9X7nOpleFu9rs4TiIhs27Zt7MILL9woIk9r66Guqx6aYQUVVlPqnkn2GDaI0Oodpi+7qWNXvy8XG4lyLJ4aGHFjq9Qmk6m60ist9VzspsAyBVc4j2j3hcuJHWmvMDXZ0SBCq3tMfcE3bNjgfuUrXznFdd25IjLHcZxZtieFP6Pl+76jTuVy2S2Xy26lUpm6dF13WgZ/h9FnP/vZ87Zt27Y07IQPL23zV3/hRkREwvld1w0qlcqB0dHRXXv37n3vF7/4xdaf//zn+yRZpWWquNRwSTI4te/7m7JA0udbzeczOTn52YGBgYtF5BwRsZ7pAAcFQVAqlUrPjIyMPHLttdfef88994xVHwqDyJPazvgBqe2Q97R54sZU6WPD9OZh2ERUp4p2Xe2Mjxpj1rcIrfyp+0xKpdIZhULhJhFZ2YH16QlBEPxu7969N33+85//5+effz6sovQ9iAPaZc0eRInfKSBi7lurSHRw6XsQ9SYtoaVg72F+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"/> + </defs> - <g id="surface1"> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.627452%,47.058824%,23.921569%);fill-opacity:1;" d="M 167.359375 342.960938 C 161.9375 354.746094 145.144531 354.746094 139.722656 342.960938 L 46.25 139.753906 C 41.632812 129.710938 48.988281 118.269531 60.070312 118.269531 L 247.011719 118.269531 C 258.089844 118.269531 265.449219 129.710938 260.828125 139.753906 Z M 167.359375 342.960938 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.627452%,47.058824%,23.921569%);fill-opacity:1;" d="M 301 148.59375 C 301 230.660156 234.300781 297.1875 152.019531 297.1875 C 69.742188 297.1875 3.039062 230.660156 3.039062 148.59375 C 3.039062 66.527344 69.742188 0 152.019531 0 C 234.300781 0 301 66.527344 301 148.59375 Z M 301 148.59375 "/> - <g clip-path="url(#clip1)" clip-rule="nonzero"> - <g clip-path="url(#clip2)" clip-rule="nonzero"> - <use xlink:href="#image21"/> - </g> - </g> + <g + id="surface1" + transform="matrix(0.79284811,0,0,0.79284811,0.30228518,0.28018648)"> + <path + style="fill:#fffaff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:3.509;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="M 47.663415,21.641872 H 71.627478 V 25.63231 H 47.663415 Z m 0,0" + transform="matrix(3.826531,0,0,3.826531,-47.701923,-7.977349)" + id="path2-3" /> + <path + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 168.29687,96.378906 h 24.9336 v 34.378904 h -24.9336 z m 0,0" + id="path4" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:7.939;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" + d="M 47.842061,77.142539 71.663207,77.35181" + transform="matrix(3.826531,0,0,3.826531,-47.701923,-7.977349)" + id="path6" /> + <path + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2.872;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="m 55.906644,37.580143 h 7.468417 v 36.044604 h -7.468417 z m 0,0" + transform="matrix(3.826531,0,0,3.826531,-47.701923,-7.977349)" + id="path8" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:2.6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" + d="m 64.040644,70.321331 c 0,0 6.250563,1.104541 6.250563,-4.199709 0,-5.303229 0,-31.20075 0,-31.20075 0,0 0.176604,-3.623958 4.153771,-3.623958 3.977166,0 4.065979,3.447354 4.065979,3.447354 l 0.08881,29.875708" + transform="matrix(3.826531,0,0,3.826531,-47.701923,-7.977349)" + id="path10" /> + <path + style="fill:#fffdff;fill-opacity:1;fill-rule:nonzero;stroke:#fffdff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.970149" + d="m 76.543811,62.218976 4.019021,-0.03164 0.124541,4.640708 3.00023,-0.06227 0.104125,4.222167 -3.783209,-0.02654 C 77.27779,70.690872 76.331478,69.753747 76.521353,67.391539 Z m 0,0" + transform="matrix(3.826531,0,0,3.826531,-47.701923,-7.977349)" + id="path12" /> </g> -</svg> \ No newline at end of file +</svg> diff --git a/assets/layers/bike_repair_station/repair_station.svg b/assets/layers/bike_repair_station/repair_station.svg index d996aa129b..782f1edb59 100644 --- a/assets/layers/bike_repair_station/repair_station.svg +++ b/assets/layers/bike_repair_station/repair_station.svg @@ -1,17 +1,59 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="303px" height="374px" viewBox="0 0 303 374" version="1.1"> - <defs> - <image id="image21" width="303" height="374" xlink:href="data:image/png;base64,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"/> - <image id="image40" width="303" height="374" xlink:href="data:image/png;base64,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"/> - <image id="image59" width="303" height="374" xlink:href="data:image/png;base64,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"/> - <image id="image78" width="303" height="374" xlink:href="data:image/png;base64,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"/> - </defs> - <g id="surface1"> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(19.607843%,67.843139%,94.901961%);fill-opacity:1;" d="M 163.890625 344.988281 C 158.277344 356.675781 141.632812 356.675781 136.019531 344.988281 L 41.4375 148.097656 C 36.507812 137.839844 43.988281 125.953125 55.375 125.953125 L 244.535156 125.953125 C 255.917969 125.953125 263.398438 137.839844 258.46875 148.097656 Z M 163.890625 344.988281 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(19.607843%,67.843139%,94.901961%);fill-opacity:1;" d="M 303 151.453125 C 303 235.101562 235.171875 302.910156 151.5 302.910156 C 67.828125 302.910156 0 235.101562 0 151.453125 C 0 67.808594 67.828125 0 151.5 0 C 235.171875 0 303 67.808594 303 151.453125 Z M 303 151.453125 "/> - <use xlink:href="#image21"/> - <use xlink:href="#image40"/> - <use xlink:href="#image59"/> - <use xlink:href="#image78"/> - </g> -</svg> \ No newline at end of file +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + width="303" + height="353.75391" + viewBox="0 0 303 353.75391" + version="1.1" + id="svg21" + sodipodi:docname="repair_station.svg" + inkscape:version="1.1.1 (1:1.1+202109281949+c3084ef5ed)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs10" /> + <sodipodi:namedview + id="namedview23" + pagecolor="#505050" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:pageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="0" + showgrid="false" + inkscape:zoom="2.2486631" + inkscape:cx="151.64566" + inkscape:cy="187.22235" + inkscape:current-layer="svg21" /> + <path + style="fill:#feffff;fill-opacity:1;stroke:none;stroke-width:1.97728px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 78.094298,75.276172 99.465716,96.064632 112.94263,82.133831 93.027553,60.643501 c 0,0 49.817067,-14.524823 44.465977,34.961514 -0.0367,0.339557 70.23356,71.214035 70.23356,71.214035 47.81484,-8.02817 35.81789,45.47112 35.81789,45.47112 l -22.68221,-21.06445 -13.18046,14.60845 21.09318,19.98897 c 0,0 -49.53242,14.80277 -46.87766,-37.76153 0.0275,-0.54412 -69.11138,-67.6753 -69.11138,-67.6753 -48.526837,3.7379 -34.692152,-45.110138 -34.692152,-45.110138 z" + id="path886" + sodipodi:nodetypes="ccccscccccscc" /> + <path + style="fill:#feffff;fill-opacity:1;stroke:none;stroke-width:1.97728px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 118.33626,166.89121 c -14.52781,24.8942 -79.689479,29.97303 -47.349409,65.89854 32.340089,35.92552 39.940129,-35.46137 65.307089,-47.63356 z" + id="path2590" + sodipodi:nodetypes="cscc" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:9.88638;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 131.2664,171.82291 12.43401,-12.06668" + id="path2815" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:9.88638;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 131.2664,171.82291 12.43401,-12.06668" + id="path4002" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:9.88638;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 177.74112,127.49099 213.427,91.87753" + id="path4141" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:19.7728;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 217.47704,85.567929 229.91105,73.501277" + id="path4436" + sodipodi:nodetypes="cc" /> +</svg> diff --git a/assets/layers/bike_repair_station/repair_station_broken_pump.svg b/assets/layers/bike_repair_station/repair_station_broken_pump.svg new file mode 100644 index 0000000000..e456c12712 --- /dev/null +++ b/assets/layers/bike_repair_station/repair_station_broken_pump.svg @@ -0,0 +1,103 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + width="303" + height="353.75391" + viewBox="0 0 303 353.75391" + version="1.1" + id="svg21" + sodipodi:docname="repair_station_broken_pump.svg" + inkscape:version="1.1.1 (1:1.1+202109281949+c3084ef5ed)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs19" /> + <sodipodi:namedview + id="namedview23" + pagecolor="#505050" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:pageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="0" + showgrid="false" + inkscape:zoom="1.2141956" + inkscape:cx="91.418549" + inkscape:cy="230.60535" + inkscape:current-layer="svg21" + inkscape:snap-global="false" /> + <g + id="g871" + transform="matrix(0.69287706,0,0,0.69287706,-5.2037299,24.459351)"> + <path + style="fill:#feffff;fill-opacity:1;stroke:none;stroke-width:2.1658px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 70.90581,68.082104 94.314902,90.852655 109.07678,75.593612 87.262888,52.05427 c 0,0 54.566912,-15.909703 48.705622,38.294946 -0.0402,0.371932 76.93003,78.003994 76.93003,78.003994 52.37378,-8.79363 39.23297,49.80659 39.23297,49.80659 l -24.84486,-23.07285 -14.43716,16.0013 23.10432,21.89484 c 0,0 -54.25512,16.21415 -51.34724,-41.36193 0.0301,-0.596 -75.70086,-74.12786 -75.70086,-74.12786 -53.153663,4.0943 -37.9999,-49.411196 -37.9999,-49.411196 z" + id="path886" + sodipodi:nodetypes="ccccscccccscc" /> + <g + id="g862"> + <path + style="fill:#feffff;fill-opacity:1;stroke:none;stroke-width:2.1658px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 114.98467,168.43225 C 99.071699,195.7 27.69714,201.26308 63.120698,240.61393 98.54428,279.9648 106.86895,201.77147 134.65454,188.43871 Z" + id="path2590" + sodipodi:nodetypes="cscc" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:10.829;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 129.14765,173.83416 13.61954,-13.21718" + id="path2815" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:10.829;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 129.14765,173.83416 13.61954,-13.21718" + id="path4002" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:10.829;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 180.05353,125.27538 219.14191,86.266331" + id="path4141" + sodipodi:nodetypes="cc" /> + </g> + <path + style="fill:none;stroke:#ffffff;stroke-width:21.658;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 223.5781,79.355137 237.19764,66.137981" + id="path4436" + sodipodi:nodetypes="cc" /> + </g> + <g + id="g854" + transform="matrix(0.52673799,0,0,0.52673799,133.44161,115.82331)"> + <path + style="fill:#fffaff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:10.6982;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="m 103.38281,59.257787 66.23047,30.83593 -5.13672,11.031253 -66.23047,-30.839833 z m 0,0" + id="path6" /> + <path + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 124.39063,87.843747 h 19.86718 v 27.390623 h -19.86718 z m 0,0" + id="path8" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:24.2043;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" + d="m 123.09764,231.88278 72.62499,0.64062" + id="path10" /> + <path + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:8.7561;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="m 124.39061,115.23438 22.34769,-4.36704 21.08983,107.84766 -22.34375,4.37109 z m 0,0" + id="path12" /> + <path + id="path14" + style="color:#000000;fill:#ffffff;-inkscape-stroke:none" + d="m 204.20312,88.146484 c -7.26658,0 -12.08297,3.775259 -14.28124,7.455078 -2.19827,3.679823 -2.3418,7.365238 -2.3418,7.365238 l -0.004,0.0976 v 41.30469 c 0.98475,-0.1703 1.99916,-0.26367 3.03516,-0.26367 1.70092,0 3.34164,0.24348 4.89062,0.68945 v -41.46289 c 0.002,-0.0339 0.13241,-1.83575 1.22461,-3.664061 1.10251,-1.845564 2.61816,-3.595703 7.47656,-3.595703 4.91714,0 6.34357,1.667772 7.34961,3.33789 1.00605,1.670114 1.08204,3.312504 1.08204,3.312504 l 0.0293,9.69922 a 14.995412,20.715036 0 0 1 5.25586,-1.35157 14.995412,20.715036 0 0 1 2.66602,0.33399 l -0.0254,-8.83985 v -0.0449 c 0,0 -0.0588,-3.613479 -2.21875,-7.199218 -2.15997,-3.585735 -6.93082,-7.173828 -14.13868,-7.173828 z m 8.57618,63.056636 0.125,42.51172 7.92578,-0.0234 -0.12305,-41.59571 a 14.995412,20.715036 0 0 1 -2.78711,0.40625 14.995412,20.715036 0 0 1 -5.14062,-1.29883 z m -17.27735,24.45704 c -1.54886,0.44706 -3.18985,0.68945 -4.89062,0.68945 -1.036,0 -2.05041,-0.0929 -3.03516,-0.26367 v 22.19922 c 0,2.98306 -0.92258,4.40348 -2.57422,5.73437 -1.65163,1.33089 -4.28353,2.3119 -7.13086,2.83008 -5.69465,1.03636 -11.74023,0.30664 -11.74023,0.30664 l -1.01953,7.85937 c 0,0 6.91342,0.95484 14.17773,-0.36718 3.63216,-0.66102 7.47952,-1.87204 10.6875,-4.45703 3.20798,-2.585 5.52539,-6.80535 5.52539,-11.90625 z" /> + <path + style="fill:#fffdff;fill-opacity:1;fill-rule:nonzero;stroke:#fffdff;stroke-width:6.09756;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.970149" + d="m 210.60153,186.38278 12.25,-0.0937 0.38281,14.14844 9.14843,-0.1914 0.31641,12.87109 -11.53515,-0.0781 c -8.32422,-0.82422 -11.21094,-3.68359 -10.62891,-10.88281 z m 0,0" + id="path16" /> + <path + style="fill:none;stroke:#ff002e;stroke-width:27.9635;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" + d="m 69.01175,241.01174 59.85157,-58.8086" + id="path18" /> + <path + style="fill:none;stroke:#ff002e;stroke-width:27.9635;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" + d="m 69.22269,181.05861 58.8086,59.85547" + id="path20" /> + </g> +</svg> diff --git a/assets/layers/bike_repair_station/repair_station_example_2.jpg b/assets/layers/bike_repair_station/repair_station_example_2.jpg new file mode 100644 index 0000000000..52ca83a53e Binary files /dev/null and b/assets/layers/bike_repair_station/repair_station_example_2.jpg differ diff --git a/assets/layers/bike_repair_station/repair_station_example_3.jpg b/assets/layers/bike_repair_station/repair_station_example_3.jpg new file mode 100644 index 0000000000..e4cdcaff97 Binary files /dev/null and b/assets/layers/bike_repair_station/repair_station_example_3.jpg differ diff --git a/assets/layers/bike_repair_station/repair_station_pump.svg b/assets/layers/bike_repair_station/repair_station_pump.svg index 5dd95642e0..0e650d0efe 100644 --- a/assets/layers/bike_repair_station/repair_station_pump.svg +++ b/assets/layers/bike_repair_station/repair_station_pump.svg @@ -1,29 +1,99 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="303px" height="374px" viewBox="0 0 303 374" version="1.1"> - <defs> - <image id="image21" width="303" height="374" xlink:href="data:image/png;base64,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"/> - <image id="image40" width="303" height="374" xlink:href="data:image/png;base64,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"/> - <image id="image59" width="303" height="374" xlink:href="data:image/png;base64,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"/> - <image id="image78" width="303" height="374" xlink:href="data:image/png;base64,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"/> - <image id="image97" width="303" height="374" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAS8AAAF2CAYAAAA/Xx7nAAAABmJLR0QA/wD/AP+gvaeTAAAWi0lEQVR4nO3df3Ac5X3H8e+edOfTb1sCYxkZB4PBoSTUNSTQ1B5Nh9KMM2kIDUMJkF9/MGnotJmODUNtMm7aaX50JjRJCePEY8epk3ZIY7dkIGCo3RJCPUmLAyEBLMvFv2RbyLbsk+6H7m6f/qE7ae+553l2T9Yvo/drZuf27naf3T3fffx9nt07iQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAHeTO8A5qRI77vTp0+3JJPJ5rq6umbP82LFYnEom82m2tvbz9ewLTXBfQQA8cKmXC73W8Vi8fPFYnG7UurnSqnzym5YKfW/xWLxB8Vicd3IyMjvbNq0KRZhOwAQiStIYsPDwzcVi8VvKaWOO4Iqqv5isbgtk8msERGCDMCEWAPriSeeSBQKhU8qpX45CYFl80axWPzc3r17k+IOMgAQEUdo3XnnnXWFQuFepdSBKQwt3eFisfjZzZs3x4UQA2BgDS0RiZ07d2657/vPT2NoVfB9/5fpdPp95f0Re5ABmEOsoSUisZGRkc8rpdIzFVwB+WKx+Nf3339/XNwBRohdJPiHwkSZ3jtjj+3bt6/5pptu+nYsFrsraoNKqfPFYvGFkZGRfefPnz9w6tSpgwcOHDj97LPPDmUyGbV27dqm6667rmPRokVXNjc3v7uhoeHGurq6bs/z2mvYxrO9vb33LV++/HTwYdOiUdsEcPGwVloiUnfkyJHFvu+/ErEiyuRyuX85duzYh7q7u+eLSLOItBimVsNjzVdffXVrb2/vrblc7ru+76eibND3/UP9/f1Xi0iduLuSAN5BnMF18ODBJb7v/zpChgxlMplv7dq16yoZD6dWEWkLTPMdU3mZ8notmzZtWpRKpR7xff9shO2fOHv27A0yGmDBEKMbCbzDuMa26kSkrqenp8v3/UNhqZHL5f71iSeeuFoqw2q+iCwoTe2GqcPwWHn5YKC1PvbYY0symcx3lVJ+yK6cGhgYWCEEGPCOFRpczz33XJvv+//jSgrf988cOXLkT6SyqiqHVUdpuiQwXWqZgsuU19PDrK23t3et7/t9IfvU86tf/eoyEakXupHAO4qzmygi9atWrYoXCoUfu0Iin8+/8tRTT71H7IFVDqaFpemykGlhYAoGWjDI5m/fvv2afD7/YkiAvbhp06ZGGQ8wVxUG4CLhDC4RiWez2XWucBgZGfnZgw8+2CWVoVUOLD2sFpWmzpBpUWAKBlo5yMrBuOC2225bmM1m/921j7lc7isiEpfwAANwEQgNrr6+vhuVUllHcO299957O8UcWqawWqxNl2uT/vxiqQw0Y5CtXLny0nQ6/SNHfhUHBwdvFQLsohGb6R3ArGW7jmts6u7urlu0aNF3RGSeqYFCofDa+vXrP7ljx44RqQw/fVxJv/Us9z0xh0lMqgO2Ytq/f79au3btA/l8/kXL8cZaW1u/s3nz5kapDCn91vbaAJgFXIPz9TJanSSGh4f/1DGO1L9ly5brxVxpBSusckXVdYGTXp3p1dhCEblk48aNVxWLResZ0Uwms0lEElJZgTH+NQvxDwATU5VR8cHduXPn/Ntvv/01z/MuNayvDhw48PFrr732P/T1pPqDPxXvQWW4VSLii4h66aWXVt1yyy0/ltFw0g2/+uqr77nhhhuOB9ZTUt2mPo9pRnhBFxpcIuJlMpl1yWTyb00NpFKp7a2trevFXq1M9vtOb08PmKrp9OnT69vb29eZGsvlcv+YTCbXWdY1tY8ZwJgXgpzfVyzNew899FBy3rx5D5gaUEoNfu1rX/uyhH/x2RVgxsCR6hDRl6/YT22qGGf71Kc+9c1isXjUtPF58+Z9evfu3R2G/WX8axbhhUdQWNUVExFvcHDwE21tbZtNDRw/fnxjV1fXFqkOL9M2bBVM1GrGtr86vfuoREQdPHjww1ddddW3TQ2n0+kvNDU1/b0EuptC9TWrUHmhLFJ3UUS8pqam+0wN+L4/cP/99+8Qc3AF5/UQCE5+4NY1mULFVpkZj+Pmm29+Kp/P95iOJZlM3mtbz/F6YRoRXrAxBtjevXsvr6+v/13TCgMDA1uffvrpEX0dqfxwm0IrLKgmGmSmYxrrQg4MDKi+vj5j5RWLxa7p6en5bcuxEFazAOEFEXsVURVgK1eu/GMxv2/87du3/7O4P+Sms3+mqajNByfTMqYwcwVY+Ta2fv36f1NKpQ3LSWdn58ccxyJif90wDXjBIWIYlNemsYtAc7ncjxKJxB/qDWSz2RcbGhruEndwGS9dkOqwMY0rmfbX1C2Neoaz3LZ//vz5b7W0tHxE30ihUHg5Ho+vEXd1x9jXDKHyQlj1MBYCq1atqo/H4zebGjl58uTTEh5cUbqIRcOtXnnpz4V1KUWqg2Us1N56662nTMdUX1//3kcffbTVcVwi4a8fpgjhBZ1tjMfbsmXL9Z7ntZlWeumll/ZJeHBNNMCiPmcbCwtWTFXHum3btn2G50RE6j/60Y/eIvze/azEiw+9W6V3F8emvr6+uzs7O6sukfB9/3Rzc/PKTCajpPI95TqTqHfD9CoprAsWDI+w7zoGHw8e69h+5nK55xOJxLX6RgYHBx9ZsGDB18V9gkAMt5hiVF5zm/4htlZdIuI1NjZeZWokl8u9XmNwuQboJzLVUoWV961CJpN53XRsiURimeG10F+rIAqCaUJ4QcQ91jU2n0gkjOGVzWb/T6qDq3xby7Vbti5flOeinn00noFMp9OHTMcWj8evNr0WpjZM62PqEF4wMV4uEYvFFpoWHhoaOhK467r41BY+rq6ladzKdvYvLOBM3T0RERkcHAwew/jBe95CsVddmEGmb9VjbnB1GfX7noyGV5OpoXQ6ndIecg3O62GkB5AYbkW775Xmg7fBca1y9zCm7UfwsYrXYWho6Lzp2ErHrL8mwf3Q9020ZTBFCC84L48ITp7nGcNrZGRkuDRrOrMYVoFdyHVT+jiblNo1HVMwyKrOOg4PDxsvVPU8r1ns44Cms5eE1jQhvKCzDkp7npcwreD7fl6qQyes+rKdZRSpDgC90tErsPJjwTOKwWpLtOWr2svn8yOmY5PRHyZ0DdgTVjOE8IKI+cxZVYD5vp+uq6urWjmRSDSWZm2hFXbJRNTLDaIEhS/jXUe92gqGWbD76LW0tDSKgVKqXFXqr01Y1xFTjAF76GyD0l7gg1whmUw2BO7qARU2BdcTqS0ATKFX6yQiIg0NDcYucemYreOANewrJhmVF0z0KsMTESkWi/rAvIiIJJPJy8Q86B5WhYlhPsgWZHq1Exy4D64XrLaCXcaqAGttbTX9nHXwmAmrWYbKa24Lu8CyouLI5XLGXx5tamq6sjTrCq6w6sc0ZmbjqtpskzM4W1tbl5k2VCgUDkv1WFcQF6nOEMILOtPAtIiIpFIp44WcyWRymbgDJMgWVqb5MGFtmLZt7LKWjqFKJpN5K3A37Op6TCPCC7aKQn/MO336tDG8EonEtXfddVezhHcdXV1GkdqCy7TORLat2tvbYw0NDStNjZ87d+6QmE9kiOExwmwaEV4QiRBcIiI7d+78pZgDpn7dunWrAvddITLdQkPze9/73opYLGb8tYxXXnnl5dJs1ADDNOEFn7tMZ87Kv8AQ/EOrwfnYyMjIf8Xj8Wv0xs6cOfOdjo6ORyT8u4bB8Scx3F7I8ei3rr+kPXZcfX19f97Z2flXeoO+759paWm5Pp1O237Btagdz0wH9ZxC5YWaDA0N7TM93tbW9kdLliypvggsfGB+soUN5Fct19HRcbupoUwmsy+dTrv2kf/8ZxDhBZ2te+SJiBw8ePA500p1dXWX7dq16wOlu7Ve+jCVXPugnnzyyRWJROI604onTpwwHSuBBcywcneqTkav94uLyDwRaRCRJhFpEZH5ItIuIpeIyGUismjZsmVXFIvFt5VBJpPZXVq2vbRuS6mthlLb8dK2yl22yT5rF+z+uo6rrXxcqVTq+6Zj8X0/+5nPfOZaEVlUOvZajwtTjMoLNTl06FDh3LlzT5ueSyaTt/7kJz9ZUbo70Useps3jjz++qKmp6WOm54aGhvZs3brVeFEuZgfCCzV7/vnnt4s5cLzu7u4NE2hyRiqVe+655yHbl81fffXV7dO9PwCimVC3UUQWi8jlQ0NDe0zdLaWUeuONN+6U6e826mdNncf105/+tFspVTDtfy6X+3VDQ0NX6VjpNs5SVF7QRbry/eWXX37M1sDy5cu/8uCDD5Z/BytoVnyob7vttsT73//+f5DRsKly4MCBb5Z+k79sqs+QAqiBrUJJimFgW0QWSqDyktHq6zlb9ZVOp3eISKuINItIY6ndRGk7wWvHJrvyCl7HVV/aZrDyak2lUl+37Xcul3ulvb19SekYy5XXQhmvvNpkvPJKCpXXjKHyQlCUa7HG7v/whz/8olIqb2qooaHhnv7+/k9btjPV3ws0XbDqiYh39OjRDzc3N/+ZZT21Z8+eR86cOaP/iOHY85Z5ANMoWHnVyWj1kJDRaqJRRiumNhFZICIdMl55dUqp8hKRrpMnT37DVsUopfJHjx69Q6Z+3CtsvCspIo2vv/56t+/7advODg4O/kBEugLH1ymVldeC0mtiqyapvIBpYOtiBcOrVcbD61IZHbjulPGuY9eKFSvelc1mX7YFgu/76ePHj39ExsMrIZXhNRkBFtplfPPNN3/P9/0B236OjIwcvvvuu1fIeHgtlsrw6ii9FlG7wgCmSKTxIRk9u2YNLxHp2rZt22rf94cdFVj27bffvkfcY0QTCTDTdzODVVdCRJInTpxY6/t+yhGw+WeeeeZD5eORyvC6rHTsHaXXohxeDTIeXqYwBjBFIl9WIJbLJWT8w971i1/84hPKculBOSOy2exj9913X5O4B+6jBpgpuKqCOJVKPaCUGnHsl+rt7X04eCxiDi/bZRJ6ePE7X8AUCwuvRhk/47hAzGccKz7whw8f/oIrJJRSqlAo/OzQoUPvlerqyxRgpiCw/RpGxXH85je/WV4oFJ4J25/+/v5vmI5Fws80ho3hAZgizq6WmAftrV3H0nR5f3//o2GBoZTK5nK5L73wwguXSnWAuULMFlpjx7Br1675uVxug1LK2k0sO3v27D+VLkbVJ32wvjzeZRusJ7xmAC/y3GW7nCAYIHqohA2yKxFRfX19n+vs7IzyNaHBQqHwWF9f39alS5ceDrQhhnnTvo/N9/T0dF5xxRWfjMfjf+F5nvGPaQSdOXNmc1dX199kMhm9Pf1372fq98kQgvCau/QAsFU0xh8lDCynv4eUiPi9vb13X3nllV+yfXdQ4yul9hQKhR+nUqnnOzo63pTwD7936tSpdy1YsOAP6uvrP+R53gcl2l/DKp44ceLvFi9e/Lhj//XgsgWY/kOEYrjFFCG85i5XeJkCTA8vZ/UlImrv3r03rFmzZkssFru8xn0bUEq9oZQ6KCL9vu8PiYgfi8VaReQSz/OWeZ73bhntwkbm+/6Z/fv3f/bGG2980bLv5f03BZceXrZfUA22gylEeM1trq6jaUzJVJHZAkCJiL9x48YFDz/88BcbGxuNPz0zXbLZ7O6tW7c+9MADD5yUCPsduLV1F4PLBNcNtoUpRHjNbVG6jsFBfVd4Obtfr7322u+vWLHiy3V1dUun7GgMfN8/eejQoUeWL1/+pGGfdcGqK2p40WWcIXy3ETZR/4xY2G+8eyISu/766/esXr36AydOnPhL3/ePTd1uj/J9/+1Tp049cscdd7wvEFyuM4H6MZkCynXMBNY0o/KCres4mdVXRXds9erV9Tt27PhwZ2fnx+Px+GqZxP9E8/n8zwcGBr6/YcOGXdu2bctKZTc4yn7aqqyoA/X6PKYI4YUoA/f6haC2s45RAqxiTGnnzp1L1qxZ88GWlpbueDy+2vO8phr3P5PP5/87lUr95/79+5+59dZbe7X9iRJcIpWhFCW8GKifYYQXqq6ZEnd42abyMnqbIu4u51gYrF69uv6rX/3qsqVLl17T1NR0TSKR6BSRllgs1iwiMaXUkFIqlc/nTw4PDx84duxYz4YNG3p2796dt+yzadKZBumpui4ChBdEaq++XOHlConybVVwSXUVYxv8dnVzTfscXMa0T1G7i65LIxionwFRLurD3KN/CPXgMf1YX6z0uK36MoVHTCYeBsFAsgWYHnRBUUI0yokKAmuGEF4QGf0Aeo754Ae1HFCm7l9YgAUfK7drCoOwYAirvkTs1VZwG2HdxahnVV37iilCeMFGDy6RyuDSq6+Y2EPHVIUFQzIYZPo2XW2ZgspVbZXbcwVX1IrMtG+YRsa/noI5yxQMtmVsg+Cm8TNTe7bAsVVQtgF52+C8ztT1DQaXPvblCi1xzGOaUHnBRu8+ijYfrL5iUlmJeYHHwsaeXCeNwk4oRQlb04kCU1CFnVHU28MMo/KCLuzSibBl9fXCthF8LOogfC1jW+VbW3fRVn1F7S4SZjOE8IJJlIom6vMTWdcVSGHL6MFiq7hct4xzXQQIL5hEuczB9HzUSssVAKauai30kKk1tGr5mRuCbAYRXrCZaIDVIuys5ETaMV12YQqmqFWXaT9tj2EaEV5wcZ0hjLqOiPuDfqHjRxMJrqhdRTHcTnQ/MckIL4SpZfzLtp6LrZsXto4rqFzjXFEG5V3BhVmC8EKYqN1HFbKMabzIVM1ECSXXc7UGlf5LqGHBRZDNEhdypghzR9jXfGq5vCHqJQ9h782o3cWok96Ovg3TfcwgLlJFFOUPrac9pn+Vx7RercEVVunZAqWWADMto7dlOhbMIlReqJUtXCbyVR8xzJu2YeMaLwsLLNPywVvTdjCLEF6YiChX2rsCyhVYtXzlJzhvCzJXsNnast3HLEJ4YaLCxsFst1GWqYUrvMq3UZaxtYtZivDChXAFWHC+1iqr1m6jbT5KWBFcFynCC5MhaogF5y80uMqiBphr3vUYZinCC5Ml6vcaawmtKGNepscmMo5FcF1kCC9MtqghZnpsMr7baLpve8z1OGY5rrDHVHEF0WT/pzmRYCK0LnJUXphqUd9jF/pejBpGhNY7BOGF6TRT7zcCCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ0f8DtMCM9tEE15QAAAAASUVORK5CYII="/> - <clipPath id="clip1"> - <path d="M 134 21 L 274 21 L 274 161 L 134 161 Z M 134 21 "/> - </clipPath> - <clipPath id="clip2"> - <path d="M 134.496094 91.183594 L 204.0625 21.636719 L 273.628906 91.183594 L 204.0625 160.726562 Z M 134.496094 91.183594 "/> - </clipPath> - </defs> - <g id="surface1"> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(43.921569%,77.254903%,28.627452%);fill-opacity:1;" d="M 163.890625 344.988281 C 158.277344 356.675781 141.632812 356.675781 136.019531 344.988281 L 41.4375 148.097656 C 36.507812 137.839844 43.988281 125.953125 55.375 125.953125 L 244.535156 125.953125 C 255.917969 125.953125 263.398438 137.839844 258.46875 148.097656 Z M 163.890625 344.988281 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(43.921569%,77.254903%,28.627452%);fill-opacity:1;" d="M 303 151.453125 C 303 235.101562 235.171875 302.910156 151.5 302.910156 C 67.828125 302.910156 0 235.101562 0 151.453125 C 0 67.808594 67.828125 0 151.5 0 C 235.171875 0 303 67.808594 303 151.453125 Z M 303 151.453125 "/> - <use xlink:href="#image21"/> - <use xlink:href="#image40"/> - <use xlink:href="#image78"/> - <use xlink:href="#image97"/> - <g clip-path="url(#clip1)" clip-rule="nonzero"> - <g clip-path="url(#clip2)" clip-rule="nonzero"> - <use xlink:href="#image59"/> - </g> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + width="303" + height="353.75391" + viewBox="0 0 303 353.75391" + version="1.1" + id="svg21" + sodipodi:docname="repair_station_pump.svg" + inkscape:version="1.1.1 (1:1.1+202109281949+c3084ef5ed)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs19" /> + <sodipodi:namedview + id="namedview23" + pagecolor="#505050" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:pageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="0" + showgrid="false" + inkscape:zoom="1.2141956" + inkscape:cx="91.418549" + inkscape:cy="230.60535" + inkscape:current-layer="svg21" /> + <g + id="g871" + transform="matrix(0.73612812,0,0,0.73612812,-7.5123741,22.302095)"> + <path + style="fill:#feffff;fill-opacity:1;stroke:none;stroke-width:2.1658px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 70.90581,68.082104 94.314902,90.852655 109.07678,75.593612 87.262888,52.05427 c 0,0 54.566912,-15.909703 48.705622,38.294946 -0.0402,0.371932 76.93003,78.003994 76.93003,78.003994 52.37378,-8.79363 39.23297,49.80659 39.23297,49.80659 l -24.84486,-23.07285 -14.43716,16.0013 23.10432,21.89484 c 0,0 -54.25512,16.21415 -51.34724,-41.36193 0.0301,-0.596 -75.70086,-74.12786 -75.70086,-74.12786 -53.153663,4.0943 -37.9999,-49.411196 -37.9999,-49.411196 z" + id="path886" + sodipodi:nodetypes="ccccscccccscc" /> + <g + id="g862"> + <path + style="fill:#feffff;fill-opacity:1;stroke:none;stroke-width:2.1658px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 114.98467,168.43225 C 99.071699,195.7 27.69714,201.26308 63.120698,240.61393 98.54428,279.9648 106.86895,201.77147 134.65454,188.43871 Z" + id="path2590" + sodipodi:nodetypes="cscc" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:10.829;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 129.14765,173.83416 13.61954,-13.21718" + id="path2815" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:10.829;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 129.14765,173.83416 13.61954,-13.21718" + id="path4002" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:10.829;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 180.05353,125.27538 219.14191,86.266331" + id="path4141" + sodipodi:nodetypes="cc" /> </g> + <path + style="fill:none;stroke:#ffffff;stroke-width:21.658;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 223.5781,79.355137 237.19764,66.137981" + id="path4436" + sodipodi:nodetypes="cc" /> </g> -</svg> \ No newline at end of file + <g + id="surface1" + transform="matrix(0.60143782,0,0,0.60039443,97.037882,63.253387)"> + <path + style="fill:#fffaff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:3.509;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="M 47.663415,21.641872 H 71.627478 V 25.63231 H 47.663415 Z m 0,0" + transform="matrix(3.826531,0,0,3.826531,-47.701923,-7.977349)" + id="path832" /> + <path + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 168.29687,96.378906 h 24.9336 v 34.378904 h -24.9336 z m 0,0" + id="path834" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:7.939;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" + d="M 47.842061,77.142539 71.663207,77.35181" + transform="matrix(3.826531,0,0,3.826531,-47.701923,-7.977349)" + id="path836" /> + <path + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2.872;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="m 55.906644,37.580143 h 7.468417 v 36.044604 h -7.468417 z m 0,0" + transform="matrix(3.826531,0,0,3.826531,-47.701923,-7.977349)" + id="path838" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:2.6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" + d="m 64.040644,70.321331 c 0,0 6.250563,1.104541 6.250563,-4.199709 0,-5.303229 0,-31.20075 0,-31.20075 0,0 0.176604,-3.623958 4.153771,-3.623958 3.977166,0 4.065979,3.447354 4.065979,3.447354 l 0.08881,29.875708" + transform="matrix(3.826531,0,0,3.826531,-47.701923,-7.977349)" + id="path840" /> + <path + style="fill:#fffdff;fill-opacity:1;fill-rule:nonzero;stroke:#fffdff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.970149" + d="m 76.543811,62.218976 4.019021,-0.03164 0.124541,4.640708 3.00023,-0.06227 0.104125,4.222167 -3.783209,-0.02654 C 77.27779,70.690872 76.331478,69.753747 76.521353,67.391539 Z m 0,0" + transform="matrix(3.826531,0,0,3.826531,-47.701923,-7.977349)" + id="path842" /> + </g> +</svg> diff --git a/assets/layers/bike_shop/bike_shop.json b/assets/layers/bike_shop/bike_shop.json index 9a2680d809..eda0288650 100644 --- a/assets/layers/bike_shop/bike_shop.json +++ b/assets/layers/bike_shop/bike_shop.json @@ -118,7 +118,7 @@ "fr": "Réparateur de vélo <i>{name}</i>", "gl": "Arranxo de bicicletas <i>{name}</i>", "de": "Fahrradwerkstatt <i>{name}</i>", - "it": "Riparazione biciclette <i>{name</i>", + "it": "Riparazione biciclette <i>{name}</i>", "ru": "Ремонт велосипедов <i>{name}</i>", "pt_BR": "Reparo de bicicletas <i>{name}</i>", "pt": "Reparo de bicicletas <i>{name}</i>" @@ -686,7 +686,7 @@ "mapRendering": [ { "icon": { - "render": "./assets/layers/bike_shop/repair_shop.svg", + "render": "pin:#f04c4c;./assets/layers/bike_shop/repair_shop.svg", "mappings": [ { "if": "operator=De Fietsambassade Gent", @@ -694,7 +694,7 @@ }, { "if": "service:bicycle:retail=yes", - "then": "./assets/layers/bike_shop/shop.svg" + "then": "pin:#353d57;./assets/layers/bike_shop/shop.svg" } ] }, diff --git a/assets/layers/bike_shop/pump.svg b/assets/layers/bike_shop/pump.svg index bfee19d272..c6d074c49d 100644 --- a/assets/layers/bike_shop/pump.svg +++ b/assets/layers/bike_shop/pump.svg @@ -1,32 +1,52 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="375px" height="375px" viewBox="0 0 375 375" version="1.1"> - <defs> - <clipPath id="clip1"> - <path d="M 0 7 L 362 7 L 362 370 L 0 370 Z M 0 7 "/> - </clipPath> - <clipPath id="clip2"> - <path d="M 0 188.414062 L 180.761719 7.652344 L 361.523438 188.414062 L 180.761719 369.179688 Z M 0 188.414062 "/> - </clipPath> - <clipPath id="clip3"> - <rect x="0" y="0" width="375" height="375"/> - </clipPath> - <image id="image6" width="375" height="375" xlink:href="data:image/png;base64,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"/> - <pattern id="pattern1" patternUnits="userSpaceOnUse" width="375" height="375"> - <use xlink:href="#image6"/> - </pattern> - <pattern id="pattern0" patternUnits="userSpaceOnUse" width="375" height="375"> - <use xlink:href="#surface7"/> - </pattern> - <g id="surface7" clip-path="url(#clip3)"> - <rect x="0" y="0" width="375" height="375" style="fill:url(#pattern1);stroke:none;"/> - </g> - </defs> - <g id="surface1"> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.627452%,47.058824%,23.921569%);fill-opacity:1;" d="M 375 187.5 C 375 291.054688 291.054688 375 187.5 375 C 83.945312 375 0 291.054688 0 187.5 C 0 83.945312 83.945312 0 187.5 0 C 291.054688 0 375 83.945312 375 187.5 Z M 375 187.5 "/> - <g clip-path="url(#clip1)" clip-rule="nonzero"> - <g clip-path="url(#clip2)" clip-rule="nonzero"> - <rect x="0" y="0" width="375" height="375" style="fill:url(#pattern0);stroke:none;"/> - </g> - </g> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + width="375px" + height="375px" + viewBox="0 0 375 375" + version="1.1" + id="svg32" + sodipodi:docname="pump.svg" + inkscape:version="1.1.1 (1:1.1+202109281949+c3084ef5ed)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <path + style="fill:#e1783a;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 373.84497,186.96038 c 0,103.55469 -83.94531,187.5 -187.5,187.5 -103.55469,0 -187.5000016,-83.94531 -187.5000016,-187.5 0,-103.55469 83.9453116,-187.50000187 187.5000016,-187.50000187 103.55469,0 187.5,83.94531187 187.5,187.50000187 z m 0,0" + id="path23" /> + <g + id="surface1-3" + transform="matrix(1.1416968,0,0,1.1416968,-31.876337,-24.144943)"> + <path + style="fill:#fffaff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:3.509;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="M 47.663415,21.641872 H 71.627478 V 25.63231 H 47.663415 Z m 0,0" + transform="matrix(3.826531,0,0,3.826531,-47.701923,-7.977349)" + id="path2-3" /> + <path + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 168.29687,96.378906 h 24.9336 v 34.378904 h -24.9336 z m 0,0" + id="path4" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:7.939;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" + d="M 47.842061,77.142539 71.663207,77.35181" + transform="matrix(3.826531,0,0,3.826531,-47.701923,-7.977349)" + id="path6" /> + <path + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2.872;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="m 55.906644,37.580143 h 7.468417 v 36.044604 h -7.468417 z m 0,0" + transform="matrix(3.826531,0,0,3.826531,-47.701923,-7.977349)" + id="path8" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:2.6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" + d="m 64.040644,70.321331 c 0,0 6.250563,1.104541 6.250563,-4.199709 0,-5.303229 0,-31.20075 0,-31.20075 0,0 0.176604,-3.623958 4.153771,-3.623958 3.977166,0 4.065979,3.447354 4.065979,3.447354 l 0.08881,29.875708" + transform="matrix(3.826531,0,0,3.826531,-47.701923,-7.977349)" + id="path10" /> + <path + style="fill:#fffdff;fill-opacity:1;fill-rule:nonzero;stroke:#fffdff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.970149" + d="m 76.543811,62.218976 4.019021,-0.03164 0.124541,4.640708 3.00023,-0.06227 0.104125,4.222167 -3.783209,-0.02654 C 77.27779,70.690872 76.331478,69.753747 76.521353,67.391539 Z m 0,0" + transform="matrix(3.826531,0,0,3.826531,-47.701923,-7.977349)" + id="path12" /> </g> -</svg> \ No newline at end of file +</svg> diff --git a/assets/layers/bike_shop/repair_shop.svg b/assets/layers/bike_shop/repair_shop.svg index fd278be058..bede10e0f2 100644 --- a/assets/layers/bike_shop/repair_shop.svg +++ b/assets/layers/bike_shop/repair_shop.svg @@ -1,23 +1,34 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="298px" height="374px" viewBox="0 0 298 374" version="1.1"> - <defs> - <image id="image6" width="298" height="374" xlink:href="data:image/png;base64,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"/> - <pattern id="pattern1" patternUnits="userSpaceOnUse" width="298" height="374"> - <use xlink:href="#image6"/> - </pattern> - <pattern id="pattern0" patternUnits="userSpaceOnUse" width="298" height="374"> - <use xlink:href="#surface7"/> - </pattern> - <clipPath id="clip1"> - <rect x="0" y="0" width="298" height="374"/> - </clipPath> - <g id="surface7" clip-path="url(#clip1)"> - <rect x="0" y="0" width="298" height="374" style="fill:url(#pattern1);stroke:none;"/> - </g> - </defs> - <g id="surface1"> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(94.901961%,30.588236%,30.588236%);fill-opacity:1;" d="M 161.183594 345.460938 C 155.664062 356.957031 139.296875 356.957031 133.773438 345.460938 L 40.753906 151.773438 C 35.90625 141.679688 43.261719 129.988281 54.460938 129.988281 L 240.5 129.988281 C 251.695312 129.988281 259.050781 141.679688 254.203125 151.773438 Z M 161.183594 345.460938 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(94.901961%,30.588236%,30.588236%);fill-opacity:1;" d="M 298 148.992188 C 298 231.277344 231.289062 297.984375 149 297.984375 C 66.710938 297.984375 0 231.277344 0 148.992188 C 0 66.707031 66.710938 0 149 0 C 231.289062 0 298 66.707031 298 148.992188 Z M 298 148.992188 "/> - <rect x="0" y="0" width="298" height="374" style="fill:url(#pattern0);stroke:none;"/> - </g> -</svg> \ No newline at end of file +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + width="298" + height="354.08301" + viewBox="0 0 298 354.08301" + version="1.1" + id="svg24" + sodipodi:docname="repair_shop.svg" + inkscape:version="1.1.1 (1:1.1+202109281949+c3084ef5ed)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs6" /> + <sodipodi:namedview + id="namedview4" + pagecolor="#505050" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:pageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="0" + showgrid="false" + inkscape:zoom="2.9058359" + inkscape:cx="180.67091" + inkscape:cy="142.12778" + inkscape:current-layer="svg24" /> + <path + style="fill:#ffffff;fill-opacity:1;stroke-width:0.251522" + d="m 64.033686,243.24286 c -2.160157,-0.57825 -3.544284,-1.35435 -4.859798,-2.72499 -1.961046,-2.04322 -2.474089,-3.31371 -2.618326,-6.48413 -0.118782,-2.61091 -0.09809,-2.7481 0.657699,-4.36319 0.936564,-2.0014 3.280217,-4.42939 4.724951,-4.89499 0.529989,-0.17079 1.118677,-0.43409 1.308188,-0.58511 3.124028,-0.52358 8.876777,-0.62797 8.876777,-0.62797 l 0.01314,-78.8252 c 0,0 -5.294687,-2.26504 -7.254867,-4.1523 -2.328729,-2.30558 -3.361951,-3.97701 -4.547837,-7.35699 -0.470252,-1.34028 -0.573031,-2.15613 -0.570348,-4.5274 l 5.150076,-38.357138 c 0.420545,-5.225926 2.291693,-8.355239 6.124662,-10.242946 l 1.673199,-0.824035 12.592746,-0.01947 c 6.926012,-0.01069 12.726739,-0.102275 12.890511,-0.203486 0.222774,-0.13767 0.297769,-3.282954 0.297769,-12.488786 V 54.259965 l 0.691687,-1.698621 c 0.856055,-2.102268 2.903325,-4.255913 5.016455,-5.277098 l 1.46025,-0.705671 h 47.78922 47.78923 l 1.46025,0.705671 c 2.22592,1.075695 4.21976,3.216852 5.10663,5.483917 l 0.72727,1.859125 -0.0742,11.947308 c -0.0436,7.013183 0.0216,12.088609 0.15774,12.28945 0.1899,0.280112 2.52895,0.348511 12.90184,0.377283 l 12.66989,0.03514 1.20875,0.583896 c 4.44243,2.145956 6.12876,4.943911 6.71735,11.145413 0.13612,1.434105 0.41549,3.399757 0.62084,4.368116 0.20536,0.96836 0.37929,2.269979 0.3865,2.892499 0.007,0.62251 0.18188,2.037327 0.38808,3.144017 0.2062,1.1067 0.4863,3.08745 0.62241,4.40165 0.13611,1.31421 0.40959,3.18176 0.60771,4.15012 0.19813,0.96836 0.4344,2.60955 0.52505,3.64708 0.0907,1.03752 0.31504,2.62212 0.49862,3.52131 0.18361,0.89919 0.40538,2.48378 0.49285,3.52131 0.0875,1.03753 0.34379,2.7353 0.56956,3.77283 0.64183,2.94966 0.54069,6.49802 -0.25193,8.83815 -0.69772,2.05995 -0.85988,2.39454 -2.14898,4.43401 -1.83098,2.8968 -5.76801,5.91709 -8.4629,6.4923 -0.4223,0.0901 -0.89876,0.26911 -1.05879,0.39773 -0.53502,0.42994 -0.57885,5.11593 -0.39484,42.21534 l 0.18276,36.84801 4.02436,0.12704 c 5.28645,0.16688 6.53128,0.59383 8.99192,3.08407 0.93378,0.94501 1.69778,1.83206 1.69778,1.97121 0,0.13916 0.24096,0.78196 0.53547,1.42843 0.42449,0.93184 0.53274,1.64569 0.52234,3.44464 -0.0115,1.99265 -0.10922,2.47933 -0.80151,3.99346 -1.34606,2.94403 -3.4991,4.67573 -6.9116,5.5591 -1.33775,0.3463 -10.96236,0.38629 -89.41617,0.37152 -76.582307,-0.0144 -88.095414,-0.0642 -89.300436,-0.38686 z m 178.242124,-6.696 c 0.9604,-0.52558 1.84781,-1.88744 1.84781,-2.83572 0,-1.08952 -0.92787,-2.34125 -2.14729,-2.89676 -1.08507,-0.49431 -1.87948,-0.49879 -88.54802,-0.49879 H 65.975197 l -1.033641,0.52138 c -0.568493,0.28675 -1.249542,0.81273 -1.513431,1.16883 -0.683585,0.92245 -0.664249,2.51802 0.04255,3.50888 1.201218,1.68405 -6.324066,1.55829 90.356475,1.51002 82.48997,-0.0412 87.70226,-0.0694 88.44869,-0.47784 z M 85.371002,223.44942 c 0,0 0.358188,-30.16134 0.419404,-51.10971 l 0.565799,-1.38338 c 0.311185,-0.76085 0.565852,-1.53186 0.565925,-1.71334 1.26e-4,-0.33115 1.081839,-2.86209 1.525221,-3.56862 0.130215,-0.20751 0.338318,-0.60945 0.462444,-0.89321 0.933232,-2.13339 5.437472,-7.0203 7.940532,-8.61516 5.064743,-3.22704 9.078513,-4.45112 14.595343,-4.45112 4.16785,0 7.2794,0.71603 11.19274,2.57568 3.059,1.45365 7.06974,4.61611 8.67752,6.84218 0.41501,0.57462 1.04476,1.42447 1.39945,1.88856 1.23437,1.61511 3.11424,5.85149 3.91179,8.81536 0.96614,18.90845 0.7253,51.81359 0.7253,51.81359 l 90.33587,-0.15842 c 0,0 0.33353,-6.5438 0.27812,-39.3253 -0.0699,-41.35437 -0.0262,-39.85897 -1.16575,-39.87858 -0.55067,-0.009 -3.17158,-1.22065 -4.50851,-2.08347 -0.59447,-0.38367 -1.66302,-1.25869 -2.37455,-1.94451 -0.71152,-0.68582 -1.47371,-1.24694 -1.69376,-1.24694 -0.22004,0 -0.99423,0.5667 -1.72041,1.25934 -2.293,2.18705 -4.59193,3.44438 -7.77491,4.25222 -2.61102,0.66269 -4.31916,0.66269 -6.9302,0 -3.22947,-0.81966 -5.36331,-1.99827 -7.94481,-4.38827 l -1.54349,-1.429 -1.54347,1.429 c -2.5815,2.39 -4.71534,3.56861 -7.94483,4.38827 -2.60546,0.66128 -4.34432,0.66286 -6.9445,0.006 -3.09652,-0.78188 -5.56452,-2.12468 -7.5449,-4.10505 -1.8719,-1.8719 -1.95498,-1.87903 -3.53127,-0.30274 -2.30867,2.30867 -4.6793,3.61633 -7.99004,4.40741 -2.74148,0.65505 -4.22711,0.65376 -6.82628,-0.006 -3.22942,-0.81965 -5.54816,-2.09844 -7.69174,-4.24202 -0.69825,-0.69826 -1.49981,-1.26956 -1.78126,-1.26956 -0.28143,0 -1.0793,0.56463 -1.77303,1.25471 -2.15152,2.14022 -4.51182,3.43993 -7.73056,4.25687 -2.61103,0.66268 -4.31917,0.66268 -6.93019,0 -3.2524,-0.82548 -5.46529,-2.05292 -7.87454,-4.36787 -0.79864,-0.76739 -1.48418,-1.39524 -1.52341,-1.39524 -0.0392,0 -0.78302,0.63723 -1.65286,1.41608 -2.70868,2.42533 -4.73661,3.53757 -7.92579,4.347 -2.60547,0.66128 -4.34433,0.66286 -6.944509,0.006 -3.143457,-0.79373 -5.202188,-1.92744 -7.921542,-4.36227 l -1.59157,-1.42507 -1.523921,1.41089 c -2.263785,2.73902 -5.700494,2.9498 -7.928213,4.9206 -0.457864,0.88912 -0.0042,78.53442 -0.0042,78.53442 l 6.183099,-0.16002 z m 74.744178,-6.21543 c -2.69796,-0.24242 -4.20683,-0.73864 -5.72102,-1.88146 -1.90166,-1.43524 -3.19598,-3.32139 -3.74187,-5.45279 -0.44572,-1.74032 -0.47224,-3.18584 -0.47224,-25.73849 0,-22.74237 0.023,-23.96739 0.47598,-25.40375 0.52386,-1.66094 0.87898,-2.30242 2.05274,-3.70802 0.86444,-1.03518 2.47085,-2.2776 3.25629,-2.51847 0.27668,-0.0849 0.95579,-0.32651 1.50914,-0.53703 0.87755,-0.33388 4.49296,-0.38435 28.29625,-0.39503 l 27.29017,-0.0123 1.86821,0.68 c 2.22075,0.80832 4.29551,2.65657 5.4541,4.85864 l 0.7264,1.38064 v 25.9068 25.90679 l -0.56592,1.00237 c -0.31126,0.55129 -0.56593,1.12318 -0.56593,1.27085 0,0.39295 -1.98249,2.34375 -3.11341,3.06365 -0.53651,0.34153 -1.61177,0.85462 -2.38947,1.14021 -1.39002,0.51045 -1.84435,0.52018 -26.81773,0.57435 -13.97206,0.0303 -26.36582,-0.0313 -27.54169,-0.13701 z m 52.42578,-6.81071 c 0.73319,-0.18462 1.28058,-0.53221 1.6834,-1.06897 l 0.59691,-0.7954 0.0666,-24.05955 0.0666,-24.05956 -0.66247,-0.78731 c -1.36553,-1.62284 0.4817,-1.52379 -28.4186,-1.52379 -26.32876,0 -26.33202,6e-5 -27.40003,0.53345 -1.95932,0.97853 -1.8803,-0.10072 -1.87347,25.59087 0.003,12.62425 0.1067,22.9794 0.23483,23.53187 0.30869,1.33096 1.0143,2.22171 2.04642,2.58337 1.16719,0.40897 52.04698,0.46114 53.65984,0.055 z m -10.48416,-29.67176 -0.0632,-9.16638 -9.65034,-0.20152 0.0235,-6.5643 c 0,0 11.39304,-0.31218 14.17956,0.35585 0.40108,0.14045 0.98574,0.63119 1.29926,1.09053 0.81415,4.7806 0.48319,9.7748 0.43605,14.62576 z m -71.11569,-4.2895 -0.61099,-2.5642 c -0.7241,-3.03896 -1.41931,-4.73869 -2.86403,-7.00233 -1.18075,-1.85005 -4.28197,-4.94046 -5.76101,-5.74095 -0.52427,-0.28374 -1.12298,-0.6222 -1.33048,-0.75215 -1.85015,-1.1586 -6.26783,-2.28348 -8.92904,-2.27361 -8.41306,0.0312 -15.699387,5.44387 -18.62236,13.83364 l -0.744852,2.13794 0.136045,49.67878 38.598297,-0.1289 c 0,0 0.0857,-31.45881 0.12842,-47.18822 z m -9.37171,24.1538 -0.20582,0.0401 0.0675,-6.00616 5.75124,-0.0415 -0.0262,6.07804 -5.58669,-0.0705 z M 77.969215,138.12911 c 3.708067,-0.85995 6.398978,-3.62522 7.216897,-7.41634 0.497972,-2.30814 0.525325,-43.336926 0.02945,-44.205032 -0.319046,-0.558564 -0.391725,-0.565926 -5.58784,-0.565926 -4.443382,0 -5.404973,0.06695 -6.164643,0.429211 -1.263952,0.602739 -1.831564,2.036313 -2.269936,5.733085 l -4.772206,33.653872 c -0.763957,3.23988 -0.288569,6.04637 1.462183,8.6322 0.660906,0.97615 2.441632,2.61065 2.844214,2.61065 0.100923,0 0.364456,0.16369 0.585512,0.36374 0.447196,0.4047 2.971568,1.07441 4.212359,1.11752 0.441003,0.0153 1.540805,-0.14351 2.44399,-0.35298 z m 52.260595,-0.13398 c 1.53865,-0.29671 4.05336,-2.03214 5.06756,-3.49719 1.48452,-2.14445 1.92683,-3.62686 1.92812,-6.46212 0.001,-2.09506 -0.07,-2.57849 -0.39668,-2.70387 -0.67297,-0.25825 -17.62674,-0.17254 -18.32419,0.0927 -0.61739,0.23473 -0.6448,0.32951 -0.63622,2.20082 0.0158,3.45452 0.90654,5.95586 2.79237,7.84169 2.55206,2.55206 5.46016,3.32034 9.56904,2.52804 z m 25.23221,0.12279 c 3.09649,-0.41652 6.29868,-3.38928 7.27742,-6.756 0.60907,-2.09516 0.80561,-5.23363 0.35134,-5.61064 -0.25981,-0.21562 -2.96261,-0.31913 -9.72534,-0.37243 -8.09981,-0.0638 -9.40011,-0.0228 -9.62132,0.30347 -0.39298,0.57965 -0.0203,4.42832 0.60542,6.25169 0.694,2.02238 2.7867,4.40196 4.74075,5.39062 1.26885,0.64199 3.88383,1.21628 4.73683,1.0403 0.20751,-0.0429 0.94321,-0.15397 1.6349,-0.24701 z m 77.97796,0.004 c 3.23205,-0.74955 5.90129,-3.23313 6.90024,-6.42028 0.5986,-1.90978 0.64043,-3.35081 0.16508,-5.6887 -0.19169,-0.94282 -0.42478,-2.61329 -0.51793,-3.71213 -0.0932,-1.09885 -0.32409,-2.68344 -0.51314,-3.52132 -0.18905,-0.83787 -0.42435,-2.54073 -0.52288,-3.78413 -0.0985,-1.2434 -0.27907,-2.60162 -0.40116,-3.01827 -0.12209,-0.41664 -0.39305,-2.28553 -0.60212,-4.15308 -0.20907,-1.86755 -0.48315,-3.7917 -0.60905,-4.27588 -0.12591,-0.48418 -0.30008,-1.72922 -0.38704,-2.76675 -0.087,-1.037527 -0.31886,-2.735307 -0.51532,-3.772834 -0.19646,-1.037519 -0.47906,-3.002797 -0.62799,-4.367273 -0.14893,-1.364477 -0.49407,-3.203757 -0.76696,-4.087289 -0.43762,-1.416825 -0.61254,-1.665787 -1.48212,-2.109415 -0.8929,-0.455506 -1.48249,-0.502978 -6.24714,-0.502978 -4.58661,0 -5.30546,0.05332 -5.60639,0.415851 -0.28666,0.345328 -0.34521,4.067011 -0.34521,21.945308 v 21.52947 l 0.56603,1.72458 c 1.08402,3.30286 3.66119,5.79011 6.78168,6.54506 1.95801,0.4737 2.76071,0.47711 4.73142,0.02 z M 105.89659,137.3746 c 1.88612,-0.95429 3.48243,-2.54662 4.42513,-4.41411 0.69134,-1.36953 0.80225,-1.88507 0.93113,-4.32806 0.18031,-3.41782 0.15082,-3.45337 -2.86503,-3.45337 -1.23977,0 -2.4153,-0.14413 -2.90731,-0.35645 -0.45429,-0.19605 -1.22213,-0.50443 -1.70631,-0.68529 -0.92106,-0.34405 -4.024354,-3.29487 -4.024354,-3.82662 0,-0.16898 -0.254346,-0.75563 -0.565206,-1.30364 l -0.565202,-0.9962 -0.126485,-15.9181 C 98.383457,88.313392 97.989188,85.931619 97.989188,85.931619 l -5.730709,-0.02946 c 0,0 -0.237281,25.567295 -0.180099,45.187865 l 0.800668,1.65141 c 0.911989,1.88099 2.348244,3.43489 4.058202,4.3906 1.667109,0.93177 2.621992,1.11838 5.25373,1.02674 1.9378,-0.0675 2.54215,-0.19534 3.70557,-0.78397 z m 77.96194,-0.10789 c 1.53279,-0.87698 3.57442,-2.81822 3.8225,-3.63455 0.0887,-0.29159 0.31069,-0.70133 0.49351,-0.91055 0.42733,-0.48898 0.86137,-3.16867 0.8638,-5.3329 0.001,-1.41352 -0.0774,-1.73138 -0.48461,-1.94929 -0.30911,-0.16542 -3.73709,-0.26036 -9.40128,-0.26036 -7.58094,0 -8.9612,0.056 -9.22504,0.37384 -0.21909,0.26399 -0.27968,1.16942 -0.20621,3.08115 0.0941,2.44796 0.18181,2.85861 0.91565,4.28675 0.91443,1.77961 2.27595,3.21592 4.01814,4.23889 1.57369,0.92403 2.48491,1.09074 5.38312,0.98484 2.18899,-0.08 2.585,-0.17097 3.82042,-0.8778 z m 25.583,0.12725 c 2.26667,-1.14772 3.71359,-2.714 4.78123,-5.17565 l 0.59851,-1.38 v -22.33177 c 0,-19.574697 -0.0466,-22.3618 -0.37728,-22.574972 -0.2075,-0.13376 -1.50605,-0.214521 -2.88567,-0.17947 -2.39407,0.06083 -2.52286,0.09239 -2.82592,0.692538 -0.24504,0.485261 -0.31837,4.072774 -0.32123,15.715274 -0.004,14.98512 -0.007,15.0958 -0.56087,16.47471 -1.67451,4.17229 -4.97479,6.54444 -9.10507,6.54444 -1.03127,0 -2.16538,0.11039 -2.52022,0.2453 -0.60387,0.22958 -0.64519,0.3531 -0.64519,1.92869 0,4.64474 1.38662,7.52489 4.61366,9.58306 1.59354,1.01634 3.02363,1.33096 5.60079,1.23219 1.88685,-0.0723 2.53089,-0.20906 3.64726,-0.77433 z m -85.60152,-18.8945 c 0.5555,-0.38909 0.55902,-0.43675 0.55902,-7.58133 v -7.18976 l -0.75229,-0.71892 c -0.41375,-0.39541 -0.87405,-0.71892 -1.02286,-0.71892 -0.23325,0 -1.88441,-1.11572 -2.24921,-1.51982 -0.0692,-0.0766 -0.4854,-0.39039 -0.92494,-0.69724 -0.79757,-0.556797 -3.56973,-3.773473 -4.48385,-5.202838 -0.64836,-1.013796 -1.86763,-3.460831 -1.87746,-3.767973 -0.004,-0.135663 -0.22402,-0.814774 -0.48817,-1.509133 -0.57662,-1.515769 -1.28038,-5.373269 -1.28038,-7.018108 0,-0.651665 0.23164,-2.4787 0.51476,-4.060078 0.86252,-4.817553 2.93703,-8.842153 6.28184,-12.186977 2.42019,-2.420182 6.01527,-4.650725 8.57737,-5.321756 1.46845,-0.384597 2.47686,-0.01969 3.44263,1.24579 l 0.67637,0.886277 0.0764,7.936548 c 0.056,5.812726 0.15693,7.987735 0.37729,8.127818 0.39193,0.249158 5.2404,0.249061 5.63236,-1.11e-4 0.2209,-0.14043 0.32134,-2.354372 0.37728,-8.316038 l 0.0762,-8.124658 0.93092,-0.852799 c 1.24535,-1.140842 1.99897,-1.295818 3.57031,-0.734201 1.447,0.517172 3.73418,1.614044 3.92476,1.882206 0.0692,0.09733 0.49958,0.368518 0.95647,0.60265 2.15481,1.104226 5.871,5.393586 7.53686,8.699298 1.96942,3.908081 2.66522,8.519102 2.0116,13.330682 -0.54211,3.990742 -1.49224,6.54014 -3.65581,9.809364 -1.23553,1.86691 -4.75235,5.355297 -6.33933,6.288057 -0.5884,0.34584 -1.39408,0.91177 -1.79039,1.25761 l -0.72056,0.6288 -0.0684,7.24969 c -0.0654,6.92795 -0.0467,7.26562 0.41985,7.60855 0.40399,0.29693 2.25662,0.35886 10.7362,0.35886 6.10224,0 10.51094,-0.1 10.89801,-0.24714 l 0.65004,-0.24715 -0.0735,-11.76304 c -0.0525,-8.402287 -0.16715,-12.230135 -0.40142,-13.397933 -0.18038,-0.899192 -0.54442,-2.65356 -0.80896,-3.898595 -0.26454,-1.245036 -0.66149,-3.169181 -0.88208,-4.275879 -0.22061,-1.106698 -0.49989,-2.464918 -0.62064,-3.018268 -0.33728,-1.54567 -0.27158,-4.350438 0.14433,-6.162296 0.20641,-0.899192 0.53453,-2.596968 0.72916,-3.772834 0.19462,-1.175867 0.46537,-2.428267 0.60165,-2.783112 0.13627,-0.354842 0.32543,-1.316915 0.42034,-2.137939 0.21667,-1.874289 1.26075,-5.819657 1.67087,-6.313808 0.16977,-0.204563 0.73618,-0.590031 1.25869,-0.856595 0.86908,-0.443371 1.53288,-0.48466 7.79192,-0.48466 h 6.8419 l 1.08295,0.634648 c 0.87447,0.512472 1.13636,0.839312 1.36043,1.697776 0.15261,0.584719 0.43923,1.6213 0.63693,2.303509 0.19768,0.682211 0.35943,1.538078 0.35943,1.901925 0,0.36385 0.21413,1.503455 0.47584,2.532453 0.2617,1.029 0.5488,2.493426 0.638,3.25428 0.0892,0.760855 0.35518,1.949298 0.59109,2.640984 0.60495,1.773744 0.6075,7.771632 0.004,9.557848 -0.23367,0.691686 -0.49417,1.823536 -0.57889,2.515223 -0.13937,1.137876 -0.35797,2.222865 -1.41892,7.042623 -0.24128,1.096031 -0.35246,4.641823 -0.40621,12.95339 -0.0739,11.43154 -0.0734,11.44476 0.46415,11.88443 0.47852,0.39139 1.19175,0.44016 6.43731,0.44016 5.3987,0 6.00132,-0.0439 7.10344,-0.51806 0.94536,-0.40669 1.32039,-0.75059 1.7444,-1.59957 l 0.54013,-1.0815 V 85.910372 56.128642 l -0.59595,-1.114211 c -0.34729,-0.649285 -0.94913,-1.303613 -1.44233,-1.568123 -0.80696,-0.432777 -2.97858,-0.453915 -46.63128,-0.453915 -44.11458,0 -45.81664,0.01703 -46.65503,0.466659 -0.51317,0.275216 -1.10487,0.910554 -1.44233,1.548694 l -0.57219,1.082036 v 29.80116 29.801148 l 0.53596,1.07316 c 0.50111,1.00338 1.09308,1.42849 2.73383,1.96328 0.20751,0.0676 3.71934,0.13191 7.8041,0.14283 6.33689,0.017 7.50886,-0.0376 7.98583,-0.37168 z m 13.09512,0.0625 c 0.1822,-0.21955 0.2971,-3.33798 0.34519,-9.36921 l 0.0721,-9.04013 0.60978,-0.812777 c 0.37245,-0.49645 1.3411,-1.16463 2.48882,-1.7168 4.35069,-2.093104 6.90872,-4.819719 8.77886,-9.357415 0.66436,-1.611978 0.69859,-1.892773 0.69745,-5.719558 -0.001,-3.651136 -0.0536,-4.133878 -0.56592,-5.205289 -0.3106,-0.649512 -0.56473,-1.311148 -0.56473,-1.470306 0,-0.159156 -0.19808,-0.590296 -0.44017,-0.958086 -0.24209,-0.367792 -0.55335,-0.850426 -0.69168,-1.072518 -1.16952,-1.877603 -3.35299,-4.143989 -3.67258,-3.812036 -0.1025,0.106502 -0.26785,3.275388 -0.36737,7.041968 l -0.18095,6.848325 -0.73487,0.823105 -0.73487,0.823104 h -7.90154 -7.90154 l -0.65208,-0.652077 c -0.35863,-0.358643 -0.75466,-1.094346 -0.88004,-1.634894 -0.12538,-0.54055 -0.23067,-3.727556 -0.23397,-7.082235 -0.003,-3.354678 -0.0682,-6.099415 -0.14425,-6.099415 -0.43617,0 -1.65603,0.852218 -2.34806,1.640403 -6.3632,7.247273 -4.98474,18.851312 2.88469,24.283754 0.68008,0.469477 1.99349,1.22188 2.91867,1.67202 1.05316,0.5124 1.94664,1.16503 2.38946,1.74533 l 0.70731,0.926897 0.075,8.93799 c 0.0495,5.89146 0.16716,9.04892 0.34521,9.26345 0.38112,0.45923 5.32047,0.45611 5.702,-0.003 z m 42.01648,-0.0148 c 0.20438,-0.24626 0.26667,-3.04836 0.21944,-9.87225 l -0.0659,-9.528387 h -3.01827 -3.01826 l -0.0659,9.528387 c -0.0473,6.82389 0.0151,9.626 0.21943,9.87225 0.20739,0.24989 0.99026,0.34386 2.86477,0.34386 1.87451,0 2.65737,-0.094 2.86476,-0.34386 z m 0.89011,-26.461225 c 0.21738,-0.217385 0.39524,-0.702939 0.39524,-1.079005 0,-0.376067 0.18268,-1.358351 0.40596,-2.182854 0.22327,-0.824506 0.56111,-2.404578 0.75076,-3.511276 0.18965,-1.106698 0.51394,-2.747881 0.72065,-3.647073 0.46939,-2.041782 0.46989,-2.73114 0.003,-4.778923 -0.20481,-0.899192 -0.54527,-2.626492 -0.75659,-3.838445 -0.21132,-1.211952 -0.48339,-2.464352 -0.60458,-2.783111 -0.12119,-0.318759 -0.30031,-1.219624 -0.39805,-2.001924 -0.0978,-0.782297 -0.34948,-1.564909 -0.55941,-1.739135 -0.52049,-0.431973 -5.38166,-0.597512 -6.62319,-0.225543 -0.98658,0.295586 -1.0855,0.453701 -1.35268,2.162161 -0.0866,0.553349 -0.32328,1.741791 -0.52609,2.640983 -0.20282,0.899193 -0.54762,2.540375 -0.76625,3.647074 -0.21861,1.106698 -0.50936,2.567102 -0.64609,3.245342 -0.16314,0.809174 -0.16371,1.673964 -0.002,2.515223 0.4201,2.18111 1.04247,5.246923 1.33249,6.564027 0.15232,0.691686 0.41993,2.04154 0.5947,2.999675 0.20295,1.112601 0.48232,1.862384 0.77316,2.075058 0.70762,0.517422 6.73013,0.465764 7.25815,-0.06225 z" + id="path2224" + sodipodi:nodetypes="sssssccccsccscssscsscccssccsscssccsssssssssssscsssssssscscsscsssssscsssssssssscccscssssssscsssssscsssssssssssccccccssssssssscsscccssssssssccccssscssssccccccccccsscsscccccscccccssssssccssssssscssssssscssscscscsssssssssssssssscssccsssssssscsscccssssssscssssssssssscssssccssssssssccssssscsssssscsssccssssssssscssssccssssssssssscssssssscsscsssscccssssscccssssscccssscsssssscccccsscssssscssccccccccsscccsssscsscsssssscsssccs" /> +</svg> diff --git a/assets/layers/bike_shop/shop.svg b/assets/layers/bike_shop/shop.svg index f4e054d28d..6fc0a9c9b2 100644 --- a/assets/layers/bike_shop/shop.svg +++ b/assets/layers/bike_shop/shop.svg @@ -1,185 +1,48 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="303px" height="374px" viewBox="0 0 303 374" version="1.1"> - <defs> - <image id="image6" width="303" height="374" xlink:href="data:image/png;base64,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"/> - <image id="image11" width="303" height="374" xlink:href="data:image/png;base64,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"/> - <image id="image16" width="303" height="374" xlink:href="data:image/png;base64,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"/> - <image id="image21" width="303" height="374" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAS8AAAF2CAYAAAA/Xx7nAAAABmJLR0QA/wD/AP+gvaeTAAAKoUlEQVR4nO3dUYgc9R0H8N/uXa5XmtOIOUuj5kmsUktT+mJJbKJSqCAIaWrBl0LBghCwrz4ESij1pdKHPhZaheJDoElLSp5qTxos9aUo1WggtibZlJoLemZzsuZ2Z/qQbDI3NzO7l5i7OPP5wDCzk92Z/7Kb7/3+//3PbgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXLPWejeAz4WR75Nut7t5enr6gVartbXVan2l3W5vjIjJiOgnSdJN0/R/aZqe7PV6b8/MzJwb45zpdbcaaKRW1TI/Pz/T7/d/OBgMXkrT9P10df4zGAxe7Pf7P5yfn58Zda51eO7A51BViLQXFxe/eTmwuqsMrDLdwWDwuwsXLnwjItojzg+wQmlgRUS72+3enyTJ4TRNk88otPKSJEn+eP78+a8Oz1nRJoCIqAitAwcOTA0Gg/1pmn56g0Irr7e0tPSzAwcOTEV1iAENVhpaEdHudDp3JUny9zUKrWWSJHnt1KlTW7LtKWkv0DBVwTXx4YcfPpCm6cn1CK5MgL1/7ty5+yNiIgQYEBXVVkRMzM/P35um6Zn1DK6M02fPnr0nlgdYUYgBNVdabUXExNzc3KYkSY6td2JlJUly/OjRo7cN2xgCDBqnMrgiYrLf77+03mFVpN/v/zYuTXoVYNAwVcE1GRGTCwsLj6Q3birE9Uo++uijXcO2hgBrPC90M+Rf51ZmfWXp9/t/nZiY2L6mLVuFwWDwt8nJye/GpUuHskvEysuJXF5Uc+31bgA33FjB1el0vnUzB1dExMTExHdOnz69LYorrbLnSU0Jr2YpDK6IaG3evPkH69aqVZidnd0T5dMlBFaDCK96axVs5/e1IqK1YcOGh9esVddhw4YNj0Tx+FbZ86OmhFczLataHnvssal2u33/OrdpLO12+2vbt2/fEAbpG0941VdZVbLiU8dnnnnm9oj4wto275pNP/vss7dF9Wx71VcDCK/mKA2wmZmZL61bq67B7OzsLWHcq/GEV/2NrMDeeeedT9a8VdfhjTfeuBAqrsbzAtdT4aB8ZsleI9i+7777Nhw7dux0q9X64pq3dJXSNP1k69atd3c6nX5EJLklP/8rO9fLvK+aUXk1z4owe/fdd9OlpaVj69us8SwtLb3d6XQiyruNNITwqreiiZuFVdj58+fn1rht12RhYWEuxv96HIFWY8Kr/qr+Y18JgLm5uT/Hzd+1Sl955ZXDsTx4qwKaGvMC11PZJ4vLvrcrv3S73d9v3Ljxpp2seuHChb/MzMz8KCIGBUvV2FfEzR/MrJLKq77G6TIuC7YjR478Mi4FwU0nTdPB4cOHX4jRvzCk69gQXth6yk8faMfyymtF1RWXv2bmzJkz+7Zs2fLjNW/xCJ1O5zd33333L+JSuPajuvpKM+uIlZ88UgMqr3obpxJZVn3t3LnzhcXFxTfXonHjWlxc/OeOHTt+FSurrqyy50VNCa/myFdjRbfjxIkT/aeffnpvr9f799o3caVer3dy7969Pz158uSwOzvW86D+Jta7AdwQI8e3YnkXcll38q233vr03Llzrz788MPfnpqaun0d2h8REYuLi8f37t37kxdffHE+rnb9irqGVZNTqSl/peppnMC6Ms6VW1/Z3rFjxy0HDx78+ezs7M61fgIffPDBq0888cS+119//XxcHePq57bz41/jzranBoRXPX0m4TW839GjR7//4IMP7p2cnNx4oxve7/e7r7322q937dp1KK6GkvBiBWNezVY0Byr/CV360EMPHdq9e/eT77333qEkSZZuREOSJLl44sSJPzz++ONP7tq160+xMnTK2khDqbzqadzKq6gCW1F5ZR+7Z8+eO/bt27f73nvv/d709PQd19vQXq939vjx40f2799/6ODBg/OxvHoap/Iad6KqoKsZ4VVPVQP1EzG661gaXpeX1vT09MTzzz//9UcfffTBu+66a9utt956T7vdnh7VsCRJeh9//PGJU6dOvTE3N/eP55577l+9Xm8Qywfjq8Krqss4XBvEbwDhVU+jJqmOE175ZVl45ZbYtGnT5FNPPbVl27ZtX77zzjtnp6amJmdmZma63W734sWL/U6nc/bNN988+/LLL/93YWGhf7lt+XApCq7ssprxLpNUa0541VPR3KdsgGWrr2xYlQVY9jHLLujOnSffhqGy31TMB9dwna2kyoIru52vurLVV4TwqqXJ9W4AN0waKwOkldkerpO4GkjD7eG6KJzaucfkz1PWlvzt4b5s0OS7jUVLfq5X/vh+fLYhhFez5CudVsHtbDiVVVb5+w2PXVVt5feXVV3jhlb+saqrhjHDvp5GdeXKLqupuj1cjxtK+X+rWrKhlO8GJiW3R3URBVnNqbzqrazrWBYgw8Cq+lqc4dzA4bHKvo6mrAobFWBlY17jTIPQZWwQlVc95UOkKFTK7jMqiIaKgqGo+qnq4lV1FYtCq6h7aUpEQ6m86mncwfp81RVRHFT5+2cruKouZvaxVecuCrF89XU9vxQk0GpIeNVfUXDlB+ojRofWRKwMrySWT5vIHyc/RpYPr7JPGgcF21UBFjE6wKgZ4dUcRSE2DJ9siBU9brismGkfoz+ZzB4nf7xRXceywfqi8Mufh5oz5lVvo8atqvaPUlT1FH0CWLS/6hPEcZeycbUIYdYIKq/mKKq8Iq5WX0nuvlWD7tmZ9tdbeZUF26h5XmXzu4RVQwivessP3Gf3VQVYfrA9H1zZMa+iqRKr7TYWBVNVYBUFV1FoCbIac21jM1RNlch/60TRtZBF6/x25LaLVHU1y6qwsvsUBZcKrEFUXs2TrbyKKrB8GA0H6vOPW81gffbcw3VZ9TVqe5zgogFUXs1RdanQcD1qKfvB1yjYziua0jAqwKqW/DGLzkWNCa9mGTfAstujlqLHlRk3wKrCSnAREcKricoCbLg9TpDl90XBukhR8FQFWVRsRwiuRhNezVT0upeF0KgKKz9IP054DbfLwqzq3/PHKTo2DSC8mqsqwLLbq13nj1cVNKtd57er9lFzwovVhtiofeMoCqNx95Udh4YRXkSUvw/Kwqlq3Kxo3zjBUxZUZQEluBpOeJE1ToiV3e9aK6+yfUKLSi7MpkhVEH0Wf/CuJZiEFsuovKgyzvvjet5D4wSS0KKQ8GJca/leEVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGr9H2na5Lw/3VYHAAAAAElFTkSuQmCC"/> - <image id="image26" width="303" height="374" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAS8AAAF2CAYAAAA/Xx7nAAAABmJLR0QA/wD/AP+gvaeTAAAK6klEQVR4nO3dT4hdVx0H8HPf/MGQYP/ZVBtRsEhIXUz6RyEbQ0MX7WK6K40UJKWgi9pVQBA1C6GbLgKRrkToQoUuXFgsNaEgpZYhaNViWhuJTZ2mTY1Ep2Qmmb/3XhfNS+7cnPvnzUzee+l8PnC59755777zXuZ98zvnnvsmBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYs2TQDdiEGt/z+fn5L42Ojn41SZIvJkny+U6nszXLsvHLP54JIczmeX4mTdPTJ06c+Mf999+/0uJ583W1GtiUkrplcXHx7jRND2ZZ9rs8z/+b92Yhz/M/pmn67PLy8oNvvPHGWNPzDeD1AzeYygCZnp6+JU3Tg3mev9ljWDU5l6bpc7Ozs18LIXTq2jCINwQYblVh0fnggw9uS9P02TzPL2xwaJVlWZa9NDc3tzt8EmJ1QQZsctHACiF0Hn300ZE0Tb+T994tXK80TdOfTU9P3xLqQwzYhCorrRBC5/Tp03dkWXa0z6FV9v78/PzecDXAhBhscpWhFULozM3NTeR5/t6Ag6traWlp6bshhJFQH2LAp1xlaIUQRi5evHhfnufnB51YJdny8vLB0BxgQgw+heqqrZEQwsj09PRX8jz/96CTqkI2Pz//7W5bgwCDTaExuA4fPrwly7I/DzqhGlyamZmZCCGMBt1I2BTqgms0hDC6uLj440EnUxtZlr1x4MCBz4TmAANucE3BNfbaa699Ib/+c7g2zNzc3IEQwli4GmBV3UgYKn4p2yu/V0lhXbzU59D4+PgP+9qydcjz/O+dTuee8Mm1j8UlhGuvh3R9JEOjM+gG3KCiwRVCSMbGxvYPrFVrkCTJ3WfOnLknxMe5qgIbBk54tZNEtq8JrpMnT+5MkuSufjduvW699daHQvWZRoHFUBJezWIf3nKYJSGE5I477ri3P03aWOPj4/eG+qkSsfCGgRJevYmG1uWlMzo6umMgrVq/HaF6cF5YMZSEV71W3cXukiTJ1v42b2N0Op1toXmOl+qLoSK81u6aKRNLS0sXB9uktUnT9EKoDuUQhBVDSHj1JvahvrLMzc19OKiGrcfKysqHobrqUnExlIRXO7FxoGsqr6mpqb/1u2Eb4eLFi38NvV8eJMgYKOHVXm3VFULo7N+///3l5eWTA2rfmh0/fvz3ob7qMsueoSO8mlVNlYgtnfPnz/+6j21bt8XFxTcnJydPhepLgpx9ZCgJr95Vnm0MIXSeeuqpX2RZ9r8Btq8nb7/99k9D/WsKQWAxhPxS1it/gDuFdfeC7OKF2SMhhJGTJ08+sXPnzp/0v7m9mZubm9q+ffu35ufnV0IIKyGEtLBkl9f55e021z5C36i82qka6yrvJyGEzu7du381Ozs71fdW9iDLsgtHjhz5wfz8fAgqLm5AI4NuwJCr604VK7BVVdjKykpnenr6D5OTkw+NjIzcNJCW10uPHj36vSeffPJEuLaiii0hqLIYMsKrXlNwJWH1919d+T6sEydOLC8sLLy6d+/efaOjo58dRONj8jzPjh8//qN9+/a9Eq6GUxbi3cMrDwvCiyEjvOpVBVa56ipWXle2p6amLn388cev7t279+vj4+OfG0D7V0nT9NLLL7/8/QcffPBouDasqgIsFmYwcMa81qbNxM0khBCee+65j/bs2fPEmTNnfnv9m1Xt0qVL/3zmmWcOTE5OvhriY1qxuV0wtPyC1mvqKo4UltFw9YxjcfvK8sILL3zzkUceObhly5Y7+/UCsixbeOutt3758MMPP3/27NmFcPVs4kphvRK5rXu2MSssxsEYGiqv3jR9aMvjRKvs37//9bvuumv/1NTUkYWFhf9seOsKsixbPH369G8ef/zxxyYmJn5+9uzZpUjbYu0VTNwQVF716s4wxuZ41VZehfsnN99889jzzz//wJ49ex7avn37/UmSjG5Eg2dnZ9975513jh06dOilY8eOzYTVlVNxHldd5dVmrlcIAo4BEl712kyPKHcd68KrG2CrBv8feOCBm55++ulvTExM3Hf77bfv2rZt25eTJGl1MmVhYeHczMzMqVOnTv3lxRdf/NPhw4f/FVaHTC/hVby93G00fYKhIrzq1U2TqBr3iq3Lf1Ks7tsbkh07dow99thjO3bt2nX7nXfeedv4+PjY1q1bty0sLFxK0zQ9d+7czLvvvnv+lVde+ej111+/EFaHSXkpBlcWrq2uYrPri5WX8GIoCa96TZcHVYVXLLhifxNxrRdCV/1Jsqrgqqu8Yt3FcniZuMrQ2ZBxlk0kD5+ESfkDXAyLbih1t2PVVai5T9t2lPeL7SnO2apa8tAcTuXjCyuGhvBq1g2s2H7VZM6q4IpVVcUzvsVjF5+jrm3F7diE07YB1jbIYCiYYV+vfPF17LaqC7SbLnaum67Q3a6bktE0zlU1WB/rStZVYrHnhoFTebVX7DJ299tUW1XH6pTWVY9rGvOqq/5iIRUb14pNhYi9zqo2QN8Jr3bKXcfubXUBVlTudnaXYoDFqrg27SqHTF2Xsar6ajqrWHw+GArCqzexD3NW2E8i++XHlsOh+5hYgJWPETtW+ZhN4VUVYr1UXTBwwqteeXA+Vn1117Egi91npHDf4rSJujOPTc/b3S53AevCq03lBUNLePWuahA7q7i9uF3sLnbC6hCrG9yva0fdeFdxu26wPis9tqoKq3sPoK+EV7NY9VX+8HYDKBZg3cdVhUybOWFNlVebs41tpkxUjXcJK4aO8Fqf2Ac8K91WF1rF4LoeY17lAIsFWjm4ql5f3W3Qd8Krnarqq1iFdQOpux3C6uApD9KXu4zlM5VNZxybuo2xAKu6rWopPk95GwbKtY3tVU1/iAVO+euiY+vYtY0bNeZVF2JVXcSm4Irtw8AIr970EmBVAdW0Xz5e8bliYVIVYuWAatqPHa/8XDA0dBt7U+w+FvfrPtjlwfg8sh9CPMCK63I7yutYCLWpsGKBJbgYeiqvtamrwLrrqkqsrovYtsvY1RRebcJKcHFDEl5rV3cJUFUF1Tawehnz6m63CbKq+8aOGduHoSG81if2/jUFUdXYVi/B1VVVNVVVVHVVluDihiK81q8uwIrbbdexY5bH2ULFfl2Yxdax41XdBkNFeG2ctiFW3G76eRtVQdQUVEKLG5rw2lhV72fT+Fgvj68KmLYh1ebxMPSE1/VR977WBVmbx8e0CSihxaeKr4G+vppCaCP+86gLn7X+DIaeyqs/2r7P6/n3aBtGQotPBeE1GP1834UVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAZ/B9KK+MNDKsligAAAABJRU5ErkJggg=="/> - <image id="image31" width="303" height="374" xlink:href="data:image/png;base64,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"/> - <image id="image36" width="303" height="374" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAS8AAAF2CAYAAAA/Xx7nAAAABmJLR0QA/wD/AP+gvaeTAAAG+klEQVR4nO3cTZLTRhiA4U+GDRu2OUTWOU7OljPkQHADqlIpKBgPY2URK9H0dAvbM5L4ep6nSmXhH1ks/FZ3SxABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwnWHvE4BX7Mnv7/Pnz7+8e/fu92sO8uXLlz/ev3//qfLSePOZAVQMre14PP42Xunu7u7XpWPu8jfcwGHvE4BXphWTISKG79+/Xx2b4/H4o1B1GTDxgu3UIjKPzk2Rub+/L4/R+p6uiBdso4xHNTjnED3nO5Yi1lXAxAvWtxSNR7G5Zdo4G3ldMoLrJmBv9z4BeGWGyv5/4XlmvCbj+c/j7PnurjyKF6xrcYG+2L9p5PX169dD/DuLqgWq9tzQeD4V8YLt1NajHt3W8EIjr4ino64ugjUnXrCN2nrUFJ3DtP/t27er16HPwZtGXmNEnM4vTbGaTyG7CZh4wfZaN5MeHh4erh55nYN3iP+jVRuFdcfVRlhfdYoYj0ddh4gY7u7urv5Nnj/z5FiVbX4u6YkX7KMasuPx+Jxp46v5p0ERpo2wh3IkNk37bpo2noM3j94pOl3nmhMv2EZt+lZOH28aeRXxmoI1bfOrjtPrXTBthO296IL9+TOtaWO3U0fxgnUt/fvCJ7dK3N/f3zryenKsC88hLfGC9ZVX+mrTx0NEHE6n03NGXmW4alcZuwhXhHjBVmqjnyfbLdPGc/AumTJ2E64I8YKtte65GiJieMbIqzVV7HbdS7xgX2uNvLonXrCP6t3vt4y8ZvFqHbdL4gXbWYrJzaGZjdZWOf7PSrxge62F9OcEpnWM7qI1ES/4OQwR/00BrzL7TLehqhEv2NYWI6NXMfoSL9jHS9+H1bqPrFviBaQkXkBK4gWkJF5ASuIFpCReQEriBaQkXkBK4gWkJF5ASuIFpCReQEriBaQkXkBK4gWkJF5ASuIFpCReQEriBaQkXkBK4gWkJF5ASuIFpCReQEriBaQkXkBK4gWkJF5ASuIFpCReQEriBaQkXkBK4gWkJF5ASuIFpCReQEriBaQkXkBK4gWkJF5ASuIFpCReQEriBaQkXkBK4gWkJF5ASuIFpCReQEriBaQkXkBK4gWkJF5ASuIFpCReQEriBaQkXkBK4gWkJF5ASuIFpCReQEriBaQkXkBK4gWkJF5ASuIFpCReQEriBaQkXkBK4gWkJF5ASuIFpCReQEriBaQkXkBK4gWkJF5ASuIFpCResJ8x6bF/Cm/3PgF4pWpxGT9+/PjXp0+f/hzHcRjHcTidTkNExDiOQ0TEMAxjRMThcBiHYRiHYRg/fPjwd+t4q539T2DY+wSgc4f493c2zPbfnPffnLe3s8e3s+cPs23uNNseztv38/Ywe3yYvWc874+z/dRMG2F7SyOicbbV3l/ul++95rtSM22E/Y3F47RfC9PYeK12jK6JF2xnjMdLNfMAjY3nluJ1yTGieK0b4gX7aI2y5mtSQyzH69T4bO07uiNesJ/WKKpcVJ8W/COWw1U7ZrfEC7YxTRlbI6RyxDXM/nwo3l9eNSxDVjtuRGdBEy9YX7nWNX++Fq3T7P21z53iabiWIlZ+Zxfe7H0C0LkyQvPH2jZ/z2Q+cipHXeVj+Vxr1JU+YkZesK7aFcZy/aq2xjW9foh6zMpgtdbAIjoMV4SRF6xtaXRVPjc9X1u3mvZbU8VWwLoIVY14wbrKOLWer72vdgWxNlUsX29FrKuQmTbCPmojqsl8dFZb7G/FbGnq2B3xgvWV61wRj6eHtXhNn2mNyGrrZbWrjd3euGraCOtqXWVsva+mNQVcmk52G62JeMG6ynWta7TunK+NspbWudykCryYVkjKG1RbwWuFzZoX8OKmdaz5Y+31W+M13y9HW92FzP+kCusrf2dL62Ctx1IrTpeEq4uQiRds45KAtV5rqcXpVYQrwoI9bOXaK4wR7XWrpSuJXV9hnDPygu20fm+XXJEs7xMrXRKtrmImXrCtpd/cJXGLuC1OXYUrQrxgLz/67V362/xRlLqL1kS8YF9r/Qa7jRYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACs4B+0KzvrbWLHEwAAAABJRU5ErkJggg=="/> - <image id="image41" width="303" height="374" xlink:href="data:image/png;base64,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"/> - <image id="image46" width="303" height="374" xlink:href="data:image/png;base64,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"/> - <image id="image46" width="303" height="374" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAS8AAAF2CAYAAAA/Xx7nAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3de3xU9Z3/8c9MkkkIgSRyS7jJRahGBKHVllaFrRUCj26lctFau3bVskqlrbVutwUt/qzl51JdL1VrW9atol2pLl7YgloFjRhRUS4qCCJKIFduSZxMJjPnnP1j5iQnZ77fMycBJAmv5+NxHjNz5twm4bz5fL/neyYiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgJwqc6ANAj9Lu35NlWctFZMrRbNAwjF9lZmY+pnjLOprtAuh6Ava0ZMmS4MqVKzPk+P8nFVBN8Xj8W9ZRMgxjgW77n8PnAnCcKE/o999/PxSPx+dZlvVWPB6/UrPccdu/iARFJDh37twMy7K2H4PwCiYnAgzo5pQncV1dXR/DMG6wLOtTx/m/3VF9HcuT3zO4klNGS0vL9UcTXi0tLT90bVMXYgC6MG0AxWKx6ZZlHVQFQDwev8xrXencye8ZWskp88UXX8y3LOvQUYaXvT0CDOiGPCudgwcPDrMsq0WTAe8tWbIkU9Kf/H4DwFdwJaesaDS6rLPh1dzcfL1jW+4QI8BOYvyyuwfV78k9L2AYxopgMHiZagMtLS2XZGdnPyupV+lUV+28ruSl7NfjMSAisnXr1qFnnXXWDhHJcm/MNM0P6uvrf2O/zsjIsJzP6+rq3h05cuRux3FZjueqY+UqJNBFpO1Xsqf6+vpzdRWMaZrvTJ06VVW9pKvEvCZVtZWVnEIiki0iOSLSq6Wl5QnNocU3bNgwTkR6J6dcEemVnHKS2wglpyzxV4EB6ALSBUa7Jpppmht0ARYOh2eKvgnW0RDTBVe70JJEGPX+8MMPz/M4rvtEpE9yypO2ELODzBlifgIMwAnmJzDaVTuNjY2XelRf5Y5lOxNi7mXcx6AKrjxJhFLfWCxWrjmuxiVLlgwXkXwR6SupIeYMMOfxE14nMX7RXVtA8TylT8n5fNq0aZlr1659LxAIjFBt0DCM/xWRZvt1MBg86j4i0zRbj9OyrIBznv1aRCQjI2NsZmZmiWobdXV1vxw4cODv7U1KW/+W7rm7/4u+r5MM4dW16cJLFVyt86LR6IOhUOjKz+sgjwXDMD4dM2bMl/fs2ROXtpDSPaomkfaBRXj1cMETfQDQ8goucb1une6///78rKysb38+h3hsWJb1mYhkrlq1aoqom680C5GCfwhdV7qqy9kP1fr6yJEj1+fn5y/9PA/0KBmSqJIym5qanu/du/eVkqiw7MlyvdZVYSJUXicVKq+uzyu42k2TJ08O9enTZ8EJOcrOszv9JTc398Lbb7+9WPyNpFeFO04ihFfX5OdkTKnAnnzyyYuDweCw43pkx1fmlVdeOU/8j9sitE5i/PK7JlW/lv3c3Q/UWqG0tLS8nJWVNcnPDmKx2NbGxsZVIokrjs6rjn6uQDqvMMbj8aA9zzTNgGVZAfu5/bpv375nFBQUXOzjuPbk5+efH4lE7I57Q9qai/Zzr857G81G4ARw92m5B4HmSHLwpyTGROVv3bp1hm58l2Zs1aHLLrtsmIj0E5FTRKRQRAqkbayVPfVxTfb8/OTyhcn1+4nIABEZJCLFIjJYRIaKyPCBAweOjkQi2/we25YtW64WkSIRGZjcbmFyn3nJz50jqQNW6dQ/yfBL7pp0Y7pUFVeGiAQjkciKnJycmR3Zyd69e39+6qmnPiz+xk3pjk93XK3T9u3brzz99NN/5fe4otHotpycnOnSVmkZ0r4Cc3bcU3mdpOjz6nr89PG06xNavXr1qJycnFLVCg0NDasNw6hSvVdcXPyD3Nxc5yh7u4Jxv3aPqg+mea91+slPflI0duzYn/r76AnZ2dlnbdq06UJJbT4DrQivri/doNTABRdccJ1ofpdr1qx5qKKi4hHVe1lZWae98sorF0n7sHKHk2qe6v7KlIpLRII333zzomAw2Ee1/yNHjqyzLCuueq+kpOTHmp+HGxUWcILohj647x/MksS9fb3E0dd12223jTZNM6zqOwqHw6+LyKjLLrtsomEYumXKRGSYJPqnBienYkn0OQ3ymIqkrW9rSHL94SJyqoiMFJHRa9as+b6uXysejx+eO3fueVVVVU/plnnrrbdmi0h/SfR55Yu6z8sZnvR5AcdR2vFaIhJct25dzocffti/rKysUNp31PeSxEncV0QKDxw48Gvdyb9+/fofiMhpIjKmurp6hWYx85FHHpkuieCxQ2yItIWYbrKDThlc48ePH9fc3PyJ7tjKy8sXici4JUuWlFqWFVctE4lEXhPv8OLmbOA48wyraDQ63jCMG0zTfNKyrG2WZTWnJIxp7ovH4y81NTXdXVFR8e0FCxYUTZ8+vdgwjGrViR+NRnf36dPnCyIyVkS+sHTp0mmWZRmqZQ8cOLBSREZIInzcIWYHmXOy5w9NLusMrlEictrHH398ny646uvrN4VCofEiMk5EzqytrX1Ot+zGjRu/KR0PLwBHSRtYNTU1gwzD+IVlWTt0J64X0zQ/a2lpeUP3/tatWxeLyBdE5HQROUNEzjh8+PA6zbaaFy5ceK4kwscZYHaIOYNsiGOeM7hGSCK4Rt9xxx0XmaaZEsDJfcWWLl36bREZLyJniciZy5Yt+0dLE6zhcHiNJIZiEF7A50DbHKysrOxvGMZvLcv6rBOZ5Us8Hj84ceLECdIWXCUicuZTTz11tW6dTz/99B5JhI9XgDknO7iGSyK4WquuhoaG13T72bVr13IRmSBt4TVOREoOHjz4vO7jrFix4izx7vOi2XgS4mrjsaU7cQIiEojH45cXFxe/HwwGb5REp/txsXfv3r+8++67UXHdIzh79uyNkUhkp2qdIUOGfHfixIk5zuMV9X2E7tftnr/xxhvf7NOnz9dU+4hGo5WzZ8/+g2sfIiLy1FNP/V61johkzJw5858076VsBycPwuvY8Aytt99+O8cwjD9mZGQ8KolR48eTtXPnzs2iqf42b968QrVSRkZGv4cffvhb4i8MlMMTZs2a1eeLX/ziL3UrvfDCC/9/69atzar35s+fvz0cDr+tei8/P/97559/fsjHcQHoAK9hDsFPPvmk2DTNd4+6LdgBpmlG161b92NJNMnOkkQTbbyIjB89evQXY7HYAdV6zc3NO7Kzs0dLatNR1Wx0Nh1HiMjIqqqqR3THdODAgZck0Vx0Tq2d9iJy+htvvHGjbv29e/d+XxLDQ3pL4oqr/ZXQutuDnEEXlMQVUvQgVF5HR9Wcam1qVVZWDh0+fPj6QCBwto9tNcbj8WcbGxtv2r9//zffeuutiX//+99LXnrppQlbtmz5+v79+/+lsbHxj4ZhfJz2oAKB0JQpU+7asGHDLOfxiEhg9+7dsd27dz+hWi87O/sLzz333FdFfZuQ7jYcERHriSeeGFdUVHS5arumaTbffvvty9Id9xVXXLHWMIwDqveKioquEvXP2+u17RQR6VZf0AgcL+kGlWZs3Lixn2maaW9GNk1z56FDhxYsWbJkoDj+WIUkOqjzxXXj829+85sS0zR1f1zWvW1j9erVC8VV7cybN+8CwzCUVwMbGhrWSaKSsqsur+ESQ0VkWEFBwYimpiZtdblt27Zl0lYBOqsuu8P+TElcXBi7b9++B3XbKS8v/7J07OZsmpmAi2dwzZ07N2Sa5gtpgqXh8OHDN5599tkFkhpY7m9r6C+JvrJBtbW1d/sJLpthGJE77rhjjrhCo7KyUjey3fzTn/50obQfdW8PTC2StpH1rd8csXv37lt0+49EIjuHDBkyQRJB1a4JK46rjZIMr0WLFl1gaQathsPhB5M/Kzu8VE1H/pI2oJHuNp7MaDT6yzSBsrWsrGyCpH61jDuwBkgytESkaMaMGaMNwzjoP7oSmpqado8fP/7L4givZcuWXWxZlqla/sCBA49K++BS3SpUJCLFS5YsOdswjHrdR12xYsXlkqis7P4352RXXa3hJYmhFutUGzNNs/6mm24qkvb9XuluE9JNwEklbXBVV1ePsywrqguSlpaWskWLFg0Rf4Flh8RgERmye/fuX+i2W1NT85SlqVgsy7I++uij/5K2imeciJxZX1+v/AO1pmk2/ehHPxon7YNroGsaJCJFDQ0NT+v2WV1d/YQkQqlE2gLMPZ0pibForeH12muvacej1dbWXi/pm45+Agw4aaQLriwRyYrH43/XnXixWOyt+fPnF4s+sFpDQVw3PRcUFIyIRqMfa7ZbPXLkyAnvvPPObbp9m6bZcuutt14sjqbamjVr5uuW379//1JpH1wDXNPATZs2zbM01Vs8Hj946aWXniNto/xLpC3EnFOJJMLLvpXptAEDBpwWi8X2aT7ru5J61dE52r4jAUaIocfzE1yhgwcPTtOFgWEY1b/73e/GikezUNoHlvPewVPLy8uv0W17+/btd0mystm7d+9/65arqalZK8lbckSkJBQKndHc3PyRJnyqxo0bN0zagqu/c5oxY8bQeDy+W7evd9999yYRGSPJeyvFcZuStAWZ/fr05DJjRGS0iIz69NNP79Bt+7333vsHOTbVFyGGHi9tcIlIdjwe13bS79ixY464Ot+lfQd4uyt40v6ewZHhcPhN1XYNw2i65JJLvibJPqWxY8eeE4lElKFimqaxePHimeLoZ9q8ebO2s33Xrl0Lksdqh1Y/+zMcPHjw33XrhcPhN5PjxU6T1ABzT1+QtqrLDq+RP/zhDyeZpqlsfjc1NT0mx7b6IrzQI2mvKorje7a2bdt2hqVpQjU1NT0rbZWWu8rShVbrzc6PP/74LF1QVFRUrBDXlbyVK1dqm4N79uxZLo5+pnPPPXdCPB4/rFo2Go1ukbaqyw6ufqtWrTrX68br5cuXT5PkV+NI+wCzJ2dg2dOY5LL2INkR9fX1yv400zQj99xzz3DxV33RfOyhGKTace0GfdrTqFGjviPqk8B65ZVX/l30J5LuJGudV1paerXqQCzLMh944IHH3ducN2/exvr6+k2qdQYPHjwzLy/PPk7rzTffbKqsrPyLatlQKDS+vLx8sutzS2lp6e2BQCBbtU5tbe1/Xn311R/a23dMpuu5+3XK9+hv3LjxMdU+AoFAzve+973vOmdJagh1NJAIsG6G8PKmOxncIRPIycn5pmoDzc3N62fMmLFTNF+TLKlh1m5atGjRkIKCghmqbR88ePDlpUuX7lMcn2zYsOFR1TqhUKjonnvuKXHOu/vuu1dYlhVTLT9+/Ph/cWw7sGPHjtKcnJxvqJY1DKPmuuuuuzv5UhVc7j+g4fkXsKdNm7axpaVFeSN5fn7+Vaeccor98xPXozuICKYeiPDqGGXAPProowXBYHC8aoV9+/Y9KYq/saiYlNu/7rrrvh8IBDJU237uuef+7Fiv3frXXnvthng8Xq9a7ytf+cq5zs9011131R45cuR/Vcvm5uaWPvbYYyNFJDB58uTs0aNHa/8K0I4dO/7fqlWrwo5Z7gDzmpS3HlVUVChDOBgMnvb2229PFfXPTxyv0UMRXnrpToLWoJgyZcqXJdHP4mb+/ve/f1n0oSWKx1bTp0/vXVxcPEd1cOFw+L2rrrpqq279ioqK2KFDh8pV6xYVFU10z1u7du1/qpYVkeDcuXMfPnTo0K9feOGF+zMzM8eoFopEIm+ec845q5MvVX+SLF14uUNMRERuuummpyzL+ky1z8GDB18j3v8JOBFkPQzh5Z+2ade3b1/lCR2LxXbeeeedDdKBwHK69957L9X95Z033njjYY9VLRGRioqKd1Vv5ubmjnQfx+WXX/5BU1PTRtXyWVlZJYWFhfPz8vKUf/Hasqz4qlWr/i0Sibj/bqK7f8tv5dUaYKtWrfrsyJEjT6v2m52dPePJJ58cIuqfrWheo4cgvNR8V10iEsjKyhqt2khzc/NHog8ukdRvbWidN3To0OCoUaOUX8IXjUb3z5kz5yXXbPd2ZNeuXbtV62dnZw8NhUIpQbplyxavQNSqq6tb/t3vfvcjzdt++r1UfV6tP5uXX35Z+R1kIpI5bdq0K8W7+e1EkPUghJc/np3qgUCgULVSNBrdL95VgS2lv+fpp58uzczMHKJaeMeOHSuOHDliOtYVxXN55513lH9sNhAIZE2ePLm367gCpaWlL5umecS5bCQS2VRVVXVXc3Pzm+7ti4gYhlF97bXX3uPxeTrSZExpNoqIzJkz5/1oNKq8etq7d+8rJ0+enCX6wEIPRXh586q67OfBYDCYp1o5FouFVfNFXWG0m0pKSq5RrWgYRuOCBQueEsVJ7t7HJ598otu/nHHGGfbXULee9BdffHF+IBBo/XrqysrK+3Nzcy8ZPHjwPb169Zrz17/+daZlWe22+cEHH/w62UnvDo6O9nspqy7bxx9/rOu4L165cuVMUf/HIuI/0Pjjtd0M/0upqf7hO68Y2o8ZIhKMRCKP5eTkzHRvpKqq6j8GDx78H5p9qE6WgIgE1qxZ8+XS0tKVqpXi8XhNfX39ZtM00/7ugsFgqF+/flNV7x0+fHi9aZpREZFAIGCJiOTk5BTl5uaeLSLS0tKyd+jQoRfW1dXZf9HaEhHZtGnTtEmTJv1BRMSyrFgwGBzjfN/1qGsOKj+3ZhIRka9+9avZZWVlbwaDwVPcK8disXWhUOhiSd8MdR6fG+HVzWSe6APognTVlvuxdTJNU1nhZGRkqCoyr5PIEpHAeeedpxyUKiKSmZk5qF+/ftN17/tVWFg41ev9xsbGTXV1dZYkQtqS5Ge/77773nr44UTXWCAQyJwwYUL2li1bosn3vYJL2SRMsn+WQde81v2+/vrr0UOHDj3Rv3//69wrZ2VlTX311VfHXHDBBTtd6xFIPRjNRj1dZ29KsyQWix0RhZycHHeflfvkTjmxly9fPiIvL++iozz2o5YM3pQBtaNGjWq9+mlZlllVVWVI6s9K9/lUnfbKn4MoQn7VqlUrksu07ciyIuFw+LFwOBwX74sjXpUqIdcNEV7+KCsue2pqatqjWiknJ8c5hELXv9XuhJ01a9Y10gV+L3379v3qD37wgwHSfoxa8IorrphlL9PS0rKrtrbWdK2qq746PVzCNn/+/E/D4XCZiEgsFvuoqqpq8c9//vOz8vLyfjxjxoy9mo/i7vNSBS26oRN+knRxXp29re/V1tYqhySEQqHTFi5ceIqkXhFUBteNN95YWFhYOO8YHftRCQaDve++++4Hb7nllmEiEsjOzs5455135owYMWKhvUxlZeVzrtW8Alo3NCJd9dUuyF577bVl5eXl8woKCi4YPHjwn5YtW9bg2L+yvww9E7/gVLoqS3VfYoaIBOfPn5//0EMPfSiKUfbbt2+/oaSk5EnxOCHt/dXU1NwwcODAnx+XT9V5RnNz857MzMzCzMzMfvbMlpaWiunTp89cv359WNSVlSHeVZXN62fsvEDipAtF1T49m6Ku5+hGCK9UqvBy35uY4X4ejUbXhkKhlD9xFolEXsvNzb1MvMMrICKyZ8+ey7KzsweaphkwTTNgWVbA/dx+tLdvWVbK79A0zUD//v1PGzRokPJm8YqKiscbGhpqnfOCwWDrSVxQUDC8uLh4tu4HFI/Ha/74xz/+84IFC3aKujnoDhHVGC67U70j4eW+KNDRsWOEVw9CeKVSjRFKGR7hfl5ZWfnj4uLiX6g2+Mwzz5TOmjVrm3jcgCzpqzyvE9r5KCISaGxs/HNeXl7KPYwtLS1VeXl5M2KxmNeJbK1du3bqlClTfpSTkzO29U3Laq6rq/vbrbfeeucDDzxQK/oASRdeqsor3WfVjSHzE1yq4HR/ZnQzDJVITzfYsd3zZ5555ulrr73230TxH8I3vvGNn4rI95MvVSfRMf1P5Nlnnz1fFVwiInv37v2bI7ic+3YOLwiUlpauF5H1ixcvHjJx4sTBTU1N0QceeGBHeXl5k7Rd8Ut3AUIVIvZ6bs73bUHNsgCVl4K7w9fdZHRWXO2+bvizzz57pHfv3srvutq6deuVEyZMeF68Ky/VvjpUeX3pS1/KLSsr+2tOTs5w9zFYlmX87Gc/+9Zdd921z/2eqKsR95VDVUe7u8oyRF99eVWcXp/dXQ3b2+jIFUxTUj+X+zm6EeX3RJ3kVGOFVH0z7iZN8MILL6waOXLkpaqNDhgw4IL8/Pz/eeGFF5Rf76LZj/Nkdu9bGV5vv/32zYWFhV9R7aCmpmbNnDlznlZ8RnE9d3IHmPO5qtJKd8XQKyxUn191bLqg9doXIdXDMFTCm+qE1larF1544ZvhcNj9bQ8iIhIMBvstXLjwLwsWLOh7lPtXVQ8BEZFt27b9U3Fx8bdVG7IsK3b//ff/QbMt1XY7EhC6KV2IpVvXXVmptimu5x1BoHVjVF6pdBWQqvJJ+YLBU089dcukSZOuUH37aUZGxoCLLrpocjQa/dvrr7/e7Nqnbt9BxXspy27evPmK8ePH3ySacN21a9fD8+bNe9Exy08z0fncT/+W12O6vj5VJeme5xWo7mNVfS70IPR5pUrXfFNebRRHkO3Zs+eaESNG/Eq3g3g8vuvFF1/855kzZ9p/qCLdkAHtd96PGDEiVFZW9q9Dhw79jm5/4XB456RJk763c+fOaHKW3xBwPtdVQ4biud8xXvZnF0n9T0HVNFc1H3X9cX7Ck1Drxmg2elP94077D76kpGR5OBz+u+79zMzMMaWlpS/W1NQs/NrXvhbq7PE88sgjZ3/wwQdPeAWXaZrhO++881937tzZLP4qKt3VQlVw+QkLP5PqeFTb68i2U35e6FmovFJ15Gqj83m7q4CzZ8/Oe/zxx1eGQqGzvHZmGMa+mpqa391xxx3/c++99zZI6r7ave7Tp0/Go48+eu6UKVO+X1BQMFU8foeWZcWffvrphZdccsnrztmKx3RBoqts/I7t0l1ptPm5IKKrvJzH6zfo3OujGyK8Urn7WnSX8N1NRmfYiIjIzTffPGDx4sX/HQqFWgd66iT+xmv09cOHD5dXV1d/uHfv3pqKiorPevfu3auoqKjfsGHDRg8aNGhiYWHheZmZmUU+tme8+uqrN0+dOtX+q0DpQitdcKULLz+j272ajbp+Ra/wcn8e9/5Ug1MJrx6C8Eql6hTX3R6k6vNydrBb119/feFvf/vbP2dnZysHjR4Ppmk2P//88zfNnDnzFcdsP+HktYyqI74jI9v9Vl4i+vASaf9v1u9n0jUlCa9ujPBKpbvy51V5ZYi6YhARsc4555zQmjVrFvXr1++q433w0Wj00wcffPCnN9xwg/uPtXa0H8qr+krX95Xuthz70X21URdWuvBybzNdGDuXdz9HN0N4pfIbXp5XHEVRIWzZsmX6mWeeeVtGRkbxcThuY9++fX+5/PLL7ysrK3N/s6tX31C6PiJRvKfrqE/Xae88Flu6IRJewaX7fH6CS/Ua3QhXG/3z28RSCYiITJgw4fnvfOc7/1BdXX2XaZoNmmU77MiRI+sfeuihecOGDVtaVlb2meZYdc07Q/Sd7aqOeD9fO+M3uETxnp8ma7r33NtWIbi6OSqvVLpKwFlZuast1RVHz6tjV111Vd4tt9wyr7i4eF4oFBrX0YM0TbO+rq5u9erVq5+85pprtmv2Z+8z3cnemeENXuunay6qqH7uqkcd3b6ounoowiuVLrz8Nh3dAebclrIps3z58lO//vWvn19YWHhOr169TsvMzBzu/Cs5lmU1x+Px6kgksruhoeH9LVu2lF9//fWbP/nkE0OzH9W+VMHVmcqpM4HnPB4v7j4w3TwV1X4Irh6M8EqVrhPZb7+X6psfRPxXI4HZs2fnbdiwobm6utrUHIuuT0jXBOvMwFLVdlTzOhJc9mvVvz9dWPmtvLyee81DN0N4qXk1HdNdefTTfBTpeFMq3dU41fZ1VZcquHS30aheq7avW8f9Gd2fV/dv0D3fz79VPxUWwdVD8GWE3ixJrZoCog4G53yR9CepvbyqKktXcTiX052gfoMrXfNPXI8deS6iPj7dZ/Ga35HQ0S1LcPUghFfHeTXJbEFRn3xe1US691XL+QkuXXPRq9koiucdeRSfr3WfS7eOnz6vzr6PbobwUtNVRDZV9ZWualFVWu5t6vipvrxC1Su0/I7J8jPPq+LyEx5ePx+/2zgW66Ab4Pu89Lw67lXzvbbR0cv+Xsfhlq4fqqNVV7qmonvfXvN1r/06mj5ZQquHI7z0/FzpSndlUhSPuvX9HId7vq4K8roPURVoXsHl1JmQOpYhcqyrMnRjhJc3VTip3tdVX36Dy2+FoWvKqoJLV3Wlay52pulHBzk+d4SXN92gSVXzURTzvbbn98RWXYVzB4yuj0tVfaneS9fPpUIHOU4owis9vxVSZyopXfNMtw1VJaQKro6Glle/lm6eDqGFzwXhlZ6qqdjZ/isVr/4lr+acn+DyqsTSBReBhS6N8PJH10T0s1w6ulBSLed36ujN16J49HO8wAlDePnnN8C85nt1gDvDw/28M8HlJ7SOZXMR+Fxxb6N/fq40qoZLeH0fu25YhRdVsDlfp/uiQd26qn0AXRaVV8d05mZhP1RNN7/NQWenfEe/2sa5T/exAF0alVfHeVVg9qNXJaaqtlSVl+5GZft5uqDTvSeKR9U+gC6N8OocPwFmP+rCTBTPVdt28+obcz5PV2kRXOjWCK/O82pCev+zed0AAAGGSURBVFVhque69Z10nfv2Y7qgUq2vew10eYTX0fF7S5BXWOkqLq/R+LoqKt2j17aAboXwOnodGe/VkWor3a1EfgLKK7R084BugfA6djoTYqr1vH4nXlWTn+de84BuhfA6tvwOWj1WQy460xwkuNAjMM7r+PB7A/fR6khVRWihR6HyOr78/HyP9neQLpQILfRIhNfn5/P+WRNaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcIP8HsgNP56+vNmIAAAAASUVORK5CYII="/> - <image id="image54" width="303" height="374" xlink:href="data:image/png;base64,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"/> - <image id="image59" width="303" height="374" xlink:href="data:image/png;base64,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"/> - <pattern id="pattern1" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#image6"/> - </pattern> - <pattern id="pattern0" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#surface7"/> - </pattern> - <pattern id="pattern3" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#image11"/> - </pattern> - <pattern id="pattern2" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#surface12"/> - </pattern> - <pattern id="pattern5" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#image16"/> - </pattern> - <pattern id="pattern4" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#surface17"/> - </pattern> - <pattern id="pattern7" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#image21"/> - </pattern> - <pattern id="pattern6" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#surface22"/> - </pattern> - <pattern id="pattern9" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#image26"/> - </pattern> - <pattern id="pattern8" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#surface27"/> - </pattern> - <pattern id="pattern11" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#image31"/> - </pattern> - <pattern id="pattern10" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#surface32"/> - </pattern> - <pattern id="pattern13" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#image36"/> - </pattern> - <pattern id="pattern12" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#surface37"/> - </pattern> - <pattern id="pattern15" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#image41"/> - </pattern> - <pattern id="pattern14" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#surface42"/> - </pattern> - <pattern id="pattern17" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#image46"/> - </pattern> - <pattern id="pattern16" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#surface47"/> - </pattern> - <pattern id="pattern19" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#image46"/> - </pattern> - <pattern id="pattern18" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#surface50"/> - </pattern> - <pattern id="pattern21" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#image54"/> - </pattern> - <pattern id="pattern20" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#surface55"/> - </pattern> - <pattern id="pattern23" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#image59"/> - </pattern> - <pattern id="pattern22" patternUnits="userSpaceOnUse" width="303" height="374"> - <use xlink:href="#surface60"/> - </pattern> - <clipPath id="clip1"> - <rect x="0" y="0" width="303" height="374"/> - </clipPath> - <clipPath id="clip2"> - <rect x="0" y="0" width="303" height="374"/> - </clipPath> - <clipPath id="clip3"> - <rect x="0" y="0" width="303" height="374"/> - </clipPath> - <clipPath id="clip4"> - <rect x="0" y="0" width="303" height="374"/> - </clipPath> - <clipPath id="clip5"> - <rect x="0" y="0" width="303" height="374"/> - </clipPath> - <clipPath id="clip6"> - <rect x="0" y="0" width="303" height="374"/> - </clipPath> - <clipPath id="clip7"> - <rect x="0" y="0" width="303" height="374"/> - </clipPath> - <clipPath id="clip8"> - <rect x="0" y="0" width="303" height="374"/> - </clipPath> - <clipPath id="clip9"> - <rect x="0" y="0" width="303" height="374"/> - </clipPath> - <clipPath id="clip10"> - <rect x="0" y="0" width="303" height="374"/> - </clipPath> - <clipPath id="clip11"> - <rect x="0" y="0" width="303" height="374"/> - </clipPath> - <clipPath id="clip12"> - <rect x="0" y="0" width="303" height="374"/> - </clipPath> - <g id="surface7" clip-path="url(#clip1)"> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern1);stroke:none;"/> - </g> - <g id="surface12" clip-path="url(#clip2)"> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern3);stroke:none;"/> - </g> - <g id="surface17" clip-path="url(#clip3)"> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern5);stroke:none;"/> - </g> - <g id="surface22" clip-path="url(#clip4)"> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern7);stroke:none;"/> - </g> - <g id="surface27" clip-path="url(#clip5)"> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern9);stroke:none;"/> - </g> - <g id="surface32" clip-path="url(#clip6)"> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern11);stroke:none;"/> - </g> - <g id="surface37" clip-path="url(#clip7)"> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern13);stroke:none;"/> - </g> - <g id="surface42" clip-path="url(#clip8)"> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern15);stroke:none;"/> - </g> - <g id="surface47" clip-path="url(#clip9)"> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern17);stroke:none;"/> - </g> - <g id="surface50" clip-path="url(#clip10)"> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern19);stroke:none;"/> - </g> - <g id="surface55" clip-path="url(#clip11)"> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern21);stroke:none;"/> - </g> - <g id="surface60" clip-path="url(#clip12)"> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern23);stroke:none;"/> - </g> - </defs> - <g id="surface1"> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(21.960784%,24.313726%,34.117648%);fill-opacity:1;" d="M 164.003906 343.382812 C 158.492188 355.394531 141.417969 355.394531 135.902344 343.382812 L 40.851562 136.261719 C 36.152344 126.023438 43.636719 114.363281 54.902344 114.363281 L 245.007812 114.363281 C 256.273438 114.363281 263.757812 126.023438 259.058594 136.261719 Z M 164.003906 343.382812 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(21.960784%,24.313726%,34.117648%);fill-opacity:1;" d="M 303 151.453125 C 303 235.101562 235.171875 302.910156 151.5 302.910156 C 67.828125 302.910156 0 235.101562 0 151.453125 C 0 67.808594 67.828125 0 151.5 0 C 235.171875 0 303 67.808594 303 151.453125 Z M 303 151.453125 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 60.289062 75.726562 L 93.761719 97.363281 L 26.820312 97.363281 Z M 60.289062 75.726562 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 244.253906 75.726562 L 276.179688 97.363281 L 209.238281 97.363281 Z M 244.253906 75.726562 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 58.746094 61.816406 L 244.253906 61.816406 L 244.253906 105.089844 L 58.746094 105.089844 Z M 58.746094 61.816406 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(21.960784%,24.313726%,34.117648%);fill-opacity:1;" d="M 18.550781 95.816406 L 281.355469 95.816406 L 281.355469 98.910156 L 18.550781 98.910156 Z M 18.550781 95.816406 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 195.636719 174.199219 C 193.578125 175.339844 191.050781 173.847656 191.050781 171.492188 L 191.046875 160.03125 C 191.042969 157.636719 193.644531 156.152344 195.703125 157.367188 L 205.726562 163.289062 C 207.789062 164.503906 207.746094 167.5 205.65625 168.65625 Z M 195.636719 174.199219 "/> - <path style="fill:none;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(21.960784%,24.313726%,34.117648%);stroke-opacity:1;stroke-miterlimit:4;" d="M 66.039574 53.205424 C 62.044679 51.839271 64.460315 45.54814 68.745793 48.740466 " transform="matrix(3.091837,0,0,3.090909,0,0)"/> - <path style="fill:none;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(21.960784%,24.313726%,34.117648%);stroke-opacity:1;stroke-miterlimit:4;" d="M 63.011186 49.419119 L 66.87595 51.35524 M 63.493808 48.451058 L 67.553136 50.484491 " transform="matrix(3.091837,0,0,3.090909,0,0)"/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(21.960784%,24.313726%,34.117648%);fill-opacity:1;" d="M 197.878906 168.453125 C 197.878906 169.308594 197.183594 170 196.332031 170 C 195.476562 170 194.785156 169.308594 194.785156 168.453125 C 194.785156 167.601562 195.476562 166.910156 196.332031 166.910156 C 197.183594 166.910156 197.878906 167.601562 197.878906 168.453125 Z M 197.878906 168.453125 "/> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern0);stroke:none;"/> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern2);stroke:none;"/> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern4);stroke:none;"/> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern6);stroke:none;"/> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern8);stroke:none;"/> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern10);stroke:none;"/> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern12);stroke:none;"/> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern14);stroke:none;"/> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern16);stroke:none;"/> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern18);stroke:none;"/> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern20);stroke:none;"/> - <rect x="0" y="0" width="303" height="374" style="fill:url(#pattern22);stroke:none;"/> - </g> -</svg> \ No newline at end of file +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + width="303" + height="352.3916" + viewBox="0 0 303 352.3916" + version="1.1" + id="svg207" + sodipodi:docname="shop.svg" + inkscape:version="1.1.1 (1:1.1+202109281949+c3084ef5ed)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <path + id="path166" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 58.746094,61.816406 c 0,0 0.02494,11.462227 -1.312538,15.058089 -3.278163,4.841221 -30.056603,20.129411 -30.056603,20.129411 l -0.556641,0.359375 h 0.720704 c 2.145767,5.099179 7.999631,8.526209 14.585937,8.539059 5.268114,-4.9e-4 10.173651,-2.19675 13.017578,-5.82812 2.844301,3.63185 7.750724,5.82818 13.019531,5.82812 4.123059,-0.0122 8.069509,-1.37197 10.962891,-3.77734 2.893382,2.40537 6.839832,3.76515 10.962891,3.77734 5.268575,-9.1e-4 10.174216,-2.19796 13.017576,-5.83007 2.84337,3.63211 7.749,5.82916 13.01758,5.83007 4.36567,-0.006 8.52486,-1.52281 11.45117,-4.17578 2.92585,2.65256 7.08422,4.16921 11.44922,4.17578 5.26881,6e-5 10.17523,-2.19627 13.01953,-5.82812 2.84393,3.63137 7.74947,5.82763 13.01758,5.82812 4.1856,-0.0115 8.18678,-1.41173 11.08984,-3.88086 2.90353,2.46953 6.90552,3.86977 11.0918,3.88086 5.26811,-4.9e-4 10.17365,-2.19675 13.01758,-5.82812 2.8443,3.63185 7.75072,5.82818 13.01953,5.82812 3.99606,-0.0113 7.8317,-1.28866 10.70313,-3.56445 2.87143,2.27578 6.70706,3.55316 10.70312,3.56445 5.26858,-9.1e-4 10.17421,-2.19796 13.01758,-5.83007 2.84337,3.63211 7.749,5.82916 13.01758,5.83007 6.58702,-0.0122 12.44189,-3.43933 14.58789,-8.539059 h 0.86914 l -0.66407,-0.449219 c 0,0 -28.27537,-15.486723 -30.05983,-21.40227 -0.89597,-5.071593 -1.20188,-13.695386 -1.20188,-13.695386 z" /> + <rect + style="fill:#ffffff;stroke:#aaaaaa;stroke-width:0.0907904;stroke-linecap:round;stroke-linejoin:bevel;stop-color:#000000" + id="rect2600" + width="15.500847" + height="97.555931" + x="59.718002" + y="113.8181" /> + <rect + style="fill:#ffffff;stroke:#aaaaaa;stroke-width:0.0944882;stroke-linecap:round;stroke-linejoin:bevel;stop-color:#000000" + id="rect2602" + width="206.7755" + height="14.332707" + x="50.773739" + y="218.57433" /> + <rect + style="fill:#ffffff;stroke:#aaaaaa;stroke-width:0.0907904;stroke-linecap:round;stroke-linejoin:bevel;stop-color:#000000" + id="rect2684" + width="15.500847" + height="97.555931" + x="236.16039" + y="112.1123" /> + <path + path-name="a" + unicode="á" + horiz-adv-x="661" + d="m 198.59598,155.57564 c 15.01466,0 27.1883,12.16965 27.18578,27.18428 0,15.01465 -12.17012,27.18477 -27.18477,27.18477 -15.01193,0 -27.18477,-12.17012 -27.18477,-27.18477 0,-11.09298 6.64773,-20.62776 16.17489,-24.85399 l -2.5122,-7.92642 -35.20922,35.01809 h -10.83127 c -1.13762,13.96504 -12.82718,24.94716 -27.08661,24.94716 -15.011931,0 -27.182001,-12.17011 -27.182001,-27.18477 0,-15.01466 12.17012,-27.18478 27.182001,-27.18478 2.94507,0 5.77682,0.47566 8.43478,1.34164 l 8.24844,-17.0861 -3.47872,-8.63879 h -5.81713 c -1.6312,0 -1.65137,-1.32149 -1.65137,-2.94998 0,-1.62849 0.0202,-2.94997 1.65137,-2.94997 h 18.94614 c 1.6285,0 2.95244,1.32148 2.95244,2.94997 0,1.63121 -1.32394,2.95023 -2.95244,2.95023 h -6.77112 l 2.29047,5.67112 h 47.12027 l -2.30055,-7.26939 c -0.18632,-0.39526 -1.38441,-2.73859 -3.89389,-2.73859 h -7.08823 c -1.6285,0 -1.6462,-1.32147 -1.6462,-2.94997 0,-1.62849 0.0177,-2.95244 1.6462,-2.95244 h 7.08823 c 5.33385,0 8.40971,4.06769 9.3863,6.47148 0.0278,0.0779 2.21255,6.97492 5.02659,15.85532 0.0302,0.0678 0.0428,0.13569 0.0654,0.20624 1.25609,3.96198 2.63289,8.31161 3.99714,12.62587 v 0.002 c 1.74428,-0.34979 3.54656,-0.53858 5.39409,-0.53858 z m -75.40149,9.08626 -6.96702,14.43061 h 16.71098 c -1.05725,-6.08629 -4.69204,-11.28422 -9.74396,-14.43061 z m -11.24366,39.40543 c 11.01234,0 20.07124,-8.35438 21.18894,-19.06979 h -21.61443 c -1.01693,0 -1.95839,-0.52603 -2.49967,-1.3844 -0.53857,-0.85838 -0.59904,-1.93823 -0.15609,-2.85191 l 8.92811,-18.49068 c -1.86005,-0.52849 -3.82089,-0.81806 -5.84712,-0.81806 -11.76994,0 -21.307171,9.53994 -21.307171,21.30743 0,11.76747 9.539951,21.30741 21.307431,21.30741 z m 26.93028,-24.97459 5.58556,0.002 -12.85249,-31.87143 -5.85474,12.12489 c 7.00513,4.14069 11.98649,11.32945 13.12165,19.74407 z m 11.02493,-2.28806 33.16266,-33.16038 -0.27679,-0.88099 H 136.1801 Z m 48.69321,27.26265 c 11.76749,0 21.30693,-9.53994 21.30693,-21.30741 0,-11.76749 -9.53995,-21.30743 -21.30743,-21.30743 -1.23078,0 -2.43132,0.11086 -3.60432,0.30972 v 0.002 c 3.52886,11.14311 5.97544,19.53512 5.97544,19.53512 0.49089,1.55303 -0.36995,3.21178 -1.92298,3.70511 -1.5555,0.48843 -3.21179,-0.3724 -3.70511,-1.92298 l -5.96807,-19.52775 -0.002,-0.005 c -7.14597,3.43842 -12.07942,10.7481 -12.07942,19.21065 0,11.76748 9.53994,21.30741 21.30742,21.30741 z" + id="path3566" + sodipodi:nodetypes="ccssccccssscccssssssccccssssscccccccccccscscccssssccccccccccccsscccccccscc" + style="fill:#ffffff;fill-opacity:1;stroke-width:0.251711" /> +</svg> diff --git a/assets/layers/bike_shop/tools.svg b/assets/layers/bike_shop/tools.svg index 591d9e26c3..87b56711c1 100644 --- a/assets/layers/bike_shop/tools.svg +++ b/assets/layers/bike_shop/tools.svg @@ -1,22 +1,69 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="375px" height="375px" viewBox="0 0 375 375" version="1.1"> - <defs> - <image id="image6" width="375" height="375" xlink:href="data:image/png;base64,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UF+zbh6HaD2m9QISdznhFHg7dSfoRt+hitZ1+tVnwnGtYdcRjv3thWMa0ZC4q3Fb4Hk2jIjb/Q5a97tkt0SchF1MtF53XjyWEUu0nmRu4/RrBrdtMrsIt0VeNiYJO55ouAbpOEYg0XBihQs3PlcLt6CL0BFl3aichN0+9el6pOMX4dSnkykScOt75FAIugF/XHDBORanQo9pc9LX60TKNUrHrJ4RKSdOfSKUAu+0DYNdgXaagtHtS6gJxx+5EfUUEnd76O43J2Jdl5++ufmbIiQaBBFGSNzt46bA64zn9h8whaqPk/4EQTiExN05bou8nTGdQj8SRRBRBom7c0L9q4BO1iGCfiSKIKIcEnf3CIfI64xRlz8SRcJOEHUMibu7ON2fdX086FcDCSJKqGsxiUbc3Kf15UeiSNQJIsIgcQ8dodq3bv7sgFNI1AkiQiFxDz3Rto9J0AmiHhBtwhPJ1Pd9TaJOEPWI+i449ZX6st9J0AminlJfRCaaiaRjQGJOEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEISS/wfkLE8aRISPkAAAAABJRU5ErkJggg=="/> - <pattern id="pattern1" patternUnits="userSpaceOnUse" width="375" height="375"> - <use xlink:href="#image6"/> - </pattern> - <pattern id="pattern0" patternUnits="userSpaceOnUse" width="375" height="375"> - <use xlink:href="#surface7"/> - </pattern> - <clipPath id="clip1"> - <rect x="0" y="0" width="375" height="375"/> - </clipPath> - <g id="surface7" clip-path="url(#clip1)"> - <rect x="0" y="0" width="375" height="375" style="fill:url(#pattern1);stroke:none;"/> - </g> - </defs> - <g id="surface1"> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(19.607843%,67.843139%,94.901961%);fill-opacity:1;" d="M 375 187.5 C 375 291.054688 291.054688 375 187.5 375 C 83.945312 375 0 291.054688 0 187.5 C 0 83.945312 83.945312 0 187.5 0 C 291.054688 0 375 83.945312 375 187.5 Z M 375 187.5 "/> - <rect x="0" y="0" width="375" height="375" style="fill:url(#pattern0);stroke:none;"/> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + width="301.7713" + height="301.7713" + viewBox="0 0 301.7713 301.7713" + version="1.1" + id="svg21" + sodipodi:docname="tools.svg" + inkscape:version="1.1.1 (1:1.1+202109281949+c3084ef5ed)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs10" /> + <sodipodi:namedview + id="namedview23" + pagecolor="#505050" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:pageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="0" + showgrid="false" + inkscape:zoom="1.1444297" + inkscape:cx="100.48673" + inkscape:cy="158.15738" + inkscape:current-layer="svg21" /> + <circle + style="fill:#00a5d9;fill-opacity:1;stroke:#63e9f1;stroke-width:0.0944882;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1;stop-color:#000000" + id="path848" + cx="150.88565" + cy="150.88565" + r="150.83841" /> + <g + id="g6432" + transform="translate(-0.9735603,5.9971598)"> + <path + style="fill:#feffff;fill-opacity:1;stroke:none;stroke-width:1.97728px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 77.679292,74.927954 99.05071,95.716414 112.52762,81.785613 92.612547,60.295283 c 0,0 49.817063,-14.524823 44.465973,34.961514 -0.0367,0.339557 70.23356,71.214033 70.23356,71.214033 47.81484,-8.02817 35.81789,45.47112 35.81789,45.47112 l -22.68221,-21.06445 -13.18046,14.60845 21.09318,19.98897 c 0,0 -49.53242,14.80277 -46.87766,-37.76153 0.0275,-0.54412 -69.11138,-67.6753 -69.11138,-67.6753 -48.526833,3.7379 -34.692148,-45.110136 -34.692148,-45.110136 z" + id="path886" + sodipodi:nodetypes="ccccscccccscc" /> + <path + style="fill:#feffff;fill-opacity:1;stroke:none;stroke-width:1.97728px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 117.92125,166.54299 c -14.52781,24.8942 -79.689475,29.97303 -47.349405,65.89854 32.340085,35.92552 39.940125,-35.46137 65.307085,-47.63356 z" + id="path2590" + sodipodi:nodetypes="cscc" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:9.88638;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 130.85139,171.47469 143.2854,159.40801" + id="path2815" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:9.88638;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 130.85139,171.47469 143.2854,159.40801" + id="path4002" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:9.88638;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 177.32611,127.14277 213.01199,91.529312" + id="path4141" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:19.7728;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 217.06203,85.219711 229.49604,73.153059" + id="path4436" + sodipodi:nodetypes="cc" /> </g> -</svg> \ No newline at end of file +</svg> diff --git a/assets/layers/bike_themed_object/bike_themed_object.json b/assets/layers/bike_themed_object/bike_themed_object.json index d8be64b4c4..a40a041892 100644 --- a/assets/layers/bike_themed_object/bike_themed_object.json +++ b/assets/layers/bike_themed_object/bike_themed_object.json @@ -80,6 +80,7 @@ } ], "description": { - "en": "A layer with bike-themed objects but who don't match any other layer" + "en": "A layer with bike-themed objects but who don't match any other layer", + "nl": "Een laag met fietsgerelateerde diensten, die in geen enkele andere laag konden ondergebracht worden" } } \ No newline at end of file diff --git a/assets/layers/binocular/telescope.svg b/assets/layers/binocular/telescope.svg index 3cf4a66bca..1bbf1b5456 100644 --- a/assets/layers/binocular/telescope.svg +++ b/assets/layers/binocular/telescope.svg @@ -1,8 +1,45 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<svg xmlns="http://www.w3.org/2000/svg" width="374px" height="342px" viewBox="0 0 374 342" version="1.1"> - <g id="surface1"> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(50.980395%,50.980395%,50.980395%);fill-opacity:1;" d="M 293.472656 24.730469 C 292.90625 23.320312 291.773438 22.21875 290.351562 21.695312 C 288.929688 21.183594 287.347656 21.277344 286.015625 21.984375 L 158.789062 89.125 C 156.394531 90.382812 155.328125 93.238281 156.300781 95.761719 L 158.917969 102.609375 L 85.476562 142.890625 C 83.070312 144.207031 82.054688 147.113281 83.101562 149.625 L 85.539062 155.492188 L 7.542969 192.769531 C 4.980469 194 3.824219 197.011719 4.914062 199.640625 L 20.921875 238.222656 C 21.777344 240.277344 23.753906 241.527344 25.859375 241.527344 C 26.457031 241.527344 27.054688 241.429688 27.644531 241.21875 L 109.121094 212.351562 L 111.558594 218.21875 C 112.402344 220.257812 114.378906 221.519531 116.496094 221.519531 C 116.988281 221.519531 117.480469 221.457031 117.980469 221.304688 L 195.730469 198.894531 L 198.058594 204.976562 C 198.851562 207.082031 200.871094 208.40625 203.027344 208.40625 C 203.550781 208.40625 204.074219 208.332031 204.597656 208.171875 L 343.511719 165.421875 C 344.945312 164.984375 346.121094 163.96875 346.761719 162.621094 C 347.402344 161.273438 347.457031 159.714844 346.902344 158.335938 Z M 28.851562 229.449219 L 16.734375 200.230469 L 89.640625 165.378906 L 105.019531 202.464844 Z M 119.582031 209.722656 L 117.039062 203.585938 L 97.347656 156.082031 L 94.804688 149.957031 L 162.507812 112.816406 L 187.875 178.375 L 191.882812 188.859375 Z M 206.234375 196.488281 L 204.066406 190.816406 C 204.03125 190.695312 204.054688 190.558594 204 190.441406 L 197.398438 173.371094 L 167.96875 96.359375 L 285.757812 34.210938 L 334.824219 156.902344 Z M 206.234375 196.488281 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(50.980395%,50.980395%,50.980395%);fill-opacity:1;" d="M 309.5 3.355469 C 308.402344 0.609375 305.28125 -0.714844 302.554688 0.375 C 299.820312 1.476562 298.484375 4.585938 299.574219 7.320312 L 363.6875 167.632812 C 364.53125 169.726562 366.542969 171 368.65625 171 C 369.320312 171 369.992188 170.882812 370.644531 170.617188 C 373.378906 169.515625 374.714844 166.40625 373.625 163.667969 Z M 309.5 3.355469 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(50.980395%,50.980395%,50.980395%);fill-opacity:1;" d="M 192.34375 224.4375 L 160.285156 224.4375 C 148.105469 224.4375 138.914062 233.628906 138.914062 245.8125 L 138.914062 259.867188 L 76.09375 333.171875 C 74.167969 335.40625 74.425781 338.78125 76.671875 340.707031 C 77.675781 341.574219 78.914062 342 80.144531 342 C 81.648438 342 83.144531 341.371094 84.191406 340.128906 L 146.714844 267.1875 L 170.972656 267.1875 L 170.972656 336.65625 C 170.972656 339.605469 173.363281 342 176.3125 342 C 179.261719 342 181.65625 339.605469 181.65625 336.65625 L 181.65625 267.1875 L 205.914062 267.1875 L 268.425781 340.128906 C 269.484375 341.371094 270.980469 342 272.484375 342 C 273.714844 342 274.953125 341.574219 275.957031 340.707031 C 278.203125 338.78125 278.460938 335.417969 276.535156 333.171875 L 213.714844 259.867188 L 213.714844 246.613281 C 213.714844 234.183594 204.332031 224.4375 192.34375 224.4375 Z M 203.027344 256.5 L 149.601562 256.5 L 149.601562 245.8125 C 149.601562 239.515625 153.992188 235.125 160.285156 235.125 L 192.34375 235.125 C 198.433594 235.125 203.027344 240.0625 203.027344 246.613281 Z M 203.027344 256.5 "/> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + width="374" + height="374" + viewBox="0 0 374 374" + version="1.1" + id="svg9" + sodipodi:docname="telescope.svg" + inkscape:version="1.1.1 (1:1.1+202109281949+c3084ef5ed)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs13" /> + <sodipodi:namedview + id="namedview11" + pagecolor="#505050" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:pageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="0" + showgrid="false" + inkscape:zoom="0.55505638" + inkscape:cx="-104.49389" + inkscape:cy="272.04443" + inkscape:current-layer="svg9" /> + <g + id="surface1" + transform="translate(0,15.499046)"> + <path + style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 293.47266,24.730469 c -0.56641,-1.410157 -1.69922,-2.511719 -3.1211,-3.035157 -1.42187,-0.511718 -3.0039,-0.417968 -4.33594,0.289063 L 158.78906,89.125 c -2.39453,1.257812 -3.46094,4.113281 -2.48828,6.636719 l 2.61719,6.847661 -73.441408,40.28124 c -2.40625,1.31641 -3.421874,4.22266 -2.375,6.73438 l 2.4375,5.86719 -77.996093,37.27734 c -2.5625,1.23047 -3.71875,4.24219 -2.628907,6.87109 l 16.007813,38.58204 c 0.855469,2.05468 2.832031,3.30468 4.9375,3.30468 0.597656,0 1.195313,-0.0977 1.785156,-0.30859 l 81.476559,-28.86719 2.4375,5.86719 c 0.84375,2.03906 2.82032,3.30078 4.9375,3.30078 0.49219,0 0.98438,-0.0625 1.48438,-0.21484 l 77.75,-22.41016 2.32812,6.08203 c 0.79297,2.10547 2.8125,3.42969 4.96875,3.42969 0.52344,0 1.04688,-0.0742 1.57032,-0.23438 l 138.91406,-42.75 c 1.43359,-0.4375 2.60937,-1.45312 3.25,-2.80078 0.64062,-1.34765 0.69531,-2.90625 0.14062,-4.28515 z M 28.851562,229.44922 16.734375,200.23047 l 72.90625,-34.85156 15.378905,37.08593 z m 90.730468,-19.72656 -2.54297,-6.13672 -19.691404,-47.50391 -2.542968,-6.125 67.703122,-37.14062 25.36719,65.55859 4.00781,10.48437 z m 86.65234,-13.23438 -2.16796,-5.67187 c -0.0352,-0.1211 -0.0117,-0.25782 -0.0664,-0.375 L 197.39844,173.37109 167.96875,96.359375 285.75781,34.210938 334.82422,156.90234 Z m 0,0" + id="path2" /> + <path + style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 309.5,3.355469 c -1.09766,-2.746094 -4.21875,-4.070313 -6.94531,-2.980469 -2.73438,1.101562 -4.07032,4.210938 -2.98047,6.945312 L 363.6875,167.63281 c 0.84375,2.09375 2.85547,3.36719 4.96875,3.36719 0.66406,0 1.33594,-0.11719 1.98828,-0.38281 2.73438,-1.10157 4.07031,-4.21094 2.98047,-6.94922 z m 0,0" + id="path4" /> + <path + style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 192.34375,224.4375 h -32.05859 c -12.17969,0 -21.3711,9.19141 -21.3711,21.375 v 14.05469 l -62.82031,73.30468 c -1.925781,2.23438 -1.667969,5.60938 0.578125,7.53516 1.003906,0.86719 2.242187,1.29297 3.472656,1.29297 1.503907,0 3,-0.62891 4.046875,-1.87109 L 146.71484,267.1875 h 24.25782 v 69.46875 c 0,2.94922 2.39062,5.34375 5.33984,5.34375 2.94922,0 5.34375,-2.39453 5.34375,-5.34375 V 267.1875 h 24.25781 l 62.51172,72.94141 c 1.05859,1.24218 2.55469,1.87109 4.05859,1.87109 1.23047,0 2.46875,-0.42578 3.47266,-1.29297 2.24609,-1.92578 2.50391,-5.28906 0.57813,-7.53516 l -62.82032,-73.30468 v -13.25391 c 0,-12.42969 -9.38281,-22.17578 -21.37109,-22.17578 z M 203.02734,256.5 h -53.42578 v -10.6875 c 0,-6.29688 4.39063,-10.6875 10.6836,-10.6875 h 32.05859 c 6.08984,0 10.68359,4.9375 10.68359,11.48828 z m 0,0" + id="path6" /> </g> -</svg> \ No newline at end of file +</svg> diff --git a/assets/layers/birdhide/birdhide.json b/assets/layers/birdhide/birdhide.json index e058124a64..e6d1990245 100644 --- a/assets/layers/birdhide/birdhide.json +++ b/assets/layers/birdhide/birdhide.json @@ -1,6 +1,7 @@ { "id": "birdhide", "name": { + "en": "Bird watching places", "nl": "Vogelkijkhutten" }, "minzoom": 14, @@ -13,17 +14,18 @@ }, "title": { "render": { + "en": "Bird watching place", "nl": "Vogelkijkplaats" }, "mappings": [ { "if": { "and": [ - "name~((V|v)ogel.*).*" + "name~(((V|v)ogel)|(B|b)ird).*" ] }, "then": { - "nl": "{name}" + "*": "{name}" } }, { @@ -39,6 +41,7 @@ ] }, "then": { + "en": "Bird hide {name}", "nl": "Vogelkijkhut {name}" } }, @@ -49,12 +52,14 @@ ] }, "then": { + "en": "Bird blind {name}", "nl": "Vogelkijkwand {name}" } } ] }, "description": { + "en": "A birdhide", "nl": "Een vogelkijkhut" }, "tagRenderings": [ @@ -62,6 +67,7 @@ { "id": "bird-hide-shelter-or-wall", "question": { + "en": "Is this a bird blind or a bird watching shelter?", "nl": "Is dit een kijkwand of kijkhut?" }, "mappings": [ @@ -74,6 +80,7 @@ ] }, "then": { + "en": "Bird blind", "nl": "Vogelkijkwand" } }, @@ -86,6 +93,7 @@ ] }, "then": { + "en": "Bird hide", "nl": "Vogelkijkhut" } }, @@ -97,6 +105,7 @@ ] }, "then": { + "en": "Bird tower hide", "nl": "Vogelkijktoren" } }, @@ -109,6 +118,7 @@ ] }, "then": { + "en": "Bird hide shelter", "nl": "Vogelkijkhut" }, "hideInAnswer": true @@ -118,6 +128,7 @@ { "id": "bird-hide-wheelchair", "question": { + "en": "Is this bird hide accessible to wheelchair users?", "nl": "Is deze vogelkijkplaats rolstoeltoegankelijk?" }, "mappings": [ @@ -128,6 +139,7 @@ ] }, "then": { + "en": "There are special provisions for wheelchair users", "nl": "Er zijn speciale voorzieningen voor rolstoelen" } }, @@ -138,6 +150,7 @@ ] }, "then": { + "en": "A wheelchair can easily use this birdhide", "nl": "Een rolstoel raakt er vlot" } }, @@ -148,6 +161,7 @@ ] }, "then": { + "en": "This birdhide is reachable by wheelchair, but it is not easy", "nl": "Je kan er raken met een rolstoel, maar het is niet makkelijk" } }, @@ -158,6 +172,7 @@ ] }, "then": { + "en": "Not accessible to wheelchair users", "nl": "Niet rolstoeltoegankelijk" } } @@ -165,24 +180,28 @@ }, { "render": { + "en": "Operated by {operator}", "nl": "Beheer door {operator}" }, "freeform": { "key": "operator" }, "question": { + "en": "Who operates this birdhide?", "nl": "Wie beheert deze vogelkijkplaats?" }, "mappings": [ { "if": "operator=Natuurpunt", "then": { + "en": "Operated by Natuurpunt", "nl": "Beheer door Natuurpunt" } }, { "if": "operator=Agentschap Natuur en Bos", "then": { + "en": "Operated by the Agency for Nature and Forests", "nl": "Beheer door het Agentschap Natuur en Bos " } } @@ -213,9 +232,11 @@ "amenity=shelter" ], "title": { + "en": "Birdhide", "nl": "vogelkijkhut" }, "description": { + "en": "A covered shelter where one can watch birds comfortably", "nl": "Een overdekte hut waarbinnen er warm en droog naar vogels gekeken kan worden" } }, @@ -226,9 +247,11 @@ "shelter=no" ], "title": { + "en": "Bird blind", "nl": "vogelkijkwand" }, "description": { + "en": "A screen or wall with openings to watch birds", "nl": "Een vogelkijkwand waarachter men kan staan om vogels te kijken" } } @@ -259,6 +282,7 @@ "options": [ { "question": { + "en": "Only covered birdhides", "nl": "Enkel overdekte kijkhutten" }, "osmTags": { @@ -291,9 +315,7 @@ "mapRendering": [ { "icon": { - "render": { - "nl": "./assets/layers/birdhide/birdhide.svg" - }, + "render": "./assets/layers/birdhide/birdhide.svg", "mappings": [ { "if": { diff --git a/assets/layers/cafe_pub/cafe_pub.json b/assets/layers/cafe_pub/cafe_pub.json index 4b3f30f205..8caa7ca67e 100644 --- a/assets/layers/cafe_pub/cafe_pub.json +++ b/assets/layers/cafe_pub/cafe_pub.json @@ -31,6 +31,7 @@ "hu": "kocsma" }, "description": { + "en": "A pub, mostly for drinking beers in a warm, relaxed interior", "nl": "Dit is <b>een bruin café of een kroeg</b> waar voornamelijk bier wordt gedronken. De inrichting is typisch gezellig met veel houtwerk " }, "preciseInput": { @@ -49,6 +50,7 @@ "hu": "bár" }, "description": { + "en": "A more modern and commercial <b>bar</b>, possibly with a music and light installation", "nl": "Dit is een <b>bar</b> waar men ter plaatse alcoholische drank nuttigt. De inrichting is typisch modern en commercieel, soms met lichtinstallatie en feestmuziek" }, "preciseInput": { @@ -67,6 +69,7 @@ "hu": "kávézó" }, "description": { + "en": "A <b>cafe</b> to drink tea, coffee or an alcoholical bevarage in a quiet environment", "nl": "Dit is een <b>cafe</b> - een plaats waar men rustig kan zitten om een thee, koffie of alcoholische drank te nuttigen." }, "preciseInput": { @@ -76,6 +79,7 @@ ], "title": { "render": { + "en": "Pub", "nl": "Café" }, "mappings": [ @@ -127,30 +131,35 @@ { "if": "amenity=pub", "then": { + "en": "A pub, mostly for drinking beers in a warm, relaxed interior", "nl": "Dit is <b>een bruin café of een kroeg</b> waar voornamelijk bier wordt gedronken. De inrichting is typisch gezellig met veel houtwerk " } }, { "if": "amenity=bar", "then": { + "en": "A more modern and commercial <b>bar</b>, possibly with a music and light installation", "nl": "Dit is een <b>bar</b> waar men ter plaatse alcoholische drank nuttigt. De inrichting is typisch modern en commercieel, soms met lichtinstallatie en feestmuziek" } }, { "if": "amenity=cafe", "then": { + "en": "A <b>cafe</b> to drink tea, coffee or an alcoholical bevarage in a quiet environment", "nl": "Dit is een <b>cafe</b> - een plaats waar men rustig kan zitten om een thee, koffie of alcoholische drank te nuttigen." } }, { "if": "amenity=restaurant", "then": { + "en": "A <b>restuarant</b> where one can get a proper meal", "nl": "Dit is een <b>restaurant</b> waar men een maaltijd geserveerd krijgt" } }, { "if": "amenity=biergarten", "then": { + "en": "An open space where beer is served, typically seen in Germany", "nl": "Een open ruimte waar bier geserveerd wordt. Typisch in Duitsland" }, "hideInAnswer": "_country!=de" @@ -226,6 +235,7 @@ ], "description": { "en": "A layer showing cafés and pubs where one can gather around a drink. The layer asks for some relevant questions", - "hu": "Egy olyan réteg, amely kávézókat és kocsmákat jelenít meg, ahol össze lehet gyűlni egy ital köré. A réteg néhány lényeges kérdést tesz fel" + "hu": "Egy olyan réteg, amely kávézókat és kocsmákat jelenít meg, ahol össze lehet gyűlni egy ital köré. A réteg néhány lényeges kérdést tesz fel", + "nl": "Een laag die kroegen en koffiehuizen toont waar je iets kunt drinken. De laag zal je enkele vragen stellen" } } \ No newline at end of file diff --git a/assets/layers/charging_station/charging_station.json b/assets/layers/charging_station/charging_station.json index 6a40ffd8f8..7058dac842 100644 --- a/assets/layers/charging_station/charging_station.json +++ b/assets/layers/charging_station/charging_station.json @@ -8,19 +8,59 @@ "minzoom": 10, "source": { "osmTags": { - "or": [ - "amenity=charging_station", - "disused:amenity=charging_station", - "planned:amenity=charging_station", - "construction:amenity=charging_station" + "and": [ + { + "or": [ + "amenity=charging_station", + "disused:amenity=charging_station", + "planned:amenity=charging_station", + "construction:amenity=charging_station" + ] + } ] } }, "title": { "render": { "en": "Charging station", - "nl": "Oplaadpunten" - } + "nl": "Oplaadpunt" + }, + "mappings": [ + { + "if": { + "and": [ + "bicycle=yes", + { + "or": [ + "motorcar=", + "motorcar=no" + ] + } + ] + }, + "then": { + "en": "Charging station for ebikes", + "nl": "Oplaadpunt voor elektrische fietsen" + } + }, + { + "if": { + "and": [ + "motorcar=yes", + { + "or": [ + "bicycle=", + "bicycle=no" + ] + } + ] + }, + "then": { + "en": "Charging station for cars", + "nl": "Oplaadpunt voor elektrische auto's" + } + } + ] }, "description": { "en": "A charging station", @@ -35,7 +75,8 @@ "question": { "en": "Which vehicles are allowed to charge here?", "nl": "Welke voertuigen kunnen hier opgeladen worden?", - "de": "Welche Fahrzeuge dürfen hier laden?" + "de": "Welche Fahrzeuge dürfen hier laden?", + "es": "¿A qué vehículos se permite la carga aquí?" }, "multiAnswer": true, "mappings": [ @@ -44,7 +85,7 @@ "ifnot": "bicycle=no", "then": { "en": "<b>Bicycles</b> can be charged here", - "nl": "<b>Fietsen</b> kunnen hier opgeladen worden", + "nl": "<b>Elektrische fietsen</b> kunnen hier opgeladen worden", "de": "<b>Fahrräder</b> können hier geladen werden" } }, @@ -62,7 +103,7 @@ "ifnot": "scooter=no", "then": { "en": "<b>Scooters</b> can be charged here", - "nl": "<b>Electrische scooters</b> (snorfiets of bromfiets) kunnen hier opgeladen worden", + "nl": "<b>Elektrische scooters</b> (snorfiets of bromfiets) kunnen hier opgeladen worden", "de": "<b>Roller</b> können hier geladen werden" } }, @@ -2872,7 +2913,8 @@ "question": { "en": "When is this charging station opened?", "nl": "Wanneer is dit oplaadpunt beschikbaar??", - "de": "Wann ist diese Ladestation geöffnet?" + "de": "Wann ist diese Ladestation geöffnet?", + "es": "¿Cuándo abre esta estación de carga?" }, "mappings": [ { @@ -2880,7 +2922,8 @@ "then": { "en": "24/7 opened (including holidays)", "nl": "24/7 open - ook tijdens vakanties", - "de": "durchgehend geöffnet (einschließlich Feiertage)" + "de": "durchgehend geöffnet (einschließlich Feiertage)", + "es": "Abre 24/7 (incluidos días festivos)" } } ] @@ -2975,32 +3018,14 @@ }, { "id": "payment-options", - "builtin": "payment-options", + "builtin": "payment-options-advanced", "override": { "condition": { "or": [ "fee=yes", "charge~*" ] - }, - "mappings+": [ - { - "if": "payment:app=yes", - "ifnot": "payment:app=no", - "then": { - "en": "Payment is done using a dedicated app", - "nl": "Betalen via een app van het netwerk" - } - }, - { - "if": "payment:membership_card=yes", - "ifnot": "payment:membership_card=no", - "then": { - "en": "Payment is done using a membership card", - "nl": "Betalen via een lidkaart van het netwerk" - } - } - ] + } } }, { @@ -3021,6 +3046,7 @@ "en": "Authentication by a membership card", "nl": "Aanmelden met een lidkaart is mogelijk", "de": "Authentifizierung per Mitgliedskarte", + "es": "Autenticación mediante tarjeta de membresía", "fr": "Authentification par carte de membre" } }, @@ -3031,6 +3057,7 @@ "en": "Authentication by an app", "nl": "Aanmelden via een applicatie is mogelijk", "de": "Authentifizierung per App", + "es": "Autenticación mediante aplicación", "fr": "Authentification par une app" } }, @@ -3041,6 +3068,7 @@ "en": "Authentication via phone call is available", "nl": "Aanmelden door te bellen naar een telefoonnummer is mogelijk", "de": "Authentifizierung per Anruf ist möglich", + "es": "Autenticación mediante llamada telefónica disponible", "fr": "Authentification par appel téléphonique est disponible" } }, @@ -3051,6 +3079,7 @@ "en": "Authentication via SMS is available", "nl": "Aanmelden via SMS is mogelijk", "de": "Authentifizierung per SMS ist möglich", + "es": "Autenticación mediante SMS disponible", "fr": "Authentification par SMS est disponible" } }, @@ -3061,6 +3090,7 @@ "en": "Authentication via NFC is available", "nl": "Aanmelden via NFC is mogelijk", "de": "Authentifizierung per NFC ist möglich", + "es": "Autenticación mediante NFC disponible", "fr": "Authentification par NFC est disponible" } }, @@ -3070,7 +3100,8 @@ "then": { "en": "Authentication via Money Card is available", "nl": "Aanmelden met Money Card is mogelijk", - "de": "Authentifizierung per Geldkarte ist möglich" + "de": "Authentifizierung per Geldkarte ist möglich", + "es": "Autenticación mediante Money Card disponible" } }, { @@ -3080,6 +3111,7 @@ "en": "Authentication via debit card is available", "nl": "Aanmelden met een betaalkaart is mogelijk", "de": "Authentifizierung per Kreditkarte ist möglich", + "es": "Autenticación mediante tarjeta de débito disponible", "fr": "Authentification par carte de débit est disponible" } }, @@ -3158,12 +3190,14 @@ "render": { "en": "Part of the network <b>{network}</b>", "nl": "Maakt deel uit van het <b>{network}</b>-netwerk", - "de": "Teil des Netzwerks <b>{network}</b>" + "de": "Teil des Netzwerks <b>{network}</b>", + "es": "Parte de la red <b>{network}</b>" }, "question": { "en": "Is this charging station part of a network?", "nl": "Is dit oplaadpunt deel van een groter netwerk?", - "de": "Ist diese Ladestation Teil eines Netzwerks?" + "de": "Ist diese Ladestation Teil eines Netzwerks?", + "es": "¿Esta estación de carga forma parte de una red?" }, "freeform": { "key": "network" @@ -3182,7 +3216,8 @@ "then": { "en": "Not part of a bigger network", "nl": "Maakt geen deel uit van een groter netwerk", - "de": "Nicht Teil eines größeren Netzwerks" + "de": "Nicht Teil eines größeren Netzwerks", + "es": "No forma parte de una red mayor" }, "hideInAnswer": true }, @@ -3531,7 +3566,7 @@ ], "title": { "en": "charging station with a normal european wall plug <img src='./assets/layers/charging_station/TypeE.svg' style='width: 2rem; height: 2rem; float: left; background: white; border-radius: 1rem; margin-right: 0.5rem'/> (meant to charge electrical bikes)", - "nl": "laadpunt met gewone stekker(s) <img src='./assets/layers/charging_station/TypeE.svg' style='width: 2rem; height: 2rem; float: left; background: white; border-radius: 1rem; margin-right: 0.5rem'/> (bedoeld om electrische fietsen op te laden)" + "nl": "laadpunt voor elektrische fietsen met gewone stekker(s)" }, "preciseInput": { "preferredBackground": "map" diff --git a/assets/layers/charging_station/charging_station.protojson b/assets/layers/charging_station/charging_station.protojson index 693c2d1b85..72fb64d1d1 100644 --- a/assets/layers/charging_station/charging_station.protojson +++ b/assets/layers/charging_station/charging_station.protojson @@ -7,19 +7,59 @@ "minzoom": 10, "source": { "osmTags": { - "or": [ - "amenity=charging_station", - "disused:amenity=charging_station", - "planned:amenity=charging_station", - "construction:amenity=charging_station" + "and": [ + { + "or": [ + "amenity=charging_station", + "disused:amenity=charging_station", + "planned:amenity=charging_station", + "construction:amenity=charging_station" + ] + } ] } }, "title": { "render": { "en": "Charging station", - "nl": "Oplaadpunten" - } + "nl": "Oplaadpunt" + }, + "mappings": [ + { + "if": { + "and": [ + "bicycle=yes", + { + "or": [ + "motorcar=", + "motorcar=no" + ] + } + ] + }, + "then": { + "en": "Charging station for electrical bicycles", + "nl": "Oplaadpunt voor elektrische fietsen" + } + }, + { + "if": { + "and": [ + "motorcar=yes", + { + "or": [ + "bicycle=", + "bicycle=no" + ] + } + ] + }, + "then": { + "en": "Charging station for cars", + "nl": "Oplaadpunt voor elektrische auto's" + } + } + ] }, "description": { "en": "A charging station", @@ -41,7 +81,7 @@ "ifnot": "bicycle=no", "then": { "en": "<b>Bicycles</b> can be charged here", - "nl": "<b>Fietsen</b> kunnen hier opgeladen worden" + "nl": "<b>Elektrische fietsen</b> kunnen hier opgeladen worden" } }, { @@ -57,7 +97,7 @@ "ifnot": "scooter=no", "then": { "en": "<b>Scooters</b> can be charged here", - "nl": "<b>Electrische scooters</b> (snorfiets of bromfiets) kunnen hier opgeladen worden" + "nl": "<b>Elektrische scooters</b> (snorfiets of bromfiets) kunnen hier opgeladen worden" } }, { @@ -260,32 +300,14 @@ }, { "id": "payment-options", - "builtin": "payment-options", + "builtin": "payment-options-advanced", "override": { "condition": { "or": [ "fee=yes", "charge~*" ] - }, - "mappings+": [ - { - "if": "payment:app=yes", - "ifnot": "payment:app=no", - "then": { - "en": "Payment is done using a dedicated app", - "nl": "Betalen via een app van het netwerk" - } - }, - { - "if": "payment:membership_card=yes", - "ifnot": "payment:membership_card=no", - "then": { - "en": "Payment is done using a membership card", - "nl": "Betalen via een lidkaart van het netwerk" - } - } - ] + } } }, { @@ -782,8 +804,8 @@ "socket:typee=1" ], "title": { - "en": "charging station with a normal european wall plug <img src='./assets/layers/charging_station/TypeE.svg' style='width: 2rem; height: 2rem; float: left; background: white; border-radius: 1rem; margin-right: 0.5rem'/> (meant to charge electrical bikes)", - "nl": "laadpunt met gewone stekker(s) <img src='./assets/layers/charging_station/TypeE.svg' style='width: 2rem; height: 2rem; float: left; background: white; border-radius: 1rem; margin-right: 0.5rem'/> (bedoeld om electrische fietsen op te laden)" + "en": "charging station for electrical bikes with a normal european wall plug <img src='./assets/layers/charging_station/TypeE.svg' style='width: 2rem; height: 2rem; float: left; background: white; border-radius: 1rem; margin-right: 0.5rem'/> (meant to charge electrical bikes)", + "nl": "oplaadpunt voor elektrische fietsen" }, "preciseInput": { "preferredBackground": "map" diff --git a/assets/layers/charging_station/csvToJson.ts b/assets/layers/charging_station/csvToJson.ts index 32e14924df..7d918eccb6 100644 --- a/assets/layers/charging_station/csvToJson.ts +++ b/assets/layers/charging_station/csvToJson.ts @@ -3,6 +3,7 @@ import {Utils} from "../../../Utils"; import {TagRenderingConfigJson} from "../../../Models/ThemeConfig/Json/TagRenderingConfigJson"; import ScriptUtils from "../../../scripts/ScriptUtils"; import {LayerConfigJson} from "../../../Models/ThemeConfig/Json/LayerConfigJson"; +import FilterConfigJson from "../../../Models/ThemeConfig/Json/FilterConfigJson"; function colonSplit(value: string): string[] { @@ -265,6 +266,10 @@ function run(file, protojson) { protoString = protoString.replace(/{[ \t\n]*"id"[ \t\n]*:[ \t\n]*"\$\$\$"[ \t\n]*}/, stringified.join(",\n")) const proto = <LayerConfigJson>JSON.parse(protoString) + if(typeof proto.filter === "string"){ + throw "Filters of a the protojson should be a list of FilterConfigJsons" + } + proto.filter = <FilterConfigJson[]> proto.filter; proto.tagRenderings.forEach(tr => { if (typeof tr === "string") { return; @@ -275,7 +280,7 @@ function run(file, protojson) { } }) - proto["filter"].push({ + proto.filter.push({ id: "connection_type", options: filterOptions }) diff --git a/assets/layers/cycleways_and_roads/cycleways_and_roads.json b/assets/layers/cycleways_and_roads/cycleways_and_roads.json index e0812d68fe..61093a5a42 100644 --- a/assets/layers/cycleways_and_roads/cycleways_and_roads.json +++ b/assets/layers/cycleways_and_roads/cycleways_and_roads.json @@ -692,7 +692,8 @@ "then": { "en": "Usable for thin rollers: rollerblade, skateboard", "de": "Geeignet für dünne Rollen: Rollerblades, Skateboard", - "id": "Dapat digunakan untuk roller tipis: rollerblade, skateboard" + "id": "Dapat digunakan untuk roller tipis: rollerblade, skateboard", + "nl": "Bruikbaar voor kleine, harde wielen: rollerblade, skateboard" } }, { @@ -700,7 +701,8 @@ "then": { "en": "Usable for thin wheels: racing bike", "de": "Geeignet für dünne Reifen: Rennrad", - "id": "Dapat digunakan untuk roda tipis: sepeda balap" + "id": "Dapat digunakan untuk roda tipis: sepeda balap", + "nl": "Bruikbaar voor smalle wielen: racefiets" } }, { @@ -708,7 +710,8 @@ "then": { "en": "Usable for normal wheels: city bike, wheelchair, scooter", "de": "Geeignet für normale Reifen: Fahrrad, Rollstuhl, Scooter", - "id": "Dapat digunakan untuk roda normal: sepeda kota, kursi roda, skuter" + "id": "Dapat digunakan untuk roda normal: sepeda kota, kursi roda, skuter", + "nl": "Bruikbaar voor normale wielen: stadsfiets, rolwagen, step" } }, { @@ -716,14 +719,16 @@ "then": { "en": "Usable for robust wheels: trekking bike, car, rickshaw", "de": "Geeignet für breite Reifen: Trekkingfahrrad, Auto, Rikscha", - "id": "Dapat digunakan untuk roda yang kuat: sepeda trekking, mobil, becak" + "id": "Dapat digunakan untuk roda yang kuat: sepeda trekking, mobil, becak", + "nl": "Bruikbaar voor robuuste wielen: trekking fiets, auto, rickshaw" } }, { "if": "smoothness=very_bad", "then": { "en": "Usable for vehicles with high clearance: light duty off-road vehicle", - "de": "Geeignet für Fahrzeuge mit großer Bodenfreiheit: leichte Geländewagen" + "de": "Geeignet für Fahrzeuge mit großer Bodenfreiheit: leichte Geländewagen", + "nl": "Bruikbaar voor terreinvoertuigen: 4x4 personenwagens" } }, { @@ -731,7 +736,8 @@ "then": { "en": "Usable for off-road vehicles: heavy duty off-road vehicle", "de": "Geeignet für Geländefahrzeuge: schwerer Geländewagen", - "id": "Dapat digunakan untuk kendaraan off-road: kendaraan off-road berat" + "id": "Dapat digunakan untuk kendaraan off-road: kendaraan off-road berat", + "nl": "Bruikbaar voor terreinvoertuigen: zware 4x4 voertuigen" } }, { @@ -739,14 +745,16 @@ "then": { "en": "Usable for specialized off-road vehicles: tractor, ATV", "de": "Geeignet für spezielle Geländewagen: Traktor, ATV", - "id": "Dapat digunakan untuk kendaraan off-road khusus: traktor, ATV" + "id": "Dapat digunakan untuk kendaraan off-road khusus: traktor, ATV", + "nl": "Bruikbaar voor uitzonderlijke terreinvoertuigen: tractor, ATV" } }, { "if": "smoothness=impassable", "then": { "en": "Impassable / No wheeled vehicle", - "de": "Unpassierbar / Keine bereiften Fahrzeuge" + "de": "Unpassierbar / Keine bereiften Fahrzeuge", + "nl": "Onmogelijk om met een voertuig met wielen te passeren" } } ], @@ -1339,6 +1347,7 @@ } ], "description": { - "en": "All infrastructure that someone can cycle over, accompanied with questions about this infrastructure\"" + "en": "All infrastructure that someone can cycle over, accompanied with questions about this infrastructure\"", + "nl": "Alle infrastructuur waar je over kunt fietsen, met vragen over die infrastructuur" } } \ No newline at end of file diff --git a/assets/layers/defibrillator/defibrillator.json b/assets/layers/defibrillator/defibrillator.json index 19e95d3ff8..fa984a091d 100644 --- a/assets/layers/defibrillator/defibrillator.json +++ b/assets/layers/defibrillator/defibrillator.json @@ -241,7 +241,8 @@ { "if": "defibrillator~*", "then": { - "en": "This is a special type of defibrillator: {defibrillator}" + "en": "This is a special type of defibrillator: {defibrillator}", + "nl": "Dit is een speciaal type defibrillator: {defibrillator}" }, "hideInAnswer": true } @@ -581,6 +582,7 @@ } ], "description": { - "en": "A layer showing defibrillators which can be used in case of emergency. This contains public defibrillators, but also defibrillators which might need staff to fetch the actual device" + "en": "A layer showing defibrillators which can be used in case of emergency. This contains public defibrillators, but also defibrillators which might need staff to fetch the actual device", + "nl": "Een laag die defibrillatoren toont die je kan gebruiken bij noodgevallen. Dit omvat zowel publiek beschikbare toestellen als defibrillatoren waarvoor het toestel enkel door personeel aangeboden kan worden" } } \ No newline at end of file diff --git a/assets/layers/drinking_water/drips.svg b/assets/layers/drinking_water/drips.svg index a2d002ec5a..c483b7c6ff 100644 --- a/assets/layers/drinking_water/drips.svg +++ b/assets/layers/drinking_water/drips.svg @@ -1,30 +1,45 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="296px" height="374px" viewBox="0 0 296 374" version="1.1"> - <defs> - <image id="image7" width="296" height="374" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASgAAAF2CAYAAADdgwWeAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO2deXwURdrHn+4kk/smkEQIp4iirAKvArqCyCGKByussupy6Ov1Lgu6CgoCEZH1wgsEBRVU8GBFBVYuAbnlvuS+khASEnInM8nMZKb7/YNM7Ompqq7qXJPk+X4+/eljZqqeqq769VNPV/cAIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIEiNkBraAKTRQWwzDoeji8ViGQsAfQAgEQByAWCn0+n8PDg4+AQlLbWObKwPqH3H5XINDQgIeAgAbgCAYAC4oCjKzyUlJYvj4uJKKT9rzHWBIA2KxFrcbvc0VVWdKhmn2+2ebpRGA5TJLNQylJSUxKmqup5SD6qqqlmVlZV3sNKAxlUXCNKgGHUkye12pzI6ZDVut/s1nvTqvYT8MO3Ozs4OU1V1N0dV2MrLy281Sg/8uy4QpEEx6jgyAMgul+tuVVXdPAKlqqricrmGeX7LkYe/YFgPACC73e5POetBVVU189KlSwnAVxcIgmjg6pCFhYUpqqrmCXRKVVXVwuLi4o7adAzya2gM6wGuCPXDgvWgKory3xEjRgQAX10gCAJ8HTJg0aJFIYqi7BDtlFUdc/eiRYtCAMDfO6ehMAFAQEFBwXWqqpaZqQun0/lP8K0Hf6wLBGlwuDokAARUVla+baZDeqisrJztSYuQhz90TEORBoCAdevWhSuKcrgGVVFRXFzcA8h1gSKFIFVwdUgACLTZbENU/rgTDcVmsz0AAIHA3zn9ri5cLtfcGtaDqijK2W3btsUK1AWCNCu4O+ShQ4euUlU1u6adsorL586dSwHvjqntnA0hUqy6qK4HAAgsKSm5W1VVpTYqwuVyfeFJl1APKFJIs4arQ3bt2tXicrl+ro0OqemYW0aPHh0C9M5Znx2TS6QBIGjfvn1JiqJcqs26qKioGA0AQbq6QJFCmjVc4gQAQQ6H46Xa7JAeHA7HK3ClY3o6Z0OJFE9dBAGAxeVyLa+DqrCmp6dfCyhSCAIA/B0yKCcnp5eqqo466JSqqqqVeXl5/aBhRYpbnGw227N1VA+qy+XaOWLEiFBAkUKaOdwdctmyZXGKopyuq06pqqqqKErm2rVrkwDAAvUvUtx1cfr06WtVVS2ty7qoqKiYqqsHvUihQCFNHlaspbpDAkCw0+n8ui47pIfKysqf4MqDtbwiVdv1wBSnxx57LNzlcu2pj6rIysq6FVCkkGYKq1NWD+sAILi0tPSJeuiQ1ZSVlY0DskjVVcfkEicACLbb7W/WVz0oinL8vffeiyHUA4oU0qQxEqfqTnns2LGuah0PZwhUnD17tgdcEam69h54hNoCAME5OTn9VVV11WdF2O32uVD/HiWCNBjcw5nU1NQot9t90EzHUhSl8syZMy8pimIqqO52uw+OGzcuCurWe+AV6uAvv/yypaIo6WbK4nK5LhYXFy8z81tVVZW8vLx7oH49SgRpMESGM++a7FRqWlraGwDQ9vz58zPMpmG329+BuvUeeOsixOl0LjJZDPeGDRse7tevXxeHw3HOTAKKomT9/PPPiZS6QJFCmgwiw5k7VZPDGZvN9ltCQsLVANAhODi4Y2lp6UYz6aiq6s7NzR0MddMxSXVBFOqcnJyhqsnZ4tnZ2QsAoAMAdPj666/vVRSF9kI/Jk6n80sACAH+YS+CNCq4xenrr79upShKhpmO5HK5Cp5//vk+ANDJszz++OM3u1yuXDPpKYpysQ68B9G6yDRju91uP/OnP/2pq7Yu0tLS3jOTlqqqan5+/v1wRaQwHoU0OUSGM2anFCi//vrrUwDQGQCu0SydV69ePVY1+XBxZWXlDyDWMVmdkyfuZIErghjicDi+MlURiuJYsGDBfbp6uCYyMrKL1Wo1NU1BUZSsZcuW4VAPaXJwD2cKCwuFX7rm4eLFi4sBoAsAXEtYuly4cOFzs2kXFRWNBnY8iqdjct8gAICQ/Pz8YWbtPXny5Fu0upg2bdpAt9ttNZOu3W5fCH8M9VCkkEYP93Bm27ZtHRRFKTDTcSoqKk517dr1RgC4DgC6EpbrWrdufYPVajX13iRFUUr27t17DYh1TG3nJH1mNLS7aMZWq9W6LzY29npNXVxftVTXxb59+6aZSVtVVSUnJ2co4FAPaQJwD2dat24dWllZucFMj3G73eVvvPHGPfBHZ7yBsFwPAF1fffXVIW6322YmH5fLtbVHjx5h8IdI8cyPoi1UcYIrQ7vFJuuibOLEiQN56qKoqGiTyTzOz5o1Kx7Qi0IaOdzDGavV+ryZzqKqqnrgwIFXwbtDdgOAP2mWbqDpmHv27DHrPag2m+0VEI9HCQ3tsrOzB6sm79rt2rXrZUY9eNXFE0880c/lcpWYycdut88BHOohjRhuj+HYsWM3qapabqajFBUVbbNYLKQOeaNm0XfOrvn5+evM5KeqqjMjI+M2YHdMI5Gi1sWECRNi3G73SZN1sRV8xelGoNfF9b/99tsUk/XgzsjIGAC+Uw+a5FBPbmgDkFpF3xglzdprGTFiRFCXLl0WAkCoaCZut7vw+eeff8XpdBLTZi3PPPPMay6XK080TwAIat269afvvvtuOCVtI6h1AQDSrFmzJsmyfI2oUYqiVLz55pszaenSlt69e68oLi7eJpofAMitW7ee99JLL3nOG08dNGqRQpoOPMOZYAAIKS8vf8vkFVxdt27ds0D2GG4iLB7voXqIs2rVqidUk0Mpu93+MRh7D1oPQv+2Bp+6OHr06J9UVbWbsefAgQOvVdUFqR66Vy3Eunj22WfvcLlcpp53tNlss+DKxYV3qNcoabSGIz7wek/yxYsX+1x11VXr4UpjFiI7O/u7q6666jUgdwBae1J1i5KZmTm5devWfxPNHwDU/Pz8BxISEtYDgKJLFzRrPcT66NatW+D+/fs3BAYG9hI1xGq1HkhMTBxjs9lUfbq6PLV2edXDvn37RvTo0WOaaN4A4Dh48OAt3bt3P+VJC8j1oK0PWt34LTjEaxpwD+3mz58flZyc/CmYECeHw5E2bNiwdwj5sSB1Cumee+6Zbbfbz4naAABSfHz8/OXLl8eCsSiA7piPWG/btu0JM+Kkqqrjww8/nGaz2RSCDdVfA2/R8LGrT58+35eWlu4WzR8Agm+44Yb3gFw2Go3OIUGBModQvKEBbNPaqD0ujR079m1JktqLJqqqqvubb76ZvGfPngrSx5q1ftF+Xs2RI0ccixcvnqSqaqWoLZIkJQ8dOvRdoNc161j19vLly+MjIyPNeC9w6tSpeVOmTMkAsfPrUw9Op1OdOXPmNEVRykVtCAwMvCM/P/+vwG53jU6UtDRq4+sRYj3l5OSEJSQkPCLL8j1w5cFQGwAcd7lc3wYFBf3CSK82XW29COnX1d5CQUHBfXFxcd+ZyeTMmTMfdO7ceQH8MbQj5ceCNPRQTpw48XiXLl2eN2NTUVHRyLi4uJ/gjyGOJ119/errQwYAyeFwzLdYLKNE8y0vLz/Rvn37hy9fvqz1nvT50CCK+eHDhx/p1q3by6K2qKqa88UXX9w0ZsyYYmiCQz0UKDrMuqmsrOwdGBi4FADaUb7yc0lJyWMxMTHFjGRq2lC4h3a//PJLqzvvvHO/JEktRDOx2Wz727RpM6aoqMjTIfV58aLvJGpERISUnZ39eWRk5P+I2qWqav7GjRt7DBw48DL80TH1+ehtlQBAPn/+fM/27dtvBsFRhKqq7k8++eShZ5555iR417E+L2oSuu3qesjJyfkiPDy8u4g9AAB2u/3j0NDQ58E3JsfyYhuFSOEQzxfDYZnT6bwpMDBwDdDFCQDgnujo6DXZ2dms2/i1OQSkihMASP369fvAjDgpimKbNWvWy0VFRW7dR6xhHW0B3TZYrVZl5syZLyuKYhW1TZKkFv369ZsDfEPs6v2uXbsGtGnT5j0w0f4zMjI+e+aZZ07oDnsFvg0WUlxKslqt6ieffPKqqqouUZtCQkL+9+zZszeB8bC20dEoja5DDAOMZ86ciejUqdMeuPKUuiGKonwcEBDwf5pDrCuXyFWNe2hXVFT0UExMzGKBtKs5ePDg9O7du/8HyI3d7FVYAp1g7d+//y/du3efaSaxkpKSJ2JiYr4Gby+KlKcEAFJhYeGY2NjYj0TzcTgc6d27d//L8ePHnZo0a4PqukhPT/9X27Ztx4om4Ha7d6ekpPTPzs6mCSFp6Ov3XhR6UH9Aa2xeXk6HDh3mAac4AQDIsvy0y+V6iJYepw0i3/PyHtatW5cQHR39Nme6XpSWlu7s1avX94T89LEOI6+BNPTwsrlHjx4/FBYWbjBjZ1RU1Lvbt29PAU18ibZ89NFH0TExMaYC42vWrHn1+PHjDs0hkpdYo7oYPnz4XKfTmSVqW0BAwC1Hjhx5EOgeJEDtCWq9gQJ1BdKJ8zm5TqdzrCzLj4gmHhAQMC83N7e9Pj1Gviy4404AIPXv3/8jSZISRG12u92lr7zyymSn00mMmYB3h9R2TLdmMeqYXp3zlVdemeF2u0tEbZUkKeqWW275EOji5Dkujx07dpokSa1E88jPz//vsGHD9lTtEuc0ERZSPejF3asu9u3b59ixY8dbovYBAMTGxs587rnnQoHctkhDPb8XLBQoY5HwDAuuDQoKet9kHjEJCQlLFi1aFAQE4eO0iXScFV+QioqKHg4MDLxXzNQr7N279/U5c+Zc1h1miZJ2rT/O6qDVzJ8/P3/37t2vmbE3MDBwUGFh4WNA957kffv2XRMSEvK/omkrimKdNm3aO7rDXncjwVek3JRtkmB70b9//19KSkq2itopy3LKjBkz/glsL0qPX4tUcxcoUof38UiWLVsWGhMTswQAwk1nJEm9Hn300VQgiwqXB2eUhXbZsmVLUnR09LtmbC0uLt7Yu3fvVZpDpFgGz1CGJVLE2Mitt966urCwcK0Zu2NiYt5as2ZNG/B91EUCAOmGG25IhSuPgwhx4sSJj+bPn08Sa5FhrpFIeQnV+++//7qqqtrhJBfh4eEvbNiwIQnoQg3g56KkpdEYWgfQvBHttgQA4HK5PgoICHiyFvJUSktLh0ZHR3vmSLHmqhjBHNpVVlZ+FxgYeJ+ogW63u+ipp56697PPPivUfUQSKKPb2TQbtQKi/R4AAIwcOTLmyy+/XBkYGCh819HpdK4LDg4erjssHT16tGfXrl036vMywm63n7366qv/cvHiRc9dTN67l9rvkm5iGL4W5ezZs8927NjxHyL2Vtn8VWho6NNA91gbTcC8uXpQvOIklZeXP1hL4gQAIEdGRi4+fPhwIpA7qJE7TrJRf1wqKir6mxlxAgDYvn37dIY4kYZqJC+BNuTjGuZ88803xdu3b081Y7/FYhmck5MzEnQPDnfu3Pk1MHFBXrVq1YyLFy96bv3TxMnIY+KpD596uP/++z9zOp0XRG0OCQl55OjRo12BPdRj9QG/oTkKlJE4VS8nT55sHRoaOr9WM5ekll27dl3UqVMnlhchEjMgDe1mm7EtPz9/Vb9+/fR30rTiROuQ2mAwaa3tmMwgsYc77rhj4+XLl1eYKUfLli3f+OKLLzwXAfn8+fODgoKCbhVNp7CwcP1f//rXfVW7ZgLjpHqhCZOiyweOHTvm2LVrl5lhunz11VdPA/qFr9EM9ZqbQPGIEwCA1K9fv4BOnTp9DgCxtW1EQEDAgCNHjvwf+F7ZTMecPEufPn3elSQpRtQml8t1+emnn35dd5inU7KCwUaBYubwcNSoUa87nc5LomWRJCnuoYce+gAA5OTk5MA2bdpMFU1DVdXKefPmvac/DN71oF/TymvkSdKmX0Dfvn3X22y2/aL2WyyWoWfOnLkZyHFVGn4nWH5nUB3DugumH9qNDw0NNXW7lxN7RkbGre3atTsK7I7q2acOQ6FqGJObm3tPy5YtvzdjzPr1658aPHiw/gVqtLt2+n2aJ0SKPcm6be2+TwdatWpVr6FDh36mP85DWlra/8qybGnbtq3wpMzMzMxFKSkp2vljrGEdrS70aMtJqgtiPSxevPiGUaNGfQuCdeByuTYGBQXdT7GN1t78KhbVnASKW5zS09O7tm3bdidceTFanaEoyoFx48b1nTdvnhOMRcoDKfAsL1u2LGb48OEHJElKErUjJyfn+6SkpGm6w6TOSBvWEIcoGltZnZL2ut5qLl26lJqYmPhX0XJV/VNNeUBAQBuR37nd7uIHH3zwrhUrVpRqDhsJE0usScFxWvmJ9ZCXlze7RYsWQ0TKAQCQnp4+pH379lt19jaagHlzGeKxxEl7TJo4cWJwmzZtFkMdixMAgCzL3WfPnj0ZvBskyx0niZMEANL9998/y4w4uVyuy2PGjNF7irQ7U0YBb9oQjzRZkecuGAAAjBkz5h2Xy5UjWjZZluNFxQkA4MSJE/Mo4iRaH6LDPepF6r333ntPVVXPIzbctG7d2hOLIrUd0BzzS/zWsFqGFSD06uh2u/314ODgf9Wjba5Lly7dmZycvBv4vCgfccrOzu6XlJS0Gkycz40bN/5jwIABmzSH9EFxng6ovTLT7CV5DCwvwvNbAABYv35934EDB9bqDQsSTqczs2PHjvfo7tyRPEmeeU2k4S7Ng9K/qtdnqJeenv6Cmef0GrMX1Rw8KKOgYPWSk5NzW3Bw8HNmMiktLV3ldruzTfw0MDEx8bO5c+dG6OwByraX2Kampoa1atXqIzAhTvn5+WsGDBiwkfCRWY+BNgRi/dbQgwIAGDRo0Jb8/PyfRcsoyqFDhz7WzHnSQguQiwi4SL351MX48eMXKIpSJlqm5OTk54BwYYNG4EU1dYHiHiJ9/vnnUS1btvwMTNRJZWVl5tixY1/eunXri2DiyiNJUqcnnnjiDZJdBLu97J84ceIrsix3EM3T7XYXv/DCC6+Ddx0ZCZKR0Ih2Tt4YDgAATJgw4d9ut1s/R6vWcDgc6ffddx9pBj2tXkSFx+g7zCD2ihUrStPT05eIlstisQw8dOiQZ14UAJ84+YVgNXWB0kKKO3n2pb/97W+zJElqayJd9/r16/+1fPnyiv79++/Kzc1dbMa44ODgx/Pz8wcDWZxIi3z27NmbQkNDx5nJb//+/f/+4osvtJ3dKCZk5CWROpmoF8H0ppYuXVq4a9euf5spLw/79++fn5ub69bmSSkPS1RYw1/9Nm+a1Tz//PNfmPCipGuuuWYCGMc5/UKUtDRlgeKNO0F2dnbf4ODgx81kkpmZuWDo0KEHoSp+MHjw4NkOh+O0GXvj4uLmL1u2LAboolS9DBkyJKh9+/ZzwcSzZSUlJVtvueWWlZpDtA7J8oqMOhzte/rOSuqcnrVPHd12220/FxYWkoalNcLhcKQPHTp0jeYQTUSMhnik+jPyulj14iVUZr2okJCQ4b/88ksKiA3xGlywmqpAccedZs2aFZGYmDjP4DdE7Hb7sf79+38Ef/zfWsDhw4ddy5Yte9nMmxElSUq67777ZmjsIz2vJcOVaQXjZFm+STSPqjdkpoJveY08H54hHI/nxUqfJHh6L0J69dVXXzcTi2Gxe/fuuZS3hrIEh+UlskTZKE1a2VUA015UUO/evZ+ARuZF+ZUxtQR33AkAJLvd/lZwcLDwMElVVfsHH3ww/LnnnjtP+rjqQU8zwy81MzNzSEpKyjbwbqDV5diyZUvbP//5z/skSQoTTfz3339/rVu3bt9o8wPfzuJZSNMEPNs0YdKjF1ftHawAwjbpDzh97mjt37//r927d58uWn4SDocjKykpaUiVQLG8R55nDWl1QbzQCNZDdR2cO3dufIcOHZ4SKaeqqrn9+/fvsnnzZs+8O+15BIbtpPNaLzRVD8oDLe4EACBduHDh5uDg4GfNJHzs2LHZzz33XBqQG5l86623LrDZbEfM2HzVVVd99K9//SsMvBtydQPt1avXO2bEyWazHerTp8+3mkP6q7ORF8Dj6bAWo/gLbfij7zhS7969vy8tLf1NtA5InDx5cknVH0Jo4fGcRMvPqheR9GHGjBlfib6ORZKkVl999dXdYPA2CcJ+g9HUBIp7aDdhwoSQq666agGY+APL0tLSnT169PgGyFd6GQDk3Nxc9YMPPpisKIpdNH1Zlju++uqrr4DvlVPOzs6+32Kx3C2apqqqjnnz5k2xWq2kqyOtIxoNUUgeA2uf1CFZIkj1zJxOp/r222/PNFO/WhRFsU6YMOEnRn2wxIklpKLCxCOC1XzxxReFeXl5wu/Natmy5d+BHtsEoFzMRfOpLZqSQAkN7WbNmjVFlmXud4t7UBTFmpqaOt3pdNLc9eplypQpGUePHjX1ZoHw8PB//P777z216aWmpka1atXK1PvFz5w5M2/ixIlpmkM8ng4r5lSbnoNI+h6kmTNnXjh27Ng8M/Xh4cKFCz9s3rzZ848yJFFliRPpe0biTBN6VrpET/LHH3/8UrS8FotlwH//+9/WYBwo9wsvyi+MqCV47trJACCdPXu2e8eOHbeAiTtgBw8enFH1Lyce70afN4CmIVksFsjLy/s4Kiqqj2heLpfr2MCBA/tt3ry5EgCgrKxsVkREhPCQtKKi4mSHDh2G5+TkaGMNnjVJJIziLKTOpE1XC/EcAFnUSfEX2gxrGQCkmJgYOTMzc2lERERX0XpRVVV58cUX7549e3YWpS5Yr5Ch1QnR49PVAevCpq0DfRxKP9yH0tLSLyMjI3uKlLuoqGhKXFzcHILtnjVQykErV53RVDwo3qEdPPLII5b27dvPBxPiVFpaulfzLydci9PphMmTJ09zu92llGSpBAYGdv3hhx+eBwB5586dN0ZERJh5cZ7722+/naoRJw+8Xg3PUAbAt2GzjpPyMsqbmG5xcbG6cOHCGaqqkmZ/M5EkCa699tp4g/qgeVK0OuDxnkQ8TNbncPjwYW1MkYuIiIi7gT688ysvqsENqCVo3pPPFctms70QFhY2QzQDRVHsU6dO/cusWbMuEtLV5ktsoL/99tt9vXr1Ev7fN1VVnZs2bRpw++23vx8UFCT8r7NZWVlLWrduPUubJPh2AiOPwShwLeJBiXgQpLtZxDt858+f/1f79u0fE60fm812rFWrViNtNhvtjiXtxXv6u5ms+tC3Tx9P0KDspDqQAED605/+FHLgwIGtsixHCBTbNXfu3M7jxo3LryoHSYA99mvPKXpQJmAN7bTHpd9++61dWFjYS2YyOXbs2IezZs3KBLY4kWyTAAD69u27sri4eKdovpIkWfr377/CjDi5XK7cUaNGfUj5mOWx8Fy9a8OD4vFUeOJR8NBDD33scDhyOaummvDw8K7btm0bTrCZdTPA0LPR2edjr2DZqfkdPnzYnpeX9wuIEfjggw9qn1oA8L2QgO64frteaOwCxT20AwCpZ8+e7wCAqdvzvXv3XsrIz+jKIjmdTpg1a9ariqJUiOYvSZKpt3ru3Lnz3xs3btT+pbiRMPAM7fTpAGENlOOk35Hy4fHatL+HvXv3lq9fv/5NnnrR061bt/EjR46MIeRBEikjb0m/DbrjokJtKM47duzQPhXARUxMzCDgv9A2GH5nkCC8Qzvp8uXL9yckJAiP11VVdb799tsjJk2adJ6Qrt4Gr59q1tXLkSNHHrnhhhtMeXEilJaWbouOjtZO5GMJUk2GdjRx0sI8N8A/1DMMnufl5b3bokWLfpzVVE1OTs5/kpKSpmjKr/8DUlLdsARLXyckT0Ub8CaV32ioJwGAFBsbG5iXl7ctICCA+1XPiqJkBAQE3Ai+59pIEI0uxrVKY/agSMJAHNqlpqZGtGjRwtTV9dSpUx9NmjTpHOEjogCBQaft3bv311ar9aAZW3hRFMX+9ttv0+JdJJHiGk5QFgDjRmtUVywPghYs13t1AAAwefLktxRFKTewx4fExMQHly1b9idBG6leDWNf39lF68Anv6KiIndRUZHQpFVZltt+8MEHCUC+YOhpsGFeYxUokhBpt708nIkTJ04x86aC8vLy43379l1MyE+0w1Vjs9nUefPmpZp5OyIvp0+f/mjmzJmZOntZwkQTA6OhnVlondEoHmZ4lV+4cGHuoUOHFpiwSb733nunRUdHSxTbeITZSLBp4qTfF75gnD9/frtYcQEGDx78JzC+m9ego6zGKlBaaJUqAYB08uTJrqGhof9nIl33kiVLUi9fvkx7gJTn9jixQ0+aNOncuXPnPjVhkyF2u/30wIEDvwCyqLI6Ac1uoqei2ScdF/k+yzaaXczh1aBBg76xWq1nCPkwCQkJuWHXrl0PkdIklMnoOAtWndEW1t1T2Lhx4yGOfL2Ij4+/HtgeVIMHyxujQBlVjpdIdezY8U0ACBLN5OLFi98+9dRTx3SHeRsOszEBAAwZMuRTh8ORJmqXAerPP/88S/dGSKMGz+udiHgQRvu8edAuBEzPoqCgwPXNN9+8QcjfkM6dO784fvz4WAH7aGWlQasD0jGWOHsts2bNShe9ARMUFKQd4mnxm9h0YxQoLczg66VLl+4NDAzsL5qoy+XKf+qpp+ZoDhl1HtpCFaizZ886zd51opGXl/fz8OHD92ps1tvOM6XA7NCO9hlLtHjqlSVS1A775JNPHs7KylrNsJeILMsx06dPn0iwU2svLzz1Rvqu6AJWq1UR/RfigICAOKB7UH4xzGtsAsU952n06NHBLVu2nAUm2Lt371urV6/Wv29HRJi4hOq+++7bXlBQIDqHhYiiKNbJkyfrn/tjeSwiHhQtTf0xGqTPacdoQ0zakJoqUv/6178+dLvdVhAkNjb24TJrQG8AACAASURBVFWrVnUlpKm3vT69KGo5PUtlZWUxZ/4AACDLcjzQ76x6wHlQnPDOeZIAQPrwww+flWW5o2gmZWVl+/r166d9OT+rY2sX/UxjQy8KAKTp06e/aeauk55jx47N+/TTT/PAu56MvBMzd+4AfMshCks4jcSU5u35lOG7777LP3To0Ccm7AsYMGDAq5xl0G/TjtXUi2JdPMyeF5rHBGAsRvUiVo1JoLQwh3arVq1KiIiImCiaqKqqlZ988kmq0+lzg82ok/P87xlRpD766KPcEydOfCxqqxa73X5uyJAhpJfQ6W2vSdyJhqjXQPuMZDMtMM47/FMHDx78nc1mE34Fc0hIyK2nTp26i2KnWVheGMuLoomVVzoBAQGRIsZUvZWTd2jXIMO8xiJQ3HOeAEAaMGDAVEmSokUzuXDhwuIXX3zxvOaQkTDRBEnIkxo0aNCSiooK0lwrLn766ad/Z2Vlaf/HjWY7aU3q9KSOSLpKi3ZWWgfVf4dU5yyRInkYCsCVgPn333//lglboWPHjql33nmn5wZLTYRJBJ6LBfECEhgYGCWSkcvlsgHl7jfhWIPQWARKC3PO08GDBzuHhISMFk3U6XReGj58uOePIVkeCE2k9DOPWVd6LwHIzs52Xbx40dQfAVy+fHntyJEj9+gOa21nBcVFPaja7qS8HgPLczKM+40ePXp/Tk6O8MvdAgICOnzzzTdPVO3WVifl9aJIx6nLddddFxQUFJQsYkjVGzaMJmk2KI1BoIwC414VfN11100FE69S2b9//3v79u3Tv52RdhXXi5JRZ6GJkwoAMGTIkKgOHTo8JGqzoiiO11577X0Om408KCNhImFWrIzS5BUqmmgRvzt16tT3zDwH2aJFixfnzZvneSVLfXViUaGCCRMmtJckSejtsGVlZRlVm0ZelBacSa6BJzBevX38+PFuFovlAdFMysvLj+oC4wDkjs1aWK/moA1FAABg/vz5zwQEBAgPSU+dOrVo7ty5OTqb9fYbiRNz+KnZr03vieZF6L9DKgOPSPlcED799NPLp06dWiRqqCRJ0aNGjZpE+oiyzQOp/J5tHq/S57u33HJLN0EbIC0t7SwYlwNnknPCDIzDlUmZ08FEmdavXz/b6XSyrlgk74kWczLyqLzSfumll1qnpKSMELW5srIy95FHHtG+8lXbcGmeE23IyfKmtGnr86otjDolzWaeOFr1MmLEiMUOh0P47+nDwsLG7tq1S/vGTp47X7UhWjRR8lnatGlzu2B+sGLFCo9AGQXGG2w+lN+NOTXQZrdqK7T6SfazZ8/26tixo3Acp7CwcGN8fLz276FoQwqm0BBs9bIPKC8ey8/Pfy8+Pn6wqN0bN26cPGDAgDVAFiDWq2qN7jIqunoAIHee2sCoM5DqkPVqXNprcqs74ObNm+/q27fvW6KGOp3O9cHBwQ8CW9gBxOqKGqqglFlbxuoy9+jRI2zPnj27ZVnmDpK7XK5LQUFBN4Ox508TfJ7y1ZjG4kEZ3mVo27btNNFEVVV1ffzxx6Q/NTASJ9KwjkfIvI4tWbKkW3x8/CBRu8vKyg4PGTJkHZCvrKThnKF3Ab4Nr94aoS4fo6Eej1dFHcIOGjRorZm3SVgslkHnzp3rB3y35IFxjIWRx0T6DixcuHCQiDgBXHkdD5BjTX7ltPirQAlNKzh79uwtgYGBfUUzycrK+m7KlCnpmkOsjmskVjyLV5oPPPDAREpZWShffvnl7MrKSkO3H+gdVW+PPh1tfQBjv6aw0qd1TJIHY3SsenE6nerSpUvfhD88RW5SUlKmt2jRwssjq6IuOjipron1c8011zwsmnh6evpW3SG/mv/kwV8FSouRGyy1adNmgmiiiqJUvPTSS/M1h4xEidYRaOJF+70KAOqOHTsGhoeHm3nH+Jp//OMfxxj20rwKaqcFPiGqK0+KJy+jshqVU9GkqT799NNHc3NzV4kaGhgY2PPo0aNDq3Z5vQ9WBzeqUyPvFtatW9cjLCyst0E6etxz5szZobGPZneDe1P+KFBGJ9lL6ffu3dvZYrHcI5pJZmbm10uXLi3UHWZ5H0aCxBxaaPfbtGkj9ezZ8wVRmxVFcbz66qsfAbnBGtnNM7zTp9sQ8HiGRhcQI0GGmTNnfqiqqvCffiYkJEy95ZZbPNNYeILlvPDUt48H9ec//1n4iYmysrJtixcvLgbzw9J6Ey5/FCgtVGHyLNdff/14ECyHoigV06dPX6Q5ROvwtMbPG2cidpB169Y9aLFY2ovYDABw9uzZbxYuXJjLsJUlqLzCRKKuxYrlwYkIFcmzInpRc+fOzUlPT/9K1FBZlq9ds2bNSGDEQzXbQNiuDVQAgBMnTtwXGhoq6j3B77//vozyUYN7THr8TaB4vScJAKTly5e3CgkJEZ7gmJmZufSLL77weE+sRs8SKdaVnLp06dIloFOnTv8QtdntdpeOHz/+C0KeJFuNhjo0USJ5T/XlSZHyIdlnJMo85wsAAMaMGbPQ5XLpvWhDoqOjpzz++OMhVbu8t+BFOj9LsAEA4JVXXont3LnzawJpAgCA2+3Of/TRRzcR7GHZ12DC5W8CpcXQexo8ePATABCi/yELRVHKp0yZspjwEa2Ds4YKIsMmFQDU1atX/y0oKKiNiM0AAIcOHfp07dq1JYy0acNQmpjRPKj6EiQjSF4i7QLCuqhQy7plyxbb8ePHhd92IMtym9mzZz8BlJgo1PG8ocTERPnll1+eI8tyguhvL1y48E1aWprL+Jv+gT8JlIj3BD169AgMDQ39u2gmmZmZ32piT0bDBiPvhEeUqvO5++67g1NSUv4parPD4cgaPnz4MgM7ad4cKyhO8qK01LdYGdlCEy0eb5JYBw888MC3DodD+/52LqKiol54/fXXI0EsmGz2e177J06cmBQWFjaQM61q3G53yfjx4xeL/q4h8SeB0mLkPcnLly8fIMvyVSKJqqrqev/99/VxB15x4vGcgLJWAQAWLlw4JiAgoJWIzQAA27dv/yg9Pd1hYCdPoJ5kL8lm/XZ9wmOXyEWF5FFVp5WWlla5Z8+e90SNlCQp4R//+Mc4qJkXJRynys3NHRMTE/O8qL0AAOfOnfts1apVnhcx6s+vv3jOXviLQAnFngBASkxMHCWaSUFBwS/vv/++599naVdkI3ES6ejVnz3++OPhiYmJwrEnm8126r777vNMyqR5SKzhHctz8gdBMoImTvp9nvNHjEUNGDBgXXl5+XFRwyIjI//vvffeiwLylAMg7APjuyS8vnP58uXHWrZs+Tbnb71wOp05Y8aMMbopQGsDDdY2/EWgtBjGnr766qtWwcHB+peJGbJ27VrPCaI1bKMrMK9HAuDdieDNN998suoVq0Js2LBhXnl5uZvDZpowUYPEOjuNjtUnPDYZ1QPvRQacTqe6detW2l/EU5EkKWbs2LFPAaWdar/KmyRhW0pISJBLS0tfTkhImAMm++zmzZun79y5U/82h4Y+z4b4g0AJxZ4AQLrrrruGgeA/tdhstt8fe+wx/V/z1Lhxg/dJJgkAjBs3LjwuLu4ZEXsBAMrKyo488MADWyi20e5gmfH+/L2hsjwmkYsM9YIyZMiQrTab7YCoYZGRkf9ITU0NB2MvSmSoV/2br7/+OurixYtfREZGTjZIg0peXt5/Bw8evBX4PGd9XZOot/biDwKlxdB7AgApOjp6iGjCR48e9bwS16iB83Rw0KQFwD5hUmpq6hhJkmJFbV69evUcAxtpt9ZZHZLV8IzKUp8Y2cgSLRGRqs5n7dq1Zryo+AkTJvwvsONQ1V8nJUH5TMrNze378MMP77VYLH8RtcuDy+XK/ec///lvwkesC6u/tAG/EygAA+9p5syZ0UFBQbeKJFj1WIv+31PMihPxCkwphzRs2LDgmJiYZ0XsBQAoKSnZ/fDDD+8m2GfkSfF4faDZ9suGWQWPvaIXG9pQHYYPH76ntLR0l6iRUVFR/3zhhRf0XhRNqFiBdAkApJMnT7Z2Op2ft2zZco0kScJTUjyoqupcunTpP7/99ttCoNel0flv0DbR0AJFG6dTT96YMWMGAoBFJJOCgoKNmzdvtgHfEIEmBjzi5HPVXLBgwaOyLCeK2AsA8MMPP8yl2Eezkddz8mdBMoImTvp9M4INAAA//fST/g2lhkiS1HLy5MljgE+UfH7uWV+6dKmzy+Wae8011xwPCgr6G+X73Bw4cOC10aNH/645pK8vo+MNTkMLlBE+0wtiY2OFX0+ye/fulbpDtIZsJE56mELVu3fvoLi4OOF5T8XFxTvGjh17iGGH0fDOqCP63ZWSAY+tvBcdw5sco0aNOlJcXLxd1Mjo6OjxI0eODAXj6QZen+3bty+2oqJilKIo/01MTPw9ICDgSRCcfEwiIyPj8549ey6nfEy7aLGOsy7MdYa/CRTtxFYvFoulp0iCiqKUPfHEE7+BmNfE09lZ4gQAAMuXLx8hy3JbEXsBAFavXv0J+DYOo+kEovOf/FWQjGB5TKx6Mqqban7++WftWy64kGU5ad68ec++9dZb2smbXssnn3wSXFBQcE15efl9lZWVryuKsqVHjx5ZISEhn0mSNBhqqT9mZ2d/3blzZ+17zlhtocFFiEWNXMhazJskRj5vUpwyZUrszJkz00DA7sLCwl/i4+PHA9370L9RULs2mk+kt73a5g4dOgSeOXNmlyzLXXhtBQAoLS3dEx0dPRa8G47eXv2aZLdefD1pkQTKrxolBVp78axlwlr/5k3SWv/WTQkAoKSk5POoqKheZgxVVbUYAIpUVbVJklQJADGSJEUAQFxVvnVGTk7O8rZt207TvMKat90btSGap1Wn+JMHpRcp7bYEANLf/va3G0FQVNPT03eAsffE8qSYV1uazZs3bx4iKk4AABs2bJgP3g3AaAqEyHSIxipOAGSb9cd4PGSeWB2sX79e2IvyIElSjCRJ7WVZvl6SpJskSWoPAAlQx+KUnp7+sU6cPPDUE6ltk9pGvbaXhhIoVnBcu+21xMfHXy+a0ZYtW7RzW4xEiqdzs8pRvSQmJj4taqvVaj344IMPev7jjjRsoXUwEVFtLIJkhEinE54bNWLEiL1lZWX76rwUtYCqqpV79+6d3L59+w8pf/6h3eZp537TZvzJg9JCmj8iBQcHCz29raqq86233joP/MLEO+/Jxzbt9u7du68PCgq6XcRWAICtW7cu0OQj0tEaxdWwFuApA2/dGZ7z7du3LwA/x+l0Zv3nP/8ZdfPNN/9I+YqRMPFemBukrfiLQBkO7wBACggIiBNJ1OFwZObk5LirdnmusCLeE6kMEgBI119//dPgK7JM7Hb7mWHDhm3jsFF0QmaDN7I6xKisrLqkeaDVPPDAAzvsdvupui2CefLz81cMGzbsgYceeugg+LY3Ul1wTVjV/KbBaWiB4h7egQmBcrvdxVWbosLE4z0RbVy4cGGL0NDQv4rYCQBw+PDhRU6nU9EcMitOvILqFw3QBLxl4znfzPPvdDrVQ4cOLartAtQUl8uVvWPHjnEJCQmTVq9ebSV8RaTsIqMGVn+oExpCoIw8C9aETaEgo6Ionsr3wOOZ1Mh7Gj58+BhJkoTmsbhcrtyRI0d6/tm4pg2L1tjqvXHVIaSyGHlMRmJPFPcRI0asdjqdl+qqICKoqlqRlZX1yaBBg+6+7bbb1ms+ovUpI2/RqL2Q2k690tAeFAB7uoF2W3K73eUiCQcEBIQBueJ5OzdofkOy2ct7uvPOOy1RUVGPi9gIAHDmzJkv09LSKgn588zl0TdA5A94RYp6/i9evOg6e/bsknq3XIOiKLZLly59OnHixDtbt249+9dff60A3/mCHniEujY88HrBHwQKgB17qj7mdrtJ7iyVwMDA6KpNXk9DxHvysXfx4sWDZVlOFrFRUZTy55577nvdYaOGZeZqCITtxoyoF8Ur+D71Nm7cuO8VRbHVYVmIuFyu7PT09Lcefvjh25KTk99855138oHcPzzUhjiR0gHNWr9dpwQaf6VB8ToZlZWVpSI/tlgsSZ06dQo8e/Ys6W2UZjs0dQiakJDwdxH7AABycnJWrlu3rozDLtHgOM3+pooKf5wLT5kl8K0XRXNcu68/Xp3epk2brNnZ2Stbt249sq4LoShKYVFR0c979+5dNWzYsP12ux3AdyIpaUhHai/6yca84uQ3NKQHRapkqvcEAFBaWpoumEfA888/375qm0eYAPhOlI+Ny5YtSwoODr5T0D71u++++1p/DHwbmpEnBUAvhz7tpoRRGWlegXAcb+nSpUsp+dWsAKpqtdlsmy5cuPDvlStX3t+uXbubW7RoMW3IkCH77Xa7dmY8qV/oy0nzCHkn9Br1iXpH6FZ4LeepFyCfR1vA+7GEgE2bNvW54447aA9AEvn999+nduvW7WugT+/XP9ZC6vwk273sLSoqeiEmJmaaiG2lpaW7o6OjxwC5MWkfO+B5FEcfhyLZ39QECoAyZ063bdS2WI/AVAtEcXHxp9HR0UL/Q6coSondbv/d5XKVut3u0srKytKysrIL2dnZ57Zv3542efLkSwY20+KyAGTxJXlPpDbj2dcLmOiIok5p6CEeSaxIn0kAIK1Zs+b8HXfcIZRBcnLyzQDgufqxTgCpQ9Ns9rItNjZWjoqKelTIMADYv3+/kfckctXXp6OnKYoTgGYoxjhG86IkwppUtxIAwK5du74ePHiwqEBVJCcnjy4pKXFrDmvt89yZ5onDatci4kRaaN6W33hPAP4RJOe5AgIAwNtvv51fWVl5QSTx2NjY/r169QoBuiCZ6cxeDWj37t23ybLcQcQul8tV8Pe///1Xgi2iwxB9eXjL0FTR1wHrvJPqlnRHVAUA+Pvf/77V5XJdFjEmMDAwcenSpf8D3p4ZyUvTe3m0mJNReWoqSF5l5jhWp/iDQNEgBaOlsrIyoTceyrIc/uGHH/bTHDLq3CS31ssG/X5ycrJw8DQrK+vHixcvav9AEb0n8/CUmad+WRcBuHz5sjsjI2OFqHE9e/a8DzShCmALlVEwnFQWXq+JZ0hH6gsNhj8JFGt4V01WVtZu0YS7du36d+DzMnhPSHUD6tevnyUsLOxuQZPUr776ajkYdxj0nvghld+ovvR1bFjfixcv/gkE67dFixZ3tWnTJhi8hYn1uhcecaKJjsjwjseT0uZb7/iTQAHQT0z18Xnz5v2qqqrQXzeHhYX1WrFiRTfNIaMOTsvfZ1mwYEFf0T9EKCsr2zd16tQMgj3oPdUtvF4UdQrHzJkzL5SWlgq95SAgICD2448/vhXYYiTqNYl6T7yC5DfeE4B/vG5F5DvSxx9/XGS1WreJZjhw4MApYM7TIMXIPGspOTn5AVFbTp06tQLYncWM90RqWH7RyOoRs16UUb17pX3s2LH/ihrWo0ePu8E4zkRq82bEiBZ74vHMvcpK2a83/M2D0kMUspMnTwrHAUJDQ3sfOXLE82efvMLEEifo0aNHUFhYmNBfYKmq6pw5c+YG7SGgdxAR7wnhw4yX6rWkpqZuUFXVKZJpQkJC/xtuuCEEzMeZWEJFmirDij+JtKUGbWf+IlAsj8pHJJ566qlf3G53vmgmXbt2feOVV14R/n86oATHv/7669skSRL6t+CioqLtK1as8MyI11/xeRfS90npNUdqw4uieVMAALB+/fqygoICoT9WkGU54vXXX78FyFMHjOylCY6bsl2TgLhftRt/ESghDh486MjIyPhS9HeyLLd8+eWX34uMjOQZYnqgzU2RkpKSRIPjcPz48dVg3FFEXXBEDB6RYnbqI0eOrBHNtFu3bqw5VDyekoi3xDPFgFQfepsalEYpUAAAEydO/MbMA5xhYWFD0tLS/mXwNdrkOC+BCg0N7SuSt6qq7pkzZ3riZ0adgmu4Aeg9keDxokTFSZsGzJgxY4fozZqWLVvqBYpXlFhCxfunGSRx8vuLXmMQKKKqL1++vCQtLe1zMwnGx8dPunTp0iO6w1yi5FmWLFmSHBgY2FkkX6vVenDdunWl4NtAWGKk/QzATxtSI4R2DmjnQtH+ZsuWLdbS0tJDIhmGhoZ2fOqpp1rqbBDxnIweeeK9gwe6bRJ+0c78RaBolcGspBEjRnzmdDqzTeQnJSYmvp+bmzsS2I8TECeLwpX5T0LeEwBAdna2Nm4hOrQAoDcu9J58YdUPqT61n3GdkwsXLgj/wefo0aN7MfIQiTXxiBOrHbHajN+0IX8RKF68Ku7gwYP2Xbt2vWUyrYCWLVvOLykpea5qn8eDqt6PiYnpJ5rh1q1bt4LYUIPUsVCMzMOqT5ZoEM/L2rVrhQWqffv2fSj5sDwnljgZPezeaMUJgG8+Ul3lqR82aeeIeL3FgLDv9XhAfn7+B/Hx8cJ/ie7B6XQu+/DDD8e9+OKLnvcy6e3V2hcAALLb7T4qy3ISbx4ulysvPDy8b9V7x0XjCaS4AgDZTferBtbAkKaJaNsf6S0HtPbn0xYtFkuA1WpdHxQU1IrXIJfLVRAUFPRnIMeHaEFtWmySNRwFwnGARiROAP7rQdFccv1nAADw5JNPTq+srMw1m5nFYvnr888/vyMjI+M2YM/wleHKZNFEEXECACgsLNxe9Z9ltKs4b1Bc+1s9ftfAGhijOhL1Zr0Wp9OpXL58eYeIQYGBgfETJkxoBfzDOiNviTa0owXFaXXjl23HnwSKtzH5HP/hhx+KV65cOUlVVe0rLYSQZblTSkrKOofDMX/jxo3JwBCq22+//QbR9M+dO/ebzn7WQgts6vHLRuXHsOrR1HL69Gmhh9cBAIYMGdKZkBZLnGjvLeMZ1un7TKPyuv1JoPQYjZm9jg8fPnzP4cOHZ9YwT8lisYzq37//7+Xl5W9s2bKlLRAEqkWLFsICtWPHjuM6u3kaFG0fvSd+aHVlVL9cF4/NmzcfB0E6dOjQGfg8IZEguP4YMNb6uvBbGjoG5VmT4gGkNx3q41Gy7rdw4cKFiW3atBldS7a6nU7n2ry8vO/feOON9XPnzrUDgFxWVvZZRETEfbyJKIpiT0hI6FlYWFgJ/LEn/RsPWVdF/Tbijf5urGfNGwOlxaPk8PDwwNLS0l2yLIfxGlNQUPDfFi1ajAc+r4hn6A+Ebe1av8065lf4s0CRXk1BEijt7yAiIkI+d+7cay1bthxWm0arqmp3Op27S0tLd8XFxT0aEBBwFe9vbTbbkYiIiL/CHw2O5cKbCY77fUPzA0hTRjzbIm1Pf6GUy8rKlkZERNzIa4jD4TgTEhIyCIxjS0ZDfto2MLZZx/wOfxriGQ1taNteVwur1ap07Nhxak5OjtC7y42QJCkkODi4b0JCwiQRcQIAKCsrO6mxUXRIgWJUN+jrlGtIR1pKSkqE/h7dYrF06Nq1a6AufdpFiXWnTlS0SGX3axpSoHgqzlSntVqtytVXXz09KytL+Hm9uiAvL+8kiAsS7xWx0TS2Boa3LnmXaoHIzc09CQJIkhQwevToBGAP42jCxRsQp/WvRtVe/MWDYjUS0jHDk2K1WpXWrVu/cfDgwamqqlbWrfls8vLycjS7ImUDwjZSexh5HVztLz8/X3iKy3XXXed55IVLBDkWfZloZW1U+INAsRqJWW+jmu7du3+/YsWKsS6XK6+uCmBEYWGh5/k7XlECzfdYNMpG14CI1Cd3uysoKCgWNSQxMTFOJA/wbh+kC1aT8Zq0+INA6SF1UtqVhXRbVf97adiwYfv+8pe/3JOfn7+qzqxmcOnSpWJge0c04QLwLVOjbWx+Bq1zC4tGdna2sEAFBweHcuSrP87aNypjo6QhBIrW2YyuXiIzrX1OzKpVq8oSEhJe3Lt37wv17U2dO3euRLNr5kqp30ZqD1Id07wV4vk5duyY9vxyERQUFMrIl9aOeS9Wjdpr0uIvHhStYfB4T6TgoZ7qW8w333zzqv79+w/IyMiYo6qqo/aL4kteXp4TyI3PqDHqQcGqOUZ1aHSh9FkKCgqEXv8LACBJktEUH1o7Idmpt7fJ4C8CpceoUfBOYtNSPSlv27Zt9nbt2s2ZOXPm4Nzc3CWqqtrrsjBJSUkWTbk8axH3Hql7RM6H17GkpKQg0czcbrf+4mgkltp9I8+qydBQAkW7ihk1CKMnvblFCgDkadOmXUpMTJzx9NNP98vMzJzrcrlMP3DMIioqKohSJgB642Jd6ZtkY6xHWPVp5Jn4tLG4uDgL4TdMHA4H686yyPlt0m3Bnzwo1tWCR6RY80S0+Dxbt2DBgsKUlJQPk5KS+v7yyy9jCgoKViqKYq2tgqWkpEQwysi6Ouu/i9Q+LEFiXUiq99u1axcBgjidTrNee7NqB4ENbUAVKvwRJyJdzUgiBVW/0W6zOrj+UQdtnhIAqPn5+eqgQYN2AsDOpKSkgDlz5tzYs2fP21q0aNErNDS0i8jzVlqSk5M9t5RJZdGWE/FPaN4vAICakpIi/E9BhYWFRbpDpPbJa1eTpSEFSisQtGP6hqEXI5JQeSB5h6SHRvX7KgDApUuX1OHDhx8EgIMAMDciIiLgxRdfbHPvvff2uummm6ZRS0UgLi4uTlcO0XgHUvdo61l/saN5TyoAQHx8fBwIkpGRUaDJqyGeiW0U+OsQj9RZ9UM70jNLPI8E6CE91e7z8KjValWnT5+eOXbsWOF/lY2Pj0/mKDPPcaPPEH7M1DGpDalxcXGtRTPfunVrIdAvkkgVDS1QPLEWksjoh3s0QWIF0LVQ356pW8uHDh1yuN1uoXkvERERKQwbaDEOpOFhnafqz6Kjo9uIJKooinXp0qVlusMoTgQaWqD0sIY9JEEy82IvIxFgiZUEALLdbhe62xcWFtaO8hEpBsUj2kjtYlTnrFihGhoa2l4ks8rKygzNrn6IxwpDNDv8QaCMXG1WvKamQkXypPRrn22bzZYBAoSGhnYJCQmhNTYzwzyk7uA5H17tJzQ09BqRDOx2ewawpyEhKAAAGS9JREFUY09Gn5G2myT+IFB6aFcrnuEbz9sJeb0qkjhJACDl5+efFymQLMtRM2fOvMogT/ScGh7ekEM1b7zxxlWyLMeIZGKz2dIoHzV5wRHFXwSK1ghYwzwjQWK9TpUVn9LjE8jMzMwUEigAgDvvvPNPhMOk+IZ2Tfs+UjsY1bPheRk4cOD1oplmZ2ef0B3CO3kU/EWgjBAJlNPESeQPDpmitX79eqEXlAEApKSk3Cb6G8T/adOmTS/R3/z6669HNbtGd/KatXD5W+FpJ4c23CLeadNt0z7zCX7r0qYdg6CgILm8vPyXwMBA7gl6LpfrUlBQ0M3wx/vHtQvLuwPCGqk9RN6R7/PHHQ6H4xeLxXItb2aKopSFh4ffaLfbXfDHhVPfFrRtgtUe9NtNDn/zoIyGetptM0M9kT8+pHpTlZWVanFx8TGRggUGBiYtXbr0ao6vNukG14gwunkDM2bMaGmxWLqIJGqz2fbb7XY8x5z4m0CxMBIpo6Ge0X/ck65YVLHKyso6IFqAPn369BX9DeK/PPLII4NAcBSSm5u7u47MaZL4o0Cx7pqwRIrlTbHEyVQwfcOGDcL/KJuQkNBP9DeI/9KqVauBor/Zt28fCpQA/ihQAOZESkSozPzvvVdeL7/88kmXy1UoUqjw8PBb33rrrVYGX/O3uCBCYMaMGQlhYWFCHrHb7S4cN26cUGigueOvAgVgXqRExUkfnOQSqsrKSuXy5cs7BMsU+Oijjz6kO4aC5J+w7qZJTzzxxMOSJAk9bF9YWLg5Pz/frTnEM++qWePPAgVQM5ESESveALrXkO/AgQMbRQvUsmXLvyUkJJitdxSz2sVUfYaHh0stWrQYKfq7U6dOkdoLbf6d9vNmi78LFACfSBkJktFdPr1Q0aYAeA0fX3jhhR2KothEChMQEJCybt06z5wo0i1u7RppGJjnZevWrX2CgoKEnr9TFKV88uTJ26t20XPipDEIFABZpEhzhIwWWuCcd3jnNcw7deqUPS8vb5NoYa6++urHgG+CHgpV/UKqc5/9zp07PyaacGFh4fpt27ZVaA6ZFalmJWSNRaBo0CYyinpTIsLkJVJbt25dIWp0RETEPStXruxUtYsi1DiQAAC++eabNuHh4UNFf7x79+6fwHc4RxMbo2Gf0e+bDI2xc5BsJj3hTZp5rt8nzSTXzxym7UsAIFssFrm0tHRtcHDwVSKFKC8vXx4eHv4k+MbDSFMbgLBGao6+3dCeUqieOW6z2T4OCwsbIZKJ0+nMbtGixZ1lZWXa2eO0cALpyQKfycJVNPm20Bg9KCPXmDUFQTReRXrkwKvhOJ1O5fz58/8RLURYWNiwTZs2XQv0x3mQ+oPntSfSxo0bu4SFhf1FNPH09PRvy8rKFN1hjENx0BgFCoB+cvXipN02G0SnxqA825MmTfpOURRtfIEHuVevXi9VbbO8Qnx4tG5gTiMgfda7d++X4Yo3xY2qqs433nhjOdA9IJ7hXLMVrsYqUAD0E2t0l48VQCd5SYZxqFWrVpXk5OSsEi1AaGjoPbt37+5etasfigJjG6k9SMM87bYEALBr166bQkND7xFNPDc3d9WiRYsKdIdJbZd0QdUfb3Y0ZoHyYORNafdZ3hRpGEj6jBgX+PTTTxerqqqdhMeDdNNNN82++eabg0BMjFCsaoZI/Updu3YN7N69+2yO33mhqqr7008/XQD0uBFNjLiSF7GlsdLUGrrIa1KNXt+iD4xr1/rguQwAUm5u7r9btmx5v6jRhYWFqfHx8e8CXTABmmGAtA5heU0+baCgoOD5uLi4VNFMLl++vLJVq1aTgD73jvY0A94sqaIpeFBaeG7bkk4479CPFXBXFyxY8LEJLwpiY2Nf2rp169VAv+MImn3SNsIPqz59Llpbt269OjY29iUQRFVV96JFiz4G45gTzYPCIDo07UbO600xr57g7UkZelFZWVmpycnJfxU11uVy7bnmmmsGnT9/3nMrmnSbGcC4ESNsaN601ouWAUDq0KFD0MmTJ1cHBQX1Ec0kOzv726uuuupV8A0lkKYY0ObikS6YHprFuW9qHpQWVhCdNWwSDap7LVOnTp2jKIpV1NjAwMCbDxw48IzmkH5eDumuXlO+wNQFtLulxHo+cODA02bESVEU29SpUz+q2iWJCo8XT/pes6M5NXCjW/mkqygtFqWPS3l5USdOnPjfLl26PGfCxsqMjIz727VrtwX44hD6bYQNj/ckAYCclpZ2e7t27VYCQJBoJmfOnHm/c+fOC8D3rq/oGzSa/Xlvyh6UHtKViBULEFm80rj77rsX2+32cyZsDEpJSVmyffv29kAXTwD0osxgJE7Vx3799deUtm3bfgkmxMnhcKQPHTp0MRh7S7RtVhyVtN2kaU4C5cEo+GhGnLwaVlpaWuXKlStTKXkxkSQprnfv3l+npqaGg2+QnPoz0XyaGbx1KD333HOht99++1JJkhJM5KOuWbPm1dOnTztJnxksQFg3e5pzw6YFy/XP5xkN8fTDPM/v4NKlS6mJiYnCAXMAAKfT+V379u3HZmdn0wKmAL4NGRu2L7QZ4z6xp+Tk5IC0tLTPLRaL/qWCXOTk5CxLSkpKBd9YJWt6Ae35O+05B/A+t83mPDdHD4qGkdst6lHBsGHD3nQ4HBlmjLFYLA+dP3/+7apd2nSD5nyBMQNtiCwBgHT27NnXzYqT0+m8OHLkyLd1h3m8bp4LT7OlOQuUUSMgeSfaq6Jh49q1a1fF8uXLp8CVK6QwwcHBz9rt9n8DfV6UHhQsb4zqqrpe7Xb7rNDQ0Akm83H/+OOPL23evFn78kKRsAFQfkdLq9nQ3Bu0mTlRPEM9r8Dr6dOnn7n66qvHmTXS4XB8EBISMgn4r7jNqhFT4B7aVVRUpIaEhAhPxvRw5syZOZ07d55ftUsa3oncvdNeALXpgWa/2dCcPSgSpIZgZpjn1Yi6d+/+SXFx8XYwSXBw8PiKioqpwBZU0H3WnDESp+rjFRUVU2oiTsXFxdu7d+/+CeEjVtvg8sChmYkRieYuUEaNQUSkSEFNFQDAarUqzzzzzCSn05ll1tCQkJApTqfzoxdeeMECfPGo5ipSLHGqPvbkk08GOZ3OOSEhIVPNZuR0OrOefPLJiVar1fOuJ1FRAsK2nmYvUs0d0gTNAAAIBAALAAQDQCgAhAFAJABEA0AsALQAgJYAkAQArQEgBQDaA0BHALgaAK4BgC4AcK1nmT179lC3212q1gCXy7Vpw4YNreDKHJ1AYA8vm5tI0SbceuooEACCfvjhh3iXy7W6JufB7XZb58yZ8wBozi9cOd/XwJXz3xGutIcUuNI+kgCgFVxpN7FwpR1FAkA4XGlfwXClvenPaXM9lwDQTAutg2cCn9HMctaUA6/GtWbNmtvvuuuuj0DwxWdaVFU9lZGR8UD79u3PAfkK3BxjUkaekwQAUlpaWse2bdv+KElSlxrk5V67du3/DRkyZKvmGCn2xIo/Gc0cxyEfoEB5EJ0TRXuAmPT4i8/V78CBA8NvuummV/XHRVBVtcBqtY6OiopaB3wiRTvWFOASp9LS0sERERGLJUmKr0lmhw4devWmm276TnfYSJxY855oMalmLU4AGIOiQYsPiAQ8WUHz70+fPv1+TQyUJCk+MjJypcvlmvfjjz9GALlT+vysJnn6IaShj089LFmyJMzhcMyKjIxcUVNxOn369HsMceKJQRnFonzaS3OmqTVYs/AM88x6UdopC1rUtLS08e3atXu6psarqnq6qKhodHx8/F5oPp4US4Cr1wUFBT1jY2MXS5J0TU0zzMzM/CwlJeUdQt56AaoN7wnA+zw1hXMmDHpQVyA1BJ6rHO3qyIopeJDat2//wenTp9+tqfGSJHWOi4vb4nA4pn355ZchnsO6tddPKMcbAzTbvcr75ZdfhjgcjqlxcXFba0OcLly48ClDnHjag6j31OzFCaDxNtK6oKZeFCsOxbobox4+fPihbt26TYNauGCoqnrR4XBMGzJkyFebN2/mjWM0hg5Aa6s+581ms90bGho6W5KkDrWR8YULFxa2bdv2XYINtMA4r+eE3pMBKFDesCZCsmaX84iU53f6fFQAUHft2jX05ptvflOSJNN397SoqrrHarW+EBUVtVOTDxC2geN4Q2MUT5MAAEpKSnpERka+I0nSn2spXzUtLe2jDh06zAXfi4unrvRes6g4UefP6fJpluAQj42+cYgEQY1e2epBAgCpV69e/92+fftzqqo6asNwSZJujoyM3Ox2uxcXFhZq/yAUgO2N+MtFizX/x6sshYWF17rd7sVRUVG/1ZY4qarq/O23356jiFP11wgLbzsgtYdmLUYkUKDo8MSi9G46LRZlGI8CAOn2229f/9VXX410uVzZtVQGWZblR2NjY48oirLKbrf3B1+vkERDChWvXZLdbu+vKMrK2NjYI7IsPwq11J7dbnf+Dz/8MLpPnz5rKfaQRInkFenbBs1bQo+JAgqUNzyNg3bV5A2UM72pUaNGHX/88ceHWa3WnYTPzSJJkjQkODj4F0VR9jmdzkdXrVqlDaYbCUJdChZPHtWfrVq1KsTpdD6iKMq+4ODgXyRJurs2bbPb7b9PmTLlweHDhx+gpGvkRYu0A326pLyaNf7izvsTrHk1+mA5KR4VQNmmBcx94lEAoMbHx8uHDh16vnXr1k8QbKoNihVFWVlZWbls06ZNG+6+++5KnR08mOlAvGWp/t7q1auD+vfvf2dQUNBfZVm+HwBiTORrSF5e3rIBAwa8duTIEScYnB8gB8b18SajtxWwAuOk/WYHChQZ2h09z9ooYM4SKu1vDTvBzp07B99yyy2zZFmOrN0ielGgKMqPiqL85/Tp0zu7du1arrOnvqiuh2PHjoV17ty5jyzLw2VZ/gsA1GiCJQtFUcr27t07tVevXquB87wAfd4TKyjOCoxr1/rtZgsKFBleL4omVHrPiTbtQNalC0CIT0yaNKnVlClTXo2MjOxfe0WkUqmq6n5VVbepqrrt0qVLO9q0aVOs+bw2O051PWdmZsYkJSXdKknSnyVJuk2SpJ5g4k8LRCkvL9/97rvvvjR16tQs8BUm7TnxlJsUXySJktFrfNF74gAFig5JpEhCJeJJ0USK1CE86+pl//799954441TZVmOrbVSGqMAwClVVc+oqnoWAM4qinLGZrOde//99zNTU1MV3fe1HcurDlNTU+UJEya0CQ8P7yjLcicA6CRJUidJkjrDlbcA1FtMVFXV8jNnzrzds2fPr8vKylRgi5NnTRMnM56T/hx7mVdrBW3koECxoQ31aJ6UXqxYnpRe3PR5EEXq2WefjX399denx8TE3FObBTWJAgAFAFAIAFZVVUurjnmQJUmKAoAIAIirWmplnldNKCsr2/Txxx/PmDhxot5rotU/AD34zfKceG6WaPPQbzd7UKDY1HSox+NNaX9PyhOA0LC3b99+x//8z/9MtFgsV9e4lM2EysrKjD179rx22223bQbyOQRgixPP0I43KI5DOw5QoIzhCZjrBcro7l6tiFRUVJS0adOmQd26dXspKCioTY1L2kRRFKX4woULnzz44INfHDhwwHOHjjS0FhUn3rt1tKGddq3fRgAFigcjL8qzrRcao+Ge0dQDmkh51tUNv0ePHpb//Oc/j7Zt2/bZeo5P+TWKothycnIW/fOf/1y4fPlyK/ieJwDOiwGwvSSjYZ1nW5s2gK8goUDpQIHiQ2SoxzvcYwXMWSIFQOlAI0aMiJg9e/bo5OTkRwMCAlrWrMiNF0VRirKyshZPnjz5iyVLlpQC/wUAQFycRId1KE4CoEDxQxrqebb9RaRUAFA7duwYsHz58rs6d+48OjQ0tEeNSt2IcDqdZzIyMr4cP378D2vWrKkA+rnhrVOju3ZmxQkY24gGFCh+WF6UZ81zZ6+2RcqzJnau5cuXX9+/f/9R0dHR90mSFGym4P6MqqoOq9W6/sCBA9/cddddv9ntdgC2x1RX4mR0xw4Ia6DsI1WgQIkhKlJGgXMjgeKJlwCQO4JXRxk9enTUSy+9NCQlJeW+0NDQXuAHt/trgLuiomLvhQsXfnr99dd//uqrr8qAXPcA5kSeJDq8XhNJoPT5kPJHCKBAicMbNDcrUnrPS2R44lkzl8mTJ7cYPXr0gOTk5DvDwsL+LElSqHAt1DOqqlaUl5fvzM7OXrdw4cJf3n777UJgD+F4hd2zJt2t4xEonrt1KE4mQYEyR12IFOk4a7hn5E1pt6lLv379gmfMmNGzc+fOvaKjo3sHBwffJElSnT9iYoSqqg6n03m0uLh456lTp7a/8MIL+/bu3VsJYqLEat/UYTHQh24oTvUMCpQ5SPVmVqRYXpXRcI/HM/CsacMOr6Vbt25Bb7755rVdunTpFhsbe0NISMg1QUFBnWRZjjaoE9MoilJaWVl5xm63nyouLj5x8uTJgxMnTjx+5MgRmiCBwXHtWg9tSGcUd6IJlxlxoh1DdKBAmYfmRXm2eUWKx6OieVIindGzpgkUax8mT54cP2DAgHatWrVKioqKSgoLC0sODAyMDgwMjJFlOVaW5WBJkoJlWfa8ZwoURSlXVbVSURSHoihFLper2OVyFVdUVOSWlZVlZWdnZ2/bti0zNTU1z6DeePd564LlOfEIlIg4AfiKEYoTJyhQNaMmIsXyomj7pDSAsNZC6ii04C3PNitdFvq60W/TvEPez/XbettEPCeSSOk/R3GqBwIb2oBGjgrenUK772mIEng3SgX+uMOkaL6jTUOm7LM8CC2kTqu3VdIc06493yV1bO1av006xmubkRix1rR89HbyxJxY8Se9IKE41QMoUDXHrEh5PCEF6J1NK06ebaMYjBYjoaKJlF6sQLct6j2x7OEVLFYaWniEidd74vGaUJzqEBSo2sGMSAH4ChXofqcXJ/2aJFK0YbtelPTHQfe53n7SMaDss/In7YsKkX6fZxirFxajuBLP/CYUpzoGBar2MCtSAN5elH6tFyVtOnqR8nxPL1SkfEm2kSAJFq2cRvCIFG1ff5wmAiThoA3PeASJJkwoTvVAY55N7K/wdjQRaB2A1BlIYsTymEjovTGSh0bz3PTHaJ6e/jgpXyP0Q06ScNCGaLxr1qLNW79N2kcEQYGqG1jxINbwRP85y0sw+o4e0m/NiJX+GI9wsYahZkXJs03zlkjPxfGIEe03+jyAsKbZiZgEBaruEBEpnjR4vAUjeDoWyzYjIeGNh/Gk5YHlPZKEg7QYxZSMguC0OtfbRLITqQEoUHULj0iZGQLydFrWb7T7/tyZSOU0EiOaF8U7XYBnOIfiVE+gQNU9LJGiIeINebZJ+/oORvo9T6fTw7KfdwhplI+od0SaWKkXJtYQjuUxkeoGxakeQIGqH4xEihV3YsESJpHf0NYsb8zIuyClb2Qfj1DweD1GMSgRjwnFqQGpjTtMCB8885Noa96FNTfKKKhNyptkd222GZqYabdpYiGyiA7jRL1LFKc6AgWq/uH1pmgCUtsLKQ/SmmW/WVjeln7NEicAMe+IdyiHXlMDgwLVMPB6U57t2hYr0u9J+deVJ8Xq7EYiVRNPykiUWB4cTxmQWgYFquEwEintNmvYp9/n/YwleqQ8eW2mwdPReTwn7baoaOk/p+UpYjNSh6BANTy1IVTabVHRIqXDWhvZzYPI0M6zNvJ8jI6T0iGtaTbSjiF1CAqUf8DrmYgIlXabV5h4vafaaDc0T8WMF8XaJ23z5M+yF6knUKD8CxFvSrstKlikbf0xUro0G80O8YxiPjRhEd1mpc+yj3UcqQdQoPwP1jkxI1T6tch3WXka2UqDNZQSESmez1hp0uxh2YrUMyhQ/ktNhEq7XRuCVJvxJw9GcSjSsdoUIxSmRgAKlP/DK1T6fR6x4v2MZkdteFD6YzwCxfsZKT8UpkYEClTjQUSo9MdE4kpmh3Ssz0REQcT7EREiFKZGCApU48PonBmJilkxEs1Xi5EAiIhLbYkSz+dIA4MC1XgxIxg8x2rLa6Jh1pui/dbMfCUUpkYCClTjh+cc8s6zEv1ubSFyi78m0wFQmBoZ+LqVpkdNBItFXXVus7EhFKRmAHpQTReRc1tXosZLbYsNClMTAQWqeWD2PDdE+zArLihKTRAUqOZJXZz3mtzFMwMKEoIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCNLk+H+/qHe/3UuXiQAAAABJRU5ErkJggg=="/> - <pattern id="pattern2" patternUnits="userSpaceOnUse" width="296" height="374"> - <use xlink:href="#image7"/> - </pattern> - <pattern id="pattern1" patternUnits="userSpaceOnUse" width="296" height="374"> - <use xlink:href="#surface8"/> - </pattern> - <pattern id="pattern0" patternUnits="userSpaceOnUse" width="296" height="374"> - <use xlink:href="#surface10"/> - </pattern> - <clipPath id="clip2"> - <rect x="0" y="0" width="296" height="374"/> - </clipPath> - <clipPath id="clip1"> - <rect x="0" y="0" width="296" height="374"/> - </clipPath> - <g id="surface8" clip-path="url(#clip2)"> - <rect x="0" y="0" width="296" height="374" style="fill:url(#pattern2);stroke:none;"/> - </g> - <g id="surface10" clip-path="url(#clip1)"> - <rect x="0" y="0" width="296" height="374" style="fill:url(#pattern1);stroke:none;"/> - </g> - </defs> - <g id="surface1"> - <rect x="0" y="0" width="296" height="374" style="fill:url(#pattern0);stroke:none;"/> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + width="500" + height="500" + viewBox="0 0 499.99999 500" + version="1.1" + id="svg29" + sodipodi:docname="drips.svg" + inkscape:version="1.1.1 (1:1.1+202109281949+c3084ef5ed)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs9" /> + <sodipodi:namedview + id="namedview7" + pagecolor="#505050" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:pageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="0" + showgrid="false" + inkscape:zoom="0.77013483" + inkscape:cx="138.93671" + inkscape:cy="44.148114" + inkscape:current-layer="svg29" /> + <g + id="surface1" + transform="matrix(0.64131719,0,0,0.64131719,63.670174,26.053743)"> + <path + id="path2491" + style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:25;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 297.54125,93.736223 c 0,0 -97.66331,138.251507 -121.53965,192.350587 -18.87491,42.76677 -57.15972,130.87766 39.81975,195.81645 29.12336,19.50142 58.91773,23.5263 74.80026,24.20173 0,0 0.13482,0.009 0.14164,0.009 0.10579,0.009 1.07732,0.0644 2.65043,0.1203 1.18948,0.0264 2.10887,0.048 3.07569,0.0429 0.96661,0.005 1.88658,-0.0154 3.0757,-0.0429 1.57468,-0.0558 2.55226,-0.11128 2.65471,-0.1203 0.007,-6e-4 0.13746,-0.009 0.13746,-0.009 15.88304,-0.67569 45.67384,-4.70114 74.79595,-24.20173 96.97952,-64.93879 61.82793,-145.05288 43.768,-188.17014 C 400.23449,244.34457 297.54125,93.736223 297.54125,93.736223 Z" /> + <path + id="path1818" + style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:25;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 443.84765,92.381799 c 0,0 -48.16663,68.181201 -59.94158,94.860971 -2.86326,6.48757 -6.61781,15.10166 -9.07243,24.83746 19.63103,31.5125 37.35873,61.71249 45.25044,79.83477 8.2426,2.78413 15.57473,3.62873 20.34852,3.83173 0,0 0.0695,0.005 0.073,0.005 0.0523,0.005 0.5301,0.0327 1.30589,0.0603 0.58661,0.0131 1.03955,0.0244 1.51635,0.022 0.47672,0.002 0.92994,-0.009 1.51637,-0.022 0.7766,-0.0284 1.25967,-0.0561 1.31019,-0.0603 l 0.0686,-0.005 c 7.83299,-0.33342 22.52479,-2.3206 36.88678,-11.93761 47.82688,-32.02551 30.4922,-71.53514 21.58567,-92.79906 -10.20203,-24.3567 -60.8479,-98.628261 -60.8479,-98.628261 z" /> + <path + id="path1969" + style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:25;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 151.43377,160.12858 c 0,0 -52.404887,69.01788 -65.216644,96.0251 -10.128041,21.34992 -30.671413,65.33765 21.366594,97.75623 15.62724,9.73547 31.61194,11.74648 40.13431,12.08367 0,0 0.0737,0.005 0.0773,0.005 0.0568,0.005 0.57775,0.0324 1.42186,0.06 0.63826,0.0132 1.13074,0.0236 1.64953,0.022 0.51867,0.002 1.01146,-0.009 1.64954,-0.022 0.16545,-0.005 0.13946,-0.007 0.27921,-0.0132 2.08229,-31.72555 14.62939,-60.5284 23.20514,-79.95934 5.73155,-12.98657 15.77012,-30.87394 27.63395,-50.48253 -20.13469,-31.70275 -52.20082,-75.47438 -52.20082,-75.47438 z" /> </g> -</svg> \ No newline at end of file +</svg> diff --git a/assets/layers/entrance/entrance.json b/assets/layers/entrance/entrance.json index aaf36e0d18..c13737de1f 100644 --- a/assets/layers/entrance/entrance.json +++ b/assets/layers/entrance/entrance.json @@ -1,10 +1,12 @@ { "id": "entrance", "name": { - "en": "Entrance" + "en": "Entrance", + "nl": "Toegang" }, "description": { - "en": "A layer showing entrances and offering capabilities to survey some advanced data which is important for e.g. wheelchair users (but also bicycle users, people who want to deliver, ...)" + "en": "A layer showing entrances and offering capabilities to survey some advanced data which is important for e.g. wheelchair users (but also bicycle users, people who want to deliver, ...)", + "nl": "Een laag met ingangen (van gebouwen etc.) waarmee je details kunt aanvullen die belangrijk zijn voor bijvoorbeeld rolstoelgebruikers (en fietsers, leveranciers, ...)" }, "source": { "osmTags": { @@ -31,7 +33,8 @@ { "if": "entrance=yes", "then": { - "en": "No specific entrance type is known" + "en": "No specific entrance type is known", + "nl": "Het specifieke type ingang is onbekend" }, "hideInAnswer": true }, @@ -128,13 +131,15 @@ { "id": "Door_type", "question": { - "en": "What is the type of this door?<br/><span class='subtle'>Wether or not the door is automated is asked in the next question</span>" + "en": "What is the type of this door?<br/><span class='subtle'>Wether or not the door is automated is asked in the next question</span>", + "nl": "Om wat voor deur gaat het?<br/><span class='subtle'>Of de deur al of niet automatisch werkt, vragen we hierna </span>" }, "mappings": [ { "if": "door=yes", "then": { - "en": "The door type is not known" + "en": "The door type is not known", + "nl": "Het type deur is onbekend" }, "hideInAnswer": true }, @@ -169,7 +174,8 @@ { "if": "door=no", "then": { - "en": "This is an entrance without a physical door" + "en": "This is an entrance without a physical door", + "nl": "Er is een toegang zonder een deur" }, "hideInAnswer": "entrance=" } diff --git a/assets/layers/etymology/etymology.json b/assets/layers/etymology/etymology.json index 1c0f96c412..46d8a22ba7 100644 --- a/assets/layers/etymology/etymology.json +++ b/assets/layers/etymology/etymology.json @@ -9,9 +9,13 @@ "minzoom": 12, "source": { "osmTags": { - "or": [ - "name:etymology:wikidata~*", - "name:etymology~*" + "and": [ + { + "or": [ + "name:etymology:wikidata~*", + "name:etymology~*" + ] + } ] } }, diff --git a/assets/layers/etymology/logo.svg b/assets/layers/etymology/logo.svg index 43c9971669..84b464808a 100644 --- a/assets/layers/etymology/logo.svg +++ b/assets/layers/etymology/logo.svg @@ -1,15 +1,86 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<svg xmlns="http://www.w3.org/2000/svg" width="374px" height="260px" viewBox="0 0 374 260" version="1.1"> - <g id="surface1"> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 77.988281 48.621094 L 77.988281 59.058594 L 69.695312 59.058594 C 64.503906 59.058594 60.796875 59.632812 58.570312 60.78125 C 56.347656 61.933594 55.230469 63.621094 55.230469 65.851562 C 55.230469 67.675781 56.246094 69.160156 58.265625 70.308594 C 60.289062 71.457031 63.695312 72.035156 68.480469 72.035156 C 72.597656 72.035156 76.4375 71.59375 80.007812 70.714844 C 83.585938 69.835938 86.515625 68.855469 88.804688 67.773438 L 88.804688 79.835938 C 86.316406 80.980469 83.246094 81.929688 79.605469 82.671875 C 75.964844 83.347656 71.886719 83.683594 67.371094 83.683594 C 57.863281 83.683594 50.984375 82.203125 46.738281 79.226562 C 42.492188 76.253906 40.367188 72.300781 40.367188 67.371094 C 40.367188 63.316406 41.582031 60.277344 44.007812 58.25 C 46.503906 56.222656 49.773438 54.835938 53.820312 54.097656 L 53.820312 53.589844 C 50.316406 52.777344 47.683594 51.289062 45.933594 49.128906 C 44.179688 46.898438 43.300781 44.128906 43.300781 40.816406 C 43.300781 37.304688 44.378906 34.5 46.539062 32.40625 C 48.695312 30.246094 51.59375 28.6875 55.230469 27.746094 C 58.871094 26.796875 62.921875 26.328125 67.371094 26.328125 C 71.210938 26.328125 75.054688 26.699219 78.898438 27.441406 C 82.738281 28.1875 86.074219 29.195312 88.910156 30.480469 L 84.253906 41.425781 C 81.828125 40.414062 79.300781 39.5 76.671875 38.691406 C 74.113281 37.878906 71.144531 37.472656 67.773438 37.472656 C 60.425781 37.472656 56.75 39.199219 56.75 42.644531 C 56.75 44.804688 57.832031 46.359375 59.984375 47.300781 C 62.214844 48.183594 65.683594 48.621094 70.40625 48.621094 Z M 77.988281 48.621094 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 143.210938 27.339844 L 143.210938 38.691406 L 123.59375 38.691406 L 123.59375 65.34375 C 123.59375 67.4375 124.199219 69.027344 125.414062 70.105469 C 126.625 71.121094 128.210938 71.625 130.167969 71.625 C 131.851562 71.625 133.472656 71.457031 135.019531 71.121094 C 136.574219 70.78125 138.121094 70.378906 139.675781 69.902344 L 139.675781 81.152344 C 138.191406 81.828125 136.300781 82.402344 134.011719 82.878906 C 131.785156 83.417969 129.355469 83.683594 126.730469 83.683594 C 123.289062 83.683594 120.1875 83.144531 117.425781 82.066406 C 114.726562 80.980469 112.570312 79.125 110.957031 76.492188 C 109.335938 73.789062 108.527344 70.074219 108.527344 65.34375 L 108.527344 38.691406 L 94.671875 38.691406 L 94.671875 32.40625 L 103.371094 27.339844 Z M 143.210938 27.339844 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 179.515625 83.585938 C 172.910156 83.585938 167.753906 82.4375 164.042969 80.136719 C 160.402344 77.773438 157.839844 74.632812 156.359375 70.714844 C 154.875 66.726562 154.132812 62.300781 154.132812 57.4375 L 154.132812 27.339844 L 169.203125 27.339844 L 169.203125 57.945312 C 169.203125 62.742188 170.078125 66.21875 171.832031 68.382812 C 173.585938 70.476562 176.3125 71.527344 180.023438 71.527344 C 184 71.527344 186.96875 70.074219 188.921875 67.167969 C 190.875 64.261719 191.855469 59.296875 191.855469 52.269531 C 191.855469 47.878906 191.519531 43.753906 190.84375 39.90625 C 190.238281 35.988281 189.394531 31.800781 188.3125 27.339844 L 203.480469 27.339844 C 204.632812 31.730469 205.472656 35.886719 206.011719 39.804688 C 206.617188 43.65625 206.921875 47.945312 206.921875 52.675781 C 206.921875 63.28125 204.59375 71.085938 199.945312 76.082031 C 195.359375 81.085938 188.546875 83.585938 179.515625 83.585938 Z M 179.515625 83.585938 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 271.136719 27.339844 L 271.136719 82.671875 L 259.707031 82.671875 L 257.585938 75.277344 L 256.878906 75.277344 C 255.527344 78.042969 253.84375 80.136719 251.820312 81.558594 C 249.863281 82.976562 247.4375 83.683594 244.539062 83.683594 C 240.429688 83.683594 237.257812 82.203125 235.035156 79.226562 L 234.730469 79.226562 C 234.867188 79.902344 234.96875 80.980469 235.035156 82.46875 C 235.101562 83.890625 235.136719 85.375 235.136719 86.929688 C 235.203125 88.550781 235.234375 89.972656 235.234375 91.1875 L 235.234375 106.996094 L 220.171875 106.996094 L 220.171875 27.339844 L 235.234375 27.339844 L 235.234375 59.671875 C 235.234375 67.640625 238.238281 71.625 244.234375 71.625 C 248.753906 71.625 251.855469 70.074219 253.539062 66.964844 C 255.226562 63.789062 256.066406 59.261719 256.066406 53.382812 L 256.066406 27.339844 Z M 271.136719 27.339844 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 337.070312 54.902344 C 337.070312 64.09375 334.640625 71.1875 329.789062 76.1875 C 325.003906 81.1875 318.464844 83.683594 310.167969 83.683594 C 305.046875 83.683594 300.460938 82.574219 296.417969 80.34375 C 292.4375 78.109375 289.304688 74.867188 287.015625 70.613281 C 284.71875 66.289062 283.574219 61.054688 283.574219 54.902344 C 283.574219 45.714844 285.96875 38.65625 290.753906 33.722656 C 295.539062 28.792969 302.113281 26.328125 310.472656 26.328125 C 315.667969 26.328125 320.25 27.441406 324.226562 29.667969 C 328.203125 31.898438 331.335938 35.144531 333.632812 39.398438 C 335.921875 43.589844 337.070312 48.757812 337.070312 54.902344 Z M 298.945312 54.902344 C 298.945312 60.378906 299.824219 64.53125 301.574219 67.371094 C 303.394531 70.140625 306.324219 71.527344 310.375 71.527344 C 314.347656 71.527344 317.214844 70.140625 318.96875 67.371094 C 320.789062 64.53125 321.699219 60.378906 321.699219 54.902344 C 321.699219 49.433594 320.789062 45.34375 318.96875 42.644531 C 317.214844 39.875 314.316406 38.484375 310.269531 38.484375 C 306.292969 38.484375 303.394531 39.875 301.574219 42.644531 C 299.824219 45.34375 298.945312 49.433594 298.945312 54.902344 Z M 298.945312 54.902344 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 36.929688 209.351562 L 60.289062 157.058594 L 58.570312 152.5 C 57.15625 148.984375 55.640625 146.753906 54.019531 145.808594 C 52.402344 144.863281 50.246094 144.390625 47.546875 144.390625 C 46.671875 144.390625 45.761719 144.457031 44.816406 144.59375 C 43.941406 144.730469 43.164062 144.863281 42.492188 145 L 42.492188 132.535156 C 43.4375 132.332031 44.71875 132.164062 46.335938 132.027344 C 48.019531 131.824219 49.46875 131.722656 50.683594 131.722656 C 54.996094 131.722656 58.503906 132.429688 61.199219 133.851562 C 63.964844 135.203125 66.222656 137.199219 67.976562 139.828125 C 69.730469 142.464844 71.277344 145.675781 72.628906 149.457031 L 86.484375 187.664062 C 88.03125 191.851562 89.449219 194.589844 90.730469 195.871094 C 92.011719 197.085938 93.355469 197.699219 94.773438 197.699219 C 95.71875 197.699219 96.863281 197.527344 98.214844 197.191406 L 98.214844 208.847656 C 97.402344 209.25 96.054688 209.585938 94.167969 209.859375 C 92.347656 210.195312 90.796875 210.367188 89.515625 210.367188 C 85.40625 210.367188 82.265625 209.351562 80.113281 207.324219 C 78.019531 205.230469 76.367188 202.492188 75.15625 199.113281 L 70.40625 185.636719 C 69.660156 183.476562 68.953125 181.382812 68.28125 179.355469 C 67.605469 177.257812 67.097656 175.472656 66.765625 173.984375 L 66.460938 173.984375 C 65.984375 175.738281 65.414062 177.667969 64.742188 179.757812 C 64.066406 181.851562 63.390625 183.710938 62.714844 185.332031 L 52.5 209.351562 Z M 36.929688 209.351562 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 155.753906 181.585938 C 155.753906 190.773438 153.328125 197.867188 148.472656 202.863281 C 143.6875 207.867188 137.144531 210.367188 128.855469 210.367188 C 123.730469 210.367188 119.144531 209.25 115.097656 207.019531 C 111.125 204.792969 107.988281 201.550781 105.695312 197.292969 C 103.402344 192.96875 102.257812 187.730469 102.257812 181.585938 C 102.257812 172.394531 104.648438 165.335938 109.4375 160.40625 C 114.222656 155.46875 120.796875 153.003906 129.15625 153.003906 C 134.347656 153.003906 138.933594 154.117188 142.910156 156.351562 C 146.886719 158.578125 150.023438 161.820312 152.3125 166.078125 C 154.609375 170.265625 155.753906 175.433594 155.753906 181.585938 Z M 117.628906 181.585938 C 117.628906 187.054688 118.503906 191.210938 120.257812 194.046875 C 122.074219 196.820312 125.011719 198.203125 129.054688 198.203125 C 133.03125 198.203125 135.898438 196.820312 137.652344 194.046875 C 139.472656 191.210938 140.382812 187.054688 140.382812 181.585938 C 140.382812 176.109375 139.472656 172.023438 137.652344 169.320312 C 135.898438 166.550781 133 165.167969 128.953125 165.167969 C 124.976562 165.167969 122.074219 166.550781 120.257812 169.320312 C 118.503906 172.023438 117.628906 176.109375 117.628906 181.585938 Z M 117.628906 181.585938 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 215.71875 154.019531 L 195.289062 208.4375 C 194.28125 211.140625 193.40625 214.011719 192.664062 217.050781 C 191.921875 220.09375 191.347656 223.035156 190.945312 225.867188 C 190.609375 228.777344 190.4375 231.378906 190.4375 233.671875 L 174.460938 233.671875 C 174.460938 231.78125 174.660156 229.417969 175.070312 226.582031 C 175.539062 223.742188 176.148438 220.734375 176.890625 217.558594 C 177.628906 214.453125 178.46875 211.515625 179.414062 208.742188 L 158.378906 154.019531 L 174.054688 154.019531 L 182.144531 178.441406 C 182.753906 180.199219 183.390625 182.328125 184.066406 184.828125 C 184.808594 187.257812 185.453125 189.621094 185.988281 191.921875 C 186.527344 194.148438 186.898438 195.871094 187.101562 197.085938 L 187.402344 197.085938 C 187.539062 196.074219 187.808594 194.589844 188.214844 192.628906 C 188.683594 190.601562 189.222656 188.40625 189.828125 186.042969 C 190.503906 183.613281 191.214844 181.3125 191.953125 179.148438 L 200.042969 154.019531 Z M 215.71875 154.019531 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 238.675781 154.019531 L 238.675781 192.019531 C 238.675781 194.117188 239.28125 195.703125 240.496094 196.785156 C 241.710938 197.800781 243.292969 198.308594 245.25 198.308594 C 246.933594 198.308594 248.550781 198.136719 250.105469 197.800781 C 251.652344 197.460938 253.207031 197.054688 254.753906 196.582031 L 254.753906 207.832031 C 253.269531 208.507812 251.386719 209.082031 249.089844 209.554688 C 246.867188 210.09375 244.441406 210.367188 241.808594 210.367188 C 238.371094 210.367188 235.269531 209.828125 232.503906 208.742188 C 229.808594 207.664062 227.652344 205.804688 226.035156 203.167969 C 224.417969 200.464844 223.605469 196.75 223.605469 192.019531 L 223.605469 154.019531 Z M 226.4375 147.9375 L 226.4375 146.417969 C 226.980469 144.792969 227.484375 142.9375 227.953125 140.84375 C 228.496094 138.75 229 136.621094 229.472656 134.457031 C 229.945312 132.300781 230.28125 130.371094 230.484375 128.683594 L 244.441406 128.683594 L 244.441406 129.898438 C 243.363281 132.535156 242.042969 135.40625 240.496094 138.511719 C 238.941406 141.621094 237.191406 144.761719 235.234375 147.9375 Z M 226.4375 147.9375 "/> - <path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 283.070312 210.367188 C 276.597656 210.367188 271.371094 207.96875 267.394531 203.167969 C 263.414062 198.308594 261.429688 191.210938 261.429688 181.890625 C 261.429688 172.429688 263.484375 165.265625 267.59375 160.40625 C 271.710938 155.539062 277.238281 153.109375 284.179688 153.109375 C 288.09375 153.109375 291.292969 153.816406 293.789062 155.234375 C 296.28125 156.585938 298.375 158.644531 300.058594 161.417969 L 300.765625 161.417969 C 301.105469 160.269531 301.539062 159.015625 302.078125 157.664062 C 302.621094 156.246094 303.292969 155.03125 304.101562 154.019531 L 316.539062 154.019531 C 315.796875 156.179688 315.023438 159.320312 314.21875 163.445312 C 313.40625 167.566406 313.003906 171.886719 313.003906 176.414062 L 313.003906 191.820312 C 313.003906 194.117188 313.40625 195.671875 314.21875 196.480469 C 315.089844 197.292969 316.070312 197.699219 317.148438 197.699219 C 317.617188 197.699219 318.160156 197.632812 318.769531 197.496094 C 319.375 197.359375 319.808594 197.257812 320.082031 197.191406 L 320.082031 209.046875 C 319.609375 209.320312 318.632812 209.585938 317.148438 209.859375 C 315.734375 210.195312 314.453125 210.367188 313.308594 210.367188 C 309.933594 210.367188 307.203125 209.757812 305.113281 208.539062 C 303.023438 207.324219 301.40625 205.164062 300.257812 202.054688 L 299.25 202.054688 C 297.769531 204.351562 295.742188 206.3125 293.179688 207.929688 C 290.617188 209.554688 287.25 210.367188 283.070312 210.367188 Z M 287.621094 198.308594 C 291.800781 198.308594 294.699219 197.054688 296.316406 194.554688 C 298.003906 191.988281 298.878906 187.933594 298.945312 182.394531 L 298.945312 181.785156 C 298.945312 176.382812 298.101562 172.261719 296.417969 169.421875 C 294.796875 166.585938 291.800781 165.167969 287.417969 165.167969 C 283.84375 165.167969 281.183594 166.617188 279.429688 169.527344 C 277.675781 172.359375 276.800781 176.515625 276.800781 181.988281 C 276.800781 192.863281 280.402344 198.308594 287.621094 198.308594 Z M 287.621094 198.308594 "/> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + width="500" + height="500" + viewBox="0 0 500 500" + version="1.1" + id="svg23" + sodipodi:docname="logo.svg" + inkscape:version="1.1.1 (1:1.1+202109281949+c3084ef5ed)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs27" /> + <sodipodi:namedview + id="namedview25" + pagecolor="#505050" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:pageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="0" + showgrid="false" + width="500px" + showguides="true" + inkscape:guide-bbox="true" + inkscape:snap-global="false" + inkscape:zoom="0.8765339" + inkscape:cx="95.832004" + inkscape:cy="148.31143" + inkscape:current-layer="svg23"> + <sodipodi:guide + position="248.77835,429.24652" + orientation="1,0" + id="guide844" /> + <sodipodi:guide + position="-168.89539,252.36283" + orientation="0,-1" + id="guide846" /> + </sodipodi:namedview> + <g + id="surface1" + transform="matrix(1.6098689,0,0,1.6098689,-47.96469,64.699761)"> + <path + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 77.988281,48.621094 v 10.4375 h -8.292969 c -5.191406,0 -8.898437,0.574218 -11.125,1.722656 -2.222656,1.152344 -3.339843,2.839844 -3.339843,5.070312 0,1.824219 1.015625,3.308594 3.035156,4.457032 2.023437,1.148437 5.429687,1.726562 10.214844,1.726562 4.117187,0 7.957031,-0.441406 11.527343,-1.320312 3.578126,-0.878906 6.507813,-1.859375 8.796876,-2.941406 v 12.0625 c -2.488282,1.144531 -5.558594,2.09375 -9.199219,2.835937 -3.640625,0.675781 -7.71875,1.011719 -12.234375,1.011719 -9.507813,0 -16.386719,-1.480469 -20.632813,-4.457032 -4.246093,-2.972656 -6.371093,-6.925781 -6.371093,-11.855468 0,-4.054688 1.214843,-7.09375 3.640624,-9.121094 2.496094,-2.027344 5.765626,-3.414062 9.8125,-4.152344 v -0.507812 c -3.503906,-0.8125 -6.136718,-2.300782 -7.886718,-4.460938 -1.753906,-2.230468 -2.632813,-5 -2.632813,-8.3125 0,-3.511718 1.078125,-6.316406 3.238281,-8.410156 2.15625,-2.160156 5.054688,-3.71875 8.691407,-4.660156 3.640625,-0.949219 7.691406,-1.417969 12.140625,-1.417969 3.839844,0 7.683594,0.371094 11.527344,1.113281 3.839843,0.746094 7.175781,1.753906 10.011718,3.039063 l -4.65625,10.945312 C 81.828125,40.414062 79.300781,39.5 76.671875,38.691406 c -2.558594,-0.8125 -5.527344,-1.21875 -8.898437,-1.21875 -7.347657,0 -11.023438,1.726563 -11.023438,5.171875 0,2.160157 1.082031,3.714844 3.234375,4.65625 2.230469,0.882813 5.699219,1.320313 10.421875,1.320313 z m 0,0" + id="path2" /> + <path + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 143.21094,27.339844 V 38.691406 H 123.59375 V 65.34375 c 0,2.09375 0.60547,3.683594 1.82031,4.761719 1.21094,1.015625 2.79688,1.519531 4.75391,1.519531 1.68359,0 3.30469,-0.167969 4.85156,-0.503906 1.55469,-0.339844 3.10156,-0.742188 4.65625,-1.21875 v 11.25 c -1.48437,0.675781 -3.375,1.25 -5.66406,1.726562 -2.22656,0.539063 -4.65625,0.804688 -7.28125,0.804688 -3.44141,0 -6.54297,-0.539063 -9.30469,-1.617188 -2.69922,-1.085937 -4.85547,-2.941406 -6.46875,-5.574218 -1.62109,-2.703126 -2.42969,-6.417969 -2.42969,-11.148438 V 38.691406 H 94.671875 V 32.40625 l 8.699215,-5.066406 z m 0,0" + id="path4" /> + <path + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 179.51562,83.585938 c -6.60546,0 -11.76171,-1.148438 -15.47265,-3.449219 -3.64063,-2.363281 -6.20313,-5.503907 -7.6836,-9.421875 C 154.875,66.726562 154.13281,62.300781 154.13281,57.4375 V 27.339844 h 15.07031 v 30.605468 c 0,4.796876 0.875,8.273438 2.62891,10.4375 1.75391,2.09375 4.48047,3.144532 8.19141,3.144532 3.97656,0 6.94531,-1.453125 8.89843,-4.359375 1.95313,-2.90625 2.9336,-7.871094 2.9336,-14.898438 0,-4.390625 -0.33594,-8.515625 -1.01172,-12.363281 -0.60547,-3.917969 -1.44922,-8.105469 -2.53125,-12.566406 h 15.16797 c 1.15234,4.390625 1.99219,8.546875 2.53125,12.464844 0.60547,3.851562 0.91015,8.140624 0.91015,12.871093 0,10.605469 -2.32812,18.410157 -6.97656,23.40625 -4.58594,5.003907 -11.39844,7.503907 -20.42969,7.503907 z m 0,0" + id="path6" /> + <path + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 271.13672,27.339844 v 55.332031 h -11.42969 l -2.12109,-7.394531 h -0.70703 c -1.35157,2.765625 -3.03516,4.859375 -5.0586,6.28125 -1.95703,1.417968 -4.38281,2.125 -7.28125,2.125 -4.10937,0 -7.28125,-1.480469 -9.5039,-4.457032 h -0.30469 c 0.13672,0.675782 0.23828,1.753907 0.30469,3.242188 0.0664,1.421875 0.10156,2.90625 0.10156,4.460938 0.0664,1.621093 0.0977,3.042968 0.0977,4.257812 v 15.80859 h -15.0625 V 27.339844 h 15.0625 v 32.332031 c 0,7.96875 3.00391,11.953125 9,11.953125 4.51954,0 7.6211,-1.550781 9.30469,-4.660156 1.6875,-3.175782 2.52735,-7.703125 2.52735,-13.582032 V 27.339844 Z m 0,0" + id="path8" /> + <path + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 337.07031,54.902344 c 0,9.191406 -2.42969,16.285156 -7.28125,21.285156 -4.78515,5 -11.32422,7.496094 -19.62109,7.496094 -5.1211,0 -9.70703,-1.109375 -13.75,-3.339844 -3.98047,-2.234375 -7.11328,-5.476562 -9.40235,-9.730469 -2.29687,-4.324219 -3.4414,-9.558593 -3.4414,-15.710937 0,-9.1875 2.39453,-16.246094 7.17969,-21.179688 4.78515,-4.929687 11.35937,-7.394531 19.71875,-7.394531 5.19531,0 9.77734,1.113281 13.7539,3.339844 3.97656,2.230469 7.10938,5.476562 9.40625,9.730469 2.28906,4.191406 3.4375,9.359374 3.4375,15.503906 z m -38.125,0 c 0,5.476562 0.87891,9.628906 2.62891,12.46875 1.82031,2.769531 4.75,4.15625 8.80078,4.15625 3.97266,0 6.83984,-1.386719 8.59375,-4.15625 1.82031,-2.839844 2.73047,-6.992188 2.73047,-12.46875 0,-5.46875 -0.91016,-9.558594 -2.73047,-12.257813 -1.75391,-2.769531 -4.65234,-4.160156 -8.69922,-4.160156 -3.97656,0 -6.875,1.390625 -8.69531,4.160156 -1.75,2.699219 -2.62891,6.789063 -2.62891,12.257813 z m 0,0" + id="path10" /> + <path + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 36.929688,209.35156 60.289062,157.05859 58.570312,152.5 c -1.414062,-3.51563 -2.929687,-5.74609 -4.550781,-6.69141 -1.617187,-0.94531 -3.773437,-1.41797 -6.472656,-1.41797 -0.875,0 -1.785156,0.0664 -2.730469,0.20313 -0.875,0.13672 -1.652344,0.26953 -2.324218,0.40625 v -12.46484 c 0.945312,-0.20313 2.226562,-0.3711 3.84375,-0.50782 1.683593,-0.20312 3.132812,-0.30468 4.347656,-0.30468 4.3125,0 7.820312,0.70703 10.515625,2.1289 2.765625,1.35156 5.023437,3.34766 6.777343,5.97656 1.753907,2.63672 3.300782,5.84766 4.652344,9.62891 l 13.855469,38.20703 c 1.546875,4.1875 2.964844,6.92578 4.246094,8.20703 1.28125,1.21485 2.625,1.82813 4.042969,1.82813 0.945312,0 2.089843,-0.17188 3.441406,-0.50781 v 11.65625 c -0.8125,0.40234 -2.160156,0.73828 -4.046875,1.01171 -1.820313,0.33594 -3.371094,0.50782 -4.652344,0.50782 -4.109375,0 -7.25,-1.01563 -9.402344,-3.04297 -2.09375,-2.09375 -3.746093,-4.83203 -4.957031,-8.21094 l -4.75,-13.47656 c -0.746094,-2.16016 -1.453125,-4.25391 -2.125,-6.28125 -0.675781,-2.09766 -1.183594,-3.88281 -1.515625,-5.3711 h -0.304687 c -0.476563,1.75391 -1.046876,3.6836 -1.71875,5.77344 -0.675782,2.09375 -1.351563,3.95313 -2.027344,5.57422 L 52.5,209.35156 Z m 0,0" + id="path12" /> + <path + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 155.75391,181.58594 c 0,9.1875 -2.42579,16.28125 -7.28125,21.27734 -4.78516,5.00391 -11.32813,7.50391 -19.61719,7.50391 -5.125,0 -9.71094,-1.11719 -13.75781,-3.34766 -3.97266,-2.22656 -7.10938,-5.46875 -9.40235,-9.72656 -2.29297,-4.32422 -3.4375,-9.5625 -3.4375,-15.70703 0,-9.19141 2.39063,-16.25 7.17969,-21.17969 4.78516,-4.9375 11.35938,-7.40234 19.71875,-7.40234 5.19141,0 9.77734,1.11328 13.75391,3.34765 3.97656,2.22656 7.11328,5.46875 9.40234,9.72656 2.29687,4.1875 3.44141,9.35547 3.44141,15.50782 z m -38.125,0 c 0,5.46875 0.875,9.625 2.6289,12.46093 1.81641,2.77344 4.75391,4.15625 8.79688,4.15625 3.97656,0 6.84375,-1.38281 8.59765,-4.15625 1.82032,-2.83593 2.73047,-6.99218 2.73047,-12.46093 0,-5.47657 -0.91015,-9.5625 -2.73047,-12.26563 -1.7539,-2.76953 -4.65234,-4.15234 -8.69922,-4.15234 -3.97656,0 -6.8789,1.38281 -8.69531,4.15234 -1.7539,2.70313 -2.6289,6.78906 -2.6289,12.26563 z m 0,0" + id="path14" /> + <path + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 215.71875,154.01953 -20.42969,54.41797 c -1.00781,2.70312 -1.88281,5.57422 -2.625,8.61328 -0.74219,3.04297 -1.3164,5.98438 -1.71875,8.81641 -0.33594,2.91015 -0.50781,5.51172 -0.50781,7.80468 h -15.97656 c 0,-1.89062 0.19922,-4.2539 0.60937,-7.08984 0.46875,-2.83984 1.07813,-5.84766 1.82031,-9.02344 0.73829,-3.10547 1.57813,-6.04297 2.52344,-8.8164 l -21.03515,-54.72266 h 15.67578 l 8.08984,24.42188 c 0.60938,1.75781 1.24609,3.88671 1.92188,6.38671 0.74218,2.42969 1.38671,4.79297 1.92187,7.09375 0.53906,2.22657 0.91016,3.94922 1.11328,5.16407 h 0.30078 c 0.13672,-1.01172 0.40625,-2.4961 0.8125,-4.45703 0.46875,-2.02735 1.00782,-4.22266 1.61328,-6.58594 0.67579,-2.42969 1.38672,-4.73047 2.125,-6.89453 l 8.08985,-25.12891 z m 0,0" + id="path16" /> + <path + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 238.67578,154.01953 v 38 c 0,2.09766 0.60547,3.68359 1.82031,4.76563 1.21485,1.01562 2.79688,1.52343 4.75391,1.52343 1.68359,0 3.30078,-0.17187 4.85547,-0.50781 1.54687,-0.33984 3.10156,-0.74609 4.64844,-1.21875 v 11.25 c -1.48438,0.67578 -3.36719,1.25 -5.66407,1.72266 -2.22265,0.53906 -4.64843,0.8125 -7.28125,0.8125 -3.4375,0 -6.53906,-0.53907 -9.30468,-1.625 -2.69532,-1.07813 -4.85157,-2.9375 -6.46875,-5.57422 -1.61719,-2.70313 -2.42969,-6.41797 -2.42969,-11.14844 v -38 z M 226.4375,147.9375 v -1.51953 c 0.54297,-1.625 1.04687,-3.48047 1.51562,-5.57422 0.54297,-2.09375 1.04688,-4.22266 1.51954,-6.38672 0.47265,-2.15625 0.80859,-4.08594 1.01171,-5.77344 h 13.95704 v 1.21485 c -1.07813,2.63672 -2.39844,5.50781 -3.94532,8.61328 -1.55468,3.10937 -3.30468,6.25 -5.26172,9.42578 z m 0,0" + id="path18" /> + <path + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 283.07031,210.36719 c -6.47265,0 -11.69922,-2.39844 -15.67578,-7.19922 -3.98047,-4.85938 -5.96484,-11.95703 -5.96484,-21.27735 0,-9.46093 2.05468,-16.625 6.16406,-21.48437 4.11719,-4.86719 9.64453,-7.29688 16.58594,-7.29688 3.91406,0 7.11328,0.70704 9.60937,2.125 2.49219,1.35157 4.58594,3.41016 6.26953,6.1836 h 0.70703 c 0.33985,-1.14844 0.77344,-2.40235 1.3125,-3.75391 0.54297,-1.41797 1.21485,-2.63281 2.02344,-3.64453 h 12.4375 c -0.74219,2.16016 -1.51562,5.30078 -2.32031,9.42578 -0.8125,4.1211 -1.21484,8.44141 -1.21484,12.96875 v 15.40625 c 0,2.29688 0.40234,3.85156 1.21484,4.66016 0.87109,0.8125 1.85156,1.21875 2.92969,1.21875 0.46875,0 1.01172,-0.0664 1.62109,-0.20313 0.60547,-0.13672 1.03906,-0.23828 1.3125,-0.30468 v 11.85546 c -0.47266,0.27344 -1.44922,0.53907 -2.93359,0.8125 -1.41407,0.33594 -2.69532,0.50782 -3.83985,0.50782 -3.375,0 -6.10547,-0.60938 -8.19531,-1.82813 -2.08984,-1.21484 -3.70703,-3.375 -4.85547,-6.48437 H 299.25 c -1.48047,2.29687 -3.50781,4.25781 -6.07031,5.875 -2.5625,1.625 -5.92969,2.4375 -10.10938,2.4375 z m 4.55078,-12.0586 c 4.17969,0 7.07813,-1.2539 8.69532,-3.7539 1.6875,-2.56641 2.5625,-6.6211 2.6289,-12.16016 v -0.60937 c 0,-5.40235 -0.84375,-9.52344 -2.52734,-12.36329 -1.6211,-2.83593 -4.61719,-4.2539 -9,-4.2539 -3.57422,0 -6.23438,1.44922 -7.98828,4.35937 -1.75391,2.83203 -2.62891,6.98828 -2.62891,12.46094 0,10.875 3.60156,16.32031 10.82031,16.32031 z m 0,0" + id="path20" /> </g> -</svg> \ No newline at end of file +</svg> diff --git a/assets/layers/food/food.json b/assets/layers/food/food.json index 605413cfe1..816aa36454 100644 --- a/assets/layers/food/food.json +++ b/assets/layers/food/food.json @@ -64,6 +64,7 @@ "cuisine=friture" ], "description": { + "en": "A fastfood-buisiness focused on french fries", "nl": "Een fastfood-zaak waar je frieten koopt" }, "preciseInput": { @@ -73,6 +74,7 @@ ], "title": { "render": { + "en": "Restaurant", "nl": "Eetgelegenheid" }, "mappings": [ @@ -101,6 +103,18 @@ "en": "Fastfood <i>{name}</i>", "de": "Schnellrestaurant<i>{name}</i>" } + }, + { + "if": { + "and": [ + "amenity=fast_food" + ] + }, + "then": { + "nl": "Fastfood-zaak", + "en": "Fastfood", + "de": "Schnellrestaurant" + } } ] }, @@ -132,12 +146,14 @@ { "if": "amenity=fast_food", "then": { + "en": "This is a fastfood-business, focussed on fast service. If seating is available, these are rather limited and functional.", "nl": "Dit is een <b>fastfood-zaak</b>. De focus ligt op snelle bediening, zitplaatsen zijn vaak beperkt en functioneel" } }, { "if": "amenity=restaurant", "then": { + "en": "A <b>restaurant</b>, focussed on creating a nice experience where one is served at the table", "nl": "Dit is een <b>restaurant</b>. De focus ligt op een aangename ervaring waar je aan tafel wordt bediend" } } @@ -195,72 +211,84 @@ { "if": "cuisine=kebab", "then": { + "en": "This is kebab shop", "nl": "Dit is een kebabzaak" } }, { "if": "cuisine=sandwich", "then": { + "en": "This is a sandwichbar", "nl": "Dit is een broodjeszaak" } }, { "if": "cuisine=burger", "then": { + "en": "Burgers are served here", "nl": "Dit is een hamburgerrestaurant" } }, { "if": "cuisine=sushi", "then": { + "en": "Sushi is served here", "nl": "Dit is een sushirestaurant" } }, { "if": "cuisine=coffee", "then": { + "en": "Coffee is served here", "nl": "Dit is een koffiezaak" } }, { "if": "cuisine=italian", "then": { + "en": "This is an italian restaurant (which serves more then pasta and pizza)", "nl": "Dit is een Italiaans restaurant (dat meer dan enkel pasta of pizza verkoopt)" } }, { "if": "cuisine=french", "then": { + "en": "French dishes are served here", "nl": "Dit is een Frans restaurant" } }, { "if": "cuisine=chinese", "then": { + "en": "Chinese dishes are served here", "nl": "Dit is een Chinees restaurant" } }, { "if": "cuisine=greek", "then": { + "en": "Greek dishes are served here", "nl": "Dit is een Grieks restaurant" } }, { "if": "cuisine=indian", "then": { + "en": "Indian dishes are served here", "nl": "Dit is een Indisch restaurant" } }, { "if": "cuisine=turkish", "then": { + "en": "Turkish dishes are served here", "nl": "Dit is een Turks restaurant (dat meer dan enkel kebab verkoopt)" } }, { "if": "cuisine=thai", "then": { + "en": "Thai dishes are served here", "nl": "Dit is een Thaïs restaurant" } } @@ -311,24 +339,28 @@ { "if": "diet:vegetarian=no", "then": { + "en": "No vegetarian options are available", "nl": "Geen vegetarische opties beschikbaar" } }, { "if": "diet:vegetarian=limited", "then": { + "en": "Some vegetarian options are available", "nl": "Beperkte vegetarische opties zijn beschikbaar" } }, { "if": "diet:vegetarian=yes", "then": { + "en": "No vegetarian options are available", "nl": "Vegetarische opties zijn beschikbaar" } }, { "if": "diet:vegetarian=only", "then": { + "en": "All dishes are vegetarian", "nl": "Enkel vegetarische opties zijn beschikbaar" } } @@ -338,30 +370,35 @@ }, { "question": { + "en": "Does this business serve vegan meals?", "nl": "Heeft deze eetgelegenheid een veganistische optie?" }, "mappings": [ { "if": "diet:vegan=no", "then": { + "en": "No vegan options available", "nl": "Geen veganistische opties beschikbaar" } }, { "if": "diet:vegan=limited", "then": { + "en": "Some vegan options are available", "nl": "Beperkte veganistische opties zijn beschikbaar" } }, { "if": "diet:vegan=yes", "then": { + "en": "Vegan options are available", "nl": "Veganistische opties zijn beschikbaar" } }, { "if": "diet:vegan=only", "then": { + "en": "All dishes are vegan", "nl": "Enkel veganistische opties zijn beschikbaar" } } @@ -415,6 +452,7 @@ { "id": "friture-vegetarian", "question": { + "en": "Does this fries shop have vegetarian snacks?", "nl": "Heeft deze frituur vegetarische snacks?", "fr": "Cette friterie est-elle équipée de snacks végétariens ?" }, @@ -422,6 +460,7 @@ { "if": "diet:vegetarian=yes", "then": { + "en": "Vegetarian snacks are available", "nl": "Er zijn vegetarische snacks aanwezig", "fr": "Des collations végétariens sont disponibles" } @@ -429,6 +468,7 @@ { "if": "diet:vegetarian=limited", "then": { + "en": "Only a small selection of snacks are vegetarian", "nl": "Slechts enkele vegetarische snacks", "fr": "Quelques snacks végétariens seulement" } @@ -436,6 +476,7 @@ { "if": "diet:vegetarian=no", "then": { + "en": "No vegetarian snacks are available", "nl": "Geen vegetarische snacks beschikbaar", "fr": "Pas d'en-cas végétariens disponibles" } @@ -446,6 +487,7 @@ { "id": "friture-vegan", "question": { + "en": "Does this fries shop have vegan snacks?", "nl": "Heeft deze frituur veganistische snacks?", "fr": "Cette friterie est-elle équipée de snacks végétaliens ?" }, @@ -453,6 +495,7 @@ { "if": "diet:vegan=yes", "then": { + "en": "Vegan snacks are available", "nl": "Er zijn veganistische snacks aanwezig", "fr": "Des collations végétaliens sont disponibles" } @@ -460,6 +503,7 @@ { "if": "diet:vegan=limited", "then": { + "en": "A small selection of vegan snacks are available", "nl": "Slechts enkele veganistische snacks", "fr": "Quelques snacks végétaliens seulement" } @@ -467,6 +511,7 @@ { "if": "diet:vegan=no", "then": { + "en": "No vegan snacks are available", "nl": "Geen veganistische snacks beschikbaar", "fr": "Pas d'en-cas végétaliens disponibles" } @@ -477,6 +522,7 @@ { "id": "friture-oil", "question": { + "en": "Does this fries shop use vegetable or animal cooking?", "nl": "Bakt deze frituur met dierlijk vet of met plantaardige olie?", "fr": "Cette friteuse fonctionne-t-elle avec de la graisse animale ou végétale ?" }, @@ -484,13 +530,15 @@ { "if": "friture:oil=vegetable", "then": { - "nl": "Plantaardige olie", + "en": "Vegetable oil", + "nl": "Bakt in plantaardige olie", "fr": "Huile végétale" } }, { "if": "friture:oil=animal", "then": { + "en": "Animal oil", "nl": "Dierlijk vet", "fr": "Graisse animale" } diff --git a/assets/layers/gps_location/gps_location.json b/assets/layers/gps_location/gps_location.json index 5016797eb9..292c16fce4 100644 --- a/assets/layers/gps_location/gps_location.json +++ b/assets/layers/gps_location/gps_location.json @@ -8,7 +8,7 @@ }, "mapRendering": [ { - "icon": "crosshair:#00f", + "icon": "crosshair:var(--catch-detail-color)", "iconSize": "40,40,center", "location": [ "point", diff --git a/assets/layers/gps_track/gps_track.json b/assets/layers/gps_track/gps_track.json index 991c72db2b..60e160adef 100644 --- a/assets/layers/gps_track/gps_track.json +++ b/assets/layers/gps_track/gps_track.json @@ -19,17 +19,22 @@ } }, "export_as_gpx", + "export_as_geojson", "minimap", { "id": "delete", "render": "{clear_location_history()}" } ], - "name": "Your track", + "name": { + "en": "Your travelled track", + "nl": "Jouw afgelegde route" + }, "mapRendering": [ { "width": 3, "color": "#bb000077" } - ] + ], + "syncSelection": "global" } \ No newline at end of file diff --git a/assets/layers/import_candidate/import_candidate.json b/assets/layers/import_candidate/import_candidate.json new file mode 100644 index 0000000000..70720181e7 --- /dev/null +++ b/assets/layers/import_candidate/import_candidate.json @@ -0,0 +1,26 @@ +{ + "id": "import_candidate", + "description": "Layer used in the importHelper", + "source": { + "osmTags": { + "and": [] + } + }, + "mapRendering": [ + { + "location": [ + "point", + "centroid" + ], + "icon": "square:red;", + "iconSize": "15,15,center" + } + ], + "title": "Import candidate", + "tagRenderings": [ + { + "id": "all_tags", + "render": "{all_tags()}" + } + ] +} \ No newline at end of file diff --git a/assets/layers/map/map-stickered.svg b/assets/layers/map/map-stickered.svg index 346a09ea57..a6fa883bd5 100644 --- a/assets/layers/map/map-stickered.svg +++ b/assets/layers/map/map-stickered.svg @@ -12,14 +12,7 @@ width="256" height="256" id="svg3038" - version="1.1" - inkscape:version="0.92.4 (5da689c313, 2019-01-14)" - sodipodi:docname="map-stickered.svg" - inkscape:export-filename="/home/fred/bla.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" - sodipodi:version="0.32" - inkscape:output_extension="org.inkscape.output.svg.inkscape"> + version="1.1"> <title id="title3594">OpenStreetMap logo 2011 @@ -2326,20 +2319,6 @@ id="path36" d="M 3,5.848 H 23.234 V 24.41 H 3 Z"/> - - - @@ -2356,20 +2335,6 @@ id="path66" d="M 1.5,4.348 H 22.836 V 21.91 H 1.5 Z"/> - - - @@ -4548,20 +4513,6 @@ id="path2110" d="M 3,2.848 H 21.352 V 20.293 H 3 Z"/> - - - @@ -11238,51 +11189,6 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/layers/map/map.svg b/assets/layers/map/map.svg index 5c19ba9feb..6df96d0b5f 100644 --- a/assets/layers/map/map.svg +++ b/assets/layers/map/map.svg @@ -12,14 +12,7 @@ width="256" height="256" id="svg3038" - version="1.1" - inkscape:version="0.92.4 (5da689c313, 2019-01-14)" - sodipodi:docname="map.svg" - inkscape:export-filename="/home/fred/bla.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180" - sodipodi:version="0.32" - inkscape:output_extension="org.inkscape.output.svg.inkscape"> + version="1.1"> OpenStreetMap logo 2011 @@ -2326,20 +2319,7 @@ id="path36" d="M 3,5.848 H 23.234 V 24.41 H 3 Z"/> - - - + @@ -2356,20 +2336,6 @@ id="path66" d="M 1.5,4.348 H 22.836 V 21.91 H 1.5 Z"/> - - - @@ -4548,20 +4514,6 @@ id="path2110" d="M 3,2.848 H 21.352 V 20.293 H 3 Z"/> - - - diff --git a/assets/layers/nature_reserve/nature_reserve.json b/assets/layers/nature_reserve/nature_reserve.json index ca6baadd22..33c3b41f21 100644 --- a/assets/layers/nature_reserve/nature_reserve.json +++ b/assets/layers/nature_reserve/nature_reserve.json @@ -1,6 +1,7 @@ { "id": "nature_reserve", "name": { + "en": "Nature reserve", "nl": "Natuurgebied" }, "minzoom": 12, @@ -23,19 +24,10 @@ }, "title": { "render": { - "nl": "Natuurgebied" + "nl": "Natuurgebied", + "en": "Nature reserve" }, "mappings": [ - { - "if": { - "and": [ - "name:nl~*" - ] - }, - "then": { - "nl": "{name:nl}" - } - }, { "if": { "and": [ @@ -43,21 +35,24 @@ ] }, "then": { - "nl": "{name}" + "*": "{name}" } } ] }, "description": { + "en": "A nature reserve is an area where nature can take its course", "nl": "Een natuurgebied is een gebied waar actief ruimte gemaakt word voor de natuur. Typisch zijn deze in beheer van Natuurpunt of het Agentschap Natuur en Bos of zijn deze erkend door de overheid." }, "tagRenderings": [ "images", { "render": { + "en": "Accessin this nature reserve: {access:description}", "nl": "De toegankelijkheid van dit gebied is: {access:description}" }, "question": { + "en": "Is this nature reserve accessible to the public?", "nl": "Is dit gebied toegankelijk?" }, "freeform": { @@ -72,6 +67,7 @@ ] }, "then": { + "en": "Publicly accessible", "nl": "Vrij toegankelijk" } }, @@ -83,6 +79,7 @@ ] }, "then": { + "en": "Not accessible", "nl": "Niet toegankelijk" } }, @@ -94,6 +91,7 @@ ] }, "then": { + "en": "Not accessible as this is a private area", "nl": "Niet toegankelijk, want privégebied" } }, @@ -105,6 +103,7 @@ ] }, "then": { + "en": "Accessible despite being a privately owned area", "nl": "Toegankelijk, ondanks dat het privegebied is" } }, @@ -116,6 +115,7 @@ ] }, "then": { + "en": "Only accessible with a guide or during organised activities", "nl": "Enkel toegankelijk met een gids of tijdens een activiteit" } }, @@ -127,6 +127,7 @@ ] }, "then": { + "en": "Accessible with fee", "nl": "Toegankelijk mits betaling" } } @@ -135,9 +136,11 @@ }, { "render": { + "en": "Operated by {operator}", "nl": "Beheer door {operator}" }, "question": { + "en": "Who operates this area?", "nl": "Wie beheert dit gebied?" }, "freeform": { @@ -151,8 +154,10 @@ ] }, "then": { - "nl": "Dit gebied wordt beheerd door Natuurpunt" - } + "en": "Operated by Natuurpunt", + "nl": "Dit gebied wordt beheerd door Natuurpunt" + }, + "icon": "./assets/layers/nature_reserve/Natuurpunt.jpg" }, { "if": { @@ -161,8 +166,10 @@ ] }, "then": { - "nl": "Dit gebied wordt beheerd door {operator}" + "en": "Operated by {operator}", + "nl": "Dit gebied wordt beheerd door {operator}" }, + "icon": "./assets/layers/nature_reserve/Natuurpunt.jpg", "hideInAnswer": true }, { @@ -172,35 +179,22 @@ ] }, "then": { - "nl": "Dit gebied wordt beheerd door het Agentschap Natuur en Bos" - } + "en": "Operated by Agentschap Natuur en Bos", + "nl": "Dit gebied wordt beheerd door het Agentschap Natuur en Bos" + }, + "icon": "./assets/layers/nature_reserve/ANB.jpg" } ], "id": "Operator tag" }, { "render": { - "nl": "Dit gebied heet {name:nl}" + "nl": "Dit gebied heet {name}", + "en": "This area is named {name}" }, "question": { - "nl": "Wat is de Nederlandstalige naam van dit gebied?" - }, - "freeform": { - "key": "name:nl" - }, - "condition": { - "and": [ - "name:nl~*" - ] - }, - "id": "Name:nl-tag" - }, - { - "render": { - "nl": "Dit gebied heet {name}" - }, - "question": { - "nl": "Wat is de naam van dit gebied?" + "nl": "Wat is de naam van dit gebied?", + "en": "What is the name of this area?" }, "freeform": { "key": "name", @@ -222,6 +216,7 @@ ] }, "then": { + "en": "This area doesn't have a name", "nl": "Dit gebied heeft geen naam" } } @@ -277,21 +272,7 @@ ], "id": "Dogs?" }, - { - "question": { - "en": "On which webpage can one find more information about this nature reserve?", - "nl": "Op welke webpagina kan men meer informatie vinden over dit natuurgebied?", - "it": "In quale pagina web si possono trovare altre informazioni riguardanti questa riserva naturale?", - "fr": "Sur quelle page web peut-on trouver plus d'informations sur cette réserve naturelle ?", - "de": "Auf welcher Webseite kann man mehr Informationen über dieses Naturschutzgebiet finden?" - }, - "render": "{website}", - "freeform": { - "key": "website", - "type": "url" - }, - "id": "Website" - }, + "website", { "question": { "nl": "Wie is de conservator van dit gebied?
Respecteer privacy - geef deze naam enkel als die duidelijk is gepubliceerd", @@ -346,14 +327,7 @@ "de": "Welche Telefonnummer kann man bei Fragen und Problemen zu diesem Naturschutzgebiet anrufen?
Respektieren Sie die Privatsphäre - geben Sie nur eine Telefonnummer an, wenn diese allgemein bekannt ist" }, "render": { - "nl": "{phone}", - "en": "{phone}", - "ca": "{phone}", - "de": "{phone}", - "fr": "{phone}", - "it": "{phone}", - "ru": "{phone}", - "id": "{phone}" + "*": "{phone}" }, "freeform": { "key": "phone", @@ -363,6 +337,7 @@ }, { "render": { + "en": "Extra information: {description}", "nl": "Extra info: {description}" }, "freeform": { @@ -371,8 +346,12 @@ "id": "Non-editable description" }, { - "question": "Is er extra info die je kwijt wil?", + "question": { + "en": "Is there some extra info?", + "nl": "Is er extra info die je kwijt wil?" + }, "render": { + "en": "Extra info: {description:0}", "nl": "Extra info: {description:0}" }, "freeform": { @@ -388,14 +367,7 @@ "fr": "Superficie : {_surface:ha} ha", "de": "Grundfläche: {_surface:ha}ha" }, - "mappings": [ - { - "if": "_surface:ha=0", - "then": { - "*": "" - } - } - ], + "condition": "_surface:ha!=0", "id": "Surface area" }, "wikipedia" @@ -407,9 +379,11 @@ "fixme=Toegevoegd met MapComplete, geometry nog uit te tekenen" ], "title": { + "en": "nature reserve", "nl": "natuurreservaat" }, "description": { + "en": "Add a missing nature reserve", "nl": "Voeg een ontbrekend, erkend natuurreservaat toe, bv. een gebied dat beheerd wordt door het ANB of natuurpunt" } } @@ -420,6 +394,7 @@ "options": [ { "question": { + "en": "Freely accesible", "nl": "Vrij te bezoeken" }, "osmTags": "access=yes" @@ -431,17 +406,20 @@ "options": [ { "question": { + "en": "All nature reserves", "nl": "Alle natuurgebieden" } }, { "question": { + "en": "Dogs are allowed to roam freely", "nl": "Honden mogen vrij rondlopen" }, "osmTags": "dog=yes" }, { "question": { + "en": "Dogs are allowed if they are leashed", "nl": "Honden welkom aan de leiband" }, "osmTags": { diff --git a/assets/layers/note/note.json b/assets/layers/note/note.json index 63c4475709..10a55aaf61 100644 --- a/assets/layers/note/note.json +++ b/assets/layers/note/note.json @@ -6,7 +6,7 @@ "description": "This layer shows notes on OpenStreetMap. Having this layer in your theme will trigger the 'add new note' functionality in the 'addNewPoint'-popup (or if your theme has no presets, it'll enable adding notes)", "source": { "osmTags": "id~*", - "geoJson": "https://api.openstreetmap.org/api/0.6/notes.json?closed=7&bbox={x_min},{y_min},{x_max},{y_max}", + "geoJson": "https://api.openstreetmap.org/api/0.6/notes.json?limit=10000&closed=7&bbox={x_min},{y_min},{x_max},{y_max}", "geoJsonZoomLevel": 12, "maxCacheAge": 0 }, @@ -29,7 +29,8 @@ "_opened_by_anonymous_user:=feat.get('comments')[0].user === undefined", "_first_user:=feat.get('comments')[0].user", "_first_user_lc:=feat.get('comments')[0].user?.toLowerCase()", - "_first_user_id:=feat.get('comments')[0].uid" + "_first_user_id:=feat.get('comments')[0].uid", + "_is_import_note:=(() => {const lines = feat.properties['_first_comment'].split('\\n'); const matchesMapCompleteURL = lines.map(l => l.match(\".*https://mapcomplete.osm.be/\\([a-zA-Z_-]+\\)\\(.html\\).*#import\")); const matchedIndexes = matchesMapCompleteURL.map((doesMatch, i) => [doesMatch !== null, i]).filter(v => v[0]).map(v => v[1]); return matchedIndexes[0] })()" ], "titleIcons": [ { @@ -201,6 +202,17 @@ } } ] + }, + { + "id": "no_imports", + "options": [ + { + "osmTags": "_is_import_note=", + "question": { + "en": "Hide import notes" + } + } + ] } ] } \ No newline at end of file diff --git a/assets/layers/observation_tower/observation_tower.json b/assets/layers/observation_tower/observation_tower.json index c098033d0c..662fd09ee6 100644 --- a/assets/layers/observation_tower/observation_tower.json +++ b/assets/layers/observation_tower/observation_tower.json @@ -77,22 +77,29 @@ "id": "Height" }, { + "id": "access", "question": { - "en": "Who maintains this tower?", - "nl": "Wie onderhoudt deze toren?", - "de": "Wer betreibt diesen Turm?" + "en": "Can this tower be visited?", + "nl": "Is deze toren publiek toegankelijk?", + "es": "¿Se puede visitar esta torre?" }, - "render": { - "nl": "Wordt onderhouden door {operator}", - "en": "Maintained by {operator}", - "de": "Betrieben von {operator}" - }, - "freeform": { - "key": "operator" - }, - "id": "Operator" + "mappings": [ + { + "if": "access=yes", + "then": { + "en": "This tower is publicly accessible", + "nl": "Deze toren is publiek toegankelijk" + } + }, + { + "if": "access=guided", + "then": { + "en": "This tower can only be visited with a guide", + "nl": "Deze toren can enkel bezocht worden met een gids" + } + } + ] }, - "website", { "question": { "en": "How much does one have to pay to enter this tower?", @@ -125,7 +132,13 @@ } } ], - "id": "Fee" + "id": "Fee", + "condition": { + "or": [ + "access=yes", + "access=guided" + ] + } }, { "builtin": "payment-options", @@ -139,25 +152,90 @@ }, "id": "Payment methods" }, - "wheelchair-access", - "wikipedia" - ], - "presets": [ + "website", { - "tags": [ - "man_made=tower", - "tower:type=observation" - ], - "title": { - "en": "observation tower", - "nl": "Uitkijktoren", - "ru": "смотровая башня", - "de": "Beobachtungsturm" + "id": "step_count", + "question": { + "en": "How much individual steps does one have to climb to reach the top of this tower?", + "nl": "Hoeveel treden moet men beklimmen op de top van de toren te bereiken?" }, - "description": { - "nl": "Een publiek toegankelijke uitkijktoren" + "freeform": { + "key": "step_count", + "type": "pnat" + }, + "render": { + "en": "This tower has {step_count} steps to reach the top", + "nl": "Deze toren heeft {step_count} traptredes" + }, + "condition": { + "or": [ + "access=yes", + "access=guided" + ] } - } + }, + { + "id": "elevator", + "question": { + "en": "Does this tower have an elevator?", + "nl": "Heeft deze toren een lift?" + }, + "mappings": [ + { + "if": "elevator=yes", + "then": { + "en": "This tower has an elevator which takes visitors to the top", + "nl": "Deze toren heeft een lift die bezoekers naar de top van de toren brengt" + } + }, + { + "if": "elevator=no", + "then": { + "en": "This tower does not have an elevator", + "nl": "Deze toren heeft geen lift" + } + } + ], + "condition": { + "or": [ + "access=yes", + "access=guided" + ] + } + }, + { + "question": { + "en": "Who maintains this tower?", + "nl": "Wie onderhoudt deze toren?", + "de": "Wer betreibt diesen Turm?" + }, + "render": { + "nl": "Wordt onderhouden door {operator}", + "en": "Maintained by {operator}", + "de": "Betrieben von {operator}" + }, + "freeform": { + "key": "operator" + }, + "id": "Operator" + }, + { + "builtin": "wheelchair-access", + "override": { + "condition": { + "and": [ + "elevator=yes", + { + "or": [ + "access=yes", + "access=guided" + ] + } + ] + } + } + }, + "wikipedia" ], "source": { "osmTags": { diff --git a/assets/layers/parking/parking.json b/assets/layers/parking/parking.json index 8e7764b35e..1d3a5bf919 100644 --- a/assets/layers/parking/parking.json +++ b/assets/layers/parking/parking.json @@ -1,6 +1,7 @@ { "id": "parking", "name": { + "en": "Parking", "nl": "Parking" }, "minzoom": 12, diff --git a/assets/layers/picnic_table/picnic_table.json b/assets/layers/picnic_table/picnic_table.json index fd06f63f4f..03082ea333 100644 --- a/assets/layers/picnic_table/picnic_table.json +++ b/assets/layers/picnic_table/picnic_table.json @@ -2,7 +2,7 @@ "id": "picnic_table", "name": { "en": "Picnic tables", - "nl": "Picnictafels", + "nl": "Picknicktafels", "it": "Tavoli da picnic", "ru": "Столы для пикника", "fr": "Tables de pique-nique", @@ -15,7 +15,7 @@ "title": { "render": { "en": "Picnic table", - "nl": "Picnictafel", + "nl": "Picknicktafel", "it": "Tavolo da picnic", "ru": "Стол для пикника", "fr": "Table de pique-nique", @@ -24,17 +24,18 @@ }, "description": { "en": "The layer showing picnic tables", - "nl": "Deze laag toont picnictafels", + "nl": "Deze laag toont picknicktafels", "it": "Il livello che mostra i tavoli da picnic", "fr": "La couche montrant les tables de pique-nique", "ru": "Слой, отображающий столы для пикника", "de": "Die Ebene zeigt Picknicktische an" }, "tagRenderings": [ + "images", { "question": { "en": "What material is this picnic table made of?", - "nl": "Van welk materiaal is deze picnictafel gemaakt?", + "nl": "Van welk materiaal is deze picknicktafel gemaakt?", "it": "Di che materiale è fatto questo tavolo da picnic?", "de": "Aus welchem Material besteht dieser Picknicktisch?", "ru": "Из чего изготовлен этот стол для пикника?", @@ -42,7 +43,7 @@ }, "render": { "en": "This picnic table is made of {material}", - "nl": "Deze picnictafel is gemaakt van {material}", + "nl": "Deze picknicktafel is gemaakt van {material}", "it": "Questo tavolo da picnic è fatto di {material}", "de": "Dieser Picknicktisch besteht aus {material}", "ru": "Этот стол для пикника сделан из {material}", @@ -56,7 +57,7 @@ "if": "material=wood", "then": { "en": "This is a wooden picnic table", - "nl": "Deze picnictafel is gemaakt uit hout", + "nl": "Deze picknicktafel is gemaakt uit hout", "it": "È un tavolo da picnic in legno", "ru": "Это деревянный стол для пикника", "de": "Dies ist ein Picknicktisch aus Holz", @@ -67,7 +68,7 @@ "if": "material=concrete", "then": { "en": "This is a concrete picnic table", - "nl": "Deze picnictafel is gemaakt uit beton", + "nl": "Deze picknicktafel is gemaakt uit beton", "it": "È un tavolo da picnic in cemento", "ru": "Это бетонный стол для пикника", "de": "Dies ist ein Picknicktisch aus Beton", diff --git a/assets/layers/play_forest/icon.svg b/assets/layers/play_forest/icon.svg index 83c51bef85..229042923a 100644 --- a/assets/layers/play_forest/icon.svg +++ b/assets/layers/play_forest/icon.svg @@ -1,6 +1,38 @@ - - - - + + + + + + - \ No newline at end of file + diff --git a/assets/layers/playground/playground.json b/assets/layers/playground/playground.json index b6df6429ac..6c6b62bf5a 100644 --- a/assets/layers/playground/playground.json +++ b/assets/layers/playground/playground.json @@ -165,6 +165,9 @@ "id": "playground-surface" }, { + "labels": [ + "extra" + ], "id": "playground-lit", "question": { "nl": "Is deze speeltuin 's nachts verlicht?", @@ -200,6 +203,9 @@ ] }, { + "labels": [ + "extra" + ], "render": { "nl": "Toegankelijk vanaf {min_age} jaar oud", "en": "Accessible to kids older than {min_age} years", @@ -223,6 +229,9 @@ "id": "playground-min_age" }, { + "labels": [ + "extra" + ], "render": { "nl": "Toegankelijk tot {max_age}", "en": "Accessible to kids of at most {max_age}", @@ -274,17 +283,6 @@ "fr": "L’aire de jeu est-elle accessible au public ?" }, "mappings": [ - { - "if": "access=", - "then": { - "en": "Accessible to the general public", - "nl": "Vrij toegankelijk voor het publiek", - "it": "Accessibile pubblicamente", - "de": "Zugänglich für die Allgemeinheit", - "fr": "Accessible au public" - }, - "hideInAnswer": true - }, { "if": "access=yes", "then": { @@ -309,11 +307,12 @@ "if": "access=students", "then": { "en": "Only accessible to students of the school", - "nl": "Vrij toegankelijk voor scholieren van de school", + "nl": "Enkel toegankelijk voor scholieren van de bijhorende school", "it": "Accessibile solamente agli studenti della scuola", "de": "Nur für Schüler der Schule zugänglich", "fr": "Réservée aux élèves de l’école" - } + }, + "hideInAnswer": true }, { "if": "access=private", @@ -458,18 +457,6 @@ "it": "Si può sempre accedere", "de": "Immer zugänglich" } - }, - { - "if": "opening_hours=", - "then": { - "nl": "Dag en nacht toegankelijk", - "en": "Always accessible", - "ru": "Всегда доступен", - "fr": "Toujours accessible", - "it": "Si può sempre accedere", - "de": "Immer zugänglich" - }, - "hideInAnswer": true } ], "id": "playground-opening_hours" @@ -486,12 +473,12 @@ "leisure=playground" ], "title": { - "nl": "Speeltuin", - "en": "Playground", + "nl": "speeltuin", + "en": "playground", "ru": "Детская площадка", - "fr": "Terrain de jeux", - "it": "Campetto", - "de": "Spielplatz" + "fr": "terrain de jeux", + "it": "campetto", + "de": "spielplatz" } } ], diff --git a/assets/layers/public_bookcase/public_bookcase.json b/assets/layers/public_bookcase/public_bookcase.json index 82fa6f1299..808faf96f1 100644 --- a/assets/layers/public_bookcase/public_bookcase.json +++ b/assets/layers/public_bookcase/public_bookcase.json @@ -68,10 +68,6 @@ ], "tagRenderings": [ "images", - { - "id": "minimap", - "render": "{minimap():height: 9rem; border-radius: 2.5rem; overflow:hidden;border:1px solid gray}" - }, { "render": { "en": "The name of this bookcase is {name}", @@ -434,7 +430,7 @@ "fr": "Plus d'infos sur le site web", "ru": "Более подробная информация на сайте", "it": "Maggiori informazioni sul sito web", - "hu": "További információ ezen a weboldalon." + "hu": "További információ ezen a weboldalon" }, "question": { "en": "Is there a website with more information about this public bookcase?", diff --git a/assets/layers/shops/shops.json b/assets/layers/shops/shops.json index b739986fbf..c9c4461bfc 100644 --- a/assets/layers/shops/shops.json +++ b/assets/layers/shops/shops.json @@ -321,6 +321,7 @@ }, "id": "shops-opening_hours" }, + "payment-options", "questions", "reviews" ], diff --git a/assets/layers/toilet/toilet.json b/assets/layers/toilet/toilet.json index 800b9aed3b..e74afb0896 100644 --- a/assets/layers/toilet/toilet.json +++ b/assets/layers/toilet/toilet.json @@ -28,7 +28,7 @@ "en": "public toilet", "de": "öffentlich zugängliche Toilette", "fr": "toilette publique", - "nl": "publieke toilet", + "nl": "publiek toilet", "ru": "общественный туалет ", "it": "servizi igienici aperti al pubblico" }, @@ -41,7 +41,7 @@ "en": "toilets with wheelchair accessible toilet", "de": "toiletten mit rollstuhlgerechter Toilette", "fr": "toilettes accessible aux personnes à mobilité réduite", - "nl": "rolstoeltoegankelijke, publieke toilet", + "nl": "rolstoeltoegankelijke, publiek toilet", "it": "servizi igienici accessibili per persone in sedia a rotelle", "ru": "tуалет с доступом для пользователей кресел-колясок" }, diff --git a/assets/layers/trail/trail.json b/assets/layers/trail/trail.json index 72e9452136..84416e15f0 100644 --- a/assets/layers/trail/trail.json +++ b/assets/layers/trail/trail.json @@ -13,9 +13,10 @@ "and": [ { "or": [ - "route=hiking", - "route=bycicle", - "route=horse" + "route~.*foot.*", + "route~.*hiking.*", + "route~.*bycicle.*", + "route~.*horse.*" ] } ] diff --git a/assets/layoutconfigmeta.json b/assets/layoutconfigmeta.json new file mode 100644 index 0000000000..40abedbc87 --- /dev/null +++ b/assets/layoutconfigmeta.json @@ -0,0 +1,5365 @@ +[ + { + "path": [], + "type": "object" + }, + { + "path": [ + "id" + ], + "type": "string" + }, + { + "path": [ + "credits" + ], + "type": "string" + }, + { + "path": [ + "maintainer" + ], + "type": "string" + }, + { + "path": [ + "version" + ], + "type": "string" + }, + { + "path": [ + "mustHaveLanguage" + ], + "type": "array" + }, + { + "path": [ + "title" + ] + }, + { + "path": [ + "shortDescription" + ] + }, + { + "path": [ + "description" + ] + }, + { + "path": [ + "descriptionTail" + ] + }, + { + "path": [ + "icon" + ], + "typeHint": "icon", + "type": "string" + }, + { + "path": [ + "socialImage" + ], + "typeHint": "image", + "type": "string" + }, + { + "path": [ + "startZoom" + ], + "type": "number" + }, + { + "path": [ + "widenFactor" + ], + "type": "number" + }, + { + "path": [ + "overpassMaxZoom" + ], + "type": "number" + }, + { + "path": [ + "osmApiTileSize" + ], + "type": "number" + }, + { + "path": [ + "overrideAll" + ] + }, + { + "path": [ + "defaultBackgroundId" + ], + "type": "string" + }, + { + "path": [ + "tileLayerSources" + ], + "type": "array" + }, + { + "path": [ + "tileLayerSources" + ], + "type": "object" + }, + { + "path": [ + "tileLayerSources", + "id" + ], + "type": "string" + }, + { + "path": [ + "tileLayerSources", + "source" + ], + "type": "string" + }, + { + "path": [ + "tileLayerSources", + "isOverlay" + ], + "type": "boolean" + }, + { + "path": [ + "tileLayerSources", + "name" + ] + }, + { + "path": [ + "tileLayerSources", + "minZoom" + ], + "type": "number" + }, + { + "path": [ + "tileLayerSources", + "maxZoom" + ], + "type": "number" + }, + { + "path": [ + "tileLayerSources", + "defaultState" + ], + "type": "boolean" + }, + { + "path": [ + "layers" + ], + "type": "array" + }, + { + "path": [ + "layers" + ], + "type": "object" + }, + { + "path": [ + "layers", + "id" + ], + "type": "string" + }, + { + "path": [ + "layers", + "name" + ] + }, + { + "path": [ + "layers", + "description" + ] + }, + { + "path": [ + "layers", + "source" + ], + "type": [ + { + "allOf": [ + { + "type": "object", + "properties": { + "osmTags": { + "description": "Every source must set which tags have to be present in order to load the given layer.", + "anyOf": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + "maxCacheAge": { + "description": "The maximum amount of seconds that a tile is allowed to linger in the cache", + "type": "number" + } + }, + "required": [ + "osmTags" + ] + }, + { + "type": "object", + "properties": { + "overpassScript": { + "type": "string" + } + } + } + ] + }, + { + "allOf": [ + { + "type": "object", + "properties": { + "osmTags": { + "description": "Every source must set which tags have to be present in order to load the given layer.", + "anyOf": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + "maxCacheAge": { + "description": "The maximum amount of seconds that a tile is allowed to linger in the cache", + "type": "number" + } + }, + "required": [ + "osmTags" + ] + }, + { + "type": "object", + "properties": { + "geoJson": { + "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}", + "type": "string" + }, + "geoJsonZoomLevel": { + "description": "To load a tiled geojson layer, set the zoomlevel of the tiles", + "type": "number" + }, + "isOsmCache": { + "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache", + "type": "boolean" + }, + "mercatorCrs": { + "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true` in the source for this", + "type": "boolean" + }, + "idKey": { + "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'", + "type": "string" + } + }, + "required": [ + "geoJson" + ] + } + ] + } + ] + }, + { + "path": [ + "layers", + "calculatedTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "doNotDownload" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "isShown" + ], + "type": "object" + }, + { + "path": [ + "layers", + "isShown", + "id" + ], + "type": "string" + }, + { + "path": [ + "layers", + "isShown", + "group" + ], + "type": "string" + }, + { + "path": [ + "layers", + "isShown", + "labels" + ], + "type": "array" + }, + { + "path": [ + "layers", + "isShown", + "render" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "isShown", + "question" + ] + }, + { + "path": [ + "layers", + "isShown", + "condition" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "isShown", + "freeform" + ], + "type": "object" + }, + { + "path": [ + "layers", + "isShown", + "freeform", + "key" + ], + "type": "string" + }, + { + "path": [ + "layers", + "isShown", + "freeform", + "type" + ], + "type": "string" + }, + { + "path": [ + "layers", + "isShown", + "freeform", + "placeholder" + ] + }, + { + "path": [ + "layers", + "isShown", + "freeform", + "helperArgs" + ], + "type": "array" + }, + { + "path": [ + "layers", + "isShown", + "freeform", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "isShown", + "freeform", + "inline" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "isShown", + "freeform", + "default" + ], + "type": "string" + }, + { + "path": [ + "layers", + "isShown", + "multiAnswer" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "isShown", + "mappings" + ], + "type": "array" + }, + { + "path": [ + "layers", + "isShown", + "mappings", + "if" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "isShown", + "mappings", + "then" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "isShown", + "mappings", + "icon" + ], + "typeHint": "icon", + "type": "string" + }, + { + "path": [ + "layers", + "isShown", + "mappings", + "hideInAnswer" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": [ + "string", + "boolean" + ] + } + ] + }, + { + "path": [ + "layers", + "isShown", + "mappings", + "ifnot" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "isShown", + "mappings", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "forceLoad" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "minzoom" + ], + "type": "number" + }, + { + "path": [ + "layers", + "shownByDefault" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "minzoomVisible" + ], + "type": "number" + }, + { + "path": [ + "layers", + "title" + ], + "type": [ + { + "$ref": "#/definitions/TagRenderingConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "title" + ], + "type": "object" + }, + { + "path": [ + "layers", + "title", + "id" + ], + "type": "string" + }, + { + "path": [ + "layers", + "title", + "group" + ], + "type": "string" + }, + { + "path": [ + "layers", + "title", + "labels" + ], + "type": "array" + }, + { + "path": [ + "layers", + "title", + "render" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "title", + "question" + ] + }, + { + "path": [ + "layers", + "title", + "condition" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "title", + "freeform" + ], + "type": "object" + }, + { + "path": [ + "layers", + "title", + "freeform", + "key" + ], + "type": "string" + }, + { + "path": [ + "layers", + "title", + "freeform", + "type" + ], + "type": "string" + }, + { + "path": [ + "layers", + "title", + "freeform", + "placeholder" + ] + }, + { + "path": [ + "layers", + "title", + "freeform", + "helperArgs" + ], + "type": "array" + }, + { + "path": [ + "layers", + "title", + "freeform", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "title", + "freeform", + "inline" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "title", + "freeform", + "default" + ], + "type": "string" + }, + { + "path": [ + "layers", + "title", + "multiAnswer" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "title", + "mappings" + ], + "type": "array" + }, + { + "path": [ + "layers", + "title", + "mappings", + "if" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "title", + "mappings", + "then" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "title", + "mappings", + "icon" + ], + "typeHint": "icon", + "type": "string" + }, + { + "path": [ + "layers", + "title", + "mappings", + "hideInAnswer" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": [ + "string", + "boolean" + ] + } + ] + }, + { + "path": [ + "layers", + "title", + "mappings", + "ifnot" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "title", + "mappings", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "titleIcons" + ], + "typeHint": "icon[]", + "type": [ + { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/TagRenderingConfigJson" + }, + { + "type": "string" + } + ] + } + }, + { + "type": "array", + "items": [ + { + "type": "string", + "enum": [ + "defaults" + ] + } + ], + "minItems": 1, + "maxItems": 1 + } + ] + }, + { + "path": [ + "layers", + "titleIcons" + ], + "type": "object" + }, + { + "path": [ + "layers", + "titleIcons", + "id" + ], + "type": "string" + }, + { + "path": [ + "layers", + "titleIcons", + "group" + ], + "type": "string" + }, + { + "path": [ + "layers", + "titleIcons", + "labels" + ], + "type": "array" + }, + { + "path": [ + "layers", + "titleIcons", + "render" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "titleIcons", + "question" + ] + }, + { + "path": [ + "layers", + "titleIcons", + "condition" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "titleIcons", + "freeform" + ], + "type": "object" + }, + { + "path": [ + "layers", + "titleIcons", + "freeform", + "key" + ], + "type": "string" + }, + { + "path": [ + "layers", + "titleIcons", + "freeform", + "type" + ], + "type": "string" + }, + { + "path": [ + "layers", + "titleIcons", + "freeform", + "placeholder" + ] + }, + { + "path": [ + "layers", + "titleIcons", + "freeform", + "helperArgs" + ], + "type": "array" + }, + { + "path": [ + "layers", + "titleIcons", + "freeform", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "titleIcons", + "freeform", + "inline" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "titleIcons", + "freeform", + "default" + ], + "type": "string" + }, + { + "path": [ + "layers", + "titleIcons", + "multiAnswer" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "titleIcons", + "mappings" + ], + "type": "array" + }, + { + "path": [ + "layers", + "titleIcons", + "mappings", + "if" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "titleIcons", + "mappings", + "then" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "titleIcons", + "mappings", + "icon" + ], + "typeHint": "icon", + "type": "string" + }, + { + "path": [ + "layers", + "titleIcons", + "mappings", + "hideInAnswer" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": [ + "string", + "boolean" + ] + } + ] + }, + { + "path": [ + "layers", + "titleIcons", + "mappings", + "ifnot" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "titleIcons", + "mappings", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "location" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "icon" + ], + "typeHint": "icon", + "type": [ + { + "$ref": "#/definitions/TagRenderingConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "icon" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "id" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "group" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "labels" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "render" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "question" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "condition" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "freeform" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "freeform", + "key" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "freeform", + "type" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "freeform", + "placeholder" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "freeform", + "helperArgs" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "freeform", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "freeform", + "inline" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "freeform", + "default" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "multiAnswer" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "mappings" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "mappings", + "if" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "mappings", + "then" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "mappings", + "icon" + ], + "typeHint": "icon", + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "mappings", + "hideInAnswer" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": [ + "string", + "boolean" + ] + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "mappings", + "ifnot" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "icon", + "mappings", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then" + ], + "typeHint": "icon", + "type": [ + { + "$ref": "#/definitions/TagRenderingConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "id" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "group" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "labels" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "render" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "question" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "condition" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "freeform" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "freeform", + "key" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "freeform", + "type" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "freeform", + "placeholder" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "freeform", + "helperArgs" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "freeform", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "freeform", + "inline" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "freeform", + "default" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "multiAnswer" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "mappings" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "mappings", + "if" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "mappings", + "then" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "mappings", + "icon" + ], + "typeHint": "icon", + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "mappings", + "hideInAnswer" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": [ + "string", + "boolean" + ] + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "mappings", + "ifnot" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "iconBadges", + "then", + "mappings", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize" + ], + "type": [ + { + "$ref": "#/definitions/TagRenderingConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "id" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "group" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "labels" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "render" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "question" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "condition" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "freeform" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "freeform", + "key" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "freeform", + "type" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "freeform", + "placeholder" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "freeform", + "helperArgs" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "freeform", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "freeform", + "inline" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "freeform", + "default" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "multiAnswer" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "mappings" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "mappings", + "if" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "mappings", + "then" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "mappings", + "icon" + ], + "typeHint": "icon", + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "mappings", + "hideInAnswer" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": [ + "string", + "boolean" + ] + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "mappings", + "ifnot" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "iconSize", + "mappings", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "rotation" + ], + "type": [ + { + "$ref": "#/definitions/TagRenderingConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "rotation" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "id" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "group" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "labels" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "render" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "question" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "condition" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "freeform" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "freeform", + "key" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "freeform", + "type" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "freeform", + "placeholder" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "freeform", + "helperArgs" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "freeform", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "freeform", + "inline" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "freeform", + "default" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "multiAnswer" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "mappings" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "mappings", + "if" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "mappings", + "then" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "mappings", + "icon" + ], + "typeHint": "icon", + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "mappings", + "hideInAnswer" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": [ + "string", + "boolean" + ] + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "mappings", + "ifnot" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "rotation", + "mappings", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "label" + ], + "type": [ + { + "$ref": "#/definitions/TagRenderingConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "label" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "id" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "group" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "labels" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "render" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "question" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "condition" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "freeform" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "freeform", + "key" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "freeform", + "type" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "freeform", + "placeholder" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "freeform", + "helperArgs" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "freeform", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "freeform", + "inline" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "freeform", + "default" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "multiAnswer" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "mappings" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "mappings", + "if" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "mappings", + "then" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "mappings", + "icon" + ], + "typeHint": "icon", + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "mappings", + "hideInAnswer" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": [ + "string", + "boolean" + ] + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "mappings", + "ifnot" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "label", + "mappings", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "color" + ], + "type": [ + { + "$ref": "#/definitions/TagRenderingConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "color" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "id" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "group" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "labels" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "render" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "question" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "condition" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "freeform" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "freeform", + "key" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "freeform", + "type" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "freeform", + "placeholder" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "freeform", + "helperArgs" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "freeform", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "freeform", + "inline" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "freeform", + "default" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "multiAnswer" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "mappings" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "mappings", + "if" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "mappings", + "then" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "mappings", + "icon" + ], + "typeHint": "icon", + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "mappings", + "hideInAnswer" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": [ + "string", + "boolean" + ] + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "mappings", + "ifnot" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "color", + "mappings", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "width" + ], + "type": [ + { + "$ref": "#/definitions/TagRenderingConfigJson" + }, + { + "type": [ + "string", + "number" + ] + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "width" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "id" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "group" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "labels" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "render" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "question" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "condition" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "freeform" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "freeform", + "key" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "freeform", + "type" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "freeform", + "placeholder" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "freeform", + "helperArgs" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "freeform", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "freeform", + "inline" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "freeform", + "default" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "multiAnswer" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "mappings" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "mappings", + "if" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "mappings", + "then" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "mappings", + "icon" + ], + "typeHint": "icon", + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "mappings", + "hideInAnswer" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": [ + "string", + "boolean" + ] + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "mappings", + "ifnot" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "width", + "mappings", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray" + ], + "type": [ + { + "$ref": "#/definitions/TagRenderingConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "id" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "group" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "labels" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "render" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "question" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "condition" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "freeform" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "freeform", + "key" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "freeform", + "type" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "freeform", + "placeholder" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "freeform", + "helperArgs" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "freeform", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "freeform", + "inline" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "freeform", + "default" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "multiAnswer" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "mappings" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "mappings", + "if" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "mappings", + "then" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "mappings", + "icon" + ], + "typeHint": "icon", + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "mappings", + "hideInAnswer" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": [ + "string", + "boolean" + ] + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "mappings", + "ifnot" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "dashArray", + "mappings", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap" + ], + "type": [ + { + "$ref": "#/definitions/TagRenderingConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "id" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "group" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "labels" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "render" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "question" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "condition" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "freeform" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "freeform", + "key" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "freeform", + "type" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "freeform", + "placeholder" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "freeform", + "helperArgs" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "freeform", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "freeform", + "inline" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "freeform", + "default" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "multiAnswer" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "mappings" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "mappings", + "if" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "mappings", + "then" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "mappings", + "icon" + ], + "typeHint": "icon", + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "mappings", + "hideInAnswer" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": [ + "string", + "boolean" + ] + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "mappings", + "ifnot" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "lineCap", + "mappings", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "fill" + ], + "type": [ + { + "$ref": "#/definitions/TagRenderingConfigJson" + }, + { + "enum": [ + "no", + "yes" + ], + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "fill" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "id" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "group" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "labels" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "render" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "question" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "condition" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "freeform" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "freeform", + "key" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "freeform", + "type" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "freeform", + "placeholder" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "freeform", + "helperArgs" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "freeform", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "freeform", + "inline" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "freeform", + "default" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "multiAnswer" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "mappings" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "mappings", + "if" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "mappings", + "then" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "mappings", + "icon" + ], + "typeHint": "icon", + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "mappings", + "hideInAnswer" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": [ + "string", + "boolean" + ] + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "mappings", + "ifnot" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "fill", + "mappings", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor" + ], + "type": [ + { + "$ref": "#/definitions/TagRenderingConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "id" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "group" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "labels" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "render" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "question" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "condition" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "freeform" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "freeform", + "key" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "freeform", + "type" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "freeform", + "placeholder" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "freeform", + "helperArgs" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "freeform", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "freeform", + "inline" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "freeform", + "default" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "multiAnswer" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "mappings" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "mappings", + "if" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "mappings", + "then" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "mappings", + "icon" + ], + "typeHint": "icon", + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "mappings", + "hideInAnswer" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": [ + "string", + "boolean" + ] + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "mappings", + "ifnot" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "fillColor", + "mappings", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "offset" + ], + "type": [ + { + "$ref": "#/definitions/TagRenderingConfigJson" + }, + { + "type": "number" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "offset" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "id" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "group" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "labels" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "render" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "question" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "condition" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "freeform" + ], + "type": "object" + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "freeform", + "key" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "freeform", + "type" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "freeform", + "placeholder" + ] + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "freeform", + "helperArgs" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "freeform", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "freeform", + "inline" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "freeform", + "default" + ], + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "multiAnswer" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "mappings" + ], + "type": "array" + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "mappings", + "if" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "mappings", + "then" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "mappings", + "icon" + ], + "typeHint": "icon", + "type": "string" + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "mappings", + "hideInAnswer" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": [ + "string", + "boolean" + ] + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "mappings", + "ifnot" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "mapRendering", + "offset", + "mappings", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "passAllFeatures" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "presets" + ], + "type": "array" + }, + { + "path": [ + "layers", + "presets", + "title" + ] + }, + { + "path": [ + "layers", + "presets", + "tags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "presets", + "description" + ] + }, + { + "path": [ + "layers", + "presets", + "exampleImages" + ], + "typeHint": "image", + "type": "array" + }, + { + "path": [ + "layers", + "presets", + "preciseInput" + ], + "type": [ + { + "type": "object", + "properties": { + "preferredBackground": { + "description": "The type of background picture", + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "string" + } + ] + }, + "snapToLayer": { + "description": "If specified, these layers will be shown to and the new point will be snapped towards it", + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "string" + } + ] + }, + "maxSnapDistance": { + "description": "If specified, a new point will only be snapped if it is within this range.\nDistance in meter\n\nDefault: 10", + "type": "number" + } + }, + "required": [ + "preferredBackground" + ] + }, + { + "enum": [ + true + ], + "type": "boolean" + } + ] + }, + { + "path": [ + "layers", + "presets", + "preciseInput", + "preferredBackground" + ], + "type": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "presets", + "preciseInput", + "snapToLayer" + ], + "type": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "presets", + "preciseInput", + "maxSnapDistance" + ], + "type": "number" + }, + { + "path": [ + "layers", + "tagRenderings" + ], + "type": "array" + }, + { + "path": [ + "layers", + "tagRenderings" + ], + "type": "object" + }, + { + "path": [ + "layers", + "tagRenderings", + "id" + ], + "type": "string" + }, + { + "path": [ + "layers", + "tagRenderings", + "group" + ], + "type": "string" + }, + { + "path": [ + "layers", + "tagRenderings", + "labels" + ], + "type": "array" + }, + { + "path": [ + "layers", + "tagRenderings", + "render" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "tagRenderings", + "question" + ] + }, + { + "path": [ + "layers", + "tagRenderings", + "condition" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "tagRenderings", + "freeform" + ], + "type": "object" + }, + { + "path": [ + "layers", + "tagRenderings", + "freeform", + "key" + ], + "type": "string" + }, + { + "path": [ + "layers", + "tagRenderings", + "freeform", + "type" + ], + "type": "string" + }, + { + "path": [ + "layers", + "tagRenderings", + "freeform", + "placeholder" + ] + }, + { + "path": [ + "layers", + "tagRenderings", + "freeform", + "helperArgs" + ], + "type": "array" + }, + { + "path": [ + "layers", + "tagRenderings", + "freeform", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "tagRenderings", + "freeform", + "inline" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "tagRenderings", + "freeform", + "default" + ], + "type": "string" + }, + { + "path": [ + "layers", + "tagRenderings", + "multiAnswer" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "tagRenderings", + "mappings" + ], + "type": "array" + }, + { + "path": [ + "layers", + "tagRenderings", + "mappings", + "if" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "tagRenderings", + "mappings", + "then" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "tagRenderings", + "mappings", + "icon" + ], + "typeHint": "icon", + "type": "string" + }, + { + "path": [ + "layers", + "tagRenderings", + "mappings", + "hideInAnswer" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": [ + "string", + "boolean" + ] + } + ] + }, + { + "path": [ + "layers", + "tagRenderings", + "mappings", + "ifnot" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "tagRenderings", + "mappings", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings" + ], + "type": "object" + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "id" + ], + "type": "string" + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "group" + ], + "type": "string" + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "labels" + ], + "type": "array" + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "render" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "question" + ] + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "condition" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "freeform" + ], + "type": "object" + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "freeform", + "key" + ], + "type": "string" + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "freeform", + "type" + ], + "type": "string" + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "freeform", + "placeholder" + ] + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "freeform", + "helperArgs" + ], + "type": "array" + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "freeform", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "freeform", + "inline" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "freeform", + "default" + ], + "type": "string" + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "multiAnswer" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "mappings" + ], + "type": "array" + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "mappings", + "if" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "mappings", + "then" + ], + "typeHint": "rendered" + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "mappings", + "icon" + ], + "typeHint": "icon", + "type": "string" + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "mappings", + "hideInAnswer" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": [ + "string", + "boolean" + ] + } + ] + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "mappings", + "ifnot" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "mappings", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "layers", + "filter" + ], + "type": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/default_1" + } + }, + { + "type": "object", + "properties": { + "sameAs": { + "type": "string" + } + }, + "required": [ + "sameAs" + ] + } + ] + }, + { + "path": [ + "layers", + "filter", + "id" + ], + "type": "string" + }, + { + "path": [ + "layers", + "filter", + "options" + ], + "type": "array" + }, + { + "path": [ + "layers", + "deletion" + ], + "type": [ + { + "$ref": "#/definitions/DeleteConfigJson" + }, + { + "type": "boolean" + } + ] + }, + { + "path": [ + "layers", + "deletion", + "extraDeleteReasons" + ], + "type": "array" + }, + { + "path": [ + "layers", + "deletion", + "extraDeleteReasons", + "explanation" + ] + }, + { + "path": [ + "layers", + "deletion", + "extraDeleteReasons", + "changesetMessage" + ], + "type": "string" + }, + { + "path": [ + "layers", + "deletion", + "nonDeleteMappings" + ], + "type": "array" + }, + { + "path": [ + "layers", + "deletion", + "softDeletionTags" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "layers", + "deletion", + "neededChangesets" + ], + "type": "number" + }, + { + "path": [ + "layers", + "allowMove" + ], + "type": [ + { + "$ref": "#/definitions/default_3" + }, + { + "type": "boolean" + } + ] + }, + { + "path": [ + "layers", + "allowMove", + "enableImproveAccuracy" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "allowMove", + "enableRelocation" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "allowSplit" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "units" + ], + "type": "array" + }, + { + "path": [ + "layers", + "units", + "appliesToKey" + ], + "type": "array" + }, + { + "path": [ + "layers", + "units", + "eraseInvalidValues" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "units", + "applicableUnits" + ], + "type": "array" + }, + { + "path": [ + "layers", + "units", + "applicableUnits", + "canonicalDenomination" + ], + "type": "string" + }, + { + "path": [ + "layers", + "units", + "applicableUnits", + "canonicalDenominationSingular" + ], + "type": "string" + }, + { + "path": [ + "layers", + "units", + "applicableUnits", + "alternativeDenomination" + ], + "type": "array" + }, + { + "path": [ + "layers", + "units", + "applicableUnits", + "human" + ] + }, + { + "path": [ + "layers", + "units", + "applicableUnits", + "humanSingular" + ] + }, + { + "path": [ + "layers", + "units", + "applicableUnits", + "prefix" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "units", + "applicableUnits", + "default" + ], + "type": "boolean" + }, + { + "path": [ + "layers", + "hideTagRenderingsWithLabels" + ], + "type": "array" + }, + { + "path": [ + "clustering" + ], + "type": [ + { + "type": "object", + "properties": { + "maxZoom": { + "description": "All zoom levels above 'maxzoom' are not clustered anymore.\nDefaults to 18", + "type": "number" + }, + "minNeededElements": { + "description": "The number of elements per tile needed to start clustering\nIf clustering is defined, defaults to 250", + "type": "number" + } + } + }, + { + "enum": [ + false + ], + "type": "boolean" + } + ] + }, + { + "path": [ + "clustering", + "maxZoom" + ], + "type": "number" + }, + { + "path": [ + "clustering", + "minNeededElements" + ], + "type": "number" + }, + { + "path": [ + "customCss" + ], + "type": "string" + }, + { + "path": [ + "hideFromOverview" + ], + "type": "boolean" + }, + { + "path": [ + "lockLocation" + ], + "type": [ + { + "type": "array", + "items": [ + { + "type": "array", + "items": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "minItems": 2, + "maxItems": 2 + }, + { + "type": "array", + "items": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "minItems": 2, + "maxItems": 2 + } + ], + "minItems": 2, + "maxItems": 2 + }, + { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "number" + } + } + } + ] + }, + { + "path": [ + "enableUserBadge" + ], + "type": "boolean" + }, + { + "path": [ + "enableShareScreen" + ], + "type": "boolean" + }, + { + "path": [ + "enableMoreQuests" + ], + "type": "boolean" + }, + { + "path": [ + "enableLayers" + ], + "type": "boolean" + }, + { + "path": [ + "enableSearch" + ], + "type": "boolean" + }, + { + "path": [ + "enableAddNewPoints" + ], + "type": "boolean" + }, + { + "path": [ + "enableGeolocation" + ], + "type": "boolean" + }, + { + "path": [ + "enableBackgroundLayerSelection" + ], + "type": "boolean" + }, + { + "path": [ + "enableShowAllQuestions" + ], + "type": "boolean" + }, + { + "path": [ + "enableDownload" + ], + "type": "boolean" + }, + { + "path": [ + "enablePdfDownload" + ], + "type": "boolean" + }, + { + "path": [ + "enableNoteImports" + ], + "type": "boolean" + }, + { + "path": [ + "overpassUrl" + ], + "type": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "overpassTimeout" + ], + "type": "number" + } +] \ No newline at end of file diff --git a/assets/svg/cash.svg b/assets/svg/cash.svg new file mode 100644 index 0000000000..5f47efb1a9 --- /dev/null +++ b/assets/svg/cash.svg @@ -0,0 +1,7 @@ + + + + + Svg Vector Icons : http://www.onlinewebfonts.com/icon + + \ No newline at end of file diff --git a/assets/svg/compass.svg b/assets/svg/compass.svg index 5872426642..fd3d583e58 100644 --- a/assets/svg/compass.svg +++ b/assets/svg/compass.svg @@ -1,73 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/assets/svg/invalid.svg b/assets/svg/invalid.svg new file mode 100644 index 0000000000..4b913ae581 --- /dev/null +++ b/assets/svg/invalid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/svg/license_info.json b/assets/svg/license_info.json index 2d7f5689bb..47eda46781 100644 --- a/assets/svg/license_info.json +++ b/assets/svg/license_info.json @@ -141,6 +141,16 @@ "https://commons.wikimedia.org/wiki/File:Camera_font_awesome.svg" ] }, + { + "path": "cash.svg", + "license": "CC-BY 3.0", + "authors": [ + "Online Web Fonts" + ], + "sources": [ + "https://www.onlinewebfonts.com/icon/464494" + ] + }, { "path": "checkbox-empty.svg", "license": "CC0", @@ -575,6 +585,16 @@ "https://commons.wikimedia.org/wiki/File:Home-icon.svg" ] }, + { + "path": "invalid.svg", + "license": "CC-BY 4.0", + "authors": [ + "Twemoji" + ], + "sources": [ + "https://github.com/twitter/twemoji" + ] + }, { "path": "josm_logo.svg", "license": "CC0", @@ -805,6 +825,16 @@ ], "sources": [] }, + { + "path": "nfc_card.svg", + "license": "CC0", + "authors": [ + "Stijn Wens" + ], + "sources": [ + "https://wens.be/free-antwerpenize-bicycle-font" + ] + }, { "path": "no_checkmark.svg", "license": "CC0; trivial", @@ -823,6 +853,16 @@ "authors": [], "sources": [] }, + { + "path": "not_found.svg", + "license": "CC-BY 4.0", + "authors": [ + "Twemoji" + ], + "sources": [ + "https://github.com/twitter/twemoji" + ] + }, { "path": "note.svg", "license": "CC0", @@ -867,6 +907,16 @@ "https://www.OpenStreetMap.org" ] }, + { + "path": "payment_card.svg", + "license": "CC0", + "authors": [ + " \tMaxi Koichi (maxixam)" + ], + "sources": [ + "https://commons.wikimedia.org/wiki/File:Credit_Card_-_The_Noun_Project.svg" + ] + }, { "path": "pencil.svg", "license": "MIT", @@ -1069,6 +1119,26 @@ "authors": [], "sources": [] }, + { + "path": "smartphone.svg", + "license": "CC-BY 3.0", + "authors": [ + "To Uyen" + ], + "sources": [ + "https://commons.wikimedia.org/wiki/File:Smartphone_icon_-_Noun_Project_283536.svg" + ] + }, + { + "path": "speech_bubble.svg", + "license": "CC-BY 4.0", + "authors": [ + "Twemoji" + ], + "sources": [ + "https://github.com/twitter/twemoji" + ] + }, { "path": "square.svg", "license": "CC0; trivial", @@ -1160,9 +1230,7 @@ { "path": "teardrop_with_hole_green.svg", "license": "CC0", - "authors": [ - "Pieter Vander Vennet" - ], + "authors": [], "sources": [] }, { diff --git a/assets/svg/nfc_card.svg b/assets/svg/nfc_card.svg new file mode 100644 index 0000000000..f7e89fabfd --- /dev/null +++ b/assets/svg/nfc_card.svg @@ -0,0 +1,34 @@ + + + + + + diff --git a/assets/svg/not_found.svg b/assets/svg/not_found.svg new file mode 100644 index 0000000000..36763bb065 --- /dev/null +++ b/assets/svg/not_found.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/svg/note.svg b/assets/svg/note.svg index d4b0cb5f45..34daea0061 100644 --- a/assets/svg/note.svg +++ b/assets/svg/note.svg @@ -1,16 +1,16 @@ + width="275px" + height="374px" + viewBox="0 0 275 374" + version="1.1" + id="svg7" + sodipodi:docname="note.svg" + inkscape:version="1.1.1 (1:1.1+202109281949+c3084ef5ed)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + d="M 135.55664,1.9765625 C 74.593645,2.1922681 20.084472,43.910648 7.2773438,104.37109 4.936895,115.41704 4.1435422,126.42334 4.7265625,137.18555 2.5821353,205.89923 56.815085,269.30423 107.08203,335.96094 c 12.32031,15.26562 30.35156,34.07422 30.35156,34.07422 l 27.64453,-32.61328 C 227.98632,255.40992 319.84389,135.74148 238.04492,49.080078 219.42005,26.853995 193.07863,10.556457 161.97656,4.4921875 153.10693,2.7626953 144.26564,1.9457474 135.55664,1.9765625 Z" + sodipodi:nodetypes="scccccccs" /> \ No newline at end of file diff --git a/assets/svg/pin.svg b/assets/svg/pin.svg index 0675ec07ab..4a10b32da1 100644 --- a/assets/svg/pin.svg +++ b/assets/svg/pin.svg @@ -1,7 +1,16 @@ - - - - - - - \ No newline at end of file + + + + + diff --git a/assets/svg/resolved.svg b/assets/svg/resolved.svg index cf8530a90d..c08efe427a 100644 --- a/assets/svg/resolved.svg +++ b/assets/svg/resolved.svg @@ -1,16 +1,16 @@ + width="275px" + height="374px" + viewBox="0 0 275 374" + version="1.1" + id="svg7" + sodipodi:docname="resolved.svg" + inkscape:version="1.1.1 (1:1.1+202109281949+c3084ef5ed)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + d="M 135.55664,1.9765625 C 74.593645,2.1922681 20.084472,43.910648 7.2773438,104.37109 4.936895,115.41704 4.1435422,126.42334 4.7265625,137.18555 2.5821353,205.89923 56.815085,269.30423 107.08203,335.96094 c 12.32031,15.26562 30.35156,34.07422 30.35156,34.07422 l 27.64453,-32.61328 C 227.98632,255.40992 319.84389,135.74148 238.04492,49.080078 219.42005,26.853995 193.07863,10.556457 161.97656,4.4921875 153.10693,2.7626953 144.26564,1.9457474 135.55664,1.9765625 Z" + sodipodi:nodetypes="scccccccs" /> - - - + + + + + + - \ No newline at end of file + diff --git a/assets/svg/smartphone.svg b/assets/svg/smartphone.svg new file mode 100644 index 0000000000..d2faa4a458 --- /dev/null +++ b/assets/svg/smartphone.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/svg/speech_bubble.svg b/assets/svg/speech_bubble.svg new file mode 100644 index 0000000000..d091897198 --- /dev/null +++ b/assets/svg/speech_bubble.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/svg/teardrop_with_hole_green.svg b/assets/svg/teardrop_with_hole_green.svg index a173f54bc5..947562fc3c 100644 --- a/assets/svg/teardrop_with_hole_green.svg +++ b/assets/svg/teardrop_with_hole_green.svg @@ -1,9 +1,57 @@ - - - - - - - + + + + + + + + + + + - \ No newline at end of file + diff --git a/assets/tagRenderings/icons.json b/assets/tagRenderings/icons.json index 864f275397..7851a80acc 100644 --- a/assets/tagRenderings/icons.json +++ b/assets/tagRenderings/icons.json @@ -1,4 +1,5 @@ { + "id": "shared_icons", "defaults": { "builtin": [ "phonelink", diff --git a/assets/tagRenderings/questions.json b/assets/tagRenderings/questions.json index b0fb106526..a61d9f2e4f 100644 --- a/assets/tagRenderings/questions.json +++ b/assets/tagRenderings/questions.json @@ -1,4 +1,5 @@ { + "id": "shared_questions", "questions": { "id": "questions" }, @@ -8,6 +9,9 @@ "export_as_gpx": { "render": "{export_as_gpx()}" }, + "export_as_geojson": { + "render": "{export_as_geojson()}" + }, "wikipedia": { "render": "{wikipedia():max-height:25rem}", "question": { @@ -21,7 +25,9 @@ "fr": "Quelle est l'entité Wikidata correspondante ?", "ca": "Quina és la correspondent entitat a Wikidata?", "sv": "Vad är den motsvarande Wikidata-enheten?", - "zh_Hant": "對應的維基資料項目是?" + "zh_Hant": "對應的維基資料項目是?", + "pl": "Jaki jest powiązany obiekt Wikidata?", + "ja": "対応するウィキデータのエンティティは何ですか?" }, "mappings": [ { @@ -38,7 +44,9 @@ "ca": "No hi ha cap enllaça a Viquipèdia encara", "sv": "Ingen Wikipedia-sida har länkats än", "zh_Hant": "還沒有連結到維基百科頁面", - "ru": "Никакой страницы на Википедии не было прикреплено" + "ru": "Никакой страницы на Википедии не было прикреплено", + "pl": "Link do strony Wikipedii nie został jeszcze określony", + "ja": "ウィキペディアのページはまだリンクされていません" }, "hideInAnswer": true } @@ -56,22 +64,23 @@ }, "phone": { "question": { - "en": "What is the phone number of {name}?", - "nl": "Wat is het telefoonnummer van {name}?", - "fr": "Quel est le numéro de téléphone de {name} ?", - "de": "Was ist die Telefonnummer von {name}?", - "nb_NO": "Hva er telefonnummeret til {name}?", - "ru": "Какой номер телефона у {name}?", - "sv": "Vad är telefonnumret till {name}?", - "zh_Hant": "{name} 的電話號碼是什麼?", - "it": "Qual è il numero di telefono di {name}?", - "pt_BR": "Qual o número de telefone de {name}?", - "id": "Nomor telepon dari {name|?", - "pl": "Jaki jest numer telefonu do {name}?", - "pt": "Qual é o número de telefone de {name}?", - "eo": "Kio estas la telefonnumero de {name}?", - "hu": "Mi a telefonszáma ennek: {name}?", - "ca": "Quin és el telèfon de {name}?" + "en": "What is the phone number of {title()}?", + "nl": "Wat is het telefoonnummer van {title()}?", + "fr": "Quel est le numéro de téléphone de {title()} ?", + "de": "Was ist die Telefonnummer von {title()}?", + "nb_NO": "Hva er telefonnummeret til {title()}?", + "ru": "Какой номер телефона у {title()}?", + "sv": "Vad är telefonnumret till {title()}?", + "zh_Hant": "{title()} 的電話號碼是什麼?", + "it": "Qual è il numero di telefono di {title()}?", + "pt_BR": "Qual o número de telefone de {title()}?", + "id": "Nomor telepon dari {title()}?", + "pl": "Jaki jest numer telefonu do {title()}?", + "pt": "Qual é o número de telefone de {title()}?", + "eo": "Kio estas la telefonnumero de {title()}?", + "hu": "Mi a telefonszáma ennek: {title()}?", + "ca": "Quin és el telèfon de {title()}?", + "ja": "{title()}の電話番号は?" }, "render": "{phone}", "mappings": [ @@ -111,7 +120,9 @@ "ca": "Quin és l'ítem a Viquipèdia?", "sv": "Vad är det motsvarande objektet på Wikipedia?", "zh_Hant": "維基百科上對應的項目是什麼?", - "fr": "Quel est l’élément Wikipédia correspondant ?" + "fr": "Quel est l’élément Wikipédia correspondant ?", + "pl": "Jaki jest link do strony Wikipedii?", + "ja": "Wikipediaの該当項目は何ですか?" }, "mappings": [ { @@ -127,7 +138,9 @@ "fr": "Non lié avec Wikipedia", "ca": "No enllaçat amb Viquipèdia", "sv": "Inte länkad med Wikipedia", - "zh_Hant": "沒有連結到維基百科" + "zh_Hant": "沒有連結到維基百科", + "pl": "Brak linku do strony Wikipedii", + "ja": "ウィキペディアと連動していない" } } ], @@ -139,22 +152,23 @@ "email": { "render": "{email}", "question": { - "nl": "Wat is het e-mailadres van {name}?", - "fr": "Quelle est l'adresse courriel de {name} ?", - "en": "What is the email address of {name}?", - "nb_NO": "Hva er e-postadressen til {name}?", - "ru": "Какой адрес электронной почты у {name}?", - "id": "Apa alamat surel dari {name}?", - "zh_Hant": "{name} 的電子郵件地址是什麼?", - "it": "Qual è l'indirizzo email di {name}?", - "de": "Was ist die Mail-Adresse von {name}?", - "pt_BR": "Qual o endereço de e-mail de {name}?", - "pl": "Jaki jest adres e-mail do {name}?", - "sv": "Vad är e-postadressen till {name}?", - "pt": "Qual é o endereço de e-mail de {name}?", - "eo": "Kio estas la retpoŝta adreso de {name}?", - "hu": "Mi a(z) {name} e-mail címe?", - "ca": "Quina és l'adreça de correu electrònic de {name}?" + "nl": "Wat is het e-mailadres van {title()}?", + "fr": "Quelle est l'adresse courriel de {title()} ?", + "en": "What is the email address of {title()}?", + "nb_NO": "Hva er e-postadressen til {title()}?", + "ru": "Какой адрес электронной почты у {title()}?", + "id": "Apa alamat surel dari {title()}?", + "zh_Hant": "{title()} 的電子郵件地址是什麼?", + "it": "Qual è l'indirizzo email di {title()}?", + "de": "Was ist die Mail-Adresse von {title()}?", + "pt_BR": "Qual o endereço de e-mail de {title()}?", + "pl": "Jaki jest adres e-mail do {title()}?", + "sv": "Vad är e-postadressen till {title()}?", + "pt": "Qual é o endereço de e-mail de {title()}?", + "eo": "Kio estas la retpoŝta adreso de {title()}?", + "hu": "Mi a(z) {title()} e-mail címe?", + "ca": "Quina és l'adreça de correu electrònic de {title()}?", + "ja": "{title()}のEメールアドレスは何ですか?" }, "mappings": [ { @@ -173,23 +187,24 @@ }, "website": { "question": { - "en": "What is the website of {name}?", - "nl": "Wat is de website van {name}?", - "fr": "Quel est le site web de {name} ?", - "gl": "Cal é a páxina web de {name}?", - "nb_NO": "Hva er nettsiden til {name}?", - "ru": "Какой сайт у {name}?", - "id": "Apa situs web dari {name}?", - "zh_Hant": "{name} 網址是什麼?", - "it": "Qual è il sito web di {name}?", - "de": "Was ist die Website von {name}?", - "pt_BR": "Qual o site de {name}?", - "pl": "Jaka jest strona internetowa {name}?", - "sv": "Vad är webbplatsen för {name}?", - "pt": "Qual é o sítio web de {name}?", - "eo": "Kie estas la retejo de {name}?", - "hu": "Mi a weboldala ennek: {name}?", - "ca": "Quina és la web de {name}?" + "en": "What is the website of {title()}?", + "nl": "Wat is de website van {title()}?", + "fr": "Quel est le site web de {title()} ?", + "gl": "Cal é a páxina web de {title()}?", + "nb_NO": "Hva er nettsiden til {title()}?", + "ru": "Какой сайт у {title()}?", + "id": "Apa situs web dari {title()}?", + "zh_Hant": "{title()} 網址是什麼?", + "it": "Qual è il sito web di {title()}?", + "de": "Was ist die Website von {title()}?", + "pt_BR": "Qual o site de {title()}?", + "pl": "Jaka jest strona internetowa {title()}?", + "sv": "Vad är webbplatsen för {title()}?", + "pt": "Qual é o sítio web de {title()}?", + "eo": "Kie estas la retejo de {title()}?", + "hu": "Mi a weboldala ennek: {title()}?", + "ca": "Quina és la web de {title()}?", + "ja": "{title()}のウェブサイトは?" }, "render": "{website}", "freeform": { @@ -220,7 +235,9 @@ "nb_NO": "Er dette stedet tilgjengelig for rullestoler?", "ca": "Aquest lloc és accessible amb cadira de rodes?", "sv": "Är det här stället tillgängligt med en rullstol?", - "zh_Hant": "這個地方可以坐輪椅到達嗎?" + "zh_Hant": "這個地方可以坐輪椅到達嗎?", + "pl": "Czy to miejsce jest dostępne dla osób na wózkach inwalidzkich?", + "ja": "車いすでのアクセスは可能ですか?" }, "mappings": [ { @@ -242,7 +259,9 @@ "ca": "Aquest lloc està especialment adaptat per a les cadires de rodes", "sv": "Det här stället är speciellt anpassat för rullstolsburna användare", "zh_Hant": "這個地方有特別設計給輪椅使用者", - "ru": "Это место подходит для людей на инвалидной коляске" + "ru": "Это место подходит для людей на инвалидной коляске", + "pl": "W tym miejscu zainstalowane zostały udogodnienia dla osób na wózkach inwalidzkich", + "ja": "この場所は、車椅子の方のための特別仕様になっています" } }, { @@ -264,7 +283,9 @@ "ca": "És facilment arribable amb cadira de rodes", "sv": "Denna plats är lätt att nå med rullstol", "zh_Hant": "這個地方坐輪椅很容易到達", - "ru": "До этого места легко добраться на инвалидной коляске" + "ru": "До этого места легко добраться на инвалидной коляске", + "pl": "To miejsce jest łatwo dostępne dla osób na wózkach inwalidzkich", + "ja": "この場所は、車いすで簡単に行くことができます" } }, { @@ -286,7 +307,9 @@ "ca": "És possible fer servir cadira de rodes a aquest lloc però no és fàcil", "sv": "Det är möjligt att nå den här platsen i en rullstol, men det är inte lätt", "zh_Hant": "這個地方可以坐輪椅到達,但並不容易", - "ru": "До этого места можно добраться, но не просто" + "ru": "До этого места можно добраться, но не просто", + "pl": "To miejsce jest dostępne dla osób na wózkach inwalidzkich, ale z pewnymi trudnościami", + "ja": "車いすでこの場所まで行くことは可能ですが、簡単ではありません" } }, { @@ -307,7 +330,9 @@ "nb_NO": "Dette stedet er ikke tilgjengelig for besøk med rullestol", "ca": "Aquest lloc no és accessible amb cadira de rodes", "sv": "Den här platsen kan inte nås med en rullstol", - "zh_Hant": "輪椅無法到達這個地方" + "zh_Hant": "輪椅無法到達這個地方", + "pl": "To miejsce jest niedostępne dla osób na wózkach inwalidzkich", + "ja": "この場所は車いすでは行けません" } } ] @@ -325,7 +350,9 @@ "ca": "S'accepten gossos en aquest negoci?", "sv": "Tillåts hundar i den här affären?", "zh_Hant": "這間商業空間是否允許犬隻?", - "ru": "Впускают ли собак в это здание?" + "ru": "Впускают ли собак в это здание?", + "pl": "Czy w tej firmie psy są dozwolone?", + "ja": "犬を飼うことができますか?" }, "mappings": [ { @@ -343,7 +370,11 @@ "ca": "S'accepten gossos", "ru": "Собаки разрешены", "sv": "Hundar tillåts", - "zh_Hant": "允許犬隻" + "zh_Hant": "允許犬隻", + "id": "Anjing diperbolehkan", + "pl": "Psy dozwolone", + "ja": "ペット同伴可能", + "es": "Se permiten perros" } }, { @@ -361,8 +392,11 @@ "ca": "No s'accepten gossos", "sv": "Hundar tillåts inte", "zh_Hant": "允許犬隻", - "pl": "Psom wstęp wzbroniony", - "ru": "С собаками не впускают" + "pl": "Psy nie dozwolone", + "ru": "С собаками не впускают", + "id": "Anjing tidak diperbolehkan", + "ja": "ペット同伴不可", + "es": "No se permiten perros" } }, { @@ -379,7 +413,10 @@ "ca": "S'accepten gossos però lligats", "sv": "Hundar tillåts, men de måste vara kopplade", "zh_Hant": "允許犬隻,但需要掛牽繩", - "ru": "Собак впускают, но на поводке" + "ru": "Собак впускают, но на поводке", + "id": "Anjing diperbolehkan, tetapi mereka harus diikat", + "pl": "Psy dozwolone, ale muszą być na smyczy", + "ja": "ペット同伴可能。ただしリード着用" } }, { @@ -396,7 +433,9 @@ "ca": "S'accepten gossos lliures", "sv": "Hundar tillåts och får springa fritt omkring", "zh_Hant": "允許犬隻而且可以自由跑動", - "ru": "Собак свободно впускают" + "ru": "Собак свободно впускают", + "pl": "Psy dozwolone i mogą biegać bez ograniczeń", + "ja": "犬同伴可能、自由に走り回れる" } } ] @@ -416,7 +455,10 @@ "pt": "Ainda há algo de relevante que não tenha podido dar nas perguntas anteriores? Adicione-o aqui.
Não repita factos já declarados", "hu": "Van-e még valami lényeges, amit nem tudott megadni az előző kérdésekben? Itt megteheti.
Ne ismételjen meg már megadott tényeket", "ca": "Hi ha quelcom rellevant que no t'hem preguntat? Afegeix-ho aquí.
No repeteixis informació que ja hi és", - "sv": "Finns det fortfarande någonting relevant som du inte kunde ge i de föregående frågorna? Lägg till det här.
Repetera inte redan angivna fakta" + "sv": "Finns det fortfarande någonting relevant som du inte kunde ge i de föregående frågorna? Lägg till det här.
Repetera inte redan angivna fakta", + "id": "Apakah masih ada sesuatu yang relevan yang tidak dapat Anda berikan dalam pertanyaan sebelumnya? Tambahkan di sini.
Jangan ulangi fakta yang sudah dinyatakan ", + "ja": "前の質問で伝えきれなかった関連事項がまだありますか?ここに追加してください。
今後表示しない", + "es": "¿Aún hay algo relevante que no ha encajado en las preguntas anteriores? Compártalo aquí.
No repita datos ya expresados" }, "render": "{description}", "freeform": { @@ -425,20 +467,21 @@ }, "opening_hours": { "question": { - "en": "What are the opening hours of {name}?", - "fr": "Quelles sont les horaires d'ouverture de {name} ?", - "de": "Was sind die Öffnungszeiten von {name}?", - "nl": "Wat zijn de openingstijden van {name}?", - "nb_NO": "Hva er åpningstidene for {name})", - "ru": "Какое время работы у {name}?", - "zh_Hant": "{name} 的開放時間是什麼?", - "it": "Quali sono gli orari di apertura di {name}?", - "pt_BR": "Qual o horário de funcionamento de {name}?", - "pl": "Jakie są godziny otwarcia {name}?", - "sv": "Vilka är öppettiderna för {name}?", - "pt": "Qual é o horário de funcionamento de {name}?", - "hu": "Mikor van nyitva ez: {name}?", - "ca": "Quin és l'horari d'obertura de {name}?" + "en": "What are the opening hours of {title()}?", + "fr": "Quelles sont les horaires d'ouverture de {title()} ?", + "de": "Was sind die Öffnungszeiten von {title()}?", + "nl": "Wat zijn de openingstijden van {title()}?", + "nb_NO": "Hva er åpningstidene for {title()})", + "ru": "Какое время работы у {title()}?", + "zh_Hant": "{title()} 的開放時間是什麼?", + "it": "Quali sono gli orari di apertura di {title()}?", + "pt_BR": "Qual o horário de funcionamento de {title()}?", + "pl": "Jakie są godziny otwarcia {title()}?", + "sv": "Vilka är öppettiderna för {title()}?", + "pt": "Qual é o horário de funcionamento de {title()}?", + "hu": "Mikor van nyitva ez: {title()}?", + "ca": "Quin és l'horari d'obertura de {title()}?", + "ja": "{title()}の営業時間は?" }, "render": { "de": "

Öffnungszeiten

{opening_hours_table(opening_hours)}", @@ -455,7 +498,8 @@ "pt": "

Horário de funcionamento

{opening_hours_table(opening_hours)}", "eo": "

Malfermitaj horoj

{opening_hours_table(opening_hours)}", "hu": "

Nyitva tartás

{opening_hours_table(opening_hours)}", - "ca": "

Horari d'obertura

{opening_hours_table(opening_hours)}" + "ca": "

Horari d'obertura

{opening_hours_table(opening_hours)}", + "ja": "

営業時間

{opening_hours_table(opening_hours)}" }, "freeform": { "key": "opening_hours", @@ -473,7 +517,9 @@ "sv": "Har den här bekvämligheten eluttag tillgängliga för kunder när de är inne?", "zh_Hant": "這個便利設施有電器設備,能給客戶使用嗎?", "hu": "Van-e ebben a létesítményben olyan konnektor, amely a bent tartózkodó ügyfelek rendelkezésére áll?", - "fr": "Des prises sont elles à disposition des client·e·s en intérieur ?" + "fr": "Des prises sont elles à disposition des client·e·s en intérieur ?", + "pl": "Czy w tym przybytku znajdują się gniazdka elektryczne, gdzie klienci mogą naładować swoje urządzenia?", + "ja": "このアメニティにはコンセントがあり、お客様が店内にいるときにも利用できますか?" }, "mappings": [ { @@ -486,7 +532,9 @@ "sv": "Det finns gott om hushållsuttag tillgängliga för kunder som sitter inomhus, där de kan ladda sin elektronik", "zh_Hant": "這邊的客戶座位有不少個室內插座,而且可以為電器充電", "hu": "Számos konnektor áll a belső térben ügyfelek rendelkezésére, ahol elektromos készülékeiket tölthetik", - "fr": "Il y a suffisamment de prises disponibles pour les client·e·s en intérieur souhaitant recharger leurs appareils" + "fr": "Il y a suffisamment de prises disponibles pour les client·e·s en intérieur souhaitant recharger leurs appareils", + "pl": "W budynku znajduje się wiele gniazdek elektrycznych, gdzie klienci mogą naładować swoje urządzenia", + "ja": "屋内の席に座っているお客様には、家庭用コンセントがたくさん用意されており、そこで電子機器を充電することができます" }, "if": "service:electricity=yes" }, @@ -500,7 +548,9 @@ "sv": "Det finns ett fåtal hushållsuttag tillgängliga för kunder som sitter inomhus, där de kan ladda sin elektronik", "zh_Hant": "這邊客戶座位有一些室內插座,可以為電器充電", "hu": "Csupán néhány konnektor áll a belső térben ügyfelek rendelkezésére, ahol elektromos készülékeiket tölthetik", - "fr": "Il y a peu de prises disponibles pour les client·e·s en intérieur souhaitant recharger leurs appareils" + "fr": "Il y a peu de prises disponibles pour les client·e·s en intérieur souhaitant recharger leurs appareils", + "pl": "W budynku znajduje się kilka gniazdek elektrycznych, gdzie klienci mogą naładować swoje urządzenia", + "ja": "屋内の席に座ったお客様が充電できるよう、コンセントがいくつか用意されています" }, "if": "service:electricity=limited" }, @@ -514,7 +564,9 @@ "de": "Für Kunden stehen im Innenraum keine Steckdosen zur Verfügung, aber Laden von Geräte könnte möglich sein, wenn das Personal gefragt wird", "sv": "Det finns inga uttag tillgängliga inomhus för kunder, men att ladda kan vara möjligt om personalen tillfrågas", "zh_Hant": "這邊沒有給客戶用的插座,因此可能需要詢問員工是否能充電", - "hu": "A belső térben nincs konnektor az ügyfeleknek, de lehetséges, hogy a személyzet segítségével lehet elektromos eszközt tölteni" + "hu": "A belső térben nincs konnektor az ügyfeleknek, de lehetséges, hogy a személyzet segítségével lehet elektromos eszközt tölteni", + "pl": "W budynku nie ma gniazdek elektrycznych dostępnych dla klientów, ale mogą zostać one udostępnione po spytaniu obsługi", + "ja": "屋内にはコンセントがありませんが、スタッフに声をかければ充電できるかもしれません" }, "if": "service:electricity=ask" }, @@ -528,7 +580,9 @@ "de": "Für Kunden stehen im Innenraum keine Steckdosen zur Verfügung", "sv": "Det finns inga hushållsuttag tillgängliga för kunder som sitter inomhus", "zh_Hant": "這裡客戶座位沒有室內插座", - "hu": "A belső térben ülő ügyfeleknek nem áll rendelkezésére konnektor" + "hu": "A belső térben ülő ügyfeleknek nem áll rendelkezésére konnektor", + "pl": "W budynku nie ma gniazdek elektrycznych dostępnych dla klientów", + "ja": "屋内の席には、家庭用コンセントはありません" }, "if": "service:electricity=no" } @@ -550,13 +604,15 @@ "sv": "Vilka betalningsmetoder accepteras här?", "zh_Hant": "這邊接受那種付款方式?", "pl": "Jakie metody płatności są tutaj dostępne?", - "ru": "Какие способы оплаты здесь принимают?" + "ru": "Какие способы оплаты здесь принимают?", + "ja": "どのような支払い方法が可能ですか?" }, "multiAnswer": true, "mappings": [ { "if": "payment:cash=yes", "ifnot": "payment:cash=no", + "icon": "./assets/svg/cash.svg", "then": { "en": "Cash is accepted here", "nl": "Cash geld wordt hier aanvaard", @@ -572,12 +628,14 @@ "sv": "Pengar accepteras här", "zh_Hant": "這邊接受現金", "pl": "Płatność gotówkowa jest tutaj dostępna", - "ru": "Здесь принимают наличными" + "ru": "Здесь принимают наличными", + "ja": "現金利用可能" } }, { "if": "payment:cards=yes", "ifnot": "payment:cards=no", + "icon": "./assets/svg/payment_card.svg", "then": { "en": "Payment cards are accepted here", "nl": "Betalen met bankkaarten kan hier", @@ -593,11 +651,41 @@ "sv": "Betalningskort accepteras här", "zh_Hant": "這邊接受現金卡", "pl": "Płatność kartą jest tutaj dostępna", - "ru": "Здесь принимают банковские карты" + "ru": "Здесь принимают банковские карты", + "ja": "お支払いはこちらで承ります" } } ] }, + "payment-options-advanced": { + "builtin": "payment-options", + "override": { + "mappings+": [ + { + "if": "payment:app=yes", + "ifnot": "payment:app=no", + "icon": "./assets/svg/smartphone.svg", + "then": { + "en": "Payment is done using a dedicated app", + "nl": "Betalen via een app van het netwerk", + "hu": "Fizetés erre a célra szolgáló alkalmazással", + "zh_Hant": "使用專用應用程式付款" + } + }, + { + "if": "payment:membership_card=yes", + "ifnot": "payment:membership_card=no", + "icon": "./assets/svg/nfc_card.svg", + "then": { + "en": "Payment is done using a membership card", + "nl": "Betalen via een lidkaart van het netwerk", + "hu": "Fizetési tagsági kártyával", + "zh_Hant": "使用會員卡付款" + } + } + ] + } + }, "last_edit": { "#": "Gives some metainfo about the last edit and who did edit it - rendering only", "condition": "_last_edit:contributor~*", @@ -622,7 +710,8 @@ "hu": "Melyik szinten található ez a létesítmény?", "it": "A quale piano si trova questo elemento?", "ca": "A quina planta està situat aquest element?", - "sv": "På vilken nivå finns den här funktionen?" + "sv": "På vilken nivå finns den här funktionen?", + "ja": "この機能は何階にあるのでしょうか?" }, "render": { "en": "Located on the {level}th floor", @@ -638,7 +727,8 @@ "eo": "En la {level}a etaĝo", "hu": "A(z) {level}. emeleten", "it": "Si trova al piano numero {level}", - "ca": "Situat a la planta {level}" + "ca": "Situat a la planta {level}", + "ja": "{level}階にあります" }, "freeform": { "key": "level", @@ -661,7 +751,8 @@ "hu": "A föld alatt", "it": "Si trova sotto il livello stradale", "nb_NO": "Under bakken", - "ca": "Situat a planta subterrani" + "ca": "Situat a planta subterrani", + "ja": "地下にあります" }, "hideInAnswer": true }, @@ -682,7 +773,8 @@ "hu": "A földszinten", "it": "Si trova al pianoterra", "nb_NO": "På gateplan", - "ca": "Situat a planta zero" + "ca": "Situat a planta zero", + "ja": "1階にあります" } }, { @@ -703,7 +795,8 @@ "hu": "A földszinten", "it": "Si trova al pianoterra", "nb_NO": "På gateplan", - "ca": "Situat a planta zero" + "ca": "Situat a planta zero", + "ja": "1階にあります" } }, { @@ -724,7 +817,16 @@ "hu": "Az első emeleten", "it": "Si trova al primo piano", "nb_NO": "I andre etasje", - "ca": "Situat a primera planta" + "ca": "Situat a primera planta", + "ja": "1階にあります" + } + }, + { + "if": "level=-1", + "then": { + "en": "Located on the first basement level", + "nl": "Bevindt zich in de eerste kelderverdieping", + "zh_Hant": "位於地下一樓" } } ] diff --git a/assets/tagrenderingconfigmeta.json b/assets/tagrenderingconfigmeta.json new file mode 100644 index 0000000000..fd9483b822 --- /dev/null +++ b/assets/tagrenderingconfigmeta.json @@ -0,0 +1,181 @@ +[ + { + "path": [], + "type": "object" + }, + { + "path": [ + "id" + ], + "type": "string" + }, + { + "path": [ + "group" + ], + "type": "string" + }, + { + "path": [ + "labels" + ], + "type": "array" + }, + { + "path": [ + "render" + ], + "typeHint": "rendered" + }, + { + "path": [ + "question" + ] + }, + { + "path": [ + "condition" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "freeform" + ], + "type": "object" + }, + { + "path": [ + "freeform", + "key" + ], + "type": "string" + }, + { + "path": [ + "freeform", + "type" + ], + "type": "string" + }, + { + "path": [ + "freeform", + "placeholder" + ] + }, + { + "path": [ + "freeform", + "helperArgs" + ], + "type": "array" + }, + { + "path": [ + "freeform", + "addExtraTags" + ], + "type": "array" + }, + { + "path": [ + "freeform", + "inline" + ], + "type": "boolean" + }, + { + "path": [ + "freeform", + "default" + ], + "type": "string" + }, + { + "path": [ + "multiAnswer" + ], + "type": "boolean" + }, + { + "path": [ + "mappings" + ], + "type": "array" + }, + { + "path": [ + "mappings", + "if" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "mappings", + "then" + ], + "typeHint": "rendered" + }, + { + "path": [ + "mappings", + "icon" + ], + "typeHint": "icon", + "type": "string" + }, + { + "path": [ + "mappings", + "hideInAnswer" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": [ + "string", + "boolean" + ] + } + ] + }, + { + "path": [ + "mappings", + "ifnot" + ], + "type": [ + { + "$ref": "#/definitions/AndOrTagConfigJson" + }, + { + "type": "string" + } + ] + }, + { + "path": [ + "mappings", + "addExtraTags" + ], + "type": "array" + } +] \ No newline at end of file diff --git a/assets/themes/aed/aed.json b/assets/themes/aed/aed.json index 9fb237ebe6..5c1a94ad62 100644 --- a/assets/themes/aed/aed.json +++ b/assets/themes/aed/aed.json @@ -38,24 +38,6 @@ "nb_NO": "Defibrillatorer i nærheten", "hu": "Ezen a térképen a közeli defibrillátorokat lehet megtalálni és feltüntetni" }, - "language": [ - "en", - "ca", - "es", - "fr", - "nl", - "de", - "hu", - "id", - "it", - "ru", - "ja", - "zh_Hant", - "nb_NO", - "sv", - "pl", - "pt_BR" - ], "version": "2020-08-29", "startLat": 0, "startLon": 0, diff --git a/assets/themes/aed/aed_brugge.json b/assets/themes/aed/aed_brugge.json index 01b530198f..a0b5933e25 100644 --- a/assets/themes/aed/aed_brugge.json +++ b/assets/themes/aed/aed_brugge.json @@ -8,9 +8,6 @@ "description": { "nl": "Op deze kaart kan je informatie over AEDs vinden en verbeteren + een export van de brugse defibrillatoren" }, - "language": [ - "nl" - ], "version": "2021-05-16", "startLat": 51.25634, "startLon": 3.195682, diff --git a/assets/themes/artwork/artwork.json b/assets/themes/artwork/artwork.json index 96bb1079d4..c7f4bd5b8f 100644 --- a/assets/themes/artwork/artwork.json +++ b/assets/themes/artwork/artwork.json @@ -27,25 +27,9 @@ "ja": "オープン アートワーク マップへようこそ。世界中の銅像や胸像、壁の落書きなどのアートワークの地図です", "zh_Hant": "歡迎來到開放藝術品地圖,這份地圖會顯示全世界的雕像、半身像、塗鴉以及其他類型的藝術品", "nb_NO": "Velkommen til det åpne kunstverkskartet, et kart over statuer, byster, grafitti, og andre kunstverk i verden", - "hu": "Isten hozott a nyílt műalkotástérképen, a világ minden táján megtalálható szobrok, mellszobrok, grafittik és más műalkotások térképén", + "hu": "Isten hozta a nyílt műalkotástérképen, a világ minden táján megtalálható szobrok, mellszobrok, graffitik és más műalkotások gyűjtőhelyén", "pl": "Witaj w Open Artwork Map, mapie pomników, popierś, graffitti i innych dzieł sztuki z całego świata" }, - "language": [ - "en", - "nl", - "fr", - "de", - "hu", - "id", - "it", - "ru", - "ja", - "zh_Hant", - "sv", - "pl", - "es", - "nb_NO" - ], "icon": "./assets/themes/artwork/artwork.svg", "maintainer": "MapComplete", "startZoom": 12, diff --git a/assets/themes/benches/benches.json b/assets/themes/benches/benches.json index 4aa4a6627e..193b38d40b 100644 --- a/assets/themes/benches/benches.json +++ b/assets/themes/benches/benches.json @@ -11,7 +11,8 @@ "zh_Hant": "長椅", "nb_NO": "Benker", "pt_BR": "Bancadas", - "id": "Bangku" + "id": "Bangku", + "hu": "Padok" }, "shortDescription": { "en": "A map of benches", @@ -23,7 +24,8 @@ "ja": "ベンチの地図", "zh_Hant": "長椅的地圖", "nb_NO": "Et benkekart", - "pt_BR": "Um mapa de bancadas" + "pt_BR": "Um mapa de bancadas", + "hu": "Padtérkép" }, "description": { "en": "This map shows all benches that are recorded in OpenStreetMap: Individual benches, and benches belonging to public transport stops or shelters. With an OpenStreetMap account, you can map new benches or edit details of existing benches.", @@ -33,21 +35,9 @@ "it": "Questa mappa mostra tutte le panchine che sono state aggiunte su OpenStreetMap: panchine individuali e quelle alle fermate del trasporto pubblico o nei ripari. Se disponi di un account OpenStreetMap puoi mappare delle nuove panchine o modificare i dettagli di quelle esistenti.", "ru": "На этой карте показаны все скамейки, записанные в OpenStreetMap: отдельные скамейки, а также скамейки, относящиеся к остановкам общественного транспорта или навесам. Имея учётную запись OpenStreetMap, вы можете наносить на карту новые скамейки или редактировать информацию о существующих скамейках.", "ja": "このマップには、OpenStreetMapに記録されているすべてのベンチが表示されます。個々のベンチ、および公共交通機関の停留所または避難場所に属するベンチです。OpenStreetMapアカウントを使用すると、新しいベンチをマップしたり、既存のベンチの詳細を編集したりできます。", - "zh_Hant": "這份地圖顯示開放街圖上所有記錄的長椅:單獨的長椅,屬於大眾運輸站點或涼亭的長椅。只要有開放街圖帳號,你可以新增長椅或是編輯既有長椅的詳細內容。" + "zh_Hant": "這份地圖顯示開放街圖上所有記錄的長椅:單獨的長椅,屬於大眾運輸站點或涼亭的長椅。只要有開放街圖帳號,你可以新增長椅或是編輯既有長椅的詳細內容。", + "hu": "Ez a térkép megjeleníti az OpenStreetMap-en rögzített összes padot: egyes padokat, valamint tömegközlekedési megállókban vagy menedékhelyeken található padokat. OpenStreetMap-fiókkal Ön is felrajzolhat új padokat, vagy szerkesztheti a meglévő padok részleteit." }, - "language": [ - "en", - "de", - "fr", - "nl", - "it", - "ru", - "ja", - "zh_Hant", - "nb_NO", - "pt_BR", - "id" - ], "maintainer": "Florian Edelmann", "icon": "./assets/themes/benches/bench_poi.svg", "version": "2020-10-23", diff --git a/assets/themes/bicycle_rental/bicycle_rental.json b/assets/themes/bicycle_rental/bicycle_rental.json new file mode 100644 index 0000000000..9f30efca37 --- /dev/null +++ b/assets/themes/bicycle_rental/bicycle_rental.json @@ -0,0 +1,26 @@ +{ + "id": "bicycle_rental", + "title": { + "en": "Bicycle rental", + "nl": "Fietsverhuur" + }, + "shortDescription": { + "en": "A map with bicycle rental stations and bicycle rental shops", + "nl": "Een kaart met fietsverhuurpunten en fietsverhuurzaken" + }, + "description": { + "en": "On this map, you'll find the many bicycle rental stations as they are known by OpenStreetMap", + "nl": "Op deze kaart vind je verschillende fietsverhuurpunten en fietsverhuurzaken" + }, + "maintainer": "", + "icon": "./assets/themes/bicycle_rental/logo.svg", + "version": "0", + "startLat": 0, + "startLon": 0, + "startZoom": 1, + "widenFactor": 0.05, + "socialImage": "", + "layers": [ + "bicycle_rental" + ] +} \ No newline at end of file diff --git a/assets/themes/bicycle_rental/license_info.json b/assets/themes/bicycle_rental/license_info.json new file mode 100644 index 0000000000..46d07e5162 --- /dev/null +++ b/assets/themes/bicycle_rental/license_info.json @@ -0,0 +1,24 @@ +[ + { + "path": "logo.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderenn" + ] + }, + { + "path": "rental.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderenn" + ] + } +] \ No newline at end of file diff --git a/assets/themes/bicycle_rental/logo.svg b/assets/themes/bicycle_rental/logo.svg new file mode 100644 index 0000000000..b66b2c214e --- /dev/null +++ b/assets/themes/bicycle_rental/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/bicycle_rental/rental.svg b/assets/themes/bicycle_rental/rental.svg new file mode 100644 index 0000000000..b66b2c214e --- /dev/null +++ b/assets/themes/bicycle_rental/rental.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/bicyclelib/bicyclelib.json b/assets/themes/bicyclelib/bicyclelib.json index 5d8d3b2ade..b3ee810bf4 100644 --- a/assets/themes/bicyclelib/bicyclelib.json +++ b/assets/themes/bicyclelib/bicyclelib.json @@ -2,19 +2,6 @@ "id": "bicyclelib", "maintainer": "MapComplete", "version": "2020-08-29", - "language": [ - "en", - "nl", - "it", - "ru", - "ja", - "fr", - "zh_Hant", - "nb_NO", - "de", - "pt_BR", - "pl" - ], "title": { "en": "Bicycle libraries", "nl": "Fietsbibliotheken", @@ -26,7 +13,8 @@ "nb_NO": "Sykkelbibliotek", "de": "Fahrradbibliothek", "pt_BR": "Bibliotecas de bicicletas", - "pl": "Wypożyczalnie rowerów" + "pl": "Wypożyczalnie rowerów", + "hu": "Kerékpárkönyvtárak" }, "description": { "nl": "Een fietsbibliotheek is een plaats waar men een fiets kan lenen, vaak voor een klein bedrag per jaar. Een typisch voorbeeld zijn kinderfietsbibliotheken, waar men een fiets op maat van het kind kan lenen. Is het kind de fiets ontgroeid, dan kan het te kleine fietsje omgeruild worden voor een grotere.", @@ -36,7 +24,8 @@ "ja": "自転車ライブラリは、少額の年間料金で自転車を借りられる場所です。注目すべきユースケースとしては、子供向けの自転車ライブラリで、子どもの成長にあわせて大きな自転車へ借り替えられます", "fr": "Une vélothèque est un endroit où on peut emprunter des vélos, souvent moyennant une petite somme annuelle. Un cas d'utilisation notable est celui des vélothèques pour les enfants, qui leur permettent de passer à un vélo plus grand quand ils sont trop grands pour leur vélo actuel", "zh_Hant": "單車圖書館是指每年支付小額費用,然後可以租用單車的地方。最有名的單車圖書館案例是給小孩的,能夠讓長大的小孩用目前的單車換成比較大的單車", - "de": "Fahrradbibliotheken sind Orte, um Fahrräder auszuleihen, oft gegen eine geringe Gebühr. Ein wichtiger Anwendungsfall sind Fahrradbibliotheken für Kinder, die es ihnen ermöglichen, auf ein größeres Fahrrad umzusteigen, wenn sie aus ihrem aktuellen Fahrrad herausgewachsen sind" + "de": "Fahrradbibliotheken sind Orte, um Fahrräder auszuleihen, oft gegen eine geringe Gebühr. Ein wichtiger Anwendungsfall sind Fahrradbibliotheken für Kinder, die es ihnen ermöglichen, auf ein größeres Fahrrad umzusteigen, wenn sie aus ihrem aktuellen Fahrrad herausgewachsen sind", + "hu": "A kerékpárkönyvtárak olyan helyek, ahol kerékpárokat lehet kölcsönözni, gyakran egy kis éves díj ellenében. Figyelemre méltó felhasználásuk a gyerekeknek szánt kerékpárkönyvtárak, amelyek segítségével nagyobb kerékpárra válthatnak, amikor jelenlegi kerékpárjukat kinőtték" }, "icon": "./assets/themes/bicyclelib/logo.svg", "startLat": 0, diff --git a/assets/themes/binoculars/binoculars.json b/assets/themes/binoculars/binoculars.json index e995fac965..1e77b49c63 100644 --- a/assets/themes/binoculars/binoculars.json +++ b/assets/themes/binoculars/binoculars.json @@ -6,7 +6,8 @@ "de": "Ferngläser", "it": "Binocoli", "nb_NO": "Kikkerter", - "zh_Hant": "望遠鏡" + "zh_Hant": "望遠鏡", + "hu": "Távcsövek" }, "shortDescription": { "en": "A map with fixed binoculars", @@ -14,23 +15,17 @@ "de": "Eine Karte mit festinstallierten Ferngläsern", "it": "Una cartina dei binocoli pubblici fissi", "nb_NO": "Et kart over fastmonterte kikkerter", - "zh_Hant": "固定望遠鏡的地圖" + "zh_Hant": "固定望遠鏡的地圖", + "hu": "Rögzített távcsövek (binokulárok) térképe" }, "description": { "en": "A map with binoculars fixed in place with a pole. It can typically be found on touristic locations, viewpoints, on top of panoramic towers or occasionally on a nature reserve.", "nl": "Een kaart met verrekijkers die op een vaste plaats zijn gemonteerd", "de": "Eine Karte mit festinstallierten Ferngläsern. Man findet sie typischerweise an touristischen Orten, Aussichtspunkten, auf Aussichtstürmen oder gelegentlich in einem Naturschutzgebiet.", "it": "Una cartina dei binocoli su un palo fissi in un luogo. Si trovano tipicamente nei luoghi turistici, nei belvedere, in cima a torri panoramiche oppure occasionalmente nelle riserve naturali.", - "zh_Hant": "固定一地的望遠鏡地圖,特別是能夠在旅遊景點、觀景點、城鎮環景點,或是自然保護區找到。" + "zh_Hant": "固定一地的望遠鏡地圖,特別是能夠在旅遊景點、觀景點、城鎮環景點,或是自然保護區找到。", + "hu": "Rúdra rögzített távcsövek térképe. Jellemzően turisztikailag érdekes, panorámás helyeken, kilátótornyok tetején vagy természetvédelmi területen találhatók." }, - "language": [ - "en", - "nl", - "de", - "it", - "nb_NO", - "zh_Hant" - ], "maintainer": "", "icon": "./assets/layers/binocular/telescope.svg", "version": "0", diff --git a/assets/themes/bookcases/bookcases.json b/assets/themes/bookcases/bookcases.json index 7dfab95430..23c116e2b3 100644 --- a/assets/themes/bookcases/bookcases.json +++ b/assets/themes/bookcases/bookcases.json @@ -2,18 +2,6 @@ "id": "bookcases", "maintainer": "MapComplete", "version": "2020-08-29", - "language": [ - "en", - "nl", - "de", - "fr", - "ru", - "ja", - "zh_Hant", - "it", - "pt_BR", - "nb_NO" - ], "title": { "en": "Open Bookcase Map", "nl": "Open boekenruilkasten-kaart", @@ -24,7 +12,8 @@ "zh_Hant": "開放書架地圖", "it": "Mappa libera delle microbiblioteche", "pt_BR": "Abrir Mapa de Estantes", - "nb_NO": "Kart over åpne bokhyller" + "nb_NO": "Kart over åpne bokhyller", + "hu": "Könyvespolctérkép" }, "description": { "en": "A public bookcase is a small streetside cabinet, box, old phone booth or some other objects where books are stored. Everyone can place or take a book. This map aims to collect all these bookcases. You can discover new bookcases nearby and, with a free OpenStreetMap account, quickly add your favourite bookcases.", @@ -34,7 +23,8 @@ "ru": "Общественный книжный шкаф - это небольшой уличный шкаф, коробка, старый телефонный аппарат или другие предметы, где хранятся книги. Каждый может положить или взять книгу. Цель этой карты - собрать все эти книжные шкафы. Вы можете обнаружить новые книжные шкафы поблизости и, имея бесплатный аккаунт OpenStreetMap, быстро добавить свои любимые книжные шкафы.", "ja": "公共の本棚とは、本が保管されている小さな街角のキャビネット、箱、古い電話のトランク、その他の物のことです。誰でも本を置いたり持ったりすることができます。このマップは、すべての公共の本棚を収集することを目的としています。近くで新しい本棚を見つけることができ、無料のOpenStreetMapアカウントを使えば、お気に入りの本棚を簡単に追加できます。", "zh_Hant": "公共書架是街邊箱子、盒子、舊的電話亭或是其他存放書本的物件,每一個人都能放置或拿取書本。這份地圖收集所有類型的書架,你可以探索你附近新的書架,同時也能用免費的開放街圖帳號來快速新增你最愛的書架。", - "it": "Una minibiblioteca è una piccola cabina a lato della strada, una scatola, una vecchia cabina telefonica o qualche altro contenitore che ospita libri. Tutti può lasciare o prendere un libro. Questa mappa punta a rappresentarle tutte. Puoi facilmente scoprire nuove minibiblioteche nelle tue vicinanze e, con un account gratuito su OpenStreetMap, puoi aggiungerne altre." + "it": "Una minibiblioteca è una piccola cabina a lato della strada, una scatola, una vecchia cabina telefonica o qualche altro contenitore che ospita libri. Tutti può lasciare o prendere un libro. Questa mappa punta a rappresentarle tutte. Puoi facilmente scoprire nuove minibiblioteche nelle tue vicinanze e, con un account gratuito su OpenStreetMap, puoi aggiungerne altre.", + "hu": "A nyilvános könyvespolc egy kis utcai szekrény, doboz, régi telefonfülke vagy más tárgy, ahol könyveket tárolnak. Bárki tehet rá vagy vihet el róla könyvet. Ez a térkép ezeket a könyvespolcokat kívánja összegyűjteni. Ha felfedezett egy új könyvespolcot a közelben, akkor egy ingyenes OpenStreetMap-fiókkal gyorsan fel is rajzolhatja a térképre." }, "icon": "./assets/themes/bookcases/bookcase.svg", "startLat": 0, diff --git a/assets/themes/buurtnatuur/buurtnatuur.json b/assets/themes/buurtnatuur/buurtnatuur.json index e331bdf604..1ef2e4f1d0 100644 --- a/assets/themes/buurtnatuur/buurtnatuur.json +++ b/assets/themes/buurtnatuur/buurtnatuur.json @@ -15,11 +15,8 @@ "descriptionTail": { "nl": "

Tips

  • Over groen ingekleurde gebieden weten we alles wat we willen weten.
  • Bij rood ingekleurde gebieden ontbreekt nog heel wat info: klik een gebied aan en beantwoord de vragen.
  • Je kan altijd een vraag overslaan als je het antwoord niet weet of niet zeker bent
  • Je kan altijd een foto toevoegen
  • Je kan ook zelf een gebied toevoegen door op de kaart te klikken
  • Open buurtnatuur.be op je smartphone om al wandelend foto's te maken en vragen te beantwoorden

De oorspronkelijke data komt van OpenStreetMap en je antwoorden worden daar bewaard.
Omdat iedereen vrij kan meewerken aan dit project, kunnen we niet garanderen dat er geen fouten opduiken.Kan je hier niet aanpassen wat je wilt, dan kan je dat zelf via OpenStreetMap.org doen. Groen kan geen enkele verantwoordelijkheid nemen over de kaart.

Je privacy is belangrijk. We tellen wel hoeveel gebruikers deze website bezoeken. We plaatsen een cookie waar geen persoonlijke informatie in bewaard wordt. Als je inlogt, komt er een tweede cookie bij met je inloggegevens.
" }, - "language": [ - "nl" - ], "maintainer": "Pieter Vander Vennet", - "icon": "./assets/themes/buurtnatuur/groen_logo.svg", + "icon": "./assets/themes/buurtnatuur/logo.svg", "version": "0", "startLat": 50.8435, "startLon": 4.3688, diff --git a/assets/themes/buurtnatuur/license_info.json b/assets/themes/buurtnatuur/license_info.json index b9a8bbb339..0b35721f93 100644 --- a/assets/themes/buurtnatuur/license_info.json +++ b/assets/themes/buurtnatuur/license_info.json @@ -39,6 +39,16 @@ "https://www.groen.be/" ] }, + { + "path": "logo.svg", + "license": "Logo; All rights reserved", + "authors": [ + "Groen" + ], + "sources": [ + "https://www.groen.be/" + ] + }, { "path": "nature_reserve.svg", "license": "CC-BY 3.0", diff --git a/assets/themes/buurtnatuur/logo.svg b/assets/themes/buurtnatuur/logo.svg new file mode 100644 index 0000000000..d4dfad14b5 --- /dev/null +++ b/assets/themes/buurtnatuur/logo.svg @@ -0,0 +1,38 @@ + + + + + + + + diff --git a/assets/themes/cafes_and_pubs/cafes_and_pubs.json b/assets/themes/cafes_and_pubs/cafes_and_pubs.json index d56b42b2b1..9ab64a6c97 100644 --- a/assets/themes/cafes_and_pubs/cafes_and_pubs.json +++ b/assets/themes/cafes_and_pubs/cafes_and_pubs.json @@ -8,21 +8,13 @@ "nb_NO": "Kafeer og kneiper", "id": "Kafe dan pub", "zh_Hant": "咖啡廳與酒吧", - "ru": "Кафе и пабы" + "ru": "Кафе и пабы", + "hu": "Kávézók és kocsmák" }, "description": { + "en": "Pubs and bars", "nl": "Cafés, kroegen en drinkgelegenheden" }, - "language": [ - "nl", - "en", - "de", - "it", - "nb_NO", - "id", - "zh_Hant", - "ru" - ], "maintainer": "", "icon": "./assets/layers/cafe_pub/pub.svg", "version": "0", diff --git a/assets/themes/campersite/campersite.json b/assets/themes/campersite/campersite.json index dae4e86338..59acbe7c62 100644 --- a/assets/themes/campersite/campersite.json +++ b/assets/themes/campersite/campersite.json @@ -9,7 +9,8 @@ "fr": "Campings", "zh_Hant": "露營地點", "pt_BR": "Locais de acampamento", - "de": "Wohnmobilstellplätze" + "de": "Wohnmobilstellplätze", + "hu": "Lakóautós megállóhelyek" }, "shortDescription": { "en": "Find sites to spend the night with your camper", @@ -20,7 +21,8 @@ "zh_Hant": "露營者尋找渡過夜晚的場地", "nl": "Vind locaties waar je de nacht kan doorbrengen met je mobilehome", "pt_BR": "Encontre locais para passar a noite com o seu campista", - "de": "Finden Sie Plätze zum Übernachten mit Ihrem Wohnmobil" + "de": "Finden Sie Plätze zum Übernachten mit Ihrem Wohnmobil", + "hu": "Helyek, ahol lakóautóval eltöltheti az éjszakát" }, "description": { "en": "This site collects all official camper stopover places and places where you can dump grey and black water. You can add details about the services provided and the cost. Add pictures and reviews. This is a website and a webapp. The data is stored in OpenStreetMap, so it will be free forever and can be re-used by any app.", @@ -30,21 +32,9 @@ "zh_Hant": "這個網站收集所有官方露營地點,以及那邊能排放廢水。你可以加上詳細的服務項目與價格,加上圖片以及評價。這是網站與網路 app,資料則是存在開放街圖,因此會永遠免費,而且可以被所有 app 再利用。", "nl": "Deze website verzamelt en toont alle officiële plaatsen waar een camper mag overnachten en afvalwater kan lozen. Ook jij kan extra gegevens toevoegen, zoals welke services er geboden worden en hoeveel dit kot, ook afbeeldingen en reviews kan je toevoegen. De data wordt op OpenStreetMap opgeslagen en is dus altijd gratis te hergebruiken, ook door andere applicaties.", "fr": "Ce site collecte les zones de camping officielles ainsi que les aires de vidange. Il est possible d’ajouter des détails à propos des services proposés ainsi que leurs coûts. Ajoutez vos images et avis. C’est un site et une application. Les données sont stockées sur OpenStreetMap, elles seront toujours gratuites et peuvent être réutilisées par n’importe quelle application.", - "de": "Auf dieser Seite finden Sie alle offiziellen Wohnmobilstellplätze und Orte zur Entsorgung von Schmutzwasser. Sie können Details über die angebotenen Dienstleistungen und die Kosten hinzufügen. Fügen Sie Bilder und Bewertungen hinzu. Dies ist eine Webseite und eine Webapp. Die Daten werden in OpenStreetMap gespeichert, so dass sie für immer kostenlos sind und von jeder App weiterverwendet werden können." + "de": "Auf dieser Seite finden Sie alle offiziellen Wohnmobilstellplätze und Orte zur Entsorgung von Schmutzwasser. Sie können Details über die angebotenen Dienstleistungen und die Kosten hinzufügen. Fügen Sie Bilder und Bewertungen hinzu. Dies ist eine Webseite und eine Webapp. Die Daten werden in OpenStreetMap gespeichert, so dass sie für immer kostenlos sind und von jeder App weiterverwendet werden können.", + "hu": "Ez az oldal az összes olyan hivatalos lakóautós megállóhelyet és helyet gyűjti össze, ahol szürke és fekete szennyvizet lehet üríteni. Hozzáadhat részleteket a nyújtott szolgáltatásokról és a költségekről, valamint képeket és értékeléseket. Ez egyszerre egy weboldal és egy webes alkalmazás. Az adatokat az OpenStreetMapen tároljuk, így mindig ingyenesek lesznek, és bármelyik alkalmazás újra felhasználhatja őket." }, - "language": [ - "en", - "nl", - "it", - "ru", - "ja", - "fr", - "zh_Hant", - "pt_BR", - "de", - "id", - "nb_NO" - ], "maintainer": "joost schouppe", "icon": "./assets/themes/campersite/caravan.svg", "version": "0", @@ -65,7 +55,9 @@ "zh_Hant": "露營地", "nl": "Camperplaatsen", "pt_BR": "Locais de acampamento", - "de": "Wohnmobilstellplätze" + "de": "Wohnmobilstellplätze", + "hu": "Lakóautós megállóhely", + "id": "Tempat camping" }, "minzoom": 10, "source": { @@ -86,7 +78,8 @@ "zh_Hant": "露營地 {name}", "nl": "Camperplaats {name}", "pt_BR": "Local de acampamento {name}", - "de": "Wohnmobilstellplatz {name}" + "de": "Wohnmobilstellplatz {name}", + "id": "Tempat kemping {name}" }, "mappings": [ { @@ -118,7 +111,9 @@ "zh_Hant": "露營地", "nl": "camperplaatsen", "pt_BR": "Locais de acampamento", - "de": "Wohnmobilstellplätze" + "de": "Wohnmobilstellplätze", + "hu": "Lakóautós megállóhelyek", + "id": "Tempat camping" }, "tagRenderings": [ "images", @@ -132,7 +127,8 @@ "zh_Hant": "這個地方叫做 {name}", "nl": "Deze plaats heet {name}", "pt_BR": "Este lugar é chamado de {name}", - "de": "Dieser Ort heißt {name}" + "de": "Dieser Ort heißt {name}", + "id": "Tempat ini disebut {name}" }, "question": { "en": "What is this place called?", @@ -180,7 +176,8 @@ "nl": "Gebruik is betalend", "fr": "L’utilisation est payante", "pt_BR": "Você precisa pagar para usar", - "de": "Sie müssen für die Nutzung bezahlen" + "de": "Sie müssen für die Nutzung bezahlen", + "id": "Anda perlu membayar untuk menggunakannya" } }, { @@ -256,7 +253,8 @@ "zh_Hant": "這個地方有衛生設施嗎?", "fr": "Ce site possède-t’il un lieu de vidange ?", "pt_BR": "Este local tem uma estação de aterro sanitário?", - "de": "Hat dieser Ort eine sanitäre Entsorgungsstation?" + "de": "Hat dieser Ort eine sanitäre Entsorgungsstation?", + "id": "Apakah tempat ini memiliki tempat pembuangan sanitasi?" }, "mappings": [ { @@ -273,7 +271,8 @@ "fr": "Cet endroit a une station de vidange sanitaire", "zh_Hant": "這個地方有衛生設施", "pt_BR": "Este local tem uma estação de aterro sanitário", - "de": "Dieser Ort hat eine sanitäre Entsorgungsstation" + "de": "Dieser Ort hat eine sanitäre Entsorgungsstation", + "id": "Tempat ini memiliki tempat pembuangan sanitasi" } }, { @@ -290,7 +289,8 @@ "zh_Hant": "這個地方沒有衛生設施", "fr": "Ce site ne possède pas de lieu de vidange", "pt_BR": "Este local não tem uma estação de aterro sanitário", - "de": "Dieser Ort hat keine sanitäre Entsorgungsstation" + "de": "Dieser Ort hat keine sanitäre Entsorgungsstation", + "id": "Tempat ini tidak memiliki tempat pembuangan sampah sanitasi" } } ] @@ -466,7 +466,8 @@ "fr": "Y-a-t’il des toilettes sur le site ?", "pt_BR": "Este lugar tem banheiros?", "de": "Verfügt dieser Ort über Toiletten?", - "nl": "Heeft deze plaats toiletten?" + "nl": "Heeft deze plaats toiletten?", + "hu": "Van-e itt WC?" }, "mappings": [ { @@ -486,7 +487,8 @@ "fr": "Ce site a des toilettes", "pt_BR": "Este lugar tem banheiros", "de": "Dieser Ort verfügt über Toiletten", - "nl": "Deze plaats heeft toiletten" + "nl": "Deze plaats heeft toiletten", + "hu": "Itt van WC" } }, { @@ -506,7 +508,8 @@ "fr": "Ce site n’a pas de toilettes", "pt_BR": "Este lugar não tem banheiros", "de": "Dieser Ort verfügt nicht über Toiletten", - "nl": "Deze plaats heeft geen toiletten" + "nl": "Deze plaats heeft geen toiletten", + "hu": "Itt nincs WC" } } ] @@ -655,7 +658,8 @@ "fr": "Aire de camping", "pt_BR": "local de acampamento", "de": "Wohnmobilstellplatz", - "nl": "camperplaats" + "nl": "camperplaats", + "hu": "lakóautós megállóhely" }, "description": { "en": "Add a new official camper site. These are designated places to stay overnight with your camper. They might look like a real camping or just look like a parking. They might not be signposted at all, but just be defined in a municipal decision. A regular parking intended for campers where it is not expected to spend the night, is -not- a camper site ", @@ -665,7 +669,8 @@ "fr": "Ajouter une nouvelle aire de camping officielle, destinée à y passer la nuit avec un camping-car. Elle ne nécessite pas d’infrastructures particulières et peut être simplement désignée sous arrêté municipal, un simple parking ne suffit pas à rentrer dans cette catégorie ", "de": "Fügen Sie einen neuen offiziellen Wohnmobilstellplatz hinzu. Dies sind ausgewiesene Plätze, an denen Sie in Ihrem Wohnmobil übernachten können. Sie können wie ein richtiger Campingplatz oder nur wie ein Parkplatz aussehen. Möglicherweise sind sie gar nicht ausgeschildert, sondern nur in einem Gemeindebeschluss festgelegt. Ein normaler Parkplatz für Wohnmobile, auf dem übernachten nicht zulässig ist, ist kein Wohnmobilstellplatz. ", "nl": "Voeg een nieuwe officiële camperplaats toe. Dit zijn speciaal aangeduide plaatsen waar het toegestaan is om te overnachten met een camper. Ze kunnen er uitzien als een parking, of soms eerder als een camping. Soms staan ze niet ter plaatse aangeduid, maar heeft de gemeente wel degelijk beslist dat dit een camperplaats is. Een parking voor campers waar je niet mag overnachten is géén camperplaats. ", - "zh_Hant": "新增正式露營地點,通常是設計給過夜的露營者的地點。看起來像是真的露營地或是一般的停車場,而且也許沒有任何指標,但在城鎮被定議地點。如果一般給露營者的停車場並不是用來過夜,則不是露營地點 " + "zh_Hant": "新增正式露營地點,通常是設計給過夜的露營者的地點。看起來像是真的露營地或是一般的停車場,而且也許沒有任何指標,但在城鎮被定議地點。如果一般給露營者的停車場並不是用來過夜,則不是露營地點 ", + "hu": "Új hivatalos lakóautóhely hozzáadása. Ez arra vannak kijelölve, hogy lakóautóval ott éjszakázzunk. Lehet, hogy úgy néz ki, mint egy igazi kemping, de az is lehet, hogy csak olyan, mint egy parkoló. Előfordulhat, hogy egyáltalán nem jelzik őket, hanem csak egy önkormányzati határozatban vannak kijelölve. A lakóautósoknak szánt olyan hagyományos parkolók, ahol nem várhatóan nem fognak éjszakázni, -nem minősül- lakóautóhelynek. " } } ], @@ -712,7 +717,8 @@ "fr": "Site de vidange", "pt_BR": "Estações de despejo sanitário", "de": "Sanitäre Entsorgungsstationen", - "zh_Hant": "垃圾處理站" + "zh_Hant": "垃圾處理站", + "id": "Tempat pembuangan sanitasi" }, "minzoom": 10, "source": { @@ -730,7 +736,7 @@ "ja": "ゴミ捨て場 {name}", "it": "Luogo di sversamento {name}", "fr": "Site de vidange {name}", - "pt_BR": "Estação de despejo {nome}", + "pt_BR": "Estação de despejo {name}", "de": "Entsorgungsstation {name}", "zh_Hant": "{name} 垃圾站" }, @@ -762,7 +768,8 @@ "fr": "Site de vidange", "pt_BR": "Estações de despejo sanitário", "de": "Sanitäre Entsorgungsstationen", - "zh_Hant": "垃圾處理站" + "zh_Hant": "垃圾處理站", + "id": "Tempat pembuangan sanitasi" }, "tagRenderings": [ "images", @@ -950,7 +957,8 @@ "zh_Hant": "你能在這裡丟棄廁所化學廢棄物嗎?", "it": "È possibile smaltire le acque del WC chimico qui?", "fr": "Est-il possible d’y vidanger ses toilettes chimiques ?", - "de": "Können Sie hier chemische Toilettenabfälle entsorgen?" + "de": "Können Sie hier chemische Toilettenabfälle entsorgen?", + "hu": "Elhelyezhető-e itt a vegyi WC hulladéka?" }, "mappings": [ { @@ -966,7 +974,8 @@ "zh_Hant": "你可以在這邊丟棄廁所化學廢棄物", "it": "È possibile smaltire le acque del WC chimico qui", "fr": "Il est possible d’y vidanger ses toilettes chimiques", - "de": "Hier können Sie chemische Toilettenabfälle entsorgen" + "de": "Hier können Sie chemische Toilettenabfälle entsorgen", + "hu": "Itt ártalmatlanítható a vegyi WC hulladéka" } }, { @@ -982,7 +991,8 @@ "zh_Hant": "你不能在這邊丟棄廁所化學廢棄物", "it": "Non è possibile smaltire le acque del WC chimico qui", "fr": "Il n’est pas possible d’y vidanger ses toilettes chimiques", - "de": "Hier können Sie keine chemischen Toilettenabfälle entsorgen" + "de": "Hier können Sie keine chemischen Toilettenabfälle entsorgen", + "hu": "Itt nem ártalmatlanítható a vegyi WC hulladéka" } } ] @@ -1108,7 +1118,8 @@ "it": "Aggiungi un nuovo luogo di sversamento delle acque reflue. Si tratta di luoghi dove chi viaggia in camper può smaltire le acque grigie o le acque nere. Spesso forniscono anche acqua ed elettricità.", "fr": "Ajouter un nouveau site de vidange. Un espace où évacuer ses eaux usées (grises et/ou noires) généralement alimenté en eau potable et électricité.", "de": "Fügen Sie eine neue sanitäre Entsorgungsstation hinzu. Hier können Camper Abwasser oder chemischen Toilettenabfälle entsorgen. Oft gibt es auch Trinkwasser und Strom.", - "zh_Hant": "新增垃圾站,這通常是提供露營駕駛丟棄廢水與化學性廁所廢水的地方,也會有飲用水與電力。" + "zh_Hant": "新增垃圾站,這通常是提供露營駕駛丟棄廢水與化學性廁所廢水的地方,也會有飲用水與電力。", + "hu": "Új egészségügyihulldék-lerakó hozzáadása. Ez egy olyan hely, ahol a lakókocsisok a szennyvizet vagy a vegyi WC hulladékát kiüríthetik. Gyakran van ivóvíz és áram is." } } ], @@ -1166,7 +1177,8 @@ "ja": "この場所に電源はありますか?", "it": "Questo luogo fornisce corrente elettrica?", "fr": "Ce site a-t’il une source d’électricité ?", - "de": "Hat dieser Ort eine Stromversorgung?" + "de": "Hat dieser Ort eine Stromversorgung?", + "hu": "Van-e itt elektromos áram?" }, "mappings": [ { diff --git a/assets/themes/charging_stations/charging_stations.json b/assets/themes/charging_stations/charging_stations.json index 2ec09079da..2b6fc04d27 100644 --- a/assets/themes/charging_stations/charging_stations.json +++ b/assets/themes/charging_stations/charging_stations.json @@ -9,7 +9,8 @@ "nl": "Oplaadpunten", "de": "Ladestationen", "nb_NO": "Ladestasjoner", - "ru": "Зарядные станции" + "ru": "Зарядные станции", + "hu": "Elektromos töltőpontok" }, "shortDescription": { "en": "A worldwide map of charging stations", @@ -19,7 +20,8 @@ "nl": "Een wereldwijde kaart van oplaadpunten", "de": "Eine weltweite Karte mit Ladestationen", "nb_NO": "Et verdensomspennende kart over ladestasjoner", - "ru": "Карта зарядных станций по всему миру" + "ru": "Карта зарядных станций по всему миру", + "hu": "Elektromos töltőpontok világtérképe" }, "description": { "en": "On this open map, one can find and mark information about charging stations", @@ -27,19 +29,9 @@ "ja": "このオープンマップでは充電ステーションに関する情報を見つけてマークすることができます", "ru": "На этой карте вы можно найти и отметить информацию о зарядных станциях", "zh_Hant": "在這份開放地圖上,你可以尋找與標示充電站的資訊", - "de": "Auf dieser freien Karte kann man Informationen über Ladestationen finden und hinzufügen" + "de": "Auf dieser freien Karte kann man Informationen über Ladestationen finden und hinzufügen", + "hu": "Ezen a térképen a elektromos töltőpontokról szóló információkat lehet megtalálni és megadni" }, - "language": [ - "en", - "id", - "it", - "ja", - "zh_Hant", - "nl", - "de", - "nb_NO", - "ru" - ], "maintainer": "", "icon": "./assets/themes/charging_stations/logo.svg", "version": "0", diff --git a/assets/themes/climbing/climbing.json b/assets/themes/climbing/climbing.json index 609081b778..fc948705d0 100644 --- a/assets/themes/climbing/climbing.json +++ b/assets/themes/climbing/climbing.json @@ -9,7 +9,8 @@ "zh_Hant": "開放攀爬地圖", "nb_NO": "Åpent klatrekart", "it": "Mappa aperta per le arrampicate", - "fr": "Open Climbing Map" + "fr": "Open Climbing Map", + "hu": "Mászótérkép" }, "description": { "nl": "Op deze kaart vind je verschillende klimgelegenheden, zoals klimzalen, bolderzalen en klimmen in de natuur", @@ -19,7 +20,8 @@ "ja": "この地図には、自然の中のクライミングジム、ボルダリングホール、岩など、さまざまなクライミングの機会があります。", "zh_Hant": "在這份地圖上你會發現能夠攀爬機會,像是攀岩體育館、抱石大廳以及大自然當中的巨石。", "fr": "Cette carte indique les sites d’escalades comme les salles d’escalade ou les sites naturels.", - "it": "In questa cartina puoi trovare vari luoghi per arrampicata come ad esempio palestre di arrampicata, sale di pratica e rocce naturali." + "it": "In questa cartina puoi trovare vari luoghi per arrampicata come ad esempio palestre di arrampicata, sale di pratica e rocce naturali.", + "hu": "Ezen a térképen különböző mászási lehetőségeket talál, például falmászótermeket, bouldertermeket és sziklákat a természetben." }, "descriptionTail": { "nl": "De klimkaart is oorspronkelijk gemaakt door Christian Neumann op kletterspots.de.", @@ -29,22 +31,9 @@ "ja": "登山地図はもともと Christian Neumann によって作成されたものです。フィードバックや質問がありましたら、ご連絡ください。

このプロジェクトでは、OpenStreetMapプロジェクトのデータを使用します。

", "zh_Hant": "攀爬地圖最初由 Christian Neumann 製作。如果你有回饋意見或問題請到Please 這邊反應

這專案使用來自開放街圖專案的資料。

", "fr": "La carte a été créée par Christian Neumann. Merci de le contacter pour des avis ou des questions.

Ce projet utilise les données OpenStreetMap.

", - "it": "La cartina di arrampicata è stata originariamente creata da Christian Neumann. Si prega di scrivere qua se si hanno commenti o domande da fare.

Il progetto usa i dati del progetto OpenStreetMap.

" + "it": "La cartina di arrampicata è stata originariamente creata da Christian Neumann. Si prega di scrivere qua se si hanno commenti o domande da fare.

Il progetto usa i dati del progetto OpenStreetMap.

", + "hu": "A mászótérképet eredetileg Christian Neumann készítette. Ha észrevétele vagy kérdése van, kérjük, vele lépjen kapcsolatba.

A projekt az OpenStreetMap adatait használja

" }, - "language": [ - "nl", - "de", - "en", - "ru", - "ja", - "zh_Hant", - "nb_NO", - "it", - "fr", - "ca", - "id", - "eo" - ], "maintainer": "Christian Neumann ", "icon": "./assets/themes/climbing/climbing_icon.svg", "version": "0", @@ -65,7 +54,8 @@ "zh_Hant": "攀岩社團", "nb_NO": "Klatreklubb", "fr": "Club d’escalade", - "it": "Club di arrampicata" + "it": "Club di arrampicata", + "hu": "Mászóegyesület" }, "minzoom": 10, "source": { @@ -108,7 +98,8 @@ "ja": "クライミングNGO", "zh_Hant": "攀岩 NGO", "fr": "Association d’escalade", - "it": "Associazione di arrampicata" + "it": "Associazione di arrampicata", + "hu": "Mászószervezet" } } ] @@ -116,12 +107,13 @@ "description": { "de": "Ein Kletterverein oder eine Organisation", "nl": "Een klimclub of organisatie", - "en": "A climbing club or organisations", + "en": "A climbing club or organisation", "ja": "クライミングクラブや団体", "zh_Hant": "攀岩社團或組織", "nb_NO": "En klatreklubb eller organisasjoner", "fr": "Club ou association d’escalade", - "it": "Un club o associazione di arrampacata" + "it": "Un club o associazione di arrampacata", + "hu": "Mászóegyesület vagy -szervezet" }, "tagRenderings": [ { @@ -135,7 +127,8 @@ "ru": "{name}", "ja": "{name}", "zh_Hant": "{name}", - "it": "{name}" + "it": "{name}", + "hu": "{name}" }, "question": { "en": "What is the name of this climbing club or NGO?", @@ -143,7 +136,8 @@ "nl": "Wat is de naam van deze klimclub?", "ja": "この登山クラブやNGOの名前は何ですか?", "fr": "Quel est le nom du club ou de l’association ?", - "it": "Qual è il nome di questo club o associazione di arrampicata?" + "it": "Qual è il nome di questo club o associazione di arrampicata?", + "hu": "Mi a neve ennek a mászóegyesületnek vagy szervezetnek?" }, "freeform": { "key": "name" @@ -173,7 +167,8 @@ "nb_NO": "Klatreklubb", "ru": "Клуб скалолазания", "fr": "Club d’escalade", - "it": "Club di arrampicata" + "it": "Club di arrampicata", + "hu": "Mászóegyesület" }, "description": { "de": "Ein Kletterverein", @@ -183,7 +178,8 @@ "nb_NO": "En klatreklubb", "ru": "Клуб скалолазания", "fr": "Un club d’escalade", - "it": "Un club di arrampicata" + "it": "Un club di arrampicata", + "hu": "Egy mászóegyesület" } }, { @@ -197,15 +193,17 @@ "nl": "Een klimorganisatie", "ja": "クライミングNGO", "fr": "Association d’escalade", - "it": "Associazione di arrampicata" + "it": "Associazione di arrampicata", + "hu": "Mászószervezet" }, "description": { "de": "Eine Organisation, welche sich mit dem Klettern beschäftigt", "nl": "Een VZW die werkt rond klimmen", - "en": "A NGO working around climbing", + "en": "An NGO working around climbing", "ja": "登山に関わるNGO", "fr": "Une association d’escalade", - "it": "Un’associazione che ha a che fare con l’arrampicata" + "it": "Un’associazione che ha a che fare con l’arrampicata", + "hu": "Mászással foglalkozó civil szervezet" } } ], @@ -461,7 +459,7 @@ }, { "question": { - "en": "What is the difficulty of this climbing route according to the french/belgian system?", + "en": "What is the grade of this climbing route according to the french/belgian system?", "nl": "Hoe moeilijk is deze klimroute volgens het Franse/Belgische systeem?", "it": "Qual è la difficoltà di questa via di arrampicata nel sistema francese/belga?", "fr": "Quelle est la difficulté de cette voie selon le système franco-belge ?", @@ -469,7 +467,7 @@ }, "render": { "de": "Die Schwierigkeit ist {climbing:grade:french} entsprechend des französisch/belgischen Systems", - "en": "The difficulty is {climbing:grade:french} according to the french/belgian system", + "en": "The grade is {climbing:grade:french} according to the french/belgian system", "nl": "De klimmoeilijkheid is {climbing:grade:french} volgens het Franse/Belgische systeem", "ja": "フランス/ベルギーのランク評価システムによると、{climbing:grade:french}の困難度です", "it": "Il grado di difficoltà è {climbing:grade:french} nel sistema francese/belga", @@ -482,7 +480,7 @@ }, { "question": { - "en": "How much bolts does this route have before reaching the moulinette?", + "en": "How many bolts does this route have before reaching the anchor?", "fr": "Combien de prises cette voie possède avant d’atteindre la moulinette ?", "de": "Wie viele Haken gibt es auf dieser Kletterroute bevor der Umlenker bzw. Standhaken erreicht ist?", "it": "Quanti bulloni sono presenti in questo percorso prima di arrivare alla moulinette?" @@ -700,7 +698,7 @@ }, { "render": { - "en": "

Difficulties overview

{histogram(_difficulty_hist)}", + "en": "

Grades overview

{histogram(_difficulty_hist)}", "fr": "

Résumé des difficultés

{histogram(_difficulty_hist)}", "de": "

Schwierigkeitsübersicht

{histogram(_difficulty_hist)}", "it": "

Riassunto delle difficoltà

{histogram(_difficulty_hist)}" @@ -1211,7 +1209,7 @@ { "if": "access=customers", "then": { - "en": "Only custumers", + "en": "Only customers", "fr": "Réservé aux clients", "de": "Nur für Kunden", "it": "Riservato ai clienti" @@ -1302,7 +1300,7 @@ "id": "Difficulty-min", "question": { "de": "Welche Schwierigkeit hat hier die leichteste Route (französisch/belgisches System)?", - "en": "What is the level of the easiest route here, accoring to the french classification system?", + "en": "What is the grade of the easiest route here, according to the french classification system?", "nl": "Wat is het niveau van de makkelijkste route, volgens het Franse classificatiesysteem?", "ja": "ここで一番簡単なルートのレベルは、フランスのランク評価システムで何ですか?", "fr": "Quel est le niveau de la voie la plus simple selon la classification franco-belge ?", @@ -1310,7 +1308,7 @@ }, "render": { "de": "Die leichteste Route hat hier die Schwierigkeit {climbing:grade:french:min} (französisch/belgisches System)", - "en": "The minimal difficulty is {climbing:grade:french:min} according to the french/belgian system", + "en": "The lowest grade is {climbing:grade:french:min} according to the french/belgian system", "nl": "De minimale klimmoeilijkheid is {climbing:grade:french:min} volgens het Franse/Belgische systeem", "ja": "フランス/ベルギーのランク評価システムでは、最小の難易度は{climbing:grade:french:min}です", "fr": "La difficulté minimale est {climbing:grade:french:min} selon la classification franco-belge", @@ -1337,7 +1335,7 @@ "id": "Difficulty-max", "question": { "de": "Welche Schwierigkeit hat hier die schwerste Route (französisch/belgisches System)?", - "en": "What is the level of the most difficult route here, accoring to the french classification system?", + "en": "What is the highest grade route here, according to the french classification system?", "nl": "Wat is het niveau van de moeilijkste route, volgens het Franse classificatiesysteem?", "ja": "フランスのランク評価によると、ここで一番難しいルートのレベルはどれくらいですか?", "fr": "Quel est le niveau de la voie la plus difficile selon la classification franco-belge ?", @@ -1345,7 +1343,7 @@ }, "render": { "de": "Die schwerste Route hat hier die Schwierigkeit {climbing:grade:french:max} (französisch/belgisches System)", - "en": "The maximal difficulty is {climbing:grade:french:max} according to the french/belgian system", + "en": "The highest grade is {climbing:grade:french:max} according to the french/belgian system", "nl": "De maximale klimmoeilijkheid is {climbing:grade:french:max} volgens het Franse/Belgische systeem", "ja": "フランス/ベルギーのランク評価システムでは、最大の難易度は{climbing:grade:french:max}です", "fr": "La difficulté maximale est {climbing:grade:french:max} selon la classification franco-belge", @@ -1518,7 +1516,8 @@ "nl": "Sportklimmen/voorklimmen kan hier", "ru": "Здесь можно заняться спортивным скалолазанием", "ja": "ここでスポーツクライミングができます", - "it": "L’arrampicata sportiva è possibile qua" + "it": "L’arrampicata sportiva è possibile qua", + "hu": "Itt lehetőség van sportmászásra" } }, { @@ -1529,7 +1528,8 @@ "nl": "Sportklimmen/voorklimmen kan hier niet", "ru": "Спортивное скалолазание здесь невозможно", "ja": "ここではスポーツクライミングはできません", - "it": "L’arrampicata sportiva non è possibile qua" + "it": "L’arrampicata sportiva non è possibile qua", + "hu": "Itt nincs lehetőség sportmászásra" } }, { diff --git a/assets/themes/cycle_highways/cycle_highways.json b/assets/themes/cycle_highways/cycle_highways.json index 266312e591..a1d403c381 100644 --- a/assets/themes/cycle_highways/cycle_highways.json +++ b/assets/themes/cycle_highways/cycle_highways.json @@ -15,11 +15,6 @@ "de": "Diese Karte zeigt Radschnellwege", "it": "Questa cartina mostra le strade per velocipedi" }, - "language": [ - "en", - "de", - "it" - ], "version": "2021-08-23", "startLat": 51.1599, "startLon": 3.3475, diff --git a/assets/themes/cycle_highways/fietssnelwegen-logo.svg b/assets/themes/cycle_highways/fietssnelwegen-logo.svg index 52810e3aaa..4d96c32db8 100644 --- a/assets/themes/cycle_highways/fietssnelwegen-logo.svg +++ b/assets/themes/cycle_highways/fietssnelwegen-logo.svg @@ -1,7 +1,42 @@ - - - - - + + + + + + + - \ No newline at end of file + diff --git a/assets/themes/cycle_infra/cycle_infra.json b/assets/themes/cycle_infra/cycle_infra.json index 68330f8e9c..4a26d7a47c 100644 --- a/assets/themes/cycle_infra/cycle_infra.json +++ b/assets/themes/cycle_infra/cycle_infra.json @@ -7,7 +7,8 @@ "it": "Infrastruttura dei velocipedi", "nb_NO": "Sykkelinfrastruktur", "ru": "Велосипедная дорожка", - "zh_Hant": "單車設施" + "zh_Hant": "單車設施", + "hu": "Kerékpáros infrastruktúra" }, "shortDescription": { "en": "A map where you can view and edit things related to the bicycle infrastructure.", @@ -15,24 +16,17 @@ "de": "Eine Karte zum Ansehen und Bearbeiten verschiedener Elementen der Fahrradinfrastruktur.", "it": "Una cartina dove vedere e modificare gli elementi riguardanti l’infrastruttura dei velocipedi.", "nb_NO": "Alt relatert til sykkelinfrastruktur.", - "zh_Hant": "檢視與編輯單車相關設施的地圖。" + "zh_Hant": "檢視與編輯單車相關設施的地圖。", + "hu": "Olyan térkép, ahol a kerékpáros infrastruktúrával kapcsolatos dolgokat tekinthet meg és szerkeszthet." }, "description": { "en": "A map where you can view and edit things related to the bicycle infrastructure. Made during #osoc21.", "nl": "Een kaart waar je info over de fietsinfrastructuur kan bekijken en bewerken. Gemaakt tijdens #osoc21.", "de": "Eine Karte zum Ansehen und Bearbeiten verschiedener Elementen der Fahrradinfrastruktur. Erstellt während #osoc21.", "it": "Una cartina dove vedere e modificare gli elementi riguardanti l’infrastruttura dei velocipedi. Realizzata durante #osoc21.", - "zh_Hant": "可以檢視與編輯單車相關設施的地圖,在 #os0c21時製作。" + "zh_Hant": "可以檢視與編輯單車相關設施的地圖,在 #os0c21時製作。", + "hu": "Kerékpáros infrastruktúrával kapcsolatos dolgokat megjelenítő és szerkesztésre felkínáló térkép. Az #osoc21 (Open Summer of Code) alatt készült." }, - "language": [ - "en", - "nl", - "de", - "it", - "nb_NO", - "ru", - "zh_Hant" - ], "maintainer": "MapComplete", "hideFromOverview": false, "defaultBackgroundId": "CartoDB.Voyager", diff --git a/assets/themes/cyclenodes/cyclenodes.json b/assets/themes/cyclenodes/cyclenodes.json index d1bc138a1c..1d82601d2a 100644 --- a/assets/themes/cyclenodes/cyclenodes.json +++ b/assets/themes/cyclenodes/cyclenodes.json @@ -8,10 +8,6 @@ "en": "This map shows cycle node networks and allows you to add new nodes easily", "de": "Diese Karte zeigt Knotenpunktnetzwerke für Radfahrer und erlaubt auch neue Knoten zu mappen" }, - "language": [ - "en", - "de" - ], "maintainer": "Sebastian Kürten", "icon": "./assets/themes/cyclenodes/logo.svg", "version": "0", @@ -131,25 +127,6 @@ "de": "Knotenpunkt {rcn_ref}" } }, - "presets": [ - { - "title": { - "de": "Knotenpunkt" - }, - "tags": [ - "network:type=node_network" - ] - }, - { - "title": { - "de": "Knotenpunkt im Netzwerk Spree-Neiße" - }, - "tags": [ - "network:type=node_network", - "cycle_network=Knotenpunktwegweisung Spree-Neiße" - ] - } - ], "tagRenderings": [ { "question": { diff --git a/assets/themes/cyclestreets/F111.svg b/assets/themes/cyclestreets/F111.svg index 5187f3692e..35d91fb30d 100644 --- a/assets/themes/cyclestreets/F111.svg +++ b/assets/themes/cyclestreets/F111.svg @@ -1,25 +1,113 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file + diff --git a/assets/themes/cyclestreets/F113.svg b/assets/themes/cyclestreets/F113.svg index a3f117caaa..bfdca7cdad 100644 --- a/assets/themes/cyclestreets/F113.svg +++ b/assets/themes/cyclestreets/F113.svg @@ -2,2448 +2,844 @@ image/svg+xml + xml:space="preserve" + height="274.30603" + width="182.23647" + version="1.1" + id="svg2" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/">image/svg+xml + id="defs6"> + clipPathUnits="userSpaceOnUse" + id="clipPath20"> + clipPathUnits="userSpaceOnUse" + id="clipPath30"> + clipPathUnits="userSpaceOnUse" + id="clipPath36"> + clipPathUnits="userSpaceOnUse" + id="clipPath42"> + clipPathUnits="userSpaceOnUse" + id="clipPath48"> + clipPathUnits="userSpaceOnUse" + id="clipPath52"> + clipPathUnits="userSpaceOnUse" + id="clipPath56"> + clipPathUnits="userSpaceOnUse" + id="clipPath60"> + clipPathUnits="userSpaceOnUse" + id="clipPath64"> + clipPathUnits="userSpaceOnUse" + id="clipPath68"> + clipPathUnits="userSpaceOnUse" + id="clipPath72"> + clipPathUnits="userSpaceOnUse" + id="clipPath76"> + clipPathUnits="userSpaceOnUse" + id="clipPath80"> + clipPathUnits="userSpaceOnUse" + id="clipPath122"> + clipPathUnits="userSpaceOnUse" + id="clipPath128"> + clipPathUnits="userSpaceOnUse" + id="clipPath134"> + clipPathUnits="userSpaceOnUse" + id="clipPath140"> - - - - - - - - - + clipPathUnits="userSpaceOnUse" + id="clipPath150"> + clipPathUnits="userSpaceOnUse" + id="clipPath578"> + clipPathUnits="userSpaceOnUse" + id="clipPath584"> + clipPathUnits="userSpaceOnUse" + id="clipPath590"> + clipPathUnits="userSpaceOnUse" + id="clipPath596"> + clipPathUnits="userSpaceOnUse" + id="clipPath600"> + clipPathUnits="userSpaceOnUse" + id="clipPath604"> + clipPathUnits="userSpaceOnUse" + id="clipPath608"> + clipPathUnits="userSpaceOnUse" + id="clipPath612"> + clipPathUnits="userSpaceOnUse" + id="clipPath616"> + clipPathUnits="userSpaceOnUse" + id="clipPath620"> + clipPathUnits="userSpaceOnUse" + id="clipPath624"> + clipPathUnits="userSpaceOnUse" + id="clipPath628"> + clipPathUnits="userSpaceOnUse" + id="clipPath670"> + clipPathUnits="userSpaceOnUse" + id="clipPath676"> + clipPathUnits="userSpaceOnUse" + id="clipPath682"> + clipPathUnits="userSpaceOnUse" + id="clipPath688"> - + clipPathUnits="userSpaceOnUse" + id="clipPath698"> + clipPathUnits="userSpaceOnUse" + id="clipPath720"> - + clipPathUnits="userSpaceOnUse" + id="clipPath752"> + clipPathUnits="userSpaceOnUse" + id="clipPath822"> + clipPathUnits="userSpaceOnUse" + id="clipPath836"> + clipPathUnits="userSpaceOnUse" + id="clipPath842"> + clipPathUnits="userSpaceOnUse" + id="clipPath848"> + clipPathUnits="userSpaceOnUse" + id="clipPath854"> + clipPathUnits="userSpaceOnUse" + id="clipPath858"> + clipPathUnits="userSpaceOnUse" + id="clipPath862"> + clipPathUnits="userSpaceOnUse" + id="clipPath866"> + clipPathUnits="userSpaceOnUse" + id="clipPath870"> + clipPathUnits="userSpaceOnUse" + id="clipPath874"> + clipPathUnits="userSpaceOnUse" + id="clipPath878"> + clipPathUnits="userSpaceOnUse" + id="clipPath882"> + clipPathUnits="userSpaceOnUse" + id="clipPath886"> + clipPathUnits="userSpaceOnUse" + id="clipPath928"> + clipPathUnits="userSpaceOnUse" + id="clipPath934"> + clipPathUnits="userSpaceOnUse" + id="clipPath940"> + clipPathUnits="userSpaceOnUse" + id="clipPath946"> + clipPathUnits="userSpaceOnUse" + id="clipPath956"> + clipPathUnits="userSpaceOnUse" + id="clipPath978"> + x1="739" + y1="325" + x2="739" + y2="342" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,-1,0,1442)" + id="linearGradient990"> + style="stop-opacity:1;stop-color:#000000" + offset="1" + id="stop994" /> + clipPathUnits="userSpaceOnUse" + id="clipPath1002"> + x1="739" + y1="325" + x2="739" + y2="333.5" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,-1,0,1442)" + id="linearGradient1014"> + style="stop-opacity:1;stop-color:#ffffff" + offset="1" + id="stop1018" /> + clipPathUnits="userSpaceOnUse" + id="clipPath1026"> + x1="744" + y1="333.5" + x2="744" + y2="342" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,-1,0,1442)" + id="linearGradient1038"> + style="stop-opacity:1;stop-color:#ffffff" + offset="1" + id="stop1042" /> + clipPathUnits="userSpaceOnUse" + id="clipPath1050"> + x1="739" + y1="325" + x2="744" + y2="325" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,-1,0,1442)" + id="linearGradient1062"> + style="stop-opacity:1;stop-color:#000000" + offset="1" + id="stop1066" /> + x1="927" + y1="325" + x2="922" + y2="325" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,-1,0,1442)" + id="linearGradient1072"> + style="stop-opacity:1;stop-color:#000000" + offset="1" + id="stop1076" /> + clipPathUnits="userSpaceOnUse" + id="clipPath1084"> + clipPathUnits="userSpaceOnUse" + id="clipPath1106"> + clipPathUnits="userSpaceOnUse" + id="clipPath1112"> + clipPathUnits="userSpaceOnUse" + id="clipPath1126"> + clipPathUnits="userSpaceOnUse" + id="clipPath1132"> + clipPathUnits="userSpaceOnUse" + id="clipPath1138"> + clipPathUnits="userSpaceOnUse" + id="clipPath1144"> + clipPathUnits="userSpaceOnUse" + id="clipPath1148"> + clipPathUnits="userSpaceOnUse" + id="clipPath1152"> + clipPathUnits="userSpaceOnUse" + id="clipPath1156"> + clipPathUnits="userSpaceOnUse" + id="clipPath1160"> + clipPathUnits="userSpaceOnUse" + id="clipPath1164"> + clipPathUnits="userSpaceOnUse" + id="clipPath1168"> + clipPathUnits="userSpaceOnUse" + id="clipPath1172"> + clipPathUnits="userSpaceOnUse" + id="clipPath1176"> + clipPathUnits="userSpaceOnUse" + id="clipPath1218"> + clipPathUnits="userSpaceOnUse" + id="clipPath1224"> + clipPathUnits="userSpaceOnUse" + id="clipPath1230"> + clipPathUnits="userSpaceOnUse" + id="clipPath1236"> + clipPathUnits="userSpaceOnUse" + id="clipPath1246"> + clipPathUnits="userSpaceOnUse" + id="clipPath1262"> + clipPathUnits="userSpaceOnUse" + id="clipPath1854"> + clipPathUnits="userSpaceOnUse" + id="clipPath1860"> + clipPathUnits="userSpaceOnUse" + id="clipPath1866"> + clipPathUnits="userSpaceOnUse" + id="clipPath1872"> + clipPathUnits="userSpaceOnUse" + id="clipPath1876"> + clipPathUnits="userSpaceOnUse" + id="clipPath1880"> + clipPathUnits="userSpaceOnUse" + id="clipPath1884"> + clipPathUnits="userSpaceOnUse" + id="clipPath1888"> + clipPathUnits="userSpaceOnUse" + id="clipPath1892"> + clipPathUnits="userSpaceOnUse" + id="clipPath1896"> + clipPathUnits="userSpaceOnUse" + id="clipPath1900"> + clipPathUnits="userSpaceOnUse" + id="clipPath1904"> + clipPathUnits="userSpaceOnUse" + id="clipPath1946"> + clipPathUnits="userSpaceOnUse" + id="clipPath1952"> + clipPathUnits="userSpaceOnUse" + id="clipPath1958"> + clipPathUnits="userSpaceOnUse" + id="clipPath1964"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + clipPathUnits="userSpaceOnUse" + id="clipPath1974"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + y="0" + x="0" + height="6" + width="6" + patternUnits="userSpaceOnUse" + id="EMFhbasepattern" /> + + id="path144" /> + id="path5255" + d="m -553.89265,417.08192 h 111.79768 c 9.3186,0 16.89994,-7.60913 16.89994,-17.02872 V 214.47254 c 0,-9.35088 -7.58134,-16.83544 -16.89994,-16.83544 h -111.92542 c -9.38034,0 -16.96381,7.61342 -16.96381,16.96644 l 0.066,185.44966 c 0,9.41745 7.64521,17.02872 17.02555,17.02872 z" + style="fill:#0071b3;fill-opacity:1;stroke-width:1.04179811" /> + id="path5257" + d="m -553.89264,417.08191 h 111.79767 c 9.3186,0 16.89994,-7.61127 16.89994,-17.02872 V 214.47252 c 0,-9.35087 -7.58134,-16.83543 -16.89994,-16.83543 h -111.92541 c -9.38034,0 -16.96382,7.61342 -16.96382,16.96645 l 0.066,185.44965 c 0,9.41745 7.64522,17.02872 17.02556,17.02872 z" + stroke-miterlimit="3.863" + style="opacity:0;fill:none;stroke:#0071b3;stroke-width:0;stroke-miterlimit:3.86299992" /> + id="path5263" + d="m -430.65802,214.27924 c 0,-6.12724 -4.94352,-11.09261 -10.92173,-11.09261 h -112.95372 c -6.03995,0 -10.92174,4.96751 -10.92174,11.09261 v 186.22497 c 0,6.06282 4.88179,11.09476 10.92174,11.09476 35.40302,0 77.48682,0 112.95372,0 5.97821,0 10.92173,-4.96752 10.92173,-11.15704 z" + style="fill:#ffffff;stroke-width:1.04179811" /> + id="path5265" + d="m -430.65802,214.27924 c 0,-6.12724 -4.94352,-11.09262 -10.92173,-11.09262 h -112.95372 c -6.03995,0 -10.92174,4.96752 -10.92174,11.09262 v 186.22495 c 0,6.06283 4.88179,11.09477 10.92174,11.09477 35.40302,0 77.48683,0 112.95372,0 5.97821,0 10.92173,-4.96752 10.92173,-11.15704 z" + stroke-miterlimit="3.863" + style="fill:none;stroke:#ffffff;stroke-width:0;stroke-miterlimit:3.86299992" /> + id="path5267" + d="m -436.05715,214.21696 c 0,-3.09476 -2.56757,-5.54737 -5.5886,-5.54737 h -112.95372 c -3.01891,0 -5.46087,2.45261 -5.46087,5.54737 v 186.35167 c 0,3.03249 2.43983,5.54739 5.46087,5.54739 32.57572,0 80.50787,0 113.08358,0 3.01891,0 5.45874,-2.45048 5.45874,-5.54739 z" + style="fill:#0071b3;fill-opacity:1;stroke-width:1.04179811" /> + id="path5269" + d="m -436.05715,214.21696 c 0,-3.09476 -2.56756,-5.54738 -5.5886,-5.54738 h -112.95371 c -3.01891,0 -5.46087,2.45262 -5.46087,5.54738 v 186.35167 c 0,3.03248 2.43982,5.54738 5.46087,5.54738 32.57571,0 80.50786,0 113.08358,0 3.01891,0 5.45873,-2.45047 5.45873,-5.54738 z" + stroke-miterlimit="3.863" + style="fill:none;stroke:#0071b3;stroke-width:0;stroke-miterlimit:3.86299992" /> + style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.83451968;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect1302" + width="18.539501" + height="19.155836" + x="-544.87085" + y="-276.52475" + transform="scale(1,-1)" /> + style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.83451968;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect1302-3" + width="18.539501" + height="19.155836" + x="-473.12518" + y="-275.46426" + transform="scale(1,-1)" /> + id="path5" /> + transform="matrix(0.02,0,0,-0.02,-748.27595,429.58555)" + id="layer103" + style="fill:#ffffff;stroke:none"> + d="m 12955.029,9410.4139 c -0.91,-2012.611 0.911,-2522.5939 8.197,-2540.8076 17.302,-44.6235 72.855,-80.1402 125.674,-80.1402 48.267,0 94.711,27.3206 118.389,69.2121 l 20.946,35.5166 V 8290.273 9685.4405 h 127.496 127.495 v 113.836 113.835 h -264.098 -264.099 z" + id="path16" + style="stroke-width:0.91068375" /> + d="m 11798.461,8501.5516 v -109.2821 h 122.943 122.942 v -744.9393 -745.8499 l 20.946,-39.1595 c 50.087,-94.7111 170.297,-97.4431 237.688,-6.3748 19.124,25.4992 19.124,29.1419 21.856,890.6488 l 1.821,864.2388 h -264.097 -264.099 z" + id="path18" + style="stroke-width:0.91068375" /> + id="path1349" + d="m -551.26083,386.46189 h 0.32 0.064 0.128 0.512 0.31999 0.576 0.128 0.192 0.128 0.128 0.12799 0.768 0.70399 0.128 0.448 0.512 0.12799 0.704 0.32 0.25599 0.448 0.192 0.512 0.128 0.70399 0.128 0.448 v -3.77597 h -0.128 -0.768 -0.256 -0.31999 -0.128 -0.192 -0.512 -0.192 -0.63999 -0.128 -0.448 -0.192 -0.12799 -0.128 -0.704 -0.51199 -0.192 -0.64 -0.128 -0.44799 v -3.90397 h 0.25599 0.768 0.256 0.128 0.12799 0.128 0.192 0.128 0.128 0.128 0.83199 0.128 0.192 0.064 0.704 0.51199 0.192 0.64 0.12799 0.512 v -3.64798 h -0.576 -0.12799 -0.192 -0.128 -0.128 -0.128 -0.76799 -0.512 -0.32 -0.51199 -0.128 -0.704 -0.51199 -0.192 -0.64 -0.128 -0.44799 v -7.93594 h -0.064 0.064 -0.128 0.064 -0.064 v 0 h -0.064 0.064 -0.064 v 0 h -0.064 0.064 -0.128 0.064 -0.064 v 0 h -0.064 0.064 -0.128 0.064 -0.064 v 0 h -0.064 0.064 -0.064 v 0 h -0.064 0.064 -0.128 0.064 -0.064 v 0 h -0.064 0.064 -0.064 v 0 h -0.064 0.064 -0.128 0.064 -0.064 v 0 h -0.064 0.064 -0.128 0.064 -0.064 v 0 h -0.064 0.064 -0.064 v 0 h -0.064 0.064 -0.128 0.064 -0.064 v 0 h -0.064 0.064 -0.064 v 0 h -0.064 0.064 -0.128 0.064 -0.064 v 0 h -0.064 0.064 -0.128 0.064 -0.064 v 0 h -0.064 0.064 -0.064 v 0 h -0.064 0.064 -0.128 0.064 -0.064 v 0 h -0.064 0.064 -0.064 v 0 h -0.064 0.064 -0.128 0.064 -0.064 v 0 h -0.064 0.064 -0.128 0.064 -0.064 v 0 h -0.064 0.064 -0.064 v 0 h -0.064 0.064 -0.128 0.064 -0.064 v 0 h -0.064 0.064 -0.064 v 0 h -0.064 0.064 -0.128 0.064 -0.064 v 0 h -0.064 0.064 -0.128 0.064 -0.064 v 0 h -0.064 0.064 -0.064 v 0 h -0.064 0.064 -0.12799 0.064 -0.064 v 0 h -0.064 0.064 -0.064 v 0 h -0.064 0.064 -0.128 0.064 -0.064 v 0 h -0.064 0.064 -0.128 0.064 -0.064 v 0 h -0.064 0.064 -0.064 v 0 h -0.064 0.064 -0.064 v 0.192 0.896 0.44799 0.384 0.128 0.256 0.89599 0.128 1.02399 0.384 0.192 0.89599 0.192 0.128 1.59999 0.31999 0.128 0.256 0.89599 0.704 0.128 0.256 0.128 0.19199 0.192 1.02399 0.832 0.128 0.63999 0.64 0.192 0.83199 0.192 0.576 0.57599 0.256 0.63999 0.192 0.896 0.128 0.57599 z" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001" /> + id="path1351" + d="m -538.97292,386.58989 c 1.08799,0 1.72799,-0.576 1.98399,-1.79199 0,-0.95999 -0.256,-1.72798 -0.768,-2.23998 -1.15199,-0.576 -1.98398,-0.256 -2.49598,1.08799 -0.256,1.53599 0.128,2.49598 1.27999,2.94398 z m -0.51199,-5.63196 h 0.192 0.19199 0.512 0.128 0.70399 0.32 0.256 v -13.7599 h -0.576 -0.38399 -0.192 -0.128 -0.192 -0.128 -0.76799 -0.128 -0.448 v 0.192 0.192 0.192 0.192 0.128 1.02399 0.384 0.19199 0.256 0.192 0.256 0.64 0.19199 0.832 0.192 0.57599 0.384 0.32 0.31999 0.384 0.256 0.384 0.25599 0.896 0.32 0.19199 0.32 0.192 0.89599 0.576 0.192 0.192 0.25599 0.192 0.832 0.128 0.63999 z" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001" /> + id="path1353" + d="m -530.46098,381.27793 c 3.19998,0.064 5.05596,-1.91999 5.50396,-5.95196 l 0.128,-0.63999 v -0.384 c 0,-0.57599 0.064,-1.08799 0,-1.47199 l -0.128,0.064 h -0.128 -0.76799 -0.128 -0.128 -1.21599 -0.256 -0.256 -0.256 -0.256 -0.19199 -0.192 -0.192 -0.704 -0.44799 -0.128 -0.192 -0.128 -0.128 -0.70399 -0.128 -0.448 c 0.128,-1.47199 0.704,-2.30398 1.72799,-2.62398 1.34399,-0.256 2.43198,0.192 3.26397,1.27999 l 0.32,-0.448 c 0.128,-0.12799 0.192,-0.25599 0.256,-0.38399 l 0.064,-0.064 0.064,-0.064 c 0.128,-0.128 0.256,-0.256 0.32,-0.384 l 0.064,-0.128 c 0.064,-0.064 0.064,-0.064 0.064,-0.128 h 0.128 l 0.064,-0.128 v -0.064 l 0.128,-0.064 v -0.128 c 0.12799,-0.12799 0.25599,-0.25599 0.31999,-0.31999 -1.21599,-2.04799 -2.94398,-2.81598 -5.11996,-2.30399 -2.62398,0.576 -4.15997,2.68799 -4.47997,6.20796 -0.256,4.47997 1.15199,7.23195 4.28797,8.12794 z m 0.70399,-3.07198 c -1.21599,-0.256 -1.91998,-1.08799 -2.17598,-2.49598 h 0.256 0.256 0.51199 1.21599 0.576 0.128 0.192 0.128 0.128 0.12799 0.768 c -0.256,1.53599 -0.95999,2.36798 -2.11199,2.49598 z" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001" /> + id="path1355" + d="m -518.62107,386.46189 c 0.064,-0.064 0.128,-0.128 0.128,-0.256 v -5.11996 h 0.128 0.448 0.192 0.51199 0.128 0.704 0.31999 0.256 v -3.13598 h -0.128 -0.44799 -0.192 -0.512 -0.192 -0.63999 -0.128 -0.448 V 371.102 l 0.064,-0.31999 c 0.512,-0.64 1.27999,-0.704 2.36798,-0.192 l 0.064,-0.192 0.192,-0.83199 0.064,-0.128 v -0.448 l 0.128,-0.32 v -0.128 c 0.064,-0.25599 0.128,-0.44799 0.128,-0.57599 l 0.128,-0.512 c -1.66399,-0.63999 -3.19998,-0.76799 -4.67197,-0.384 -0.44799,0.256 -0.76799,0.64 -1.02399,1.024 -0.192,0.38399 -0.32,0.76799 -0.448,1.08799 v 0.32 c 0,0.19199 0,0.38399 0,0.51199 v 0.192 0.256 0.128 0.89599 0.64 0.192 0.89599 0.128 0.63999 0.64 0.192 0.89599 0.192 0.192 0.256 0.83199 0.128 0.63999 h -0.192 -0.12799 -0.192 -0.64 -0.128 -0.44799 v 0.256 0.192 0.256 0.63999 0.192 0.832 0.192 0.57599 h 0.128 0.19199 0.128 0.704 0.32 0.25599 v 0.89599 0.192 0.832 0.57599 0.192 0.83199 0.192 0.576 l 0.128,0.064 0.128,0.064 0.32,0.064 c 0.128,0.128 0.32,0.128 0.384,0.192 l 0.51199,0.19199 0.192,0.064 0.384,0.192 c 0.384,0.064 0.63999,0.192 0.83199,0.256 z" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001" /> + id="path1357" + d="m -510.04513,381.40593 c 1.98398,0.128 3.64797,-0.512 4.99196,-2.04799 l -0.128,-0.192 -0.128,-0.12799 c -0.064,-0.128 -0.128,-0.256 -0.192,-0.32 l -0.19199,-0.256 -0.128,-0.128 c -0.064,-0.192 -0.192,-0.384 -0.32,-0.448 l -0.064,-0.12799 -0.064,-0.128 -0.064,-0.064 -0.512,-0.768 c -1.72798,1.85599 -3.07197,2.04799 -3.96797,0.576 0,-0.384 0.064,-0.704 0.192,-1.02399 h 0.128 l 0.128,-0.128 h 0.128 l 0.128,-0.064 0.32,-0.064 0.57599,-0.192 c 1.47199,0 2.62398,-0.576 3.51998,-1.66399 0.76799,-1.47199 0.89599,-2.87998 0.51199,-4.35197 -0.44799,-1.27999 -1.15199,-2.11198 -2.04798,-2.49598 -2.94398,-1.08799 -5.37596,-0.448 -7.35995,1.98399 0.064,0.192 0.192,0.38399 0.32,0.51199 l 0.192,0.064 c 0.128,0.32 0.32,0.512 0.51199,0.704 l 0.128,0.192 0.064,0.064 0.064,0.128 0.128,0.128 h 0.064 l 0.064,0.064 c 0.192,0.31999 0.384,0.57599 0.576,0.70399 1.27999,-1.66399 2.62398,-2.23998 3.96797,-1.72799 l 0.064,0.128 c 0.128,0.128 0.32,0.32 0.384,0.576 0.064,0.51199 -0.064,0.89599 -0.384,1.15199 h -0.128 l -0.064,0.064 h -0.128 l -0.128,0.064 -0.064,0.128 c -0.38399,0.064 -0.70399,0.128 -0.95999,0.256 -2.30398,0.128 -3.64797,1.47199 -3.90397,3.96797 0,2.94398 1.27999,4.60796 3.77597,4.86396 z" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001" /> + id="path1359" + d="m -499.35721,381.40593 c 1.98398,0.128 3.64797,-0.512 4.99196,-2.04799 l -0.128,-0.192 -0.128,-0.12799 c -0.064,-0.128 -0.12799,-0.256 -0.25599,-0.32 l -0.128,-0.256 -0.128,-0.128 c -0.128,-0.192 -0.256,-0.384 -0.32,-0.448 l -0.064,-0.12799 -0.064,-0.128 -0.128,-0.064 -0.51199,-0.768 c -1.66399,1.85599 -3.00798,2.04799 -3.96797,0.576 0,-0.384 0.064,-0.704 0.19199,-1.02399 h 0.192 l 0.128,-0.128 h 0.128 l 0.064,-0.064 0.32,-0.064 0.63999,-0.192 c 1.47199,0 2.62398,-0.576 3.51998,-1.66399 0.76799,-1.47199 0.89599,-2.87998 0.44799,-4.35197 -0.38399,-1.27999 -1.08799,-2.11198 -1.98398,-2.49598 -2.94398,-1.08799 -5.43996,-0.448 -7.42395,1.98399 0.128,0.192 0.256,0.38399 0.384,0.51199 l 0.128,0.064 c 0.192,0.32 0.384,0.512 0.576,0.704 l 0.128,0.192 0.064,0.064 0.064,0.128 0.064,0.128 h 0.12799 l 0.064,0.064 c 0.192,0.31999 0.384,0.57599 0.576,0.70399 1.27999,-1.66399 2.62398,-2.23998 3.96797,-1.72799 v 0.128 c 0.192,0.128 0.32,0.32 0.448,0.576 0,0.51199 -0.128,0.89599 -0.384,1.15199 h -0.128 l -0.064,0.064 h -0.128 l -0.128,0.064 -0.064,0.128 c -0.384,0.064 -0.70399,0.128 -0.95999,0.256 -2.36798,0.128 -3.64797,1.47199 -3.90397,3.96797 0,2.94398 1.27999,4.60796 3.77597,4.86396 z" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001" /> + id="path1361" + d="m -488.28529,386.46189 c 0.064,-0.064 0.064,-0.128 0.064,-0.256 v -5.11996 h 0.192 0.44799 0.192 0.512 0.128 0.70399 0.32 0.256 v -3.13598 h -0.192 -0.384 -0.192 -0.51199 -0.192 -0.64 -0.128 -0.51199 V 371.102 l 0.128,-0.31999 c 0.51199,-0.64 1.27999,-0.704 2.36798,-0.192 l 0.064,-0.192 0.192,-0.83199 v -0.128 l 0.064,-0.448 0.128,-0.32 v -0.128 c 0.064,-0.25599 0.064,-0.44799 0.128,-0.57599 l 0.128,-0.512 c -1.66399,-0.63999 -3.19998,-0.76799 -4.67197,-0.384 -0.448,0.256 -0.76799,0.64 -1.08799,1.024 -0.192,0.38399 -0.32,0.76799 -0.384,1.08799 v 0.32 c 0,0.19199 -0.064,0.38399 0,0.51199 v 0.192 0.256 0.128 0.89599 0.64 0.192 0.89599 0.128 0.63999 0.64 0.192 0.89599 0.192 0.192 0.256 0.83199 0.128 0.63999 h -0.192 -0.128 -0.192 -0.63999 -0.128 -0.448 v 0.256 0.192 0.256 0.63999 0.192 0.832 0.192 0.57599 h 0.128 0.128 0.192 0.63999 0.32 0.32 v 0.89599 0.192 0.832 0.57599 0.192 0.83199 0.192 0.576 l 0.128,0.064 0.064,0.064 0.38399,0.064 c 0.128,0.128 0.256,0.128 0.384,0.192 l 0.512,0.19199 0.192,0.064 0.38399,0.192 c 0.32,0.064 0.64,0.192 0.832,0.256 z" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001" /> + id="path1363" + d="m -477.66137,381.21393 h 0.128 0.76799 v -3.64797 c -1.53599,0.25599 -2.62398,-0.384 -3.26397,-1.85599 v -0.128 c -0.128,-0.384 -0.192,-0.76799 -0.192,-1.15199 v -7.16795 h -0.64 -0.192 -0.19199 -0.512 -0.128 -0.70399 -0.064 -0.512 v 0.128 0.256 0.192 0.192 0.128 1.02399 0.32 1.02399 0.384 0.44799 0.384 0.384 1.02399 0.128 0.192 1.53599 0.38399 0.256 0.384 0.32 0.19199 0.32 0.192 0.89599 0.576 0.192 0.192 0.25599 0.192 0.832 0.128 0.63999 h 0.70399 0.128 0.192 0.512 0.192 0.63999 0.128 0.448 v -1.34399 c 0.70399,0.896 1.47199,1.47199 2.36798,1.59999 z" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001" /> + id="path1365" + d="m -470.49342,381.53393 c 1.79198,0.192 3.26397,-0.384 4.47996,-1.66399 v -0.128 c 0.128,-0.192 0.192,-0.32 0.256,-0.512 0.128,-0.25599 0.256,-0.51199 0.256,-0.70399 v -0.192 c 0.128,-0.32 0.128,-0.63999 0.128,-0.83199 v -4.92797 c 0,-0.83199 0,-1.53598 0.128,-2.11198 0.31999,-0.384 0.63999,-0.704 1.08799,-0.768 l -0.064,-0.19199 -0.128,-0.256 -0.064,-0.192 -0.064,-0.128 v -0.128 l -0.064,-0.192 -0.192,-0.51199 -0.064,-0.128 -0.064,-0.128 v -0.192 l -0.064,-0.064 -0.25599,-0.76799 c -1.21599,0 -2.04799,0.44799 -2.62398,1.40799 -1.152,-1.40799 -2.55999,-1.79199 -4.22397,-1.088 -1.53599,0.576 -2.43198,1.72799 -2.68798,3.58398 0.064,2.75198 1.02399,4.28796 3.00798,4.73596 0.128,0.064 0.19199,0.128 0.31999,0.192 h 0.128 c 0.064,0 0.064,0 0.128,0 l 0.128,0.064 0.70399,0.128 0.32,0.064 0.128,0.064 0.63999,0.064 c 0.384,0.064 0.64,0.064 0.896,0.064 0.064,1.85599 -0.704,2.49598 -2.43198,1.85599 h -0.128 l -0.32,-0.064 -0.256,-0.128 -0.12799,-0.064 -0.384,-0.192 c -0.192,-0.128 -0.384,-0.256 -0.576,-0.32 -0.192,-0.256 -0.448,-0.384 -0.63999,-0.448 l -0.256,0.64 -0.128,0.064 v 0.128 l -0.128,0.128 v 0.12799 c -0.192,0.256 -0.32,0.512 -0.384,0.704 -0.064,0.128 -0.128,0.256 -0.192,0.384 -0.128,0.25599 -0.25599,0.44799 -0.31999,0.70399 h 0.128 l 0.064,0.128 0.12799,0.064 c 0.128,0.128 0.32,0.256 0.448,0.32 0.128,0.128 0.192,0.192 0.32,0.192 l 0.064,0.064 c 0.256,0.12799 0.448,0.25599 0.63999,0.31999 l 0.064,0.128 h 0.128 c 0.128,0.064 0.256,0.128 0.32,0.192 h 0.128 c 0.192,0.128 0.32,0.192 0.512,0.192 0.31999,0.192 0.70399,0.256 1.02399,0.32 z m 1.85598,-8.25594 h -0.128 c -0.128,-0.064 -0.256,-0.128 -0.384,-0.128 h -0.128 c 0,-0.064 -0.064,-0.064 -0.064,-0.064 l -0.19199,-0.064 h -0.128 -0.128 l -0.256,-0.064 c -0.064,-0.064 -0.064,-0.064 -0.128,-0.064 l -0.128,-0.064 -0.128,-0.064 c -0.38399,-0.064 -0.63999,-0.192 -0.89599,-0.32 -0.25599,-0.448 -0.31999,-0.95999 -0.192,-1.47199 0.64,-1.15199 1.59999,-1.34399 2.81598,-0.57599 l 0.32,0.57599 0.064,0.192 v 0.192 0.192 0.256 0.128 0.19199 0.192 0.96 h -0.12799 z" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001" /> + id="path1367" + d="m -458.65351,381.53393 c 1.79199,0.192 3.26398,-0.384 4.47996,-1.66399 l 0.064,-0.128 c 0.064,-0.192 0.192,-0.32 0.192,-0.512 0.128,-0.25599 0.256,-0.51199 0.32,-0.70399 v -0.192 c 0.064,-0.32 0.064,-0.63999 0.064,-0.83199 v -4.92797 c 0,-0.83199 0,-1.53598 0.128,-2.11198 0.31999,-0.384 0.63999,-0.704 1.08799,-0.768 l -0.064,-0.19199 -0.128,-0.256 -0.064,-0.192 v -0.128 l -0.064,-0.128 -0.064,-0.192 -0.192,-0.51199 -0.064,-0.128 -0.064,-0.128 v -0.192 l -0.064,-0.064 -0.25599,-0.76799 c -1.15199,0 -2.04798,0.44799 -2.62398,1.40799 -1.15199,-1.40799 -2.55999,-1.79199 -4.22397,-1.088 -1.47199,0.576 -2.36798,1.72799 -2.62398,3.58398 0,2.75198 0.96,4.28796 2.94398,4.73596 0.128,0.064 0.25599,0.128 0.31999,0.192 h 0.128 c 0.064,0 0.064,0 0.128,0 l 0.128,0.064 0.70399,0.128 0.32,0.064 0.128,0.064 0.64,0.064 c 0.384,0.064 0.64,0.064 0.896,0.064 0.064,1.85599 -0.704,2.49598 -2.43199,1.85599 h -0.128 l -0.32,-0.064 -0.256,-0.128 -0.12799,-0.064 -0.384,-0.192 c -0.192,-0.128 -0.384,-0.256 -0.576,-0.32 -0.19199,-0.256 -0.38399,-0.384 -0.63999,-0.448 l -0.256,0.64 -0.128,0.064 v 0.128 l -0.064,0.128 -0.064,0.128 c -0.192,0.25599 -0.256,0.51199 -0.32,0.70399 -0.128,0.128 -0.192,0.256 -0.256,0.384 -0.128,0.256 -0.256,0.44799 -0.256,0.70399 h 0.064 l 0.128,0.128 0.064,0.064 c 0.192,0.128 0.32,0.256 0.448,0.32 0.128,0.128 0.19199,0.192 0.31999,0.192 l 0.064,0.064 c 0.256,0.128 0.448,0.25599 0.64,0.31999 l 0.064,0.128 h 0.12799 c 0.128,0.064 0.256,0.128 0.32,0.192 h 0.128 c 0.192,0.128 0.32,0.192 0.512,0.192 0.38399,0.192 0.70399,0.256 1.02399,0.32 z m 1.85599,-8.25594 h -0.064 c -0.192,-0.064 -0.32,-0.128 -0.448,-0.128 h -0.064 c -0.064,-0.064 -0.128,-0.064 -0.128,-0.064 l -0.192,-0.064 h -0.128 -0.128 l -0.256,-0.064 c 0,-0.064 -0.064,-0.064 -0.128,-0.064 l -0.128,-0.064 -0.128,-0.064 c -0.38399,-0.064 -0.63999,-0.192 -0.83199,-0.32 -0.31999,-0.448 -0.38399,-0.95999 -0.256,-1.47199 0.64,-1.15199 1.59999,-1.34399 2.81599,-0.57599 l 0.32,0.57599 0.064,0.192 v 0.192 0.192 0.256 0.128 0.19199 0.192 0.96 h -0.128 z" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001" /> + id="path1369" + d="m -446.5576,386.46189 c 0.064,-0.064 0.128,-0.128 0.128,-0.256 v -5.11996 h 0.128 0.448 0.192 0.51199 0.128 0.70399 0.32 0.256 v -3.13598 h -0.128 -0.448 -0.192 -0.51199 -0.192 -0.63999 -0.128 -0.448 V 371.102 l 0.064,-0.31999 c 0.512,-0.64 1.27999,-0.704 2.36798,-0.192 l 0.064,-0.192 0.192,-0.83199 0.064,-0.128 v -0.448 l 0.128,-0.32 v -0.128 c 0.064,-0.25599 0.12799,-0.44799 0.12799,-0.57599 l 0.128,-0.512 c -1.66398,-0.63999 -3.19997,-0.76799 -4.67196,-0.384 -0.448,0.256 -0.768,0.64 -1.02399,1.024 -0.192,0.38399 -0.32,0.76799 -0.448,1.08799 v 0.32 c 0,0.19199 0,0.38399 0,0.51199 v 0.192 0.256 0.128 0.89599 0.64 0.192 0.89599 0.128 0.63999 0.64 0.192 0.89599 0.192 0.192 0.256 0.83199 0.128 0.63999 h -0.192 -0.128 -0.192 -0.63999 -0.128 -0.44799 v 0.256 0.192 0.256 0.63999 0.192 0.832 0.192 0.57599 h 0.12799 0.192 0.128 0.704 0.31999 0.256 v 0.89599 0.192 0.832 0.57599 0.192 0.83199 0.192 0.576 l 0.128,0.064 0.128,0.064 0.31999,0.064 c 0.128,0.128 0.256,0.128 0.384,0.192 l 0.512,0.19199 0.19199,0.064 0.384,0.192 c 0.384,0.064 0.64,0.192 0.832,0.256 z" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001" /> + id="path9913" + d="m -556.49212,208.85498 c -2.11924,1.75815 -3.7258,4.82187 -3.7258,7.35927 v 9.66249 l 108.05906,180.41302 11.7495,-0.2922 c 5.80007,0.12455 3.92214,-4.94793 4.46526,-10.56004 l 0.096,-10.24937 -102.88427,-176.52825 h -14.15708" + style="fill:#ed1c24;stroke-width:1.04074001" /> - - - - - - - + + + + + + + + + + + - \ No newline at end of file + + diff --git a/assets/themes/notes/license_info.json b/assets/themes/notes/license_info.json new file mode 100644 index 0000000000..d186e73a24 --- /dev/null +++ b/assets/themes/notes/license_info.json @@ -0,0 +1,10 @@ +[ + { + "path": "logo.svg", + "license": "CC0", + "authors": [ + "Pieter Vander Vennet" + ], + "sources": [] + } +] \ No newline at end of file diff --git a/assets/themes/notes/logo.svg b/assets/themes/notes/logo.svg new file mode 100644 index 0000000000..8c7ab6947d --- /dev/null +++ b/assets/themes/notes/logo.svg @@ -0,0 +1,48 @@ + + + + + + + + + diff --git a/assets/themes/notes/notes.json b/assets/themes/notes/notes.json index b92bbbadc2..a91f9eab90 100644 --- a/assets/themes/notes/notes.json +++ b/assets/themes/notes/notes.json @@ -1,16 +1,19 @@ { "id": "notes", - "language": [ - "en" - ], "maintainer": "MapComplete", "startLat": 0, "startLon": 0, "startZoom": 0, - "title": "Notes on OpenStreetMap", + "title": { + "en": "Notes on OpenStreetMap", + "hu": "Jegyzetek az OpenStreetMapen" + }, "version": "0.1", - "description": "A note is a pin on the map with some text to indicate something wrong.

Make sure to checkout the filter view to search for users and text.", - "icon": "./assets/svg/resolved.svg", + "description": { + "en": "A note is a pin on the map with some text to indicate something wrong.

Make sure to checkout the filter view to search for users and text.", + "hu": "A jegyzet egy gombostű a térképen egy szöveggel, amely azt jelzi, hogy valami nem stimmel.

Felhasználók vagy szövegek kereséséhez nézd meg a szűrő nézetet." + }, + "icon": "./assets/themes/notes/logo.svg", "clustering": false, "enableDownload": true, "layers": [ diff --git a/assets/themes/observation_towers/observation_towers.json b/assets/themes/observation_towers/observation_towers.json index 37bc49f3d8..5a76cb7536 100644 --- a/assets/themes/observation_towers/observation_towers.json +++ b/assets/themes/observation_towers/observation_towers.json @@ -6,30 +6,25 @@ "de": "Aussichtstürme", "it": "Torri di osservazione", "ru": "Смотровые башни", - "zh_Hant": "觀景塔" + "zh_Hant": "觀景塔", + "hu": "Kilátótornyok" }, "shortDescription": { "en": "Publicly accessible towers to enjoy the view", "nl": "Publieke uitkijktorens om van het panorama te genieten", "de": "Öffentlich zugänglicher Aussichtsturm", "it": "Torri pubblicamente accessibili per godere della vista", - "zh_Hant": "開發可及能觀景的高塔" + "zh_Hant": "開發可及能觀景的高塔", + "hu": "Nyilvános tornyok, hogy gyönyörködhessünk a kilátásban" }, "description": { "nl": "Publieke uitkijktorens om van het panorama te genieten", "en": "Publicly accessible towers to enjoy the view", "de": "Öffentlich zugänglicher Aussichtsturm", "it": "Torri pubblicamente accessibili per godere della vista", - "zh_Hant": "開放可及能觀景的高塔" + "zh_Hant": "開放可及能觀景的高塔", + "hu": "Nyilvános tornyok, hogy gyönyörködhessünk a kilátásban" }, - "language": [ - "en", - "nl", - "de", - "it", - "ru", - "zh_Hant" - ], "maintainer": "", "icon": "./assets/layers/observation_tower/Tower_observation.svg", "version": "0", diff --git a/assets/themes/openwindpowermap/license_info.json b/assets/themes/openwindpowermap/license_info.json index d331532473..d7986e80bd 100644 --- a/assets/themes/openwindpowermap/license_info.json +++ b/assets/themes/openwindpowermap/license_info.json @@ -1,4 +1,14 @@ [ + { + "path": "logo.svg", + "license": "CC0", + "authors": [ + "Iconathon" + ], + "sources": [ + "https://commons.wikimedia.org/wiki/File:Wind_Turbine_(2076)_-_The_Noun_Project.svg" + ] + }, { "path": "wind_turbine.svg", "license": "CC0", diff --git a/assets/themes/openwindpowermap/logo.svg b/assets/themes/openwindpowermap/logo.svg new file mode 100644 index 0000000000..5ed9f39b85 --- /dev/null +++ b/assets/themes/openwindpowermap/logo.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + diff --git a/assets/themes/openwindpowermap/openwindpowermap.json b/assets/themes/openwindpowermap/openwindpowermap.json index 51d5ff8b08..7c1d079784 100644 --- a/assets/themes/openwindpowermap/openwindpowermap.json +++ b/assets/themes/openwindpowermap/openwindpowermap.json @@ -6,28 +6,20 @@ "de": "Freie Windenergie-Karte", "it": "OpenWindPowerMap", "ru": "Открытая карта ветроэнергетики", - "zh_Hant": "開放風力地圖" + "zh_Hant": "開放風力地圖", + "id": "OpenWindPowerMap", + "hu": "OpenWindPowerMap" }, "maintainer": "Seppe Santens", - "icon": "./assets/themes/openwindpowermap/wind_turbine.svg", + "icon": "./assets/themes/openwindpowermap/logo.svg", "description": { "en": "A map for showing and editing wind turbines.", "fr": "Une carte indiquant les éoliennes et permettant leur édition.", "de": "Eine Karte zum Anzeigen und Bearbeiten von Windkraftanlagen.", "it": "Una cartina per la visione e la modifica delle turbine eoliche.", - "zh_Hant": "顯示與編輯風機的地圖。" + "zh_Hant": "顯示與編輯風機的地圖。", + "hu": "Szélerőművek megjelenítésére és szerkesztésére szolgáló térkép." }, - "language": [ - "en", - "fr", - "de", - "it", - "ru", - "zh_Hant", - "nl", - "eo", - "nb_NO" - ], "version": "2021-06-18", "startLat": 50.52, "startLon": 4.643, @@ -44,7 +36,8 @@ "fr": "Éolienne", "de": "Windrad", "it": "pala eolica", - "zh_Hant": "風機" + "zh_Hant": "風機", + "hu": "Szélerőmű" }, "source": { "osmTags": "generator:source=wind" @@ -57,7 +50,9 @@ "fr": "éolienne", "de": "Windrad", "it": "pala eolica", - "zh_Hant": "風機" + "zh_Hant": "風機", + "id": "turbin angin", + "hu": "szélerőmű" }, "mappings": [ { @@ -68,7 +63,8 @@ "eo": "{name}", "it": "{name}", "ru": "{name}", - "zh_Hant": "{name}" + "zh_Hant": "{name}", + "id": "{name}" } } ] @@ -80,13 +76,17 @@ "en": "The power output of this wind turbine is {generator:output:electricity}.", "fr": "La puissance générée par cette éolienne est de {generator:output:electricity}.", "it": "La potenza generata da questa pala eolica è {generator:output:electricity}.", - "zh_Hant": "這個風機的電力輸出是 {generator:output:electricity}。" + "zh_Hant": "這個風機的電力輸出是 {generator:output:electricity}。", + "id": "Output daya dari turbin angin ini adalah {generator:output:electricity}.", + "hu": "A szélerőmű teljesítménye: {generator:output:electricity}." }, "question": { "en": "What is the power output of this wind turbine? (e.g. 2.3 MW)", "fr": "Quel est la puissance générée par cette éolienne ?", "it": "Quant’è la potenza generata da questa pala eolica? (ad es. 2.3 MW)", - "zh_Hant": "這個風機的電力輸出是多少?(例如 2.3 MW)" + "zh_Hant": "這個風機的電力輸出是多少?(例如 2.3 MW)", + "id": "Berapa output daya dari turbin angin ini? (misalnya 2,3 MW)", + "hu": "Mekkora a teljesítménye ennek a szélturbinának? (pl. 2.3 MW)" }, "freeform": { "key": "generator:output:electricity", @@ -99,13 +99,16 @@ "en": "This wind turbine is operated by {operator}.", "fr": "Cette éolienne est opérée par {operator}.", "it": "Questa pala eolica è gestita da {operator}.", - "zh_Hant": "這個風機營業商是 {operator}。" + "zh_Hant": "這個風機營業商是 {operator}。", + "id": "Turbin angin ini dioperasikan oleh {operator}.", + "hu": "Ennek a szélerőműnek az üzemeltetője: {operator}." }, "question": { "en": "Who operates this wind turbine?", "fr": "Qui est l’exploitant de cette éolienne ?", "it": "Chi gestisce questa pala eolica?", - "zh_Hant": "這個風機營業商是?" + "zh_Hant": "這個風機營業商是?", + "hu": "Ki üzemelteti ezt a szélturbinát?" }, "freeform": { "key": "operator" @@ -117,13 +120,15 @@ "en": "The total height (including rotor radius) of this wind turbine is {height} metres.", "fr": "La hauteur totale, incluant les pales, est de {height} mètres.", "it": "L’altezza totale (raggio del rotore incluso) di questa pala eolica è di {height} metri.", - "zh_Hant": "這風機的總高度 (包括風葉直徑) 是 {height} 公尺。" + "zh_Hant": "這風機的總高度 (包括風葉直徑) 是 {height} 公尺。", + "hu": "A szélerőmű teljes (rotor sugarával együtt számított) magassága: {height} méter." }, "question": { "en": "What is the total height of this wind turbine (including rotor radius), in metres?", "fr": "Quelle est la hauteur totale de l’éolienne en mètres, pales incluses ?", "it": "Qual è l’altezza (in metri e raggio del rotore incluso) di questa pala eolica?", - "zh_Hant": "這個風機的總高度是多少 (包括風葉大小) 公尺?" + "zh_Hant": "這個風機的總高度是多少 (包括風葉大小) 公尺?", + "hu": "Hány méter a szélerőmű teljes magassága (a rotor sugarával együtt)?" }, "freeform": { "key": "height", @@ -136,13 +141,15 @@ "en": "The rotor diameter of this wind turbine is {rotor:diameter} metres.", "fr": "Le diamètre du rotor est de {rotor:diameter} mètres.", "it": "Il diametro del rotore di questa pala eolica è di {rotor:diameter} metri.", - "zh_Hant": "這個風力渦輪機的風葉直徑是 {rotor:diameter} 公尺。" + "zh_Hant": "這個風力渦輪機的風葉直徑是 {rotor:diameter} 公尺。", + "hu": "A szélturbina rotorátmérője: {rotor:diameter} méter." }, "question": { "en": "What is the rotor diameter of this wind turbine, in metres?", "fr": "Quel est le diamètre du rotor en mètres ?", "it": "Qual è il diametro (in metri) del rotore di questa pala eolica?", - "zh_Hant": "這個風力渦輪機的風葉直徑是多少公尺?" + "zh_Hant": "這個風力渦輪機的風葉直徑是多少公尺?", + "hu": "Hány méter a rotorátmérője ennek a szélturbinának?" }, "freeform": { "key": "rotor:diameter", @@ -155,13 +162,17 @@ "en": "This wind turbine went into operation on/in {start_date}.", "fr": "L’éolienne est active depuis {start_date}.", "it": "Questa pala eolica è entrata in funzione in data {start_date}.", - "zh_Hant": "這個風機從 {start_date} 開始運轉。" + "zh_Hant": "這個風機從 {start_date} 開始運轉。", + "id": "Turbin angin ini mulai beroperasi pada/dalam {start_date}.", + "hu": "A szélerőmű üzembe helyezése: {start_date}." }, "question": { "en": "When did this wind turbine go into operation?", "fr": "Depuis quand l’éolienne est-elle en fonctionnement ?", "it": "Quando è entrata in funzione questa pala eolica?", - "zh_Hant": "這個風機何時開始營運?" + "zh_Hant": "這個風機何時開始營運?", + "id": "Kapan turbin angin ini mulai beroperasi?", + "hu": "Mikor helyezték üzembe ezt a szélerőművet?" }, "freeform": { "key": "start_date", @@ -182,7 +193,8 @@ "fr": "Éolienne", "de": "Windrad", "it": "pala eolica", - "zh_Hant": "風機" + "zh_Hant": "風機", + "hu": "Szélerőmű" } } ], @@ -206,7 +218,9 @@ "eo": " megavatoj", "it": " megawatt", "ru": " мегаватт", - "zh_Hant": " 百萬瓦" + "zh_Hant": " 百萬瓦", + "id": " megawat", + "hu": " megawatt" } }, { @@ -224,7 +238,9 @@ "it": " kilowatt", "nb_NO": " kilowatt", "ru": " киловатт", - "zh_Hant": " 千瓦" + "zh_Hant": " 千瓦", + "id": " kilowat", + "hu": " kilowatt" } }, { @@ -241,7 +257,9 @@ "eo": " vatoj", "it": " watt", "ru": " ватт", - "zh_Hant": " 瓦" + "zh_Hant": " 瓦", + "id": " watt", + "hu": " watt" } }, { @@ -258,7 +276,9 @@ "eo": " gigavatoj", "it": " gigawatt", "ru": " гигаватт", - "zh_Hant": " 千兆瓦" + "zh_Hant": " 千兆瓦", + "id": " gigawatt", + "hu": " gigawatt" } } ], @@ -283,7 +303,9 @@ "eo": " metro", "it": " metri", "ru": " метр", - "zh_Hant": " 公尺" + "zh_Hant": " 公尺", + "id": " meter", + "hu": " méter" } } ] diff --git a/assets/themes/parkings/parkings.json b/assets/themes/parkings/parkings.json index 1c5d9801c2..34b8293cce 100644 --- a/assets/themes/parkings/parkings.json +++ b/assets/themes/parkings/parkings.json @@ -7,7 +7,9 @@ "it": "Parcheggio", "nb_NO": "Parkering", "ru": "Парковка", - "zh_Hant": "停車場" + "zh_Hant": "停車場", + "id": "Tempat parkir", + "hu": "Parkolás" }, "shortDescription": { "nl": "Deze kaart toont verschillende parkeerplekken", @@ -15,24 +17,19 @@ "de": "Diese Karte zeigt Parkplätze", "it": "Questa cartina mostra diversi posti dove parcheggiare", "nb_NO": "Dette kartet viser forskjellige parkeringsplasser", - "zh_Hant": "這地圖顯示不同的停車空間" + "zh_Hant": "這地圖顯示不同的停車空間", + "id": "Peta ini menunjukkan tempat parkir yang berbeda", + "hu": "Ez a térkép különböző parkolókat jelenít meg" }, "description": { "nl": "Deze kaart toont verschillende parkeerplekken", "en": "This map shows different parking spots", "de": "Diese Karte zeigt Parkplätze", "it": "Questa cartina mostra diversi posti dove parcheggiare", - "zh_Hant": "這地圖顯示不同的停車空間" + "zh_Hant": "這地圖顯示不同的停車空間", + "id": "Peta ini menunjukkan tempat parkir yang berbeda", + "hu": "Ez a térkép különböző parkolókat jelenít meg" }, - "language": [ - "nl", - "en", - "de", - "it", - "nb_NO", - "ru", - "zh_Hant" - ], "maintainer": "", "icon": "./assets/themes/parkings/parkings.svg", "version": "0", @@ -40,7 +37,6 @@ "startLon": 3.22435, "startZoom": 12, "widenFactor": 1.2, - "socialImage": "", "layers": [ "parking" ] diff --git a/assets/themes/personal/personal.json b/assets/themes/personal/personal.json index b5474cda13..c9e7d8d571 100644 --- a/assets/themes/personal/personal.json +++ b/assets/themes/personal/personal.json @@ -11,7 +11,8 @@ "ja": "個人的なテーマ", "zh_Hant": "個人化主題", "it": "Tema personalizzato", - "nb_NO": "Personlig tema" + "nb_NO": "Personlig tema", + "id": "Tema pribadi" }, "description": { "en": "Create a personal theme based on all the available layers of all themes. In order to show some data, open layer selection", @@ -26,20 +27,6 @@ "ru": "Создать персональную тему на основе доступных слоёв тем. Чтобы отобразить некоторые данные, откройте выбор слоя", "it": "Crea un tema personale basato sui livelli disponibili per tutti i temi. Per mostrare dei dati, apri selezione livello" }, - "language": [ - "en", - "nl", - "es", - "ca", - "gl", - "fr", - "de", - "ja", - "zh_Hant", - "it", - "nb_NO", - "ru" - ], "maintainer": "MapComplete", "icon": "./assets/svg/addSmall.svg", "clustering": { @@ -53,7 +40,9 @@ "#note": "The 'overpassMaxZoom' should be exactly the same as or less then the overrideAll", "overpassMaxZoom": 15, "overrideAll": { - "minZoom": 16 + "minZoom": 16, + "syncSelection": "theme", + "shownByDefault": false }, "layers": [] } \ No newline at end of file diff --git a/assets/themes/play_forests/play_forests.json b/assets/themes/play_forests/play_forests.json index 96aedcf5db..7c6950912c 100644 --- a/assets/themes/play_forests/play_forests.json +++ b/assets/themes/play_forests/play_forests.json @@ -9,9 +9,6 @@ "description": { "nl": "Een speelbos is een zone in een bos die vrij toegankelijk is voor spelende kinderen. Deze wordt in bossen van het Agentschap Natuur en bos altijd aangeduid met het overeenkomstige bord." }, - "language": [ - "nl" - ], "maintainer": "", "icon": "./assets/layers/play_forest/icon.svg", "version": "0", diff --git a/assets/themes/playgrounds/playgrounds.json b/assets/themes/playgrounds/playgrounds.json index fcf3b22cc3..696b7ff1b9 100644 --- a/assets/themes/playgrounds/playgrounds.json +++ b/assets/themes/playgrounds/playgrounds.json @@ -9,7 +9,9 @@ "ru": "Игровые площадки", "de": "Spielpläzte", "it": "Parchi giochi", - "nb_NO": "Lekeplasser" + "nb_NO": "Lekeplasser", + "id": "Taman bermain", + "hu": "Játszóterek" }, "shortDescription": { "nl": "Een kaart met speeltuinen", @@ -20,7 +22,9 @@ "ru": "Карта игровых площадок", "de": "Eine Karte mit Spielplätzen", "it": "Una cartina dei parchi giochi", - "nb_NO": "Et kart med lekeplasser" + "nb_NO": "Et kart med lekeplasser", + "id": "Peta dengan taman bermain", + "hu": "Egy térkép játszóterekkel" }, "description": { "nl": "Op deze kaart vind je speeltuinen en kan je zelf meer informatie en foto's toevoegen", @@ -30,19 +34,10 @@ "zh_Hant": "在這份地圖上,你可以尋找遊樂場以及其相關資訊", "ru": "На этой карте можно найти игровые площадки и добавить дополнительную информацию", "de": "Auf dieser Karte finden Sie Spielplätze und können weitere Informationen hinzufügen", - "it": "In questa cartina vengono mostrati i parchi giochi a cui è possibile aggiungere dettagli" + "it": "In questa cartina vengono mostrati i parchi giochi a cui è possibile aggiungere dettagli", + "id": "Di peta ini, Anda menemukan taman bermain dan dapat menambahkan lebih banyak informasi", + "hu": "Ezen a térképen játszótereket találsz, és további információkat adhatsz hozzájuk" }, - "language": [ - "nl", - "en", - "fr", - "ja", - "zh_Hant", - "ru", - "de", - "it", - "nb_NO" - ], "maintainer": "", "icon": "./assets/themes/playgrounds/playground.svg", "version": "0", diff --git a/assets/themes/postal_codes/postal_codes.json b/assets/themes/postal_codes/postal_codes.json index ba9fff50ea..6e14f97eca 100644 --- a/assets/themes/postal_codes/postal_codes.json +++ b/assets/themes/postal_codes/postal_codes.json @@ -1,17 +1,20 @@ { "id": "postal_codes", "title": { - "en": "Postal codes" + "en": "Postal codes", + "id": "Kode pos", + "hu": "Irányítószámok" }, "shortDescription": { - "en": "Postal codes" + "en": "Postal codes", + "id": "Kode pos", + "hu": "Irányítószámok" }, "description": { - "en": "Postal codes" + "en": "Postal codes", + "id": "Kode pos", + "hu": "Irányítószámok" }, - "language": [ - "en" - ], "maintainer": "", "icon": "./assets/themes/postal_codes/townhall.svg", "version": "0", @@ -27,12 +30,16 @@ { "id": "postal_code_boundary", "name": { - "en": "postal codes" + "en": "postal codes", + "id": "kode pos", + "hu": "irányítószámok" }, "minzoom": 8, "title": { "render": { - "en": "Postal code {postal_code}" + "en": "Postal code {postal_code}", + "id": "Kode pos {postal_code}", + "hu": "Irányítószám: {postal_code}" } }, "description": {}, @@ -40,7 +47,9 @@ { "id": "postal_code", "render": { - "en": "The postal code is {postal_code}" + "en": "The postal code is {postal_code}", + "id": "Kode posnya adalah {postal_code}", + "hu": "Irányítószám: {postal_code}" } } ], @@ -107,12 +116,16 @@ { "id": "town_hall", "name": { - "en": "town halls" + "en": "town halls", + "id": "balai kota", + "hu": "polgármesteri hivatalok" }, "minzoom": 12, "title": { "render": { - "en": "Town hall {name}" + "en": "Town hall {name}", + "id": "Balai kota {name}", + "hu": "{name} városháza" } }, "calculatedTags": [ diff --git a/assets/themes/postboxes/postboxes.json b/assets/themes/postboxes/postboxes.json index 979a72efaa..4cb850b8cb 100644 --- a/assets/themes/postboxes/postboxes.json +++ b/assets/themes/postboxes/postboxes.json @@ -5,27 +5,22 @@ "de": "Karte mit Briefkästen und Poststellen", "nb_NO": "Postboks og postkontor-kart", "it": "Buche delle lettere e uffici postali", - "zh_Hant": "郵筒與郵局地圖" + "zh_Hant": "郵筒與郵局地圖", + "hu": "Posta- és postaládatérkép" }, "shortDescription": { "en": "A map showing postboxes and post offices", "de": "Eine Karte die Briefkästen und Poststellen anzeigt", "it": "Una cartina che mostra le buche delle lettere e gli uffici postali", - "zh_Hant": "顯示郵筒與郵局的地圖" + "zh_Hant": "顯示郵筒與郵局的地圖", + "hu": "Posták és postaládák térképe" }, "description": { "en": "On this map you can find and add data of post offices and post boxes. You can use this map to find where you can mail your next postcard! :)
Spotted an error or is a post box missing? You can edit this map with a free OpenStreetMap account. ", "it": "In questa cartina puoi veder e modificare gli uffici postali e le buche delle lettere. Puoi usare questa cartina per trovare dove imbucare la tua prossima cartolina! :)
Hai trovato un errore o una buca delle lettere mancante? Puoi modificare questa cartina con un account gratuito su OpenStreetMap. ", - "zh_Hant": "在這份地圖你能找到與新增有關郵局與郵筒的資料,你可以用這份地圖找到寄送您下張明信片的地方!:)
發現錯誤或是有郵筒遺漏嗎?你可以用免費的開放街圖帳號來編輯。 " + "zh_Hant": "在這份地圖你能找到與新增有關郵局與郵筒的資料,你可以用這份地圖找到寄送您下張明信片的地方!:)
發現錯誤或是有郵筒遺漏嗎?你可以用免費的開放街圖帳號來編輯。 ", + "hu": "Ezen a térképen postahivatalok és postaládák adatait találod és egészítheted ki. Utánanézhetsz, hogy hol adhatod fel a következő képeslapodat! :)
Hibát találtál, vagy hiányzik egy postaláda? Ezt a térképet mindössze egy ingyenes OpenStreetMap-fiókkal szerkesztheted. " }, - "language": [ - "en", - "de", - "nb_NO", - "it", - "zh_Hant", - "ru" - ], "maintainer": "nicolelaine", "icon": "./assets/themes/postboxes/postbox.svg", "version": "0", @@ -45,7 +40,9 @@ "en": "Postboxes", "de": "Brieflästen", "ru": "Почтовые ящики", - "zh_Hant": "郵筒" + "zh_Hant": "郵筒", + "id": "Kotak pos", + "hu": "Postaládák" }, "minzoom": 12, "source": { @@ -56,13 +53,17 @@ "en": "Postbox", "de": "Briefkasten", "ru": "Почтовый ящик", - "zh_Hant": "郵筒" + "zh_Hant": "郵筒", + "id": "Kotak pos", + "hu": "Postaláda" } }, "description": { "en": "The layer showing postboxes.", "de": "Die Ebene zeigt Briefkästen.", - "zh_Hant": "這圖層顯示郵筒。" + "zh_Hant": "這圖層顯示郵筒。", + "id": "Layer yang memperlihatkan kotak pos.", + "hu": "A postaládákat megjelenítő réteg." }, "tagRenderings": [ "images", @@ -80,7 +81,9 @@ "en": "postbox", "de": "Briefkasten", "ru": "почтовый ящик", - "zh_Hant": "郵筒" + "zh_Hant": "郵筒", + "id": "kotak pos", + "hu": "postaláda" } } ], @@ -121,7 +124,9 @@ "en": "Post offices", "de": "Poststellen", "ru": "Почтовые отделения", - "zh_Hant": "郵局" + "zh_Hant": "郵局", + "id": "Kantor pos", + "hu": "Posták" }, "minzoom": 12, "source": { @@ -132,13 +137,17 @@ "en": "Post Office", "de": "Poststelle", "ru": "Почтовое отделение", - "zh_Hant": "郵局" + "zh_Hant": "郵局", + "id": "Kantor Pos", + "hu": "Posta" } }, "description": { "en": "A layer showing post offices.", "de": "Eine Ebene mit Postämtern.", - "zh_Hant": "圖層顯示郵局。" + "zh_Hant": "圖層顯示郵局。", + "id": "Layer yang menunjukkan kantor pos.", + "hu": "Postákat megjelenítő réteg." }, "tagRenderings": [ "images", @@ -150,7 +159,9 @@ "render": { "en": "Opening Hours: {opening_hours_table()}", "ru": "Часы работы: {opening_hours_table()}", - "zh_Hant": "開放時間:{opening_hours_table()}" + "zh_Hant": "開放時間:{opening_hours_table()}", + "id": "Jam Buka: {opening_hours_table()}", + "hu": "Nyitva tartás: {opening_hours_table()}" }, "freeform": { "key": "opening_hours", @@ -158,7 +169,9 @@ }, "question": { "en": "What are the opening hours for this post office?", - "zh_Hant": "這間郵局的開放時間是?" + "zh_Hant": "這間郵局的開放時間是?", + "id": "Jam berapa kantor pos ini buka?", + "hu": "Mikor van nyitva ez a posta?" }, "mappings": [ { @@ -166,7 +179,9 @@ "then": { "en": "24/7 opened (including holidays)", "de": "durchgehend geöffnet (auch an Feiertagen)", - "zh_Hant": "24/7 開放 (包括假日)" + "zh_Hant": "24/7 開放 (包括假日)", + "id": "Buka 24 jam (termasuk hari libur)", + "hu": "Éjjel-nappal nyitva (munkaszüneti napokon is)" } } ], @@ -182,7 +197,9 @@ "en": "Post Office", "de": "Poststelle", "ru": "Почтовое отделение", - "zh_Hant": "郵局" + "zh_Hant": "郵局", + "id": "Kantor Pos", + "hu": "Posta" } } ], @@ -194,7 +211,9 @@ "question": { "en": "Currently open", "de": "Aktuell geöffnet", - "zh_Hant": "目前開放" + "zh_Hant": "目前開放", + "id": "Saat ini buka", + "hu": "Most nyitva" }, "osmTags": "_isOpen=yes" } diff --git a/assets/themes/shops/shops.json b/assets/themes/shops/shops.json index 03c1e0ffae..6f07ffdf2c 100644 --- a/assets/themes/shops/shops.json +++ b/assets/themes/shops/shops.json @@ -8,14 +8,16 @@ "ru": "Открыть карту магазинов", "de": "Freie Geschäftskarte", "it": "Mappa dei negozi", - "nb_NO": "Kart over åpne butikker" + "nb_NO": "Kart over åpne butikker", + "hu": "Bolttérkép" }, "shortDescription": { "en": "An editable map with basic shop information", "fr": "Carte modifiable affichant les informations de base des magasins", "ja": "基本的なショップ情報を含む編集可能なマップ", "de": "Eine bearbeitbare Karte mit grundlegenden Geschäftsinformationen", - "it": "Una cartina modificabile con informazioni di base dei negozi" + "it": "Una cartina modificabile con informazioni di base dei negozi", + "hu": "Szerkeszthető térkép üzletek alapvető adataival" }, "description": { "en": "On this map, one can mark basic information about shops, add opening hours and phone numbers", @@ -23,18 +25,9 @@ "ja": "この地図には店の基本情報を記入したり営業時間や電話番号を追加することができます", "zh_Hant": "這份地圖上,你可以標記商家基本資訊,新增營業時間以及聯絡電話", "de": "Auf dieser Karte kann man grundlegende Informationen über Geschäfte markieren, Öffnungszeiten und Telefonnummern hinzufügen", - "it": "In questa cartina è possibile aggiungere informazioni di base di un negozio, orari di apertura e numeri di telefono" + "it": "In questa cartina è possibile aggiungere informazioni di base di un negozio, orari di apertura e numeri di telefono", + "hu": "Ezen a térképen az üzletek alapvető adatait lehet megadni, például nyitvatartási időt és telefonszámokat." }, - "language": [ - "en", - "fr", - "ja", - "zh_Hant", - "ru", - "de", - "it", - "nb_NO" - ], "maintainer": "MapComplete", "icon": "./assets/themes/shops/shop.svg", "version": "0", diff --git a/assets/themes/sidewalks/sidewalks.json b/assets/themes/sidewalks/sidewalks.json index c750c05fab..72ef76042e 100644 --- a/assets/themes/sidewalks/sidewalks.json +++ b/assets/themes/sidewalks/sidewalks.json @@ -11,10 +11,6 @@ "en": "Experimental theme", "ru": "Экспериментальная тема" }, - "language": [ - "en", - "ru" - ], "maintainer": "", "icon": "./assets/svg/bug.svg", "version": "0", @@ -66,10 +62,16 @@ }, { "rewrite": { - "sourceString": "left|right", + "sourceString": [ + "left|right" + ], "into": [ - "left", - "right" + [ + "left" + ], + [ + "right" + ] ] }, "renderings": [ diff --git a/assets/themes/speelplekken/speelplekken.json b/assets/themes/speelplekken/speelplekken.json index adf40461a3..c4ff417d2d 100644 --- a/assets/themes/speelplekken/speelplekken.json +++ b/assets/themes/speelplekken/speelplekken.json @@ -10,14 +10,19 @@ "description": { "nl": "

Welkom bij de Groendoener!

De Zuidrand dat is spelen, ravotten, chillen, wandelen,… in het groen. Meer dan 200 grote en kleine speelplekken liggen er in parken, in bossen en op pleintjes te wachten om ontdekt te worden. De verschillende speelplekken werden getest én goedgekeurd door kinder- en jongerenreporters uit de Zuidrand. Met leuke challenges dagen de reporters jou uit om ook op ontdekking te gaan. Klik op een speelplek op de kaart, bekijk het filmpje en ga op verkenning!

Het project groendoener kadert binnen het strategisch project Beleefbare Open Ruimte in de Antwerpse Zuidrand en is een samenwerking tussen het departement Leefmilieu van provincie Antwerpen, Sportpret vzw, een OpenStreetMap-België Consultent en Createlli vzw. Het project kwam tot stand met steun van Departement Omgeving van de Vlaamse Overheid.
" }, - "language": [ - "nl", - "*" - ], "maintainer": "MapComplete", "icon": "./assets/themes/speelplekken/logo.svg", "hideFromOverview": true, - "lockLocation": true, + "lockLocation": [ + [ + 4.291534423828125, + 51.061249423389796 + ], + [ + 4.604301452636719, + 51.23978120350654 + ] + ], "version": "0", "startLat": 51.17174, "startLon": 4.449462, @@ -277,11 +282,10 @@ "render": "" } ], - "+iconOverlays": [ + "+iconBadges": [ { "if": "_video:id~*", - "then": "./assets/themes/speelplekken/youtube.svg", - "badge": true + "then": "./assets/themes/speelplekken/youtube.svg" } ], "isShown": { diff --git a/assets/themes/sport_pitches/sport_pitches.json b/assets/themes/sport_pitches/sport_pitches.json index 810c6333e0..d2a88cd007 100644 --- a/assets/themes/sport_pitches/sport_pitches.json +++ b/assets/themes/sport_pitches/sport_pitches.json @@ -8,7 +8,8 @@ "zh_Hant": "運動場地", "ru": "Спортивные площадки", "de": "Sportplätze", - "it": "Campi sportivi" + "it": "Campi sportivi", + "hu": "Sportpályák" }, "shortDescription": { "nl": "Deze kaart toont sportvelden", @@ -18,7 +19,8 @@ "zh_Hant": "顯示運動場地的地圖", "ru": "Карта, отображающая спортивные площадки", "de": "Eine Karte mit Sportplätzen", - "it": "Una cartina che mostra i campi sportivi" + "it": "Una cartina che mostra i campi sportivi", + "hu": "Sportpályatérkép" }, "description": { "nl": "Een sportveld is een ingerichte plaats met infrastructuur om een sport te beoefenen", @@ -27,18 +29,9 @@ "ja": "スポーツ競技場は、スポーツが行われる場所です", "zh_Hant": "運動場地是進行運動的地方", "de": "Ein Sportplatz ist eine Fläche, auf der Sportarten gespielt werden", - "it": "Una campo sportivo è un’area dove vengono praticati gli sport" + "it": "Una campo sportivo è un’area dove vengono praticati gli sport", + "hu": "A sportpálya egy olyan terület, amelyen valamilyen sportot űznek" }, - "language": [ - "nl", - "fr", - "en", - "ja", - "zh_Hant", - "ru", - "de", - "it" - ], "maintainer": "", "icon": "./assets/layers/sport_pitch/table_tennis.svg", "version": "0", diff --git a/assets/themes/street_lighting/street_lighting.json b/assets/themes/street_lighting/street_lighting.json index 6b08322dc3..1997880511 100644 --- a/assets/themes/street_lighting/street_lighting.json +++ b/assets/themes/street_lighting/street_lighting.json @@ -2,22 +2,18 @@ "id": "street_lighting", "maintainer": "Robin van der Linde", "version": "2021-10-22", - "language": [ - "en", - "nl", - "ru", - "zh_Hant" - ], "title": { "en": "Street Lighting", "nl": "Straatverlichting", "ru": "Уличное освещение", - "zh_Hant": "道路照明" + "zh_Hant": "道路照明", + "hu": "Közvilágítás" }, "description": { "en": "On this map you can find everything about street lighting", "nl": "Op deze kaart vind je alles over straatlantaarns", - "zh_Hant": "在這份地圖你可以找到任何有關路燈的事情" + "zh_Hant": "在這份地圖你可以找到任何有關路燈的事情", + "hu": "Ezen a térképen minden megtalálható, ami a közvilágítással kapcsolatos" }, "icon": "./assets/layers/street_lamps/street_lamp.svg", "startZoom": 19, @@ -30,7 +26,8 @@ "name": { "en": "Lit streets", "nl": "Verlichte straten", - "zh_Hant": "有照明的道路" + "zh_Hant": "有照明的道路", + "hu": "Kivilágított utcák" }, "source": { "osmTags": { @@ -47,7 +44,8 @@ "render": { "en": "Lit street", "nl": "Verlichte straat", - "zh_Hant": "照明道路" + "zh_Hant": "照明道路", + "hu": "Kivilágított utca" }, "mappings": [ { @@ -67,7 +65,8 @@ "question": { "en": "Is this street lit?", "nl": "Is deze straat verlicht?", - "zh_Hant": "這道路有路燈嗎?" + "zh_Hant": "這道路有路燈嗎?", + "hu": "Ki van-e világítva ez az utca?" }, "mappings": [ { @@ -75,7 +74,8 @@ "then": { "en": "This street is lit", "nl": "Deze straat is verlicht", - "zh_Hant": "這個道路有照明" + "zh_Hant": "這個道路有照明", + "hu": "Ezen az utcán van közvilágítás" } }, { @@ -83,7 +83,8 @@ "then": { "en": "This street is not lit", "nl": "Deze straat is niet verlicht", - "zh_Hant": "這個道路沒有照明" + "zh_Hant": "這個道路沒有照明", + "hu": "Ezen az utcán nincs közvilágítás" } }, { @@ -91,7 +92,8 @@ "then": { "en": "This street is lit at night", "nl": "Deze straat is 's nachts verlicht", - "zh_Hant": "這個道路晚上有照明" + "zh_Hant": "這個道路晚上有照明", + "hu": "Ez az utca éjszaka ki van világítva" }, "hideInAnswer": true }, @@ -100,7 +102,8 @@ "then": { "en": "This street is lit 24/7", "nl": "Deze straat is 24/7 verlicht", - "zh_Hant": "這個道路 24/7 有照明" + "zh_Hant": "這個道路 24/7 有照明", + "hu": "Ez az utca éjjel-nappal ki van világítva" } } ] @@ -114,7 +117,8 @@ "en": "All streets", "nl": "Alle straten", "ru": "Все улицы", - "zh_Hant": "所有道路" + "zh_Hant": "所有道路", + "hu": "Minden utca" }, "source": { "osmTags": { @@ -131,7 +135,8 @@ "en": "Street", "nl": "Straat", "ru": "Улица", - "zh_Hant": "照明" + "zh_Hant": "照明", + "hu": "Utca" }, "mappings": [ { @@ -159,7 +164,8 @@ "question": { "en": "Is this street lit?", "nl": "Is deze straat verlicht?", - "zh_Hant": "這道路有照明嗎?" + "zh_Hant": "這道路有照明嗎?", + "hu": "Ki van-e világítva ez az utca?" }, "mappings": [ { @@ -167,7 +173,8 @@ "then": { "en": "This street is lit", "nl": "Deze straat is verlicht", - "zh_Hant": "這道路有照明" + "zh_Hant": "這道路有照明", + "hu": "Ez az utca ki van világítva" } }, { @@ -175,7 +182,8 @@ "then": { "en": "This street is not lit", "nl": "Deze straat is niet verlicht", - "zh_Hant": "這道路沒有照明" + "zh_Hant": "這道路沒有照明", + "hu": "Ez az utca nincs kivilágítva" } }, { @@ -183,7 +191,8 @@ "then": { "en": "This street is lit at night", "nl": "Deze straat is 's nachts verlicht", - "zh_Hant": "這道路晚上有照明" + "zh_Hant": "這道路晚上有照明", + "hu": "Ez az utca éjjel ki van világítva" }, "hideInAnswer": true }, @@ -192,7 +201,8 @@ "then": { "en": "This street is lit 24/7", "nl": "Deze straat is 24/7 verlicht", - "zh_Hant": "這道路 24/7 有照明" + "zh_Hant": "這道路 24/7 有照明", + "hu": "Ez az utca éjjel-nappal ki van világítva" } } ] diff --git a/assets/themes/street_lighting/street_lighting_assen.json b/assets/themes/street_lighting/street_lighting_assen.json index 49de1e8af1..646a825507 100644 --- a/assets/themes/street_lighting/street_lighting_assen.json +++ b/assets/themes/street_lighting/street_lighting_assen.json @@ -2,10 +2,6 @@ "id": "street_lighting_assen", "maintainer": "Robin van der Linde", "version": "2021-10-22", - "language": [ - "nl", - "en" - ], "title": { "nl": "Straatverlichting - Assen" }, diff --git a/assets/themes/surveillance/surveillance.json b/assets/themes/surveillance/surveillance.json index 1e460a0f7d..fefeb406c5 100644 --- a/assets/themes/surveillance/surveillance.json +++ b/assets/themes/surveillance/surveillance.json @@ -7,7 +7,8 @@ "zh_Hant": "被監視的監視器", "fr": "Surveillance", "de": "Überwachung unter Überwachung", - "it": "Sorveglianza sotto controllo" + "it": "Sorveglianza sotto controllo", + "hu": "Megfigyelt térfigyelés" }, "shortDescription": { "en": "Surveillance cameras and other means of surveillance", @@ -17,7 +18,8 @@ "fr": "Caméras et autres dispositifs de surveillance", "pl": "Kamery monitorujące i inne środki nadzoru", "de": "Überwachungskameras und andere Mittel zur Überwachung", - "it": "Telecamere e altri di mezzi di sorveglianza" + "it": "Telecamere e altri di mezzi di sorveglianza", + "hu": "Térfigyelő kamerák és más figyelőeszközök" }, "description": { "en": "On this open map, you can find surveillance cameras.", @@ -27,18 +29,9 @@ "fr": "Cette carte indique l’emplacement des caméras de surveillance.", "pl": "Na tej otwartej mapie można znaleźć kamery monitoringu.", "de": "Auf dieser offenen Karte finden Sie Überwachungskameras.", - "it": "In questa cartina puoi trovare le telecamera di sorveglianza." + "it": "In questa cartina puoi trovare le telecamera di sorveglianza.", + "hu": "Ezen a térképen térfigyelő kamerák láthatók." }, - "language": [ - "en", - "nl", - "ja", - "zh_Hant", - "fr", - "de", - "it", - "pl" - ], "maintainer": "", "icon": "./assets/themes/surveillance/logo.svg", "version": "0", diff --git a/assets/themes/toerisme_vlaanderen/FlandersArtSans-Light.woff b/assets/themes/toerisme_vlaanderen/FlandersArtSans-Light.woff new file mode 100644 index 0000000000..32f3ec67a3 Binary files /dev/null and b/assets/themes/toerisme_vlaanderen/FlandersArtSans-Light.woff differ diff --git a/assets/themes/toerisme_vlaanderen/FlandersArtSerif-Medium.woff b/assets/themes/toerisme_vlaanderen/FlandersArtSerif-Medium.woff new file mode 100644 index 0000000000..91086869dd Binary files /dev/null and b/assets/themes/toerisme_vlaanderen/FlandersArtSerif-Medium.woff differ diff --git a/assets/themes/toerisme_vlaanderen/NEGATIEF/bench.svg b/assets/themes/toerisme_vlaanderen/NEGATIEF/bench.svg new file mode 100644 index 0000000000..b65d668e36 --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/NEGATIEF/bench.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/NEGATIEF/bicycle_rental.svg b/assets/themes/toerisme_vlaanderen/NEGATIEF/bicycle_rental.svg new file mode 100644 index 0000000000..ca37e6a2bc --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/NEGATIEF/bicycle_rental.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/NEGATIEF/charging_station_ebike.svg b/assets/themes/toerisme_vlaanderen/NEGATIEF/charging_station_ebike.svg new file mode 100644 index 0000000000..3ad5d40abd --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/NEGATIEF/charging_station_ebike.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/NEGATIEF/cycle_pump.svg b/assets/themes/toerisme_vlaanderen/NEGATIEF/cycle_pump.svg new file mode 100644 index 0000000000..395345c300 --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/NEGATIEF/cycle_pump.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/NEGATIEF/cycle_repair.svg b/assets/themes/toerisme_vlaanderen/NEGATIEF/cycle_repair.svg new file mode 100644 index 0000000000..51ebec297a --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/NEGATIEF/cycle_repair.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/NEGATIEF/cycle_repair_and_pump.svg b/assets/themes/toerisme_vlaanderen/NEGATIEF/cycle_repair_and_pump.svg new file mode 100644 index 0000000000..91028718b7 --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/NEGATIEF/cycle_repair_and_pump.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/NEGATIEF/license_info.json b/assets/themes/toerisme_vlaanderen/NEGATIEF/license_info.json new file mode 100644 index 0000000000..4885cc3ba0 --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/NEGATIEF/license_info.json @@ -0,0 +1,145 @@ +[ + { + "path": "bench.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "bicycle_rental.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "charging_station_ebike.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "cycle_pump.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "cycle_repair.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "cycle_repair_and_pump.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "observation_platform.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "observation_tower.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "picnic_table.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "playground.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "toilets.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "toilets_wheelchair.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "toilets_wheelchair.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + } +] \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/NEGATIEF/observation_platform.svg b/assets/themes/toerisme_vlaanderen/NEGATIEF/observation_platform.svg new file mode 100644 index 0000000000..96b3d42ef5 --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/NEGATIEF/observation_platform.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/NEGATIEF/observation_tower.svg b/assets/themes/toerisme_vlaanderen/NEGATIEF/observation_tower.svg new file mode 100644 index 0000000000..dcf91e0672 --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/NEGATIEF/observation_tower.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/NEGATIEF/picnic_table.svg b/assets/themes/toerisme_vlaanderen/NEGATIEF/picnic_table.svg new file mode 100644 index 0000000000..11acf338dc --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/NEGATIEF/picnic_table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/NEGATIEF/playground.svg b/assets/themes/toerisme_vlaanderen/NEGATIEF/playground.svg new file mode 100644 index 0000000000..39c675f097 --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/NEGATIEF/playground.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/NEGATIEF/toilets.svg b/assets/themes/toerisme_vlaanderen/NEGATIEF/toilets.svg new file mode 100644 index 0000000000..86a32fd616 --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/NEGATIEF/toilets.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/NEGATIEF/toilets_wheelchair.svg b/assets/themes/toerisme_vlaanderen/NEGATIEF/toilets_wheelchair.svg new file mode 100644 index 0000000000..a8037d1d42 --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/NEGATIEF/toilets_wheelchair.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/avatar.png b/assets/themes/toerisme_vlaanderen/avatar.png new file mode 100644 index 0000000000..6ea29891f1 Binary files /dev/null and b/assets/themes/toerisme_vlaanderen/avatar.png differ diff --git a/assets/themes/toerisme_vlaanderen/bench.svg b/assets/themes/toerisme_vlaanderen/bench.svg new file mode 100644 index 0000000000..945d1632bc --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/bench.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/bicycle_rental.svg b/assets/themes/toerisme_vlaanderen/bicycle_rental.svg new file mode 100644 index 0000000000..b66b2c214e --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/bicycle_rental.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/charging_station_ebike.svg b/assets/themes/toerisme_vlaanderen/charging_station_ebike.svg new file mode 100644 index 0000000000..57c49e71c4 --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/charging_station_ebike.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/custom.css b/assets/themes/toerisme_vlaanderen/custom.css index e030e7ed19..2ea3bdf21e 100644 --- a/assets/themes/toerisme_vlaanderen/custom.css +++ b/assets/themes/toerisme_vlaanderen/custom.css @@ -1,3 +1,22 @@ .technical.questions { display: none -} \ No newline at end of file +} + +@font-face{ + font-family:"FlandersArt"; + src:url("./assets/themes/toerisme_vlaanderen/FlandersArtSans-Light.woff"); +} + +@font-face{ + font-family:"FlandersArtSerif"; + src:url("./assets/themes/toerisme_vlaanderen/FlandersArtSerif-Medium.woff"); +} + +h1, h2, h3, h4 { + font-family: 'FlandersArtSerif', sans-serif; +} + +body { + font-family: 'FlandersArt', sans-serif; +} + diff --git a/assets/themes/toerisme_vlaanderen/cycle_pump.svg b/assets/themes/toerisme_vlaanderen/cycle_pump.svg new file mode 100644 index 0000000000..1284b8c323 --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/cycle_pump.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/cycle_repair.svg b/assets/themes/toerisme_vlaanderen/cycle_repair.svg new file mode 100644 index 0000000000..0fda014ab1 --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/cycle_repair.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/cycle_repair_and_pump.svg b/assets/themes/toerisme_vlaanderen/cycle_repair_and_pump.svg new file mode 100644 index 0000000000..510948ab78 --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/cycle_repair_and_pump.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/license_info.json b/assets/themes/toerisme_vlaanderen/license_info.json index 374abea1e6..0013ceba58 100644 --- a/assets/themes/toerisme_vlaanderen/license_info.json +++ b/assets/themes/toerisme_vlaanderen/license_info.json @@ -1,4 +1,100 @@ [ + { + "path": "FlandersArtSans-Light.woff", + "license": "All rights reserved", + "authors": [ + "Jo De Baerdemaeker " + ], + "sources": [ + "https://www.studiotype.be/fonts/flandersart" + ] + }, + { + "path": "FlandersArtSerif-Medium.woff", + "license": "All rights reserved", + "authors": [ + "Jo De Baerdemaeker " + ], + "sources": [ + "https://www.studiotype.be/fonts/flandersart" + ] + }, + { + "path": "avatar.png", + "license": "Logo", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/" + ] + }, + { + "path": "bench.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "bicycle_rental.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "charging_station_ebike.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "cycle_pump.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "cycle_repair.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "cycle_repair_and_pump.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, { "path": "logo.png", "license": "Logo (all rights reserved)", @@ -8,5 +104,88 @@ "sources": [ "https://www.toerismevlaanderen.be/" ] + }, + { + "path": "logo.svg", + "license": "CC0", + "authors": [], + "sources": [] + }, + { + "path": "observation_platform.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "observation_tower.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "picnic_table.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "playground.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "toilets.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "toilets_wheelchair.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] + }, + { + "path": "toilets_wheelchair.svg", + "license": "CC0", + "authors": [ + "Toerisme Vlaanderen" + ], + "sources": [ + "https://toerismevlaanderen.be/pinjepunt", + "https://mapcomplete.osm.be/toerisme_vlaanderen" + ] } ] \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/logo.svg b/assets/themes/toerisme_vlaanderen/logo.svg new file mode 100644 index 0000000000..de59026a4d --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/logo.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + diff --git a/assets/themes/toerisme_vlaanderen/observation_platform.svg b/assets/themes/toerisme_vlaanderen/observation_platform.svg new file mode 100644 index 0000000000..6c7e2edd48 --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/observation_platform.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/observation_tower.svg b/assets/themes/toerisme_vlaanderen/observation_tower.svg new file mode 100644 index 0000000000..13474c0e90 --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/observation_tower.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/picnic_table.svg b/assets/themes/toerisme_vlaanderen/picnic_table.svg new file mode 100644 index 0000000000..a672acb408 --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/picnic_table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/playground.svg b/assets/themes/toerisme_vlaanderen/playground.svg new file mode 100644 index 0000000000..e383835a69 --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/playground.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/toerisme_vlaanderen.json b/assets/themes/toerisme_vlaanderen/toerisme_vlaanderen.json index daca2042b6..1040cfac49 100644 --- a/assets/themes/toerisme_vlaanderen/toerisme_vlaanderen.json +++ b/assets/themes/toerisme_vlaanderen/toerisme_vlaanderen.json @@ -2,12 +2,8 @@ "id": "toerisme_vlaanderen", "credits": "Commissioned theme for Toerisme Vlaandere", "maintainer": "MapComplete", - "version": "0.0.2", + "version": "0.0.3", "customCss": "./assets/themes/toerisme_vlaanderen/custom.css", - "language": [ - "en", - "nl" - ], "mustHaveLanguage": [ "nl" ], @@ -15,15 +11,26 @@ "nl": "Pin je punt" }, "shortDescription": { - "nl": "Een kaart om toeristisch relevante info op aan te duiden" + "nl": "

Pin je punt is een open toerismekaart waarin wandelaars en fietsers nuttige gegevens verzamelen die handig zijn voor andere wandelaars en fietsers.

Met de steun van Toerisme Vlaanderen

" }, "description": { - "nl": "

Pin je punt is een open toerismekaart waarin wandelaars en fietsers nuttige gegevens verzamelen die handig zijn voor andere wandelaars en fietsers.

We verzamelen 7 thematische lagen:

  1. Laadpunten voor e-bikes
  2. Openbare toiletten
  3. Zit- en picknickbankjes
  4. Uitkijkpunten, uitkijkplatformen en uitkijktorens
  5. Fietsherstelpunten
  6. Fietsverhuurpunten
  7. Speeltuinen

Klik op de exacte locatie op de kaart om een van deze 7 punten toe te voegen. Of corrigeer bestaande punten door erop te klikken.

" + "nl": "

Pin je punt is een open toerismekaart waarin wandelaars en fietsers nuttige info verzamelen voor andere wandelaars en fietsers.

Klik op de exacte locatie op de kaart om een punt toe te voegen of op een bestaand punt om het te wijzigen.
We verzamelen:

  1. Laadpunten voor elektrische fietsen
  2. Openbare toiletten
  3. Zit- en picknickbankjes
  4. Uitkijktorens
  5. Fietsherstelpunten
  6. Fietsverhuurpunten
  7. Speeltuinen

" }, "descriptionTail": { - "nl": "

Met de steun van Toerisme Vlaanderen

Meer informatie op toerismevlaaneren.be" + "nl": "

Een initiatief van de 5 provinciale toeristische organisaties en Toerisme Vlaanderen

Meer informatie op toerismevlaanderen.be

" }, - "icon": "./assets/svg/teardrop_with_hole_green.svg", + "extraLink": { + "icon": "./assets/svg/pop-out.svg", + "href": "https://mapcomplete.osm.be/{theme}.html?lat={lat}&lon={lon}&z={zoom}&language={language}", + "newTab": true, + "requirements": [ + "iframe" + ], + "text": { + "nl": "Open in volledig scherm" + } + }, + "icon": "./assets/themes/toerisme_vlaanderen/logo.svg", "startZoom": 8, "startLat": 50.8536, "startLon": 4.433, @@ -31,19 +38,190 @@ "layers": [ { "builtin": [ - "toilet", - "bench", - "picnic_table", - "observation_tower", - "bike_repair_station", - "playground", "charging_station" ], "override": { - "minzoom": 14 + "id": "charging_station_ebikes", + "minzoom": 14, + "source": { + "osmTags": { + "and+": [ + "bicycle=yes" + ] + } + }, + "=filter": null, + "=mapRendering": [ + { + "location": [ + "point", + "centroid" + ], + "icon": "./assets/themes/toerisme_vlaanderen/charging_station_ebike.svg" + } + ], + "=presets": [ + { + "tags": [ + "amenity=charging_station", + "motorcar=no", + "bicycle=yes", + "socket:typee=1" + ], + "title": { + "nl": "laadpunt voor elektrische fietsen" + }, + "preciseInput": { + "preferredBackground": "map" + } + } + ] } + }, + { + "#": "All charging stations at a high zoom level, to avoid duplicates", + "builtin": "charging_station", + "override": { + "name": null, + "filter": { + "sameAs": "charging_station_ebike" + }, + "minzoom": 18 + } + }, + { + "builtin": "toilet", + "override": { + "minzoom": 14, + "mapRendering": [ + { + "icon": { + "render": "./assets/themes/toerisme_vlaanderen/toilets.svg", + "=mappings": [ + { + "if": "wheelchair=yes", + "then": "./assets/themes/toerisme_vlaanderen/toilets_wheelchair.svg" + } + ] + } + } + ] + } + }, + { + "builtin": "bench", + "override": { + "minzoom": 14, + "mapRendering": [ + { + "icon": { + "render": "./assets/themes/toerisme_vlaanderen/bench.svg" + } + } + ] + } + }, + { + "builtin": "picnic_table", + "override": { + "minzoom": 14, + "mapRendering": [ + { + "icon": { + "render": "./assets/themes/toerisme_vlaanderen/picnic_table.svg" + } + } + ] + } + }, + { + "builtin": "observation_tower", + "override": { + "minzoom": 14, + "mapRendering": [ + { + "icon": { + "render": "./assets/themes/toerisme_vlaanderen/observation_tower.svg" + } + } + ] + } + }, + { + "builtin": "bike_repair_station", + "override": { + "minzoom": 14, + "=mapRendering": [ + { + "location": [ + "point", + "centroid" + ], + "icon": { + "render": "./assets/themes/toerisme_vlaanderen/cycle_pump.svg", + "mappings": [ + { + "if": { + "and": [ + "service:bicycle:tools=yes", + "service:bicycle:pump=yes" + ] + }, + "then": "./assets/themes/toerisme_vlaanderen/cycle_repair_and_pump.svg" + }, + { + "if": { + "and": [ + "service:bicycle:tools=yes", + "service:bicycle:pump=no" + ] + }, + "then": "./assets/themes/toerisme_vlaanderen/cycle_repair.svg" + } + ] + }, + "iconBadges": [ + { + "if": "service:bicycle:pump:operational_status=broken", + "then": "close:red" + }, + { + "if": { + "or": [ + "access=no", + "access=private" + ] + }, + "then": "invalid" + } + ] + } + ] + }, + "hideTagRenderingsWithLabels": [ + "operator-info", + "bike_repair_station-valves" + ] + }, + "bicycle_rental", + { + "builtin": "playground", + "override": { + "minzoom": 14, + "mapRendering": [ + { + "icon": { + "render": "./assets/themes/toerisme_vlaanderen/playground.svg" + } + } + ] + }, + "hideTagRenderingsWithLabels": [ + "extra" + ] } ], "hideFromOverview": true, - "enableMoreQuests": false + "enableMoreQuests": false, + "enableShareScreen": false } \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/toilets.svg b/assets/themes/toerisme_vlaanderen/toilets.svg new file mode 100644 index 0000000000..22d3dd808e --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/toilets.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toerisme_vlaanderen/toilets_wheelchair.svg b/assets/themes/toerisme_vlaanderen/toilets_wheelchair.svg new file mode 100644 index 0000000000..b2ba5a29c0 --- /dev/null +++ b/assets/themes/toerisme_vlaanderen/toilets_wheelchair.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/themes/toilets/toilets.json b/assets/themes/toilets/toilets.json index 4af10c9929..306af8c3f6 100644 --- a/assets/themes/toilets/toilets.json +++ b/assets/themes/toilets/toilets.json @@ -10,7 +10,8 @@ "zh_Hant": "開放廁所地圖", "pl": "Mapa otwartych toalet", "it": "Mappa libera delle toilet", - "nb_NO": "Åpent toalettkart" + "nb_NO": "Åpent toalettkart", + "hu": "WC-térkép" }, "description": { "en": "A map of public toilets", @@ -21,22 +22,11 @@ "ja": "公衆トイレの地図", "zh_Hant": "公共廁所的地圖", "pl": "Mapa toalet publicznych", - "it": "Una cartina dei servizi igienici pubblici" + "it": "Una cartina dei servizi igienici pubblici", + "hu": "Nyilvános WC-k térképe" }, "maintainer": "MapComplete", "version": "2020-08-29", - "language": [ - "en", - "de", - "fr", - "nl", - "ru", - "ja", - "zh_Hant", - "pl", - "it", - "nb_NO" - ], "startZoom": 12, "startLat": 51.2095, "startLon": 3.2222, diff --git a/assets/themes/trees/broadleaved.svg b/assets/themes/trees/broadleaved.svg index 06cbe4ec1c..eaeba67aa9 100644 --- a/assets/themes/trees/broadleaved.svg +++ b/assets/themes/trees/broadleaved.svg @@ -1,16 +1,5 @@ - - - - - - - - - - - @@ -18,4 +7,4 @@ - \ No newline at end of file + diff --git a/assets/themes/trees/leafless.svg b/assets/themes/trees/leafless.svg index ffd30692e0..9ea181fc77 100644 --- a/assets/themes/trees/leafless.svg +++ b/assets/themes/trees/leafless.svg @@ -1,16 +1,5 @@ - - - - - - - - - - - @@ -25,4 +14,4 @@ - \ No newline at end of file + diff --git a/assets/themes/trees/logo.svg b/assets/themes/trees/logo.svg index 571e2ae529..0dc1acf003 100644 --- a/assets/themes/trees/logo.svg +++ b/assets/themes/trees/logo.svg @@ -1,22 +1,5 @@ - - - - - - - - - - - - - - - - - @@ -28,4 +11,4 @@ - \ No newline at end of file + diff --git a/assets/themes/trees/needleleaved.svg b/assets/themes/trees/needleleaved.svg index 77ede53ebf..23d3f528d8 100644 --- a/assets/themes/trees/needleleaved.svg +++ b/assets/themes/trees/needleleaved.svg @@ -1,16 +1,5 @@ - - - - - - - - - - - @@ -18,4 +7,4 @@ - \ No newline at end of file + diff --git a/assets/themes/trees/trees.json b/assets/themes/trees/trees.json index 46102c2585..31cabf0e7d 100644 --- a/assets/themes/trees/trees.json +++ b/assets/themes/trees/trees.json @@ -39,20 +39,6 @@ "nb_NO": "Kartlegg trærne.", "hu": "Térképezzünk fel minden fát!" }, - "language": [ - "nl", - "en", - "fr", - "it", - "ru", - "ja", - "zh_Hant", - "pl", - "de", - "nb_NO", - "id", - "hu" - ], "maintainer": "Midgard", "icon": "./assets/themes/trees/logo.svg", "version": "0", diff --git a/assets/themes/trees/unknown.svg b/assets/themes/trees/unknown.svg index e4c12876e4..ae0b356b24 100644 --- a/assets/themes/trees/unknown.svg +++ b/assets/themes/trees/unknown.svg @@ -1,16 +1,5 @@ - - - - - - - - - - - @@ -19,4 +8,4 @@ - \ No newline at end of file + diff --git a/assets/themes/uk_addresses/Commemorative_plaque_on_Elizabeth_House_-_geograph.org.uk_-_2693028.jpg b/assets/themes/uk_addresses/Commemorative_plaque_on_Elizabeth_House_-_geograph.org.uk_-_2693028.jpg deleted file mode 100644 index a51b9a8267..0000000000 Binary files a/assets/themes/uk_addresses/Commemorative_plaque_on_Elizabeth_House_-_geograph.org.uk_-_2693028.jpg and /dev/null differ diff --git a/assets/themes/uk_addresses/Plaque,_Raphoe_House_-_geograph.org.uk_-_1925685.jpg b/assets/themes/uk_addresses/Plaque,_Raphoe_House_-_geograph.org.uk_-_1925685.jpg deleted file mode 100644 index c38517431b..0000000000 Binary files a/assets/themes/uk_addresses/Plaque,_Raphoe_House_-_geograph.org.uk_-_1925685.jpg and /dev/null differ diff --git a/assets/themes/uk_addresses/Plaque,_Séamus_Roddy_House_-_geograph.org.uk_-_2000318.jpg b/assets/themes/uk_addresses/Plaque,_Séamus_Roddy_House_-_geograph.org.uk_-_2000318.jpg deleted file mode 100644 index c4c68b90bf..0000000000 Binary files a/assets/themes/uk_addresses/Plaque,_Séamus_Roddy_House_-_geograph.org.uk_-_2000318.jpg and /dev/null differ diff --git a/assets/themes/uk_addresses/license_info.json b/assets/themes/uk_addresses/license_info.json index cfad1b9d72..046bf73a3d 100644 --- a/assets/themes/uk_addresses/license_info.json +++ b/assets/themes/uk_addresses/license_info.json @@ -1,34 +1,4 @@ [ - { - "path": "Commemorative_plaque_on_Elizabeth_House_-_geograph.org.uk_-_2693028.jpg", - "license": "CC-BY-SA 2.0 Unported", - "authors": [ - "Basher Eyre" - ], - "sources": [ - "https://commons.wikimedia.org/wiki/File:Commemorative_plaque_on_Elizabeth_House_-_geograph.org.uk_-_2693028.jpg" - ] - }, - { - "path": "Plaque,_Raphoe_House_-_geograph.org.uk_-_1925685.jpg", - "license": "CC-BY-SA 2.0", - "authors": [ - "Kenneth Allen" - ], - "sources": [ - "https://commons.wikimedia.org/wiki/File:Plaque,_Raphoe_House_-_geograph.org.uk_-_1925685.jpg" - ] - }, - { - "path": "Plaque,_Séamus_Roddy_House_-_geograph.org.uk_-_2000318.jpg", - "license": "CC-BY-SA 2.0 Unported", - "authors": [ - "Kenneth Allen" - ], - "sources": [ - "https://commons.wikimedia.org/wiki/File:Plaque,_S%C3%A9amus_Roddy_House_-_geograph.org.uk_-_2000318.jpg" - ] - }, { "path": "housenumber_add.svg", "license": "CC0", @@ -79,13 +49,11 @@ "sources": [] }, { - "path": "stamp.jpg", - "license": "CC-BY 2.0", + "path": "stamp-outline.png", + "license": "CC0", "authors": [ - "Mark Morgan" + "Rob Nickerson" ], - "sources": [ - "https://commons.wikimedia.org/wiki/File:Queen_Elizabeth_II_Virgin_Islands_stamp.jpg" - ] + "sources": [] } ] \ No newline at end of file diff --git a/assets/themes/uk_addresses/stamp-outline.png b/assets/themes/uk_addresses/stamp-outline.png new file mode 100644 index 0000000000..e1bc7f2ded Binary files /dev/null and b/assets/themes/uk_addresses/stamp-outline.png differ diff --git a/assets/themes/uk_addresses/stamp.jpg b/assets/themes/uk_addresses/stamp.jpg deleted file mode 100644 index e54290b270..0000000000 Binary files a/assets/themes/uk_addresses/stamp.jpg and /dev/null differ diff --git a/assets/themes/uk_addresses/uk_addresses.json b/assets/themes/uk_addresses/uk_addresses.json index 03486bd28f..febb712fe2 100644 --- a/assets/themes/uk_addresses/uk_addresses.json +++ b/assets/themes/uk_addresses/uk_addresses.json @@ -1,33 +1,22 @@ { "id": "uk_addresses", "title": { - "en": "UK Addresses", + "en": "Addresses in Great Britain", "de": "Adressen in Großbritannien", "it": "Indirizzi UK", "id": "Alamat Inggris" }, + "mustHaveLanguage": [ + "en" + ], "shortDescription": { - "en": "Help to build an open dataset of UK addresses", + "en": "Help to build an open dataset of addresses in Great Britain", "de": "Helfen Sie beim Aufbau eines offenen Datensatzes britischer Adressen", "it": "Aiuta a costruire un dataset libero per gli indirizzi nel Regno Unito" }, "description": { - "en": "Contribute to OpenStreetMap by filling out address information", - "nl": "Draag bij aan OpenStreetMap door adresinformatie in te vullen", - "de": "Tragen Sie zu OpenStreetMap bei, indem Sie Adressinformationen ausfüllen", - "it": "Contribuisci a OpenStreetMap inserendo le informazioni sull’indirizzo", - "id": "Berkontribusi untuk OpenStreetMap dengan mengisi informasi alamat" + "en": "Help us collect addresses and make them freely available. Each address contributed will be added to OpenStreetMap so you will need to create an account and log in before you start. Please do not copy addresses from the internet or other sources subject to copyright. This website works well on mobile so a good option is to contibute the addresses closest to you." }, - "language": [ - "en", - "de", - "it", - "id", - "nl", - "zh_Hant", - "hu", - "ru" - ], "maintainer": "Pieter Vander Vennet, Rob Nickerson, Russ Garrett", "icon": "./assets/themes/uk_addresses/housenumber_unknown.svg", "version": "2021-09-17", @@ -93,7 +82,7 @@ "geoJson": "https://osm-uk-addresses.russss.dev/addresses/{z}/{x}/{y}.json", "osmTags": { "and": [ - "ref:GB:inspire~*", + "urpn_count~*", "id!~node/.*" ] }, @@ -101,34 +90,33 @@ "isOsmCache": false }, "name": "Addresses to check", - "minzoom": 14, + "minzoom": 18, "title": { "render": { - "en": "Address to be determined", - "id": "Alamat yang diketahui" + "en": "This address needs adding" } }, "tagRenderings": [ { "id": "uk_addresses_explanation", "render": { - "en": "There probably is an address here" + "en": "We think there should be an address here. Please click below to add it." } }, { "id": "uk_addresses_embedding_outline", - "render": "An outline embedding this point with an address already exists in OpenStreetMap.
This object has address {_embedding_object:addr:street} {_embedding_object:addr:housenumber}", + "render": "Warning: This point lies within a building or area for which we already have an address. You should only add this address if it is different.
The number and street name we have for the existing address is {_embedding_object:addr:housenumber} {_embedding_object:addr:street}", "mappings": [ { "if": "_embedding_object:id=true", "then": { - "en": "The INSPIRE-polygon containing this point has at least one address contained" + "en": "Warning: The property boundary containing this point already contains at least one recorded address. You should only add this address if it is different." } }, { "if": "_embedding_object:id=false", "then": { - "en": "The INSPIRE-polygon containing this point has no addresses contained" + "en": "We checked our data and found no other address within the same property boundary. If you know the details for this address, please add it." } } ], @@ -136,7 +124,7 @@ }, { "id": "uk_addresses_import_button", - "render": "{import_button(address,ref:GB:inspire=$ref:GB:inspire;ref:GB:uprn=$ref:GB:uprn$, Add this address, ./assets/themes/uk_addresses/housenumber_add.svg)}" + "render": "{import_button(address,urpn_count=$urpn_count;ref:GB:uprn=$ref:GB:uprn$, Add this address, ./assets/themes/uk_addresses/housenumber_add.svg)}" } ], "calculatedTags": [ @@ -151,6 +139,7 @@ "id": "to_handle", "options": [ { + "default": true, "question": "Only show non-matched objects", "osmTags": { "and": [ @@ -201,28 +190,31 @@ { "id": "address", "name": { - "en": "Known addresses in OSM", - "de": "Bekannte Adressen in OSM", - "zh_Hant": "OSM 上已知的地址", - "hu": "Ismert címek az OSM-en", - "nl": "Bekende adressen in OSM" + "en": "Known addresses in OSM" }, "minzoom": 18, "source": { "osmTags": { "or": [ + "addr:unit~*", + "addr:flats~*", + "addr:housename~*", "addr:housenumber~*", + "addr:place~*", + "addr:substreet~*", "addr:street~*", - "ref:GB:inspire~*" + "addr:parentstreet~*", + "addr:suburb~*", + "addr:city~*", + "addr:postcode~*", + "fixme:addr~*", + "urpn_count~*" ] } }, "title": { "render": { - "en": "Known address", - "de": "Bekannte Adresse", - "hu": "Ismert cím", - "nl": "Bekend adres" + "en": "Review and update the address" } }, "description": { @@ -240,23 +232,95 @@ "_closest_street:2:name=JSON.parse(feat.properties._closest_3_street_names)[2]" ], "tagRenderings": [ + "questions", { - "id": "uk_addresses_explanation_osm", + "id": "preview", "render": { - "en": "This address is saved in OpenStreetMap", - "de": "Diese Adresse ist in OpenStreetMap gespeichert" + "en": "
The envelope below shows the address that we have recorded. You can change this by answering any remaining questions above, or by clicking the pencil icons below. We do not need you to provide a recipient's name or any of the parts shown in [blue].
{addr:unit} {addr:housename}
{addr:housenumber} {addr:street}
{addr:parentstreet}
[Suburb]
[Town]
[Postal code]
" + }, + "mappings": [ + { + "if": "addr:substreet~*", + "then": "
The envelope below shows the address that we have recorded. You can change this by answering any remaining questions above, or by clicking the pencil icons below. We do not need you to provide a recipient's name or any of the parts shown in [blue].
{addr:unit} {addr:housename}
{addr:housenumber} {addr:substreet}
{addr:street}
{addr:parentstreet}
[Suburb]
[Town]
[Postal code]
" + } + ] + }, + { + "id": "uk_addresses_unit", + "render": "{addr:unit}", + "question": { + "en": "What is the sub-unit for this address?
Some named building or large complexes are split into sub-units (e.g. \"1\", \"Flat 2\", \"Unit C\")
" + }, + "freeform": { + "key": "addr:unit" + }, + "mappings": [ + { + "if": "addr:unit=", + "then": "
Sub-unit (e.g. \"1\", \"Flat 2\", \"Unit C\")
", + "hideInAnswer": true + }, + { + "if": "addr:unit=", + "then": "There is no sub-unit within this address" + } + ], + "condition": { + "or": [ + "addr:housenumber~*", + "addr:housename~*", + "addr:substreet~*" + ] } }, { - "id": "uk_addresses_housenumber", - "render": { - "en": "The housenumber is {addr:housenumber}", - "nl": "Het huisnummer is {addr:housenumber}", - "de": "Die Hausnummer ist {addr:housenumber}" + "id": "uk_addresses_housename", + "question": "What is the house or building name for this address?
As shown on a sign (e.g. \"Rose Cottage\", \"Broadcasting House\", \"Acme Corp HQ\"). Please do NOT add names of the people who live here!
", + "render": "{addr:housename}", + "freeform": { + "key": "addr:housename", + "addExtraTags": [ + "nohousename=" + ] }, + "mappings": [ + { + "if": { + "and": [ + "nohousename=yes", + "addr:housename=" + ] + }, + "then": "
House or building name
", + "hideInAnswer": true + }, + { + "if": { + "and": [ + "nohousename=yes", + "addr:housename=" + ] + }, + "then": "This building has no housename" + }, + { + "#": "By adding nohousenumber!=yes, this option will trigger when first added, but will be untriggered if a housenumber is added, resulting in the question poping up!", + "if": { + "and": [ + "addr:housename=", + "nohousenumber!=yes" + ] + }, + "then": "
House or building name
", + "hideInAnswer": true + } + ] + }, + { + "id": "uk_addresses_housenumber", + "render": "{addr:housenumber}", "question": { - "en": "What is the number of this house?", - "de": "Wie lautet die Nummer dieses Hauses?" + "en": "What is the house or building number for this address?" }, "freeform": { "key": "addr:housenumber", @@ -268,7 +332,20 @@ { "if": { "and": [ - "nohousenumber=yes" + "nohousenumber=yes", + "addr:housenumber=" + ] + }, + "then": { + "en": "
Number (e.g. 1, 1A, 2)
" + }, + "hideInAnswer": true + }, + { + "if": { + "and": [ + "nohousenumber=yes", + "addr:housenumber=" ] }, "then": { @@ -280,64 +357,89 @@ ] }, { - "id": "uk_addresses_housename", - "question": "What is the name of this house?
This is normally indicated on a plaque.
Do NOT add names of inhabitants!
", - "render": "This house is named {addr:housename}", + "id": "uk_addresses_placename", + "question": { + "en": "What is the place or locality for this address?
This is additional information that appears before (or instead of) a street name in the address (e.g. \"The Cross\", \"West Business Park\", \"Castle Mews\")
" + }, + "render": { + "en": "{addr:substreet}" + }, "freeform": { - "key": "addr:housename", + "key": "addr:substreet", "addExtraTags": [ - "nohousename=" + "addr:parentstreet:={addr:street}", + "addr:street=" ] }, "mappings": [ { - "if": "nohousename=yes", - "then": "This building has no housename" + "if": "addr:substreet=", + "then": { + "en": "
Place (e.g. \"Castle Mews\", \"West Business Park\")
" + }, + "hideInAnswer": true }, { - "#": "By adding nohousenumber!=yes, this option will trigger when first added, but will be untriggered if a housenumber is added, resulting in the question poping up!", - "if": { - "and": [ - "addr:housename=", - "nohousenumber!=yes" - ] - }, - "then": "This building has no housename", - "hideInAnswer": true + "if": "addr:substreet=", + "then": { + "en": "No extra place name is given or needed" + } } - ] + ], + "condition": "addr:parentstreet=" }, { - "id": "uk_addresses_unit", - "render": "The sub-part of this address is {addr:unit}", + "id": "uk_addresses_placename_with_parent", "question": { - "en": "What is the unit indication of this address?
This is the letter or number of the letterbox here, if multiple letterboxes share the same street and housenumber. If there are multiple at the same location, add them here with a ; between them
" + "en": "What is the place or locality for this address?
This is additional information that appears before (or instead of) a street name in the address (e.g. \"The Cross\", \"West Business Park\", \"Castle Mews\")
" + }, + "render": { + "en": "{addr:substreet}" }, "freeform": { - "key": "addr:unit" + "key": "addr:substreet", + "addExtraTags": [ + "addr:street=" + ] }, "mappings": [ { - "if": "addr:unit=", - "then": "This address has no subparts.
Subparts are e.g. appartment numbers, extra letters or numbers if there are multiple letterboxes, ...
" + "if": "addr:substreet=", + "then": { + "en": "
Place (e.g. \"Castle Mews\", \"West Business Park\")
" + }, + "hideInAnswer": true + }, + { + "if": "addr:substreet=", + "then": { + "en": "No extra place name is given or needed" + } } ], "condition": { "or": [ - "addr:housenumber~*", - "addr:housename~*" + { + "and": [ + "addr:parentstreet~*", + "addr:street=" + ] + }, + { + "and": [ + "addr:parentstreet~*", + "addr:street~*", + "addr:substreet~*" + ] + } ] } }, { "id": "uk_addresses_street", - "render": { - "en": "This address is in street {addr:street}", - "de": "Diese Adresse befindet sich in der Straße {addr:street}" - }, + "render": "{addr:street}", "question": { - "en": "What street is this address located in?", - "de": "In welcher Straße befindet sich diese Adresse?" + "en": "What is the street name for this address?" }, "freeform": { "key": "addr:street" @@ -345,68 +447,92 @@ "mappings": [ { "if": "addr:street:={_closest_street:0:name}", - "then": "This address is in street {_closest_street:0:name}", + "then": "{_closest_street:0:name}", "hideInAnswer": "_closest_street:0:name=" }, { "if": "addr:street:={_closest_street:1:name}", - "then": "This address is in street {_closest_street:1:name}", + "then": "{_closest_street:1:name}", "hideInAnswer": "_closest_street:1:name=" }, { "if": "addr:street:={_closest_street:2:name}", - "then": "This address is in street {_closest_street:2:name}", + "then": "{_closest_street:2:name}", "hideInAnswer": "_closest_street:2:name=" } - ] - }, - { - "id": "uk_addresses_placename", - "question": { - "en": "What is the place or locality?
This is additional information if the streetname alone isn't enough to find this address. Typical examples are 'Technology Park', 'XYZ Terrace', ...
" - }, - "render": { - "en": "The placename is {addr:place}" - }, - "freeform": { - "key": "addr:place" - }, - "mappings": [ - { - "if": "addr:place=", - "then": { - "en": "No extra placename is given or needed" - } - } - ] - }, - { - "id": "fixme", - "render": "This address is complicated - therefore someone has given a description of what should be fixed:{fixme}", - "question": { - "en": "What should be fixed here? Please explain what the address is" - }, - "freeform": { - "key": "fixme" - }, - "mappings": [ - { - "if": "fixme=", - "then": "Is this address complicated? Write something here to explain this case. An experienced mapper will have a look at it" - } - ] - }, - "questions", - { - "id": "address-sign-image", - "render": { - "en": "{image_carousel(image:address)}
{image_upload(image:address, Add image of the address)}" + ], + "condition": { + "or": [ + "addr:street~*", + "addr:substreet=" + ] } }, { - "id": "preview", + "id": "uk_addresses_parentstreet", + "render": "{addr:parentstreet}", + "question": { + "en": "What is the parent street name for this address?
This street name will appear after the place name or first street name in the address
" + }, + "freeform": { + "key": "addr:parentstreet" + }, + "mappings": [ + { + "if": "addr:parentstreet=", + "then": { + "en": "
Parent street name
" + }, + "hideInAnswer": true + }, + { + "if": "addr:parentstreet=", + "then": "No parent street name is needed within this address" + }, + { + "if": "addr:parentstreet:={_closest_street:0:name}", + "then": "{_closest_street:0:name}", + "hideInAnswer": "_closest_street:0:name=" + }, + { + "if": "addr:parentstreet:={_closest_street:1:name}", + "then": "{_closest_street:1:name}", + "hideInAnswer": "_closest_street:1:name=" + }, + { + "if": "addr:parentstreet:={_closest_street:2:name}", + "then": "{_closest_street:2:name}", + "hideInAnswer": "_closest_street:2:name=" + } + ], + "condition": { + "or": [ + "addr:parentstreet~*", + "addr:substreet~*" + ] + } + }, + { + "id": "fixme", + "render": "This address is complicated. We have recorded the following description: {fixme:addr}", + "question": { + "en": "Please explain what the address is so that someone else can look at it" + }, + "freeform": { + "key": "fixme:addr" + }, + "mappings": [ + { + "if": "fixme:addr=", + "then": "Complicated address? Please click the pencil and write some text to describe the situation. You can also add a photo below if that helps", + "hideInAnswer": true + } + ] + }, + { + "id": "address-sign-image", "render": { - "en": "To send a letter to this addres, you would write:
Name of the inhabitant
{addr:housename}
{addr:unit} {addr:housenumber} {addr:street}
{addr:place}
Suburb
Town
Postal code
" + "en": "{image_carousel(image:address)}
{image_upload(image:address, Too complex? Add a photo of the address)}" } } ], diff --git a/assets/themes/waste_basket/waste_basket.json b/assets/themes/waste_basket/waste_basket.json index bdbfd2df40..b0bca66e1d 100644 --- a/assets/themes/waste_basket/waste_basket.json +++ b/assets/themes/waste_basket/waste_basket.json @@ -6,7 +6,8 @@ "de": "Abfalleimer", "it": "Cestino dei rifiuti", "zh_Hant": "垃圾筒", - "hu": "Kukatérkép" + "hu": "Kukatérkép", + "id": "Keranjang Sampah" }, "shortDescription": { "en": "A map with waste baskets", @@ -24,14 +25,6 @@ "zh_Hant": "在這份地圖當中,你可以找到你附近的垃圾筒。如果地圖有遺漏垃圾筒,你可以自己加上去", "hu": "Ezen a térképen megtalálhatod a közeledben lévő szemeteskosarakat. Ha hiányzik egy kuka a térképről, te is felrajzolhatod" }, - "language": [ - "en", - "nl", - "de", - "it", - "zh_Hant", - "hu" - ], "maintainer": "", "icon": "./assets/themes/waste_basket/waste_basket.svg", "version": "2021-07-07", diff --git a/automaton.html b/automaton.html index 4735380b2b..d4c9ffb3e7 100644 --- a/automaton.html +++ b/automaton.html @@ -1,5 +1,4 @@ - diff --git a/css/index-tailwind-output.css b/css/index-tailwind-output.css index 1191b9bcba..0872c2d754 100644 --- a/css/index-tailwind-output.css +++ b/css/index-tailwind-output.css @@ -752,14 +752,14 @@ video { bottom: 0px; } -.top-4 { - top: 1rem; -} - .right-1\/3 { right: 33.333333%; } +.top-4 { + top: 1rem; +} + .top-0 { top: 0px; } @@ -804,14 +804,14 @@ video { margin: 0.25rem; } -.m-5 { - margin: 1.25rem; -} - .m-4 { margin: 1rem; } +.m-5 { + margin: 1.25rem; +} + .m-0\.5 { margin: 0.125rem; } @@ -860,6 +860,10 @@ video { margin-left: 0.75rem; } +.mb-4 { + margin-bottom: 1rem; +} + .mt-4 { margin-top: 1rem; } @@ -872,6 +876,14 @@ video { margin-top: 0.25rem; } +.ml-4 { + margin-left: 1rem; +} + +.mb-24 { + margin-bottom: 6rem; +} + .mr-4 { margin-right: 1rem; } @@ -880,16 +892,20 @@ video { margin-top: 0.5rem; } +.mb-2 { + margin-bottom: 0.5rem; +} + .ml-2 { margin-left: 0.5rem; } -.mt-3 { - margin-top: 0.75rem; +.ml-12 { + margin-left: 3rem; } -.ml-8 { - margin-left: 2rem; +.mt-3 { + margin-top: 0.75rem; } .mb-10 { @@ -900,10 +916,6 @@ video { margin-top: 0px; } -.mb-4 { - margin-bottom: 1rem; -} - .mb-8 { margin-bottom: 2rem; } @@ -912,20 +924,16 @@ video { margin-left: 0.25rem; } -.mr-0 { - margin-right: 0px; -} - .mb-1 { margin-bottom: 0.25rem; } -.mr-3 { - margin-right: 0.75rem; +.mr-0 { + margin-right: 0px; } -.mb-2 { - margin-bottom: 0.5rem; +.mr-3 { + margin-right: 0.75rem; } .mb-0 { @@ -1044,6 +1052,10 @@ video { height: 2.75rem; } +.h-6 { + height: 1.5rem; +} + .h-32 { height: 8rem; } @@ -1052,12 +1064,20 @@ video { height: 4rem; } +.h-4 { + height: 1rem; +} + .h-0 { height: 0px; } -.h-6 { - height: 1.5rem; +.h-40 { + height: 10rem; +} + +.h-64 { + height: 16rem; } .h-3 { @@ -1088,6 +1108,10 @@ video { max-height: 2rem; } +.max-h-6 { + max-height: 1.5rem; +} + .w-full { width: 100%; } @@ -1138,6 +1162,10 @@ video { width: min-content; } +.w-auto { + width: auto; +} + .w-max { width: -webkit-max-content; width: -moz-max-content; @@ -1186,23 +1214,6 @@ video { transform: var(--tw-transform); } -@-webkit-keyframes pulse { - 50% { - opacity: .5; - } -} - -@keyframes pulse { - 50% { - opacity: .5; - } -} - -.animate-pulse { - -webkit-animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; - animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; -} - @-webkit-keyframes spin { to { transform: rotate(360deg); @@ -1220,6 +1231,23 @@ video { animation: spin 1s linear infinite; } +@-webkit-keyframes pulse { + 50% { + opacity: .5; + } +} + +@keyframes pulse { + 50% { + opacity: .5; + } +} + +.animate-pulse { + -webkit-animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; + animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; +} + .cursor-pointer { cursor: pointer; } @@ -1244,6 +1272,10 @@ video { flex-wrap: wrap; } +.flex-wrap-reverse { + flex-wrap: wrap-reverse; +} + .items-end { align-items: flex-end; } @@ -1256,6 +1288,10 @@ video { align-items: baseline; } +.items-stretch { + align-items: stretch; +} + .justify-end { justify-content: flex-end; } @@ -1272,6 +1308,12 @@ video { gap: 1rem; } +.space-x-2 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(0.5rem * var(--tw-space-x-reverse)); + margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse))); +} + .self-end { align-self: flex-end; } @@ -1352,14 +1394,14 @@ video { border-bottom-left-radius: 0.25rem; } -.border { - border-width: 1px; -} - .border-2 { border-width: 2px; } +.border { + border-width: 1px; +} + .border-4 { border-width: 4px; } @@ -1372,6 +1414,11 @@ video { border-bottom-width: 1px; } +.border-gray-500 { + --tw-border-opacity: 1; + border-color: rgba(107, 114, 128, var(--tw-border-opacity)); +} + .border-black { --tw-border-opacity: 1; border-color: rgba(0, 0, 0, var(--tw-border-opacity)); @@ -1406,11 +1453,6 @@ video { background-color: rgba(255, 255, 255, var(--tw-bg-opacity)); } -.bg-blue-100 { - --tw-bg-opacity: 1; - background-color: rgba(219, 234, 254, var(--tw-bg-opacity)); -} - .bg-gray-400 { --tw-bg-opacity: 1; background-color: rgba(156, 163, 175, var(--tw-bg-opacity)); @@ -1421,11 +1463,6 @@ video { background-color: rgba(224, 231, 255, var(--tw-bg-opacity)); } -.bg-gray-300 { - --tw-bg-opacity: 1; - background-color: rgba(209, 213, 219, var(--tw-bg-opacity)); -} - .bg-black { --tw-bg-opacity: 1; background-color: rgba(0, 0, 0, var(--tw-bg-opacity)); @@ -1441,6 +1478,11 @@ video { background-color: rgba(243, 244, 246, var(--tw-bg-opacity)); } +.bg-gray-300 { + --tw-bg-opacity: 1; + background-color: rgba(209, 213, 219, var(--tw-bg-opacity)); +} + .bg-red-500 { --tw-bg-opacity: 1; background-color: rgba(239, 68, 68, var(--tw-bg-opacity)); @@ -1459,10 +1501,6 @@ video { padding: 1rem; } -.p-1\.5 { - padding: 0.375rem; -} - .p-1 { padding: 0.25rem; } @@ -1475,10 +1513,23 @@ video { padding: 0px; } +.p-1\.5 { + padding: 0.375rem; +} + .p-0\.5 { padding: 0.125rem; } +.p-8 { + padding: 2rem; +} + +.px-0 { + padding-left: 0px; + padding-right: 0px; +} + .pb-12 { padding-bottom: 3rem; } @@ -1511,6 +1562,18 @@ video { padding-right: 0.25rem; } +.pt-2 { + padding-top: 0.5rem; +} + +.pb-2 { + padding-bottom: 0.5rem; +} + +.pt-0 { + padding-top: 0px; +} + .pl-5 { padding-left: 1.25rem; } @@ -1535,14 +1598,6 @@ video { padding-top: 0.125rem; } -.pt-0 { - padding-top: 0px; -} - -.pb-2 { - padding-bottom: 0.5rem; -} - .pr-2 { padding-right: 0.5rem; } @@ -1551,10 +1606,6 @@ video { padding-left: 1.5rem; } -.pt-2 { - padding-top: 0.5rem; -} - .text-center { text-align: center; } @@ -1744,6 +1795,12 @@ video { transition-duration: 150ms; } +.transition-shadow { + transition-property: box-shadow; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + .transition-opacity { transition-property: opacity; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); @@ -1766,112 +1823,44 @@ video { z-index: 10001 } -.btn { - display: inline-flex; - justify-content: center; - padding-top: 0.5rem; - padding-bottom: 0.5rem; - padding-left: 1rem; - padding-right: 1rem; - border-width: 1px; - border-color: transparent; - --tw-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); - border-radius: 1.5rem; - --tw-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); - --tw-ring-opacity: 1; - --tw-ring-color: rgba(191, 219, 254, var(--tw-ring-opacity)); -} - -.btn:hover { - --tw-ring-opacity: 1; - --tw-ring-color: rgba(147, 197, 253, var(--tw-ring-opacity)); -} - -.btn { - margin-top: 0.25rem; - margin-right: 0.25rem; - font-size: 0.875rem; - line-height: 1.25rem; - font-weight: 500; - --tw-text-opacity: 1; - color: rgba(255, 255, 255, var(--tw-text-opacity)); - --tw-bg-opacity: 1; - background-color: rgba(37, 99, 235, var(--tw-bg-opacity)); -} - -.btn:hover { - --tw-bg-opacity: 1; - background-color: rgba(29, 78, 216, var(--tw-bg-opacity)); -} - -.btn:focus { - outline: 2px solid transparent; - outline-offset: 2px; - --tw-ring-opacity: 1; - --tw-ring-color: rgba(29, 78, 216, var(--tw-ring-opacity)); -} - -.btn-secondary { - --tw-bg-opacity: 1; - background-color: rgba(75, 85, 99, var(--tw-bg-opacity)); -} - -.btn-secondary:hover { - --tw-bg-opacity: 1; - background-color: rgba(55, 65, 81, var(--tw-bg-opacity)); -} - -.btn-disabled { - --tw-bg-opacity: 1; - background-color: rgba(107, 114, 128, var(--tw-bg-opacity)); -} - -.btn-disabled:hover { - --tw-bg-opacity: 1; - background-color: rgba(107, 114, 128, var(--tw-bg-opacity)); -} - -.btn-disabled { - --tw-text-opacity: 1; - color: rgba(209, 213, 219, var(--tw-text-opacity)); - --tw-ring-opacity: 1; - --tw-ring-color: rgba(229, 231, 235, var(--tw-ring-opacity)); -} - -.btn-disabled:hover { - --tw-ring-opacity: 1; - --tw-ring-color: rgba(229, 231, 235, var(--tw-ring-opacity)); -} - -.btn-disabled:focus { - --tw-ring-opacity: 1; - --tw-ring-color: rgba(229, 231, 235, var(--tw-ring-opacity)); -} - -.btn-disabled { - cursor: default; +.bg-subtle { + background-color: var(--subtle-detail-color); + color: var(--subtle-detail-color-contrast); } :root { - --subtle-detail-color: #e5f5ff; + /* The main colour scheme of mapcomplete is configured here. + * For a custom styling, set 'customCss' in your layoutConfig and overwrite some of these. + */ + /* Main color of the application: the background and text colours */ + --background-color: white; + /* Main text colour. Also styles some elements, such as the 'close popup'-button or 'back-arrow' (in mobile) */ + --foreground-color: black; + /* A colour to indicate an error or warning */ + --alert-color: #fee4d1; + /** + * Base colour of interactive elements, mainly the 'subtle button' + * + */ + --subtle-detail-color: #DBEAFE; --subtle-detail-color-contrast: black; --subtle-detail-color-light-contrast: lightgrey; + /** + * A stronger variant of the 'subtle-detail-colour' + * Used as subtle button hover + */ + --unsubtle-detail-color: #BFDBFE; + --unsubtle-detail-color-contrast: black; --catch-detail-color: #3a3aeb; --catch-detail-color-contrast: white; - --alert-color: #fee4d1; - --background-color: white; - --foreground-color: black; - --popup-border: white; + --non-active-tab-svg: var(--foreground-color); --shadow-color: #00000066; - --variable-title-height: 0px; - /* Set by javascript */ --return-to-the-map-height: 2em; --image-carousel-height: 350px; + /* The border colour of the leaflet popup */ + --popup-border: white; + /* Technical variable to make some dynamic behaviour possible; set by javascript. */ + --variable-title-height: 0px; } html, body { @@ -1911,6 +1900,26 @@ svg, img { height: 100%; } +.svg-catch svg path { + fill: var(--catch-detail-color) !important; + stroke: var(--catch-detail-color) !important; +} + +.svg-unsubtle svg path { + fill: var(--unsubtle-detail-color) !important; + stroke: var(--unsubtle-detail-color) !important; +} + +.svg-subtle svg path { + fill: var(--subtle-detail-color) !important; + stroke: var(--subtle-detail-color) !important; +} + +.svg-foreground svg path { + fill: var(--foreground-color) !important; + stroke: var(--foreground-color) !important; +} + .no-images img { display: none; } @@ -1927,16 +1936,46 @@ a { color: var(--foreground-color); } -btn { - margin-top: 0.25rem; - margin-right: 0.25rem; - font-size: 0.875rem; +.btn { line-height: 1.25rem; - font-weight: 500; --tw-text-opacity: 1; color: var(--catch-detail-color-contrast); --tw-bg-opacity: 1; background-color: var(--catch-detail-color); + display: inline-flex; + border-radius: 1.5rem; + padding-top: 0.75rem; + padding-bottom: 0.75rem; + padding-left: 1.25rem; + padding-right: 1.25rem; + font-size: large; + font-weight: bold; + transition: 100ms; + /*-- invisible border: rendered on hover*/ + border: 3px solid var(--unsubtle-detail-color); +} + +.btn:hover { + border: 3px solid var(--catch-detail-color); +} + +.btn-secondary { + background-color: var(--catch-detail-color); + filter: saturate(0.5); +} + +.btn-secondary:hover { + background-color: var(--catch-detail-color); + filter: unset; +} + +.btn-disabled { + filter: saturate(0.3); + cursor: default; +} + +.btn-disabled:hover { + border: 3px solid var(--unsubtle-detail-color); } .h-min { @@ -1945,6 +1984,10 @@ btn { height: min-content; } +.border-detail { + border-color: var(--foreground-color); +} + .w-min { width: -webkit-min-content; width: -moz-min-content; @@ -1956,9 +1999,8 @@ btn { } .link-underline a { - -webkit-text-decoration: underline 1px #0078a855; - text-decoration: underline 1px #0078a855; - color: #0078A8; + -webkit-text-decoration: underline 1px var(--foreground-color); + text-decoration: underline 1px var(--foreground-color); } .link-no-underline a { @@ -2039,6 +2081,7 @@ li::marker { } .leaflet-container { + font: unset !important; background-color: var(--background-color) !important; } @@ -2090,6 +2133,7 @@ li::marker { .alert { background-color: var(--alert-color); + color: var(--foreground-color); font-weight: bold; border-radius: 1em; margin: 0.25em; @@ -2274,14 +2318,16 @@ li::marker { max-width: calc(100vw - 5em); width: 40em; max-height: calc(100vh - 15em); - overflow-y: auto; - border-radius: 1em; background-color: var(--background-color); color: var(--foreground-color); } /***************** Info box (box containing features and questions ******************/ +input { + color: var(--foreground-color) +} + .leaflet-popup-content { width: 45em !important; margin: 0.25rem !important; @@ -2335,9 +2381,28 @@ li::marker { overflow-y: hidden; } -.hover\:bg-blue-200:hover { - --tw-bg-opacity: 1; - background-color: rgba(191, 219, 254, var(--tw-bg-opacity)); +.zebra-table tr:nth-child(even) { + background-color: #f2f2f2; +} + +.layer-toggle { + /* The checkbox that toggles a single layer */ +} + +.layer-filters { + /* If needed, the panel which contains the extra filters for a layer */ + margin-bottom: 1rem; + border-bottom: 2px solid var(--foreground-color); +} + +.filter-panel { + /* The panel for a single layer, containing both the toggle and the filters (if any) */ + border-bottom: 2px solid lightgrey; + margin-bottom: 0.5rem; +} + +.first-filter-panel { + /* Additional class on the first layer filter */ } .hover\:bg-indigo-200:hover { @@ -2359,6 +2424,11 @@ li::marker { box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } +.hover\:bg-unsubtle:hover { + background-color: var(--unsubtle-detail-color); + color: var(--unsubtle-detail-color-contrast); +} + .group:hover .group-hover\:text-blue-800 { --tw-text-opacity: 1; color: rgba(30, 64, 175, var(--tw-text-opacity)); @@ -2558,6 +2628,10 @@ li::marker { padding: 0.75rem; } + .md\:pt-4 { + padding-top: 1rem; + } + .md\:pt-0 { padding-top: 0px; } @@ -2566,10 +2640,6 @@ li::marker { padding-bottom: 0px; } - .md\:pt-4 { - padding-top: 1rem; - } - .md\:text-2xl { font-size: 1.5rem; line-height: 2rem; @@ -2626,3 +2696,4 @@ li::marker { display: inline; } } + diff --git a/css/tabbedComponent.css b/css/tabbedComponent.css index 2096eac05f..39b949b29b 100644 --- a/css/tabbedComponent.css +++ b/css/tabbedComponent.css @@ -64,11 +64,11 @@ } .tab-non-active svg { - fill: var(--foreground-color) !important; - stroke: var(--foreground-color) !important; + fill: var(--non-active-tab-svg) !important; + stroke: var(--non-active-tab-svg) !important; } .tab-non-active svg path { - fill: var(--foreground-color) !important; - stroke: var(--foreground-color) !important; + fill: var(--non-active-tab-svg) !important; + stroke: var(--non-active-tab-svg) !important; } diff --git a/import_helper.html b/import_helper.html new file mode 100644 index 0000000000..a64cc840ae --- /dev/null +++ b/import_helper.html @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + MapComplete Import Helper + + + + + + + + + + + + + + + + + + + + + +
Loading...
+ + + + + + diff --git a/import_viewer.html b/import_viewer.html new file mode 100644 index 0000000000..bcf476da70 --- /dev/null +++ b/import_viewer.html @@ -0,0 +1,46 @@ + + + + + + + + + + + + MapComplete Import Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading...
+ + + + + + diff --git a/index.css b/index.css index 7f7262740f..7a87c449d9 100644 --- a/index.css +++ b/index.css @@ -24,49 +24,70 @@ .w-160 { width: 40rem; } + + .bg-subtle { + background-color: var(--subtle-detail-color); + color: var(--subtle-detail-color-contrast); + } + + .bg-unsubtle { + background-color: var(--unsubtle-detail-color); + color: var(--unsubtle-detail-color-contrast); + } + + .bg-catch { + background-color: var(--catch-detail-color); + color: var(--catch-detail-color-contrast); + } } - .btn { - @apply inline-flex justify-center; - @apply py-2 px-4; - @apply border border-transparent shadow-sm; - @apply shadow-sm rounded-3xl; - @apply ring-2 ring-blue-200 hover:ring-blue-300; - @apply mt-1 mr-1; - @apply text-sm font-medium text-white; - @apply bg-blue-600 hover:bg-blue-700; - @apply focus:outline-none focus:ring-blue-700; - } - - .btn-secondary { - @apply bg-gray-600 hover:bg-gray-700; - } - - .btn-disabled { - @apply bg-gray-500 hover:bg-gray-500; - @apply text-gray-300; - @apply ring-gray-200 hover:ring-gray-200 focus:ring-gray-200; - @apply cursor-default; - } } :root { - --subtle-detail-color: #e5f5ff; + /* The main colour scheme of mapcomplete is configured here. + * For a custom styling, set 'customCss' in your layoutConfig and overwrite some of these. + */ + + /* Main color of the application: the background and text colours */ + --background-color: white; + /* Main text colour. Also styles some elements, such as the 'close popup'-button or 'back-arrow' (in mobile) */ + --foreground-color: black; + + /* A colour to indicate an error or warning */ + --alert-color: #fee4d1; + + /** + * Base colour of interactive elements, mainly the 'subtle button' + * + */ + --subtle-detail-color: #DBEAFE; --subtle-detail-color-contrast: black; --subtle-detail-color-light-contrast: lightgrey; + /** + * A stronger variant of the 'subtle-detail-colour' + * Used as subtle button hover + */ + --unsubtle-detail-color: #BFDBFE; + --unsubtle-detail-color-contrast: black; + + --catch-detail-color: #3a3aeb; --catch-detail-color-contrast: white; - --alert-color: #fee4d1; - --background-color: white; - --foreground-color: black; - --popup-border: white; - --shadow-color: #00000066; - --variable-title-height: 0px; /* Set by javascript */ - --return-to-the-map-height: 2em; + + --non-active-tab-svg: var(--foreground-color); + --shadow-color: #00000066; + + --return-to-the-map-height: 2em; --image-carousel-height: 350px; + + /* The border colour of the leaflet popup */ + --popup-border: white; + + /* Technical variable to make some dynamic behaviour possible; set by javascript. */ + --variable-title-height: 0px; } html, body { @@ -106,6 +127,26 @@ svg, img { height: 100%; } +.svg-catch svg path { + fill: var(--catch-detail-color) !important; + stroke: var(--catch-detail-color) !important; +} + +.svg-unsubtle svg path { + fill: var(--unsubtle-detail-color) !important; + stroke: var(--unsubtle-detail-color) !important; +} + +.svg-subtle svg path { + fill: var(--subtle-detail-color) !important; + stroke: var(--subtle-detail-color) !important; +} + +.svg-foreground svg path { + fill: var(--foreground-color) !important; + stroke: var(--foreground-color) !important; +} + .no-images img { display: none; } @@ -122,22 +163,58 @@ a { color: var(--foreground-color); } -btn { - margin-top: 0.25rem; - margin-right: 0.25rem; - font-size: 0.875rem; +.btn { line-height: 1.25rem; - font-weight: 500; --tw-text-opacity: 1; color: var(--catch-detail-color-contrast); --tw-bg-opacity: 1; background-color: var(--catch-detail-color); + display: inline-flex; + border-radius: 1.5rem; + padding-top: 0.75rem; + padding-bottom: 0.75rem; + padding-left: 1.25rem; + padding-right: 1.25rem; + font-size: large; + font-weight: bold; + transition: 100ms; + /*-- invisible border: rendered on hover*/ + border: 3px solid var(--unsubtle-detail-color); +} + +.btn:hover { + border: 3px solid var(--catch-detail-color); +} + +.btn-secondary { + background-color: var(--catch-detail-color); + filter: saturate(0.5); + +} + +.btn-secondary:hover { + background-color: var(--catch-detail-color); + filter: unset; +} + +.btn-disabled { + filter: saturate(0.3); + cursor: default; +} + +.btn-disabled:hover { + border: 3px solid var(--unsubtle-detail-color); } .h-min { height: min-content; } + +.border-detail { + border-color: var(--foreground-color); +} + .w-min { width: min-content; } @@ -147,8 +224,7 @@ btn { } .link-underline a { - text-decoration: underline 1px #0078a855;; - color: #0078A8; + text-decoration: underline 1px var(--foreground-color); } .link-no-underline a { @@ -233,6 +309,7 @@ li::marker { } .leaflet-container { + font: unset !important; background-color: var(--background-color) !important; } @@ -286,6 +363,7 @@ li::marker { .alert { background-color: var(--alert-color); + color: var(--foreground-color); font-weight: bold; border-radius: 1em; margin: 0.25em; @@ -419,15 +497,17 @@ li::marker { max-width: calc(100vw - 5em); width: 40em; max-height: calc(100vh - 15em); - overflow-y: auto; - border-radius: 1em; background-color: var(--background-color); color: var(--foreground-color); } + /***************** Info box (box containing features and questions ******************/ +input { + color: var(--foreground-color) +} .leaflet-popup-content { width: 45em !important; @@ -482,3 +562,29 @@ li::marker { transition: max-height .5s ease-in-out; overflow-y: hidden; } + + +.zebra-table tr:nth-child(even) { + background-color: #f2f2f2; +} + +.layer-toggle { + /* The checkbox that toggles a single layer */ +} + +.layer-filters { + /* If needed, the panel which contains the extra filters for a layer */ + margin-bottom: 1rem; + border-bottom: 2px solid var(--foreground-color); +} + +.filter-panel { + /* The panel for a single layer, containing both the toggle and the filters (if any) */ + border-bottom: 2px solid lightgrey; + margin-bottom: 0.5rem; +} + +.first-filter-panel { + /* Additional class on the first layer filter */ +} + diff --git a/index.html b/index.html index d7a2734e8c..6f4f08b31c 100644 --- a/index.html +++ b/index.html @@ -1,5 +1,4 @@ - diff --git a/index.manifest b/index.manifest index e9ccebb12a..9109a8b09f 100644 --- a/index.manifest +++ b/index.manifest @@ -2,6 +2,7 @@ "name": "index", "short_name": "MapComplete", "start_url": "index.html", + "lang": "en", "display": "standalone", "background_color": "#fff", "description": "A thematic map viewer and editor based on OpenStreetMap", @@ -58,7 +59,7 @@ "type": "image/png" }, { - "src": "assets/svg/mapcomplete_logo.svg", + "src": "./assets/svg/mapcomplete_logo.svg", "sizes": "513x513", "type": "image/svg" } diff --git a/index.ts b/index.ts index 024b40f795..58a0e54b79 100644 --- a/index.ts +++ b/index.ts @@ -1,6 +1,5 @@ import {FixedUiElement} from "./UI/Base/FixedUiElement"; import Combine from "./UI/Base/Combine"; -import AvailableBaseLayers from "./Logic/Actors/AvailableBaseLayers"; import MinimapImplementation from "./UI/Base/MinimapImplementation"; import {Utils} from "./Utils"; import AllThemesGui from "./UI/AllThemesGui"; @@ -8,13 +7,11 @@ import DetermineLayout from "./Logic/DetermineLayout"; import LayoutConfig from "./Models/ThemeConfig/LayoutConfig"; import DefaultGUI from "./UI/DefaultGUI"; import State from "./State"; -import AvailableBaseLayersImplementation from "./Logic/Actors/AvailableBaseLayersImplementation"; import ShowOverlayLayerImplementation from "./UI/ShowDataLayer/ShowOverlayLayerImplementation"; import {DefaultGuiState} from "./UI/DefaultGuiState"; // Workaround for a stupid crash: inject some functions which would give stupid circular dependencies or crash the other nodejs scripts running from console MinimapImplementation.initialize() -AvailableBaseLayers.implement(new AvailableBaseLayersImplementation()) ShowOverlayLayerImplementation.Implement(); // Miscelleanous Utils.DisableLongPresses() @@ -41,7 +38,7 @@ class Init { window.mapcomplete_state = State.state; new DefaultGUI(State.state, guiState) - + } } @@ -61,8 +58,8 @@ new Combine(["Initializing...
", DetermineLayout.GetLayout().then(value => { console.log("Got ", value) Init.Init(value) - }).catch(err => { - console.error("Error while initializing: ", err, err.stack) - }) +}).catch(err => { + console.error("Error while initializing: ", err, err.stack) +}) diff --git a/langs/cs.json b/langs/cs.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/langs/cs.json @@ -0,0 +1 @@ +{} diff --git a/langs/de.json b/langs/de.json index 1b12541c8a..81cf2a0463 100644 --- a/langs/de.json +++ b/langs/de.json @@ -4,7 +4,7 @@ "uploadingPicture": "Bild wird hochgeladen…", "uploadingMultiple": "{count} Bilder hochladen…", "pleaseLogin": "Bitte einloggen, um ein Bild hinzuzufügen", - "willBePublished": "Ihr Bild wird veröffentlicht: ", + "willBePublished": "Ihr Bild wird veröffentlicht ", "cco": "als 'Public Domain'", "ccbs": "unter der 'CC-BY-SA-Lizenz'", "ccb": "unter der 'CC-BY-Lizenz'", @@ -15,7 +15,10 @@ "doDelete": "Bild entfernen", "isDeleted": "Gelöscht", "uploadMultipleDone": "{count} Bilder wurden hinzugefügt. Vielen Dank für die Hilfe!", - "toBig": "Ihr Bild ist zu groß, da es {actual_size} ist. Bitte verwenden Sie Bilder von höchstens {max_size}" + "toBig": "Ihr Bild ist zu groß, da es {actual_size} ist. Bitte verwenden Sie Bilder von höchstens {max_size}", + "ccoExplanation": "Das Hinzufügen eines gemeinfreien Bildes impliziert, dass jeder alles mit Ihrem Bild machen kann", + "ccbsExplanation": "Die CC-BY-SA-Lizenz bedeutet, dass jeder Ihr Bild für jeden Zweck verwenden darf, aber Sie müssen genannt werden, und Remixe des Bildes müssen unter derselben Lizenz veröffentlicht werden", + "ccbExplanation": "Die CC-BY-Lizenz besagt, dass jeder Ihr Bild für jeden Zweck verwenden darf, aber Sie müssen als Urheber genannt werden" }, "centerMessage": { "loadingData": "Daten werden geladen…", @@ -28,9 +31,11 @@ "title": "Willkommen bei MapComplete", "intro": "MapComplete ist eine OpenStreetMap-Anwendung, mit der Informationen zu Objekten eines bestimmten Themas angezeigt und angepasst werden können.", "pickTheme": "Wähle unten ein Thema, um zu starten.", - "featuredThemeTitle": "Diese Woche im Blickpunkt" + "featuredThemeTitle": "Diese Woche im Blickpunkt", + "logIn": "Melden Sie sich an, um Themen anzuzeigen, die Sie zuvor besucht haben" }, "general": { + "example": "Beispiel", "loginWithOpenStreetMap": "Bei OpenStreetMap anmelden", "welcomeBack": "Sie sind eingeloggt, willkommen zurück!", "loginToStart": "Anmelden, um diese Frage zu beantworten", @@ -65,7 +70,9 @@ "disableFilters": "Alle Filter deaktivieren", "hasBeenImported": "Dieser Punkt wurde bereits importiert", "zoomInMore": "Vergrößern Sie die Ansicht, um dieses Element zu importieren", - "warnVisibleForEveryone": "Ihre Ergänzung wird für alle sichtbar sein" + "warnVisibleForEveryone": "Ihre Ergänzung wird für alle sichtbar sein", + "importTags": "Das Element erhält {tags}", + "wrongType": "Dieses Element ist weder ein Punkt noch ein Weg und kann nicht importiert werden" }, "pickLanguage": "Sprache wählen: ", "about": "OpenStreetMap für ein bestimmtes Thema einfach bearbeiten und hinzufügen", diff --git a/langs/en.json b/langs/en.json index 51d452ab82..3b70fef9ba 100644 --- a/langs/en.json +++ b/langs/en.json @@ -70,6 +70,11 @@ "readMessages": "You have unread messages. Read these before deleting a point - someone might have feedback" }, "general": { + "logout": "Log out", + "next": "Next", + "confirm": "Confirm", + "back": "Back", + "backToMapcomplete": "Back to the theme overview", "loading": "Loading...", "pdf": { "generatedWith": "Generated with MapComplete.osm.be", @@ -80,6 +85,7 @@ "loginWithOpenStreetMap": "Login with OpenStreetMap", "welcomeBack": "You are logged in, welcome back!", "loginToStart": "Log in to answer this question", + "loginFailed": "Logging in into OpenStreetMap failed", "openStreetMapIntro": "

An Open Map

One that everyone can use and edit freely. A single place to store all geo-info. Different, small, incompatible and outdated maps are not needed anywhere.

OpenStreetMap is not the enemy map. The map data can be used freely (with attribution and publication of changes to that data). Everyone can add new data and fix errors. This website uses OpenStreetMap. All the data is from there, and your answers and corrections are used all over.

Many people and apps already use OpenStreetMap: Organic Maps, OsmAnd, but also the maps at Facebook, Instagram, Apple-maps and Bing-maps are (partly) powered by OpenStreetMap.

", "search": { "search": "Search a location", @@ -99,16 +105,16 @@ "addNewMapLabel": "Click here to add a new item", "disableFiltersExplanation": "Some features might be hidden by a filter", "disableFilters": "Disable all filters", - "addNew": "Add a new {category} here", + "addNew": "Add a new {category}", "presetInfo": "The new POI will have {tags}", "warnVisibleForEveryone": "Your addition will be visible for everyone", "title": "Add a new point?", "intro": "You clicked somewhere where no data is known yet.
", - "pleaseLogin": "Please log in to add a new point", + "pleaseLogin": "Please log in to add a new point", "zoomInFurther": "Zoom in further to add a point.", "stillLoading": "The data is still loading. Please wait a bit before you add a new point.", - "confirmIntro": "

Add a {title} here?

The point you create here will be visible for everyone. Please, only add things on to the map if they truly exist. A lot of applications use this data.", - "confirmButton": "Add a {category} here.
Your addition is visible for everyone
", + "confirmIntro": "

Add a {title}?

The point you create here will be visible for everyone. Please, only add things on to the map if they truly exist. A lot of applications use this data.", + "confirmButton": "Add a {category}
Your addition is visible for everyone
", "openLayerControl": "Open the layer control box", "layerNotEnabled": "The layer {layer} is not enabled. Enable this layer to add a point", "hasBeenImported": "This point has already been imported", @@ -266,7 +272,11 @@ "apply_button": { "isApplied": "The changes are applied", "appliedOnAnotherObject": "The object {id} will receive {tags}" - } + }, + "loadingTheme": "Loading {theme}...", + "poweredByOsm": "Powered by OpenStreetMap", + "example": "Example", + "examples": "Examples" }, "favourite": { "panelIntro": "

Your personal theme

Activate your favourite layers from all the official themes", @@ -332,7 +342,6 @@ "surveillance": "As you are reading the privacy policy, you probably care about privacy - so do we! We even made a theme showing surveillance cameras. Feel free to map them all!" }, "professional": { - "backToMapcomplete": "Back to the theme overview", "indexPage": { "hook": "Need professional support?", "hookMore": "We can help with setting up surveys, data imports and OpenStreetMap-consultancy", @@ -347,7 +356,7 @@ "aboutOsm": { "title": "What is OpenStreetMap?", "intro": "OpenStreetMap is a shared, global database, built by volunteers. All geodata can be contributed to OpenStreetMap, as long as it can be verified on the ground.
OpenStreetMap has grown to be a very broad and deep dataset as it contains data over thousands of categories of objects.An individual object might also have a ton of attributes, bringing a lot of nuance, e.g.:", - "li0": "Streets have geometry, but might also have information about the maxspeed, surface, wether they are lit, their name, a link to Wikipedia, a link to what they are named after, which hiking-, cycle- and busroutes run over theme", + "li0": "Streets have geometry, but might also have information about the maxspeed, surface, wether they are lit, their name, a link to Wikipedia, a link to what they are named after, which hiking-, cycle- and busroutes run there, …", "li1": "Shops and other amenities might have opening hours, a phone number, a link to the website, which payment methods are supported, what they sell, which services they offer, …", "li2": "Toilets might have information about wheelchair accessibility, a changing table, if payment is needed, …", "li3": "and much, much more…" @@ -387,7 +396,7 @@ }, "survey": { "title": "Survey possibilities", - "intro": "

MapComplete is an easy to use survey tool. It is ideal to collect the necessary in a few clicks, both on desktop and on mobile. This data is contributed directly into OpenStreetMap.

We can setup a custom survey tool, asking precisely the data you need in a future-proof way.

Do you have a dataset that has to be (re)surveyed? This is the perfect moment to make the switch to OpenStreetMap.MapComplete can show your dataset and OpenStreetMap at the same time, making it easier to visit all the locations and to see what the community already contributed.

\n" + "intro": "

MapComplete is an easy to use survey tool. It is ideal to collect the necessary in a few clicks, both on desktop and on mobile. This data is contributed directly into OpenStreetMap.

We can setup a custom survey tool, asking precisely the data you need in a future-proof way.

Do you have a dataset that has to be (re)surveyed? This is the perfect moment to make the switch to OpenStreetMap. MapComplete can show your dataset and OpenStreetMap at the same time, making it easier to visit all the locations and to see what the community already contributed.

\n" }, "internalUse": { "title": "Using the data in internal processes", @@ -424,13 +433,13 @@ "usecaseMapDifferentSources": { "title": "Creating a map from different sources", "intro": "

For example, one could make a map with all benches in some city, based on the benches known by OpenStreetMap. This printed map needs a clear statement that the map data is based on OpenStreetMap. Selling these maps is permitted.If the mapmaker notices that the benches are missing in some area and adds them on the printed map, the data on the missing benches are automatically open data too. This means that an OpenStreetMap-contributor is allowed to take the paper map and use it to add the missing benches back into OpenStreetMap.

This contributor also has the right to ask for the dataset of the missing benches, which should be provided too.

If the mapmaker notices that the benches are missing in some area and adds them on the printed map, the data on the missing benches are automatically open data too. This means that an OpenStreetMap-contributor is allowed to take the paper map and use it to add the missing benches back into OpenStreetMap. This contributor also has the right to ask for the dataset of the missing benches, which should be provided too.

Of course, a map with only benches can be boring. The mapmaker might also decide to add in a layer with shops, possibly sourced from another geodata provider under another license. This is permitted to, if the map clearly states that the benches are sourced from OSM (under ODBL) and the shops have a different source (eventually with an all rights reserved).

However, mixing two datasets into one undistinguishible layer might not be permitted. For example, the mapmaker migth find that OSM has excellent data on benches in one part of the city and the closed-source provider might have excellent data on benches in another part of the city, merging these datasets into one could be problematic:

", - "li0": "the open license would require the modifications to be openly republished...", - "li1": "...whereas the all-rights-reserved license would prohibit this.", + "li0": "the open license would require the modifications to be openly republished…", + "li1": "…whereas the all-rights-reserved license would prohibit this.", "outro": "As a result, this kind of mixing is not allowed" }, "usecaseGatheringOpenData": { "title": "Gathering open data", - "intro": "MapComplete is an excellent way to create Open Data, also for governments. By default, this data will be freely redistributable under the ODbL. However, if there is a requirement to publish the gathered data under a public domain-license (where all rights are granted to the public and no attribution is required), the ODbL is too restrictive. In this case, one can ask the contributors to add data as Public Domain (e.g. by informing them in the mapcomplete theme). " + "intro": "MapComplete is an excellent way to create Open Data, also for governments. By default, this data will be freely redistributable under the ODbL. However, if there is a requirement to publish the gathered data under a public domain-license (where all rights are granted to the public and no attribution is required), the ODbL is too restrictive. In this case, one can ask the contributors to add data as Public Domain (e.g. by informing them in the mapcomplete theme)." } } } @@ -449,6 +458,7 @@ "loginToClose": "Login to close this note", "createNoteTitle": "Create a new note here", "createNote": "Create a new note", + "textNeeded": "Enter a descriptive text to create a note", "noteIsPublic": "This will be visible to everyone", "createNoteIntro": "Is something wrong or missing on the map? Create a note here. These will be checked by volunteers", "warnAnonymous": "You are not logged in. We won't be able to contact you to resolve your issue.", @@ -462,6 +472,90 @@ "importLayer": { "layerName": "Possible {title}", "description": "A layer which imports entries for {title}", - "popupTitle": "Possible {title}" + "popupTitle": "Possible {title}", + "importButton": "import_button({layerId}, _tags, I have found a {title} here - add it to the map,./assets/svg/addSmall.svg,,,id)", + "notFound": "I could not find {title} - remove it", + "alreadyMapped": "There already is another {title} on the map - this point is a duplicate", + "importHandled": "
This feature has been handled! Thanks for your effort
" + }, + "importHelper": { + "title": "Import helper", + "description": "The import helper converts an external dataset to notes. The external dataset must match one of the existing MapComplete layers. For every item you put in the importer, a single note will be created. These notes will be shown together with the relevant features in these maps to easily add them.", + "importFormat": "A text in a note should have the following format in order to be picked up:
[A bit of introduction]
https://mapcomplete.osm.be/[themename].html?[parameters such as lat and lon]#import
[all tags of the feature]
", + "userAccountTitle": "Select user account", + "loggedInWith": "You are currently logged in as {name} and have made {csCount} changesets", + "loginRequired": "You have to be logged in to continue", + "locked": "You need at least {importHelperUnlock} to use the import helper", + "lockNotice": "This page is locked. You need {importHelperUnlock} changesets before you can access here.", + "selectLayer": "Select a layer...", + "selectFile": { + "title": "Select file", + "description": "Select a .csv or .geojson file to get started", + "fileFormatDescription": "Select a .csv or a .geojson file", + "fileFormatDescriptionCsv": "In the CSV-file, there should be a column lat and lon with the coordinates in WGS84. There should be an additional column for every attribute.", + "fileFormatDescriptionGeoJson": "In the geojson file, only points should be present. The properties should be exactly those properties that should go into OpenStreetMap", + "errNoName": "Some columns don't have a name", + "noFilesLoaded": "No file is currently loaded", + "errDuplicate": "Some columns have the same name", + "loadedFilesAre": "Currently loaded file is {file}", + "errNoLatOrLon": "The header does not contain `lat` or `lon`", + "errPointsOnly": "The loaded JSON-file should only contain points", + "errNotFeatureCollection": "The loaded JSON-file is not a geojson-featurecollection" + }, + "mapPreview": { + "title": "Map preview", + "autodetected": "The layer was automatically deducted based on the properties", + "selectLayer": "Which layer does this import match with?", + "mismatch": "{count} features did not match the selected layer. Make sure that the tags to indicate the type are present, namely {tags}", + "confirm": "The features are on the right location on the map" + }, + "validateDataTitle": "Validate data", + "allAttributesSame": "All features to import have this tag", + "someHaveSame": "{count} features to import have this tag, this is {percentage}% of the total", + "inspectDataTitle": "Inspect data of {count} features to import", + "inspectDidAutoDected": "Layer was chosen automatically", + "inspectLooksCorrect": "These values look correct" + }, + "importInspector": { + "title": "Inspect and manage import notes" + }, + "validation": { + "string": { + "description": "a piece of text" + }, + "email": { + "description": "email-adres", + "feedback": "This is not a valid email address", + "noAt": "An email address should contain an @" + }, + "phone": { + "description": "a phone number", + "feedback": "This is not a valid phone number" + }, + "url": { + "description": "link to a website", + "feedback": "This is not a valid web address" + }, + "pnat": { + "description": "a positive, whone number", + "noZero": "Zero is not allowed" + }, + "nat": { + "description": "a positive, whole number or zero", + "mustBePositive": "This number should be positive", + "notANumber": "Enter a number", + "mustBeWhole": "Only whole numbers are allowed" + }, + "int": { + "description": "a whole number" + }, + "float": { + "description": "a number", + "feedback": "This is not a number" + }, + "pfloat": { + "description": "a positive number" + }, + "tooLong": "Text is to long, at most 255 characters are allowed. You do have {count} characters now" } -} +} \ No newline at end of file diff --git a/langs/es.json b/langs/es.json index 0b1b46dd87..aca5e1e66b 100644 --- a/langs/es.json +++ b/langs/es.json @@ -1,167 +1,182 @@ { - "image": { - "addPicture": "Añadir foto", - "uploadingPicture": "Subiendo tu imagen…", - "uploadingMultiple": "Subiendo {count} de tus fotos…", - "pleaseLogin": "Entra para subir una foto", - "willBePublished": "Tu foto será publicada: ", - "cco": "en dominio público", - "ccbs": "bajo licencia CC-BY-SA", - "ccb": "bajo licencia CC-BY", - "uploadFailed": "No se pudo cargar la imagen. ¿Tienes Internet y se permiten API de terceros? El navegador Brave o UMatrix podría bloquearlas.", - "respectPrivacy": "No fotografíes personas o matrículas. No subas datos de Google Maps, Google Streetview u otras fuentes protegidas por derechos de autor.", - "uploadDone": "Tu imagen ha sido añadida. Gracias por ayudar.", - "dontDelete": "Cancelar", - "doDelete": "Borrar imagen", - "isDeleted": "Borrada" - }, - "centerMessage": { - "loadingData": "Cargando datos…", - "zoomIn": "Amplía para ver o editar los datos", - "ready": "Hecho.", - "retrying": "La carga de datos ha fallado. Volviéndolo a probar en {count} segundos…" - }, - "index": { - "#": "Estos textos son mostrados sobre los botones del tema cuando no hay un tema cargado", - "pickTheme": "Elige un tema de abajo para empezar.", - "intro": "MapComplete a un visor y editor de OpenStreetMap, que te muestra información sobre un tema específico.", - "title": "Bienvenido a MapComplete" - }, - "general": { - "loginWithOpenStreetMap": "Entra en OpenStreetMap", - "welcomeBack": "Has entrado, bienvenido.", - "loginToStart": "Entra para contestar esta pregunta", - "search": { - "search": "Busca una ubicación", - "searching": "Buscando…", - "nothing": "Nada encontrado.", - "error": "Alguna cosa no ha ido bien..." + "image": { + "addPicture": "Añadir foto", + "uploadingPicture": "Cargando la imagen…", + "uploadingMultiple": "Cargando {count} imágenes…", + "pleaseLogin": "Acceda para cargar una imagen", + "willBePublished": "La imagen se publicará ", + "cco": "en dominio público", + "ccbs": "bajo licencia CC-BY-SA", + "ccb": "bajo licencia CC-BY", + "uploadFailed": "No se pudo cargar la imagen. ¿Tiene Internet y se permiten las API de terceros? El navegador Brave o uMatrix podría bloquearlas.", + "respectPrivacy": "No fotografíe personas ni matrículas. No cargue datos de Google Maps, Google StreetView u otras fuentes protegidas por derechos de autor.", + "uploadDone": "Se ha añadido la imagen. Gracias por ayudar.", + "dontDelete": "Cancelar", + "doDelete": "Borrar imagen", + "isDeleted": "Borrada", + "uploadMultipleDone": "Se han añadido {count} imágenes. Gracias por ayudar." }, - "returnToTheMap": "Volver al mapa", - "save": "Guardar", - "cancel": "Cancelar", - "skip": "Saltar esta pregunta", - "oneSkippedQuestion": "Has ignorado una pregunta", - "skippedQuestions": "Has ignorado algunas preguntas", - "number": "número", - "osmLinkTooltip": "Mira este objeto en OpenStreetMap para ver historial y otras opciones de edición", - "add": { - "addNew": "Añadir {category} aquí", - "title": "Quieres añadir un punto?", - "intro": "Has marcado un lugar del que no conocemos los datos.
", - "pleaseLogin": "`Por favor inicia sesión para añadir un nuevo punto", - "zoomInFurther": "Acerca para añadir un punto.", - "stillLoading": "Los datos se siguen cargando. Espera un poco antes de añadir ningún punto.", - "confirmIntro": "

Añadir {title} aquí?

El punto que estás creando lo verá todo el mundo. Sólo añade cosas que realmente existan. Muchas aplicaciones usan estos datos.", - "confirmButton": "Añadir una {category} aquí.
Tu contribución es visible para todos
", - "openLayerControl": "Abrir el control de capas", - "layerNotEnabled": "La capa {layer} no está habilitada. Hazlo para poder añadir un punto en esta capa" + "centerMessage": { + "loadingData": "Cargando datos…", + "zoomIn": "Amplía para ver o editar los datos", + "ready": "Hecho.", + "retrying": "La carga de datos ha fallado. Volviéndolo a probar en {count} segundos…" }, - "pickLanguage": "Escoge idioma: ", - "about": "Edita facilmente y añade puntos en OpenStreetMap de un tema concreto", - "nameInlineQuestion": "{category}: Su nombre es $$$", - "noNameCategory": "{category} sin nombre", - "questions": { - "phoneNumberOf": "Qué teléfono tiene {category}?", - "phoneNumberIs": "El número de teléfono de {category} es {phone}", - "websiteOf": "Cual es la página web de {category}?", - "websiteIs": "Página web: {website}", - "emailOf": "¿Qué dirección de correu tiene {category}?", - "emailIs": "La dirección de correo de {category} es {email}" + "index": { + "#": "Estos textos son mostrados sobre los botones del tema cuando no hay un tema cargado", + "pickTheme": "Elige un tema de abajo para empezar.", + "intro": "MapComplete a un visor y editor de OpenStreetMap, que te muestra información sobre un tema específico.", + "title": "Le damos la bienvenida a MapComplete", + "featuredThemeTitle": "Esta semana destacamos" }, - "openStreetMapIntro": "

Un mapa abierto

¿No sería genial si hubiera un solo mapa, que todos pudieran usar y editar libremente?¿Un solo lugar para almacenar toda la información geográfica? Entonces, todos esos sitios web con mapas diferentes, pequeños e incompatibles (que siempre están desactualizados) ya no serían necesarios.

OpenStreetMap es ese mapa. Los datos del mapa se pueden utilizar de forma gratuita (con atribución y publicación de cambios en esos datos). Además de eso, todos pueden agregar libremente nuevos datos y corregir errores. Este sitio web también usa OpenStreetMap. Todos los datos provienen de allí, y tus respuestas y correcciones también se añadirán allí.

Muchas personas y aplicaciones ya usan OpenStreetMap: Maps.me, OsmAnd, pero también los mapas de Facebook, Instagram, Apple y Bing son (en parte) impulsados ​​por OpenStreetMap. Si cambias algo aquí, también se reflejará en esas aplicaciones, en su próxima actualización

", - "sharescreen": { - "intro": "

Comparte este mapa

Comparte este mapa copiando el enlace de debajo y enviándolo a amigos y familia:", - "addToHomeScreen": "

Añadir a la pantalla de inicio

Puedes añadir esta web en la pantalla de inicio de tu smartphone para que se vea más nativo. Aprieta el botón 'añadir a inicio' en la barra de direcciones URL para hacerlo.", - "embedIntro": "

Inclúyelo en tu página web

Incluye este mapa en tu página web.
Te animamos a que lo hagas, no hace falta que pidas permiso.
Es gratis, y siempre lo será. A más gente que lo use más valioso será.", - "copiedToClipboard": "Enlace copiado en el portapapeles", - "thanksForSharing": "Gracias por compartir", - "editThisTheme": "Editar este reto", - "editThemeDescription": "Añadir o cambiar preguntas de este reto", - "fsUserbadge": "Activar el botón de entrada", - "fsSearch": "Activar la barra de búsqueda", - "fsWelcomeMessage": "Muestra el mensaje emergente de bienvenida y pestañas asociadas", - "fsLayers": "Activar el control de capas", - "fsLayerControlToggle": "Iniciar el control de capas avanzado", - "fsAddNew": "Activar el botón de añadir nuevo PDI'", - "fsGeolocation": "Activar el botón de 'geolocalízame' (només mòbil)", - "fsIncludeCurrentBackgroundMap": "Incluir la opción de fondo actual {name}", - "fsIncludeCurrentLayers": "Incluir las opciones de capa actual", - "fsIncludeCurrentLocation": "Incluir localización actual" + "general": { + "loginWithOpenStreetMap": "Acceder con OpenStreetMap", + "welcomeBack": "Has entrado, bienvenido.", + "loginToStart": "Entra para contestar esta pregunta", + "search": { + "search": "Busca una ubicación", + "searching": "Buscando…", + "nothing": "Nada encontrado.", + "error": "Alguna cosa no ha ido bien..." + }, + "returnToTheMap": "Volver al mapa", + "save": "Guardar", + "cancel": "Cancelar", + "skip": "Saltar esta pregunta", + "oneSkippedQuestion": "Has ignorado una pregunta", + "skippedQuestions": "Has ignorado algunas preguntas", + "number": "número", + "osmLinkTooltip": "Mira este objeto en OpenStreetMap para ver historial y otras opciones de edición", + "add": { + "addNew": "Añadir {category} aquí", + "title": "Quieres añadir un punto?", + "intro": "Has marcado un lugar del que no conocemos los datos.
", + "pleaseLogin": "`Por favor inicia sesión para añadir un nuevo punto", + "zoomInFurther": "Acerca para añadir un punto.", + "stillLoading": "Los datos se siguen cargando. Espera un poco antes de añadir ningún punto.", + "confirmIntro": "

Añadir {title} aquí?

El punto que estás creando lo verá todo el mundo. Sólo añade cosas que realmente existan. Muchas aplicaciones usan estos datos.", + "confirmButton": "Añadir una {category} aquí.
Tu contribución es visible para todos
", + "openLayerControl": "Abrir el control de capas", + "layerNotEnabled": "La capa {layer} no está habilitada. Hazlo para poder añadir un punto en esta capa" + }, + "pickLanguage": "Escoge idioma: ", + "about": "Edita facilmente y añade puntos en OpenStreetMap de un tema concreto", + "nameInlineQuestion": "{category}: Su nombre es $$$", + "noNameCategory": "{category} sin nombre", + "questions": { + "phoneNumberOf": "Qué teléfono tiene {category}?", + "phoneNumberIs": "El número de teléfono de {category} es {phone}", + "websiteOf": "Cual es la página web de {category}?", + "websiteIs": "Página web: {website}", + "emailOf": "¿Qué dirección de correu tiene {category}?", + "emailIs": "La dirección de correo de {category} es {email}" + }, + "openStreetMapIntro": "

Un mapa abierto

¿No sería genial si hubiera un solo mapa, que todos pudieran usar y editar libremente?¿Un solo lugar para almacenar toda la información geográfica? Entonces, todos esos sitios web con mapas diferentes, pequeños e incompatibles (que siempre están desactualizados) ya no serían necesarios.

OpenStreetMap es ese mapa. Los datos del mapa se pueden utilizar de forma gratuita (con atribución y publicación de cambios en esos datos). Además de eso, todos pueden agregar libremente nuevos datos y corregir errores. Este sitio web también usa OpenStreetMap. Todos los datos provienen de allí, y tus respuestas y correcciones también se añadirán allí.

Muchas personas y aplicaciones ya usan OpenStreetMap: Maps.me, OsmAnd, pero también los mapas de Facebook, Instagram, Apple y Bing son (en parte) impulsados ​​por OpenStreetMap. Si cambias algo aquí, también se reflejará en esas aplicaciones, en su próxima actualización

", + "sharescreen": { + "intro": "

Comparte este mapa

Comparte este mapa copiando el enlace de debajo y enviándolo a amigos y familia:", + "addToHomeScreen": "

Añadir a la pantalla de inicio

Puedes añadir esta web en la pantalla de inicio de tu smartphone para que se vea más nativo. Aprieta el botón 'añadir a inicio' en la barra de direcciones URL para hacerlo.", + "embedIntro": "

Inclúyelo en tu página web

Incluye este mapa en tu página web.
Te animamos a que lo hagas, no hace falta que pidas permiso.
Es gratis, y siempre lo será. A más gente que lo use más valioso será.", + "copiedToClipboard": "Enlace copiado en el portapapeles", + "thanksForSharing": "Gracias por compartir", + "editThisTheme": "Editar este reto", + "editThemeDescription": "Añadir o cambiar preguntas de este reto", + "fsUserbadge": "Activar el botón de entrada", + "fsSearch": "Activar la barra de búsqueda", + "fsWelcomeMessage": "Muestra el mensaje emergente de bienvenida y pestañas asociadas", + "fsLayers": "Activar el control de capas", + "fsLayerControlToggle": "Iniciar el control de capas avanzado", + "fsAddNew": "Activar el botón de añadir nuevo PDI'", + "fsGeolocation": "Activar el botón de 'geolocalízame' (només mòbil)", + "fsIncludeCurrentBackgroundMap": "Incluir la opción de fondo actual {name}", + "fsIncludeCurrentLayers": "Incluir las opciones de capa actual", + "fsIncludeCurrentLocation": "Incluir localización actual" + }, + "morescreen": { + "intro": "

Más peticiones

Te gusta captar datos?
Hay más capas disponibles.", + "requestATheme": "Si quieres que te hagamos una petición propia , pídela aquí.", + "streetcomplete": "Otra aplicación similar es StreetComplete.", + "createYourOwnTheme": "Crea tu propia petición completa de MapComplete desde cero." + }, + "readYourMessages": "Lee todos tus mensajes de OpenStreetMap antes de añadir nuevos puntos.", + "fewChangesBefore": "Contesta unas cuantas preguntas sobre puntos existentes antes de añadir nuevos.", + "goToInbox": "Abrir mensajes", + "getStartedLogin": "Entra en OpenStreetMap para empezar", + "getStartedNewAccount": " o crea una nueva cuenta", + "noTagsSelected": "No se han seleccionado etiquetas", + "backgroundMap": "Mapa de fondo", + "layerSelection": { + "zoomInToSeeThisLayer": "Amplía para ver esta capa", + "title": "Seleccionar capas" + }, + "weekdays": { + "abbreviations": { + "monday": "Lun", + "tuesday": "Mar", + "wednesday": "Mie", + "thursday": "Jue", + "friday": "Vie", + "saturday": "Sab", + "sunday": "Dom" + }, + "monday": "Lunes", + "tuesday": "Martes", + "wednesday": "Miércoles", + "thursday": "Jueves", + "friday": "Viernes", + "saturday": "Sábado", + "sunday": "Domingo" + }, + "opening_hours": { + "open_during_ph": "Durante fiestas este servicio está", + "opensAt": "desde", + "openTill": "hasta", + "not_all_rules_parsed": "El horario de esta tienda es complejo. Las normas siguientes serán ignoradas en la entrada:", + "closed_until": "Cerrado hasta {date}", + "closed_permanently": "Cerrado - sin día de apertura conocido", + "ph_not_known": " ", + "ph_closed": "cerrado", + "ph_open": "abierto", + "open_24_7": "Abierto las 24 horas del día", + "error_loading": "Error: no se han podido visualizar esos horarios de apertura." + }, + "attribution": { + "mapContributionsBy": "La información visible actual tiene ediciones hechas por {contributors}", + "iconAttribution": { + "title": "Iconos usados" + }, + "themeBy": "Tema mantenido por {author}", + "attributionContent": "

Todos los datos son proporcionados por OpenStreetMap, reutilizables libremente bajo la Licencia Abierta de Bases de Datos (ODL).

", + "attributionTitle": "Aviso de atribución" + }, + "customThemeIntro": "

Temas personalizados

Estos son los temas generados por los usuarios que han sido visitados previamente.", + "loading": "Cargando…", + "pdf": { + "attr": "Datos cartográficos © colaboradores de OpenStreetMap, reutilizables en virtud de la ODbL", + "attrBackground": "Capa de fondo: {background}" + } }, - "morescreen": { - "intro": "

Más peticiones

Te gusta captar datos?
Hay más capas disponibles.", - "requestATheme": "Si quieres que te hagamos una petición propia , pídela aquí.", - "streetcomplete": "Otra aplicación similar es StreetComplete.", - "createYourOwnTheme": "Crea tu propia petición completa de MapComplete desde cero." + "favourite": { + "panelIntro": "

Tu interficie personal

Activa tus capas favoritas de todas las interficies oficiales", + "loginNeeded": "

Entrar

El diseño personalizado sólo está disponible para los usuarios de OpenstreetMap", + "reload": "Recargar datos" }, - "readYourMessages": "Lee todos tus mensajes de OpenStreetMap antes de añadir nuevos puntos.", - "fewChangesBefore": "Contesta unas cuantas preguntas sobre puntos existentes antes de añadir nuevos.", - "goToInbox": "Abrir mensajes", - "getStartedLogin": "Entra en OpenStreetMap para empezar", - "getStartedNewAccount": " o crea una nueva cuenta", - "noTagsSelected": "No se han seleccionado etiquetas", - "backgroundMap": "Mapa de fondo", - "layerSelection": { - "zoomInToSeeThisLayer": "Amplía para ver esta capa", - "title": "Seleccionar capas" + "reviews": { + "title": "{count} comentarios", + "title_singular": "Un comentario", + "name_required": "Se requiere un nombre para mostrar y crear comentarios", + "saved": "Reseña guardada. ¡Gracias por compartir!", + "saving_review": "Guardando…", + "no_rating": "Sin calificación dada", + "write_a_comment": "Deja una reseña…", + "no_reviews_yet": "Aún no hay reseñas. ¡Sé el primero en escribir una y ayuda a los datos abiertos y a los negocios!", + "plz_login": "Inicia sesión para dejar una reseña" }, - "weekdays": { - "abbreviations": { - "monday": "Lun", - "tuesday": "Mar", - "wednesday": "Mie", - "thursday": "Jue", - "friday": "Vie", - "saturday": "Sab", - "sunday": "Dom" - }, - "monday": "Lunes", - "tuesday": "Martes", - "wednesday": "Miércoles", - "thursday": "Jueves", - "friday": "Viernes", - "saturday": "Sábado", - "sunday": "Domingo" + "delete": { + "delete": "Eliminar", + "cancel": "Cancelar" }, - "opening_hours": { - "open_during_ph": "Durante fiestas este servicio está", - "opensAt": "desde", - "openTill": "hasta", - "not_all_rules_parsed": "El horario de esta tienda es complejo. Las normas siguientes serán ignoradas en la entrada:", - "closed_until": "Cerrado hasta {date}", - "closed_permanently": "Cerrado - sin día de apertura conocido", - "ph_not_known": " ", - "ph_closed": "cerrado", - "ph_open": "abierto", - "open_24_7": "Abierto las 24 horas del día", - "error_loading": "Error: no se han podido visualizar esos horarios de apertura." - }, - "attribution": { - "mapContributionsBy": "La información visible actual tiene ediciones hechas por {contributors}", - "iconAttribution": { - "title": "Iconos usados" - }, - "themeBy": "Tema mantenido por {author}", - "attributionContent": "

Todos los datos son proporcionados por OpenStreetMap, reutilizables libremente bajo la Licencia Abierta de Bases de Datos (ODL).

", - "attributionTitle": "Aviso de atribución" - }, - "customThemeIntro": "

Temas personalizados

Estos son los temas generados por los usuarios que han sido visitados previamente." - }, - "favourite": { - "panelIntro": "

Tu interficie personal

Activa tus capas favoritas de todas las interficies oficiales", - "loginNeeded": "

Entrar

El diseño personalizado sólo está disponible para los usuarios de OpenstreetMap", - "reload": "Recargar datos" - }, - "reviews": { - "title": "{count} comentarios", - "title_singular": "Un comentario", - "name_required": "Se requiere un nombre para mostrar y crear comentarios", - "saved": "Reseña guardada. ¡Gracias por compartir!", - "saving_review": "Guardando…", - "no_rating": "Sin calificación dada", - "write_a_comment": "Deja una reseña…", - "no_reviews_yet": "Aún no hay reseñas. ¡Sé el primero en escribir una y ayuda a los datos abiertos y a los negocios!", - "plz_login": "Inicia sesión para dejar una reseña" - } + "split": { + "cancel": "Cancelar", + "split": "Dividir" + } } diff --git a/langs/fr.json b/langs/fr.json index 58e1370031..214212e1e5 100644 --- a/langs/fr.json +++ b/langs/fr.json @@ -125,7 +125,7 @@ "getStartedNewAccount": " ou créez un compte", "noTagsSelected": "Aucune balise sélectionnée", "customThemeIntro": "

Thèmes personnalisés

Vous avez déjà visité ces thèmes personnalisés.", - "aboutMapcomplete": "

À propos de MapComplete

Avec MapComplete vous pouvez enrichir OpenStreetMap d'informations sur un thème unique. Répondez à quelques questions, et en quelques minutes vos contributions seront disponible dans le monde entier ! Le concepteur du thème définis les éléments, questions et langues pour le thème.

En savoir plus

MapComplete propose toujours l'étape suivante pour en apprendre plus sur OpenStreetMap.

  • Lorsqu'il est intégré dans un site Web, l'<i>iframe</i> pointe vers MapComplete en plein écran
  • La version plein écran donne des informations sur OpenStreetMap
  • Il est possible de regarder sans se connecter, mais l'édition demande une connexion à OSM.
  • Si vous n'êtes pas connecté, il vous est demandé de le faire
  • Une fois que vous avez répondu à une seule question, vous pouvez ajouter de nouveaux points à la carte
  • Au bout d'un moment, les vrais tags OSM sont montrés, qui pointent ensuite vers le wiki


Vous avez remarqué un problème ? Vous souhaitez demander une fonctionnalité ? Vous voulez aider à traduire ? Allez voir le code source ou l'<i>issue tracker.</i>

Vous voulez visualiser votre progression ? Suivez le compteur d'édition sur OsmCha.

", + "aboutMapcomplete": "

À propos de MapComplete

Avec MapComplete vous pouvez enrichir OpenStreetMap d'informations sur un thème unique. Répondez à quelques questions, et en quelques minutes vos contributions seront disponible dans le monde entier ! Le concepteur du thème définis les éléments, questions et langues pour le thème.

En savoir plus

MapComplete propose toujours l'étape suivante pour en apprendre plus sur OpenStreetMap.

  • Lorsqu'il est intégré dans un site Web, l'<i>iframe</i> pointe vers MapComplete en plein écran
  • La version plein écran donne des informations sur OpenStreetMap
  • Il est possible de regarder sans se connecter, mais l'édition demande une connexion à OSM.
  • Si vous n'êtes pas connecté, il vous est demandé de le faire
  • Une fois que vous avez répondu à une seule question, vous pouvez ajouter de nouveaux points à la carte
  • Au bout d'un moment, les vrais tags OSM sont montrés, qui pointent ensuite vers le wiki


Vous avez remarqué un problème ? Vous souhaitez demander une fonctionnalité ? Vous voulez aider à traduire ? Allez voir le code source ou l'<i>issue tracker.</i>

Vous voulez visualiser votre progression ? Suivez le compteur d'édition sur OsmCha.

", "backgroundMap": "Carte de fonds", "layerSelection": { "zoomInToSeeThisLayer": "Aggrandissez la carte pour voir cette couche", @@ -188,7 +188,7 @@ "wikipediaboxTitle": "Wikipédia", "loading": "Chargement de Wikipédia…", "noWikipediaPage": "Cet élément Wikidata n’a pas encore de page Wikipédia correspondante.", - "noResults": "Pas de résultats pour", + "noResults": "Pas de résultats pour {search}", "searchWikidata": "Rechercher sur Wikidata", "failed": "Le chargement de Wikipédia a échoué" }, @@ -244,8 +244,7 @@ "whyDelete": "Pourquoi ce point devrait-il être supprimé ?", "explanations": { "selectReason": "Sélectionner pourquoi cet élément devrait être supprimé", - "hardDelete": "Ce point sera supprimé d’OpenStreetmap. Il pourra être restauré par des méthodes avancées", - "softDelete": "Cet élément sera mis à jour et caché de l’application." + "hardDelete": "Ce point sera supprimé d’OpenStreetmap. Il pourra être restauré par des méthodes avancées" }, "reasons": { "test": "Élément de test qui n’a jamais été ici", diff --git a/langs/hu.json b/langs/hu.json index 541627e939..74a9f72991 100644 --- a/langs/hu.json +++ b/langs/hu.json @@ -166,7 +166,7 @@ "thursday": "Csütörtök" }, "opening_hours": { - "error_loading": "Hiba: nem sikerült megjeleníteni ezt a nyitva tartási időt", + "error_loading": "Hiba: nem sikerült megjeleníteni ezt a nyitva tartási időt.", "not_all_rules_parsed": "Ez a nyitva tartás bonyolult. A beviteli elemben a következő szabályok nem vétetnek figyelembe:", "closed_until": "Zárva eddig: {date}", "closed_permanently": "Ismeretlen ideig zárva", diff --git a/langs/id.json b/langs/id.json index 9c78ab6e7d..69d64f7be3 100644 --- a/langs/id.json +++ b/langs/id.json @@ -1,109 +1,109 @@ { - "general": { - "questions": { - "phoneNumberOf": "Apakah nombor telepon {category} ini?", - "websiteIs": "Website: {website}", - "emailOf": "Apa alamat email {category}?" + "general": { + "questions": { + "phoneNumberOf": "Apakah nombor telepon {category} ini?", + "websiteIs": "Website: {website}", + "emailOf": "Apa alamat email {category}?" + }, + "nameInlineQuestion": "Name {category} ini adalah $$$", + "pickLanguage": "Pilih bahasa: ", + "layerSelection": { + "title": "Pilih lapisan" + }, + "backgroundMap": "Peta latar belakang", + "search": { + "searching": "Sdg mencari…" + }, + "opening_hours": { + "ph_not_known": " ", + "ph_open": "buka", + "ph_closed": "tutup", + "open_24_7": "Dibuka sekitar jam", + "closed_permanently": "Ditutup sampai pemberitahuan lebih lanjut", + "openTill": "sampai", + "opensAt": "dari", + "closed_until": "Ditutup sampai {date}" + }, + "noTagsSelected": "Tidak ada tag yang dipilih", + "getStartedNewAccount": " atau membuat akun baru", + "getStartedLogin": "Masuk dengan OpenStreetMap untuk memulai", + "sharescreen": { + "fsIncludeCurrentLocation": "Sertakan lokasi saat ini", + "fsIncludeCurrentLayers": "Sertakan pilihan lapisan saat ini", + "fsIncludeCurrentBackgroundMap": "Sertakan pilihan latar belakang saat ini {name}", + "fsGeolocation": "Aktifkan tombol 'geolocate-me' (hanya seluler)", + "fsAddNew": "Aktifkan tombol 'tambah POI baru'", + "fsLayers": "Aktifkan kontrol lapisan", + "fsWelcomeMessage": "Tampilkan popup pesan selamat datang dan tab terkait", + "fsSearch": "Aktifkan bilah pencarian", + "fsUserbadge": "Aktifkan tombol masuk", + "editThemeDescription": "Tambahkan atau ubah pertanyaan ke tema peta ini", + "editThisTheme": "Sunting tema ini", + "thanksForSharing": "Terima kasih telah berbagi!", + "copiedToClipboard": "Tautan disalin ke papan klip" + }, + "goToInbox": "Buka kotak masuk", + "weekdays": { + "abbreviations": { + "sunday": "Min", + "saturday": "Sab", + "friday": "Jum", + "thursday": "Kam", + "wednesday": "Rab", + "tuesday": "Sel", + "monday": "Sen" + }, + "sunday": "Minggu", + "saturday": "Sabtu", + "friday": "Jum'at", + "thursday": "Kamis", + "wednesday": "Rabu", + "tuesday": "Selasa", + "monday": "Senin" + }, + "cancel": "Batal" }, - "nameInlineQuestion": "Name {category} ini adalah $$$", - "pickLanguage": "Pilih bahasa: ", - "layerSelection": { - "title": "Pilih lapisan" + "image": { + "doDelete": "Buang gambar", + "ccb": "di bawah lisensi CC-BY", + "ccbs": "di bawah lisensi CC-BY-SA", + "cco": "di domain publik", + "willBePublished": "Gambarmu akan dipublikasikan ", + "pleaseLogin": "Silakan masuk untuk menambah gambar", + "uploadingMultiple": "Mengunggah {count} gambar…", + "uploadingPicture": "Mengunggah gambar Anda…", + "addPicture": "Tambahkan foto", + "isDeleted": "Dihapus", + "dontDelete": "Batal" }, - "backgroundMap": "Peta latar belakang", - "search": { - "searching": "Sdg mencari…" + "centerMessage": { + "ready": "Selesai!", + "loadingData": "Memuat data…" }, - "opening_hours": { - "ph_not_known": " ", - "ph_open": "buka", - "ph_closed": "tutup", - "open_24_7": "Dibuka sekitar jam", - "closed_permanently": "Ditutup sampai pemberitahuan lebih lanjut", - "openTill": "sampai", - "opensAt": "dari", - "closed_until": "Ditutup sampai {date}" + "favourite": { + "reload": "Muat ulang data" }, - "noTagsSelected": "Tidak ada tag yang dipilih", - "getStartedNewAccount": " atau membuat akun baru", - "getStartedLogin": "Masuk dengan OpenStreetMap untuk memulai", - "sharescreen": { - "fsIncludeCurrentLocation": "Sertakan lokasi saat ini", - "fsIncludeCurrentLayers": "Sertakan pilihan lapisan saat ini", - "fsIncludeCurrentBackgroundMap": "Sertakan pilihan latar belakang saat ini {name}", - "fsGeolocation": "Aktifkan tombol 'geolocate-me' (hanya seluler)", - "fsAddNew": "Aktifkan tombol 'tambah POI baru'", - "fsLayers": "Aktifkan kontrol lapisan", - "fsWelcomeMessage": "Tampilkan popup pesan selamat datang dan tab terkait", - "fsSearch": "Aktifkan bilah pencarian", - "fsUserbadge": "Aktifkan tombol masuk", - "editThemeDescription": "Tambahkan atau ubah pertanyaan ke tema peta ini", - "editThisTheme": "Sunting tema ini", - "thanksForSharing": "Terima kasih telah berbagi!", - "copiedToClipboard": "Tautan disalin ke papan klip" + "reviews": { + "attribution": "Ulasan didukung oleh Mangrove Reviews dan tersedia di bawah CC-BY 4.0.", + "tos": "Jika Anda membuat ulasan, Anda menyetujui TOS dan kebijakan privasi Mangrove.reviews", + "saved": " Ulasan disimpan. Terima kasih sudah berbagi! ", + "saving_review": "Menyimpan…", + "posting_as": "Posting sebagai", + "no_rating": "Tidak ada peringkat yang diberikan", + "write_a_comment": "Beri ulasan…", + "title_singular": "Satu ulasan", + "title": "{count} ulasan", + "plz_login": "Masuk untuk meninggalkan ulasan" }, - "goToInbox": "Buka kotak masuk", - "weekdays": { - "abbreviations": { - "sunday": "Min", - "saturday": "Sab", - "friday": "Jum", - "thursday": "Kam", - "wednesday": "Rab", - "tuesday": "Sel", - "monday": "Sen" - }, - "sunday": "Minggu", - "saturday": "Sabtu", - "friday": "Jum'at", - "thursday": "Kamis", - "wednesday": "Rabu", - "tuesday": "Selasa", - "monday": "Senin" + "index": { + "pickTheme": "Pilih tema di bawah ini untuk memulai.", + "intro": "MapComplete adalah penampil dan editor OpenStreetMap, yang menunjukkan informasi tentang tema tertentu.", + "title": "Selamat datang di MapComplete" }, - "cancel": "Batal" - }, - "image": { - "doDelete": "Buang gambar", - "ccb": "di bawah lisensi CC-BY", - "ccbs": "di bawah lisensi CC-BY-SA", - "cco": "di domain publik", - "willBePublished": "Gambarmu akan dipublikasikan: ", - "pleaseLogin": "Silakan masuk untuk menambah gambar", - "uploadingMultiple": "Mengunggah {count} gambar…", - "uploadingPicture": "Mengunggah gambar Anda…", - "addPicture": "Tambahkan foto", - "isDeleted": "Dihapus", - "dontDelete": "Batal" - }, - "centerMessage": { - "ready": "Selesai!", - "loadingData": "Memuat data…" - }, - "favourite": { - "reload": "Muat ulang data" - }, - "reviews": { - "attribution": "Ulasan didukung oleh Mangrove Reviews dan tersedia di bawah CC-BY 4.0.", - "tos": "Jika Anda membuat ulasan, Anda menyetujui TOS dan kebijakan privasi Mangrove.reviews", - "saved": " Ulasan disimpan. Terima kasih sudah berbagi! ", - "saving_review": "Menyimpan…", - "posting_as": "Posting sebagai", - "no_rating": "Tidak ada peringkat yang diberikan", - "write_a_comment": "Beri ulasan…", - "title_singular": "Satu ulasan", - "title": "{count} ulasan", - "plz_login": "Masuk untuk meninggalkan ulasan" - }, - "index": { - "pickTheme": "Pilih tema di bawah ini untuk memulai.", - "intro": "MapComplete adalah penampil dan editor OpenStreetMap, yang menunjukkan informasi tentang tema tertentu.", - "title": "Selamat datang di MapComplete" - }, - "split": { - "cancel": "Batal" - }, - "delete": { - "cancel": "Batal" - } + "split": { + "cancel": "Batal" + }, + "delete": { + "cancel": "Batal" + } } diff --git a/langs/it.json b/langs/it.json index 19d0394ed9..988fc4942b 100644 --- a/langs/it.json +++ b/langs/it.json @@ -17,6 +17,7 @@ }, "general": { "aboutMapcomplete": "

Informazioni su MapComplete

Con MapComplete puoi arricchire OpenStreetMap con informazioni su un singolo argomento. Rispondi a poche domande e in pochi minuti i tuoi contributi saranno disponibili a tutto il mondo! L’utente gestore del tema definisce gli elementi, le domande e le lingue per quel tema.

Scopri altro

MapComplete propone sempre un passo in più per imparare qualcosa di nuovo su OpenStreetMap.

  • Quando viene incorporato in un sito web, il collegamento dell’iframe punta a MapComplete a tutto schermo
  • La versione a tutto schermo fornisce informazioni su OpenStreetMap
  • La visualizzazione non necessita di alcun accesso ma per modificare occorre aver effettuato l’accesso su OSM.
  • Se non hai effettuato l’accesso, ti verrà richiesto di farlo
  • Dopo aver risposto ad una sola domanda potrai aggiungere dei nuovi punti alla mappa
  • Dopo qualche momento verranno mostrate le etichette effettive, in seguito i collegamenti alla wiki


Hai trovato un errore? Vuoi richiedere nuove funzionalità? Vuoi aiutare con la traduzione? Dai un’occhiata al codice sorgente oppure al tracker degli errori.

Vuoi vedere i tuoi progressi?Segui il contatore delle modifiche su OsmCha.

", + "example": "Esempio", "morescreen": { "requestATheme": "Se hai bisogno di una mappa tematica personalizzata, puoi chiederla nel tracker degli errori", "createYourOwnTheme": "Crea il tuo tema di MapComplete personalizzato da zero", diff --git a/langs/ja.json b/langs/ja.json index e4a7229238..4673cfafc9 100644 --- a/langs/ja.json +++ b/langs/ja.json @@ -119,7 +119,7 @@ } }, "backgroundMap": "背景マップ", - "aboutMapcomplete": "

MapCompleteについて

MapCompleteを使えば、1つのテーマに関する情報でOpenStreetMapを充実させることができます。いくつかの質問に答えると、数分以内にあなたの投稿が世界中で公開されます!テーマメンテナは、テーマの要素、質問、言語を定義します。

詳細情報を見る

MapCompleteは常にOpenStreetMapについてさらに学ぶため次のステップを提供します。

  • Webサイトに埋め込まれるとiframeはフルスクリーンのMapCompleteにリンクします
  • フルスクリーン版はOpenStreetMapに関する情報を提供します
  • ログインせずに表示することはできますが、編集にはOSMログインが必要です。
  • ログインしていない場合は、ログインするように求められます
  • 1つの質問に回答すると、マップに新しいポイントを追加できます
  • しばらくすると、実際のOSMタグが表示され、後でWikiにリンクされます


問題に気づきましたか?機能要求はありますか?翻訳の手伝いをしますか?ソースコードまたは問題追跡ツールに移動します。

進捗状況を確認しますか? OsmChaの編集数に従います。

", + "aboutMapcomplete": "

MapCompleteについて

MapCompleteを使えば、1つのテーマに関する情報でOpenStreetMapを充実させることができます。いくつかの質問に答えると、数分以内にあなたの投稿が世界中で公開されます!テーマメンテナは、テーマの要素、質問、言語を定義します。

詳細情報を見る

MapCompleteは常にOpenStreetMapについてさらに学ぶため次のステップを提供します。

  • Webサイトに埋め込まれるとiframeはフルスクリーンのMapCompleteにリンクします
  • フルスクリーン版はOpenStreetMapに関する情報を提供します
  • ログインせずに表示することはできますが、編集にはOSMログインが必要です。
  • ログインしていない場合は、ログインするように求められます
  • 1つの質問に回答すると、マップに新しいポイントを追加できます
  • しばらくすると、実際のOSMタグが表示され、後でWikiにリンクされます


問題に気づきましたか?機能要求はありますか?翻訳の手伝いをしますか?ソースコードまたは問題追跡ツールに移動します。

進捗状況を確認しますか? OsmChaの編集数に従います。

", "customThemeIntro": "

カスタムテーマ

これらは以前にアクセスされたユーザー生成テーマです。", "noTagsSelected": "タグが選択されていません", "getStartedNewAccount": " または新しいアカウントを作成する", diff --git a/langs/layers/ca.json b/langs/layers/ca.json index aefba46283..dd423c59e7 100644 --- a/langs/layers/ca.json +++ b/langs/layers/ca.json @@ -65,9 +65,6 @@ "tagRenderings": { "Email": { "render": "{email}" - }, - "phone": { - "render": "{phone}" } } }, diff --git a/langs/layers/cs.json b/langs/layers/cs.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/langs/layers/cs.json @@ -0,0 +1 @@ +{} diff --git a/langs/layers/de.json b/langs/layers/de.json index 60d359efd3..ae8fdc2ce3 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -663,15 +663,15 @@ "name": "Fahrradstationen (Reparatur, Pumpe oder beides)", "presets": { "0": { - "description": "Ein Gerät zum Aufpumpen von Reifen an einem festen Standort im öffentlichen Raum.

Beispiele für Fahrradpumpen

", - "title": "Fahrradpumpe" + "description": "Ein Gerät zum Aufpumpen von Reifen an einem festen Standort im öffentlichen Raum.", + "title": "fahrradpumpe" }, "1": { - "description": "Ein Gerät mit Werkzeugen zur Reparatur von Fahrrädern kombiniert mit einer Pumpe an einem festen Standort. Die Werkzeuge sind oft mit Ketten gegen Diebstahl gesichert.

Beispiel

", - "title": "Fahrrad-Reparaturstation und Pumpe" + "description": "Ein Gerät mit Werkzeugen zur Reparatur von Fahrrädern kombiniert mit einer Pumpe an einem festen Standort. Die Werkzeuge sind oft mit Ketten gegen Diebstahl gesichert.", + "title": "fahrrad-Reparaturstation und Pumpe" }, "2": { - "title": "Fahrrad-Reparaturstation ohne Pumpe" + "title": "fahrrad-Reparaturstation ohne Pumpe" } }, "tagRenderings": { @@ -757,9 +757,6 @@ "mappings": { "0": { "then": "Immer geöffnet" - }, - "1": { - "then": "Immer geöffnet" } }, "question": "Wann ist diese Fahrradreparaturstelle geöffnet?" @@ -2047,6 +2044,9 @@ }, "1": { "then": "Schnellrestaurant{name}" + }, + "2": { + "then": "Schnellrestaurant" } } } @@ -2240,23 +2240,14 @@ "Surface area": { "render": "Grundfläche: {_surface:ha}ha" }, - "Website": { - "question": "Auf welcher Webseite kann man mehr Informationen über dieses Naturschutzgebiet finden?" - }, "phone": { - "question": "Welche Telefonnummer kann man bei Fragen und Problemen zu diesem Naturschutzgebiet anrufen?
Respektieren Sie die Privatsphäre - geben Sie nur eine Telefonnummer an, wenn diese allgemein bekannt ist", - "render": "{phone}" + "question": "Welche Telefonnummer kann man bei Fragen und Problemen zu diesem Naturschutzgebiet anrufen?
Respektieren Sie die Privatsphäre - geben Sie nur eine Telefonnummer an, wenn diese allgemein bekannt ist" } } }, "observation_tower": { "description": "Türme zur Aussicht auf die umgebende Landschaft", "name": "Aussichtstürme", - "presets": { - "0": { - "title": "Beobachtungsturm" - } - }, "tagRenderings": { "Fee": { "mappings": { @@ -2334,7 +2325,7 @@ "name": "Spielplätze", "presets": { "0": { - "title": "Spielplatz" + "title": "spielplatz" } }, "tagRenderings": { @@ -2358,15 +2349,12 @@ "then": "Zugänglich für die Allgemeinheit" }, "1": { - "then": "Zugänglich für die Allgemeinheit" - }, - "2": { "then": "Nur für Kunden des Betreibers zugänglich" }, - "3": { + "2": { "then": "Nur für Schüler der Schule zugänglich" }, - "4": { + "3": { "then": "Nicht zugänglich" } }, @@ -2402,9 +2390,6 @@ }, "1": { "then": "Immer zugänglich" - }, - "2": { - "then": "Immer zugänglich" } }, "question": "Wann ist dieser Spielplatz zugänglich?" diff --git a/langs/layers/en.json b/langs/layers/en.json index 9bd9493e96..fbc713e37c 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -417,6 +417,103 @@ "render": "Bicycle library" } }, + "bicycle_rental": { + "description": "Bicycle rental stations", + "name": "Bicycle rental", + "presets": { + "0": { + "description": "A manned shop which focuses on bicycle rental", + "title": "bicycle rental shop" + }, + "1": { + "title": "bicycle rental" + } + }, + "tagRenderings": { + "8": { + "renderings": { + "0": { + "question": "How much type_plural can be rented here? ", + "render": "{capacity:bicycle_type} type_plural can be rented here" + } + }, + "rewrite": { + "into": { + "0": { + "1": "city bikes" + }, + "1": { + "1": "electrical bikes" + }, + "2": { + "1": "bikes for children" + }, + "3": { + "1": "BMX bikes" + }, + "4": { + "1": "mountainbike" + }, + "5": { + "1": "bicycle panniers" + } + } + } + }, + "bicycle-types": { + "mappings": { + "0": { + "then": "Normal city bikes can be rented here" + }, + "1": { + "then": "Electrical bikes can be rented here" + }, + "2": { + "then": "BMX bikes can be rented here" + }, + "3": { + "then": "Mountainbikes can be rented here" + }, + "4": { + "then": "Bikes for childs can be rented here" + } + }, + "question": "What kind of bicycles and accessories are rented here?", + "render": "{rental} is rented here" + }, + "bicycle_rental_type": { + "mappings": { + "0": { + "then": "This is a shop whose main focus is bicycle rental" + }, + "1": { + "then": "This is a rental buisiness which rents out various objects and/or vehicles. It rents out bicycles too, but this is not the main focus" + }, + "2": { + "then": "This is a shop which sells or repairs bicycles, but also rents out bicycles" + }, + "3": { + "then": "This is an automated docking station, where a bicycle is mechanically locked into a structure" + }, + "4": { + "then": "A machine is present which dispenses and accepts keys, eventually after authentication and/or payment. The bicycles are parked nearby" + }, + "5": { + "then": "This is a dropoff point: a designated bicycle parking for this cycle rental" + } + }, + "question": "What kind of bicycle rental is this?" + } + }, + "title": { + "mappings": { + "0": { + "then": "{name}" + } + }, + "render": "Bicycle rental" + } + }, "bicycle_tube_vending_machine": { "description": "A layer showing vending machines for bicycle tubes (either purpose-built bicycle tube vending machines or classical vending machines with bicycle tubes and optionally additional bicycle related objects such as lights, gloves, locks, ...)", "name": "Bicycle tube vending machine", @@ -677,18 +774,19 @@ }, "bike_repair_station": { "description": "A layer showing bicycle pumps and bicycle repair tool stands", - "name": "Bike stations (repair, pump or both)", + "name": "Bicycle pump and repair", "presets": { "0": { - "description": "A device to inflate your tires on a fixed location in the public space.

Examples of bicycle pumps

", - "title": "Bike pump" + "description": "A device to inflate your tires on a fixed location in the public space.", + "title": "bike pump" }, "1": { - "description": "A device with tools to repair your bike combined with a pump at a fixed location. The tools are often secured with chains against theft.

Example

", - "title": "Bike repair station and pump" + "description": "A bicycle pump and tools to repair your bike in the public space. The tools are often secured with chains against theft.", + "title": "bike repair station and pump" }, "2": { - "title": "Bike repair station without pump" + "description": "Tools to repair your bike in the public space (without pump). The tools are secured against theft.", + "title": "bike repair station without pump" } }, "tagRenderings": { @@ -706,6 +804,26 @@ }, "question": "Is the bike pump still operational?" }, + "access": { + "mappings": { + "0": { + "then": "Publicly accessible" + }, + "1": { + "then": "Publicly accessible" + }, + "2": { + "then": "Only for customers" + }, + "3": { + "then": "Not accessible to the general public" + }, + "4": { + "then": "Not accessible to the general public" + } + }, + "question": "Who is allowed to use this repair station?" + }, "bike_repair_station-available-services": { "mappings": { "0": { @@ -718,7 +836,7 @@ "then": "There are both tools and a pump present" } }, - "question": "Which services are available at this bike station?" + "question": "Which services are available at this location?" }, "bike_repair_station-bike-chain-tool": { "mappings": { @@ -774,9 +892,6 @@ "mappings": { "0": { "then": "Always open" - }, - "1": { - "then": "Always open" } }, "question": "When is this bicycle repair point open?" @@ -1032,17 +1147,37 @@ "name": "Cafés and pubs", "presets": { "0": { + "description": "A pub, mostly for drinking beers in a warm, relaxed interior", "title": "pub" }, "1": { + "description": "A more modern and commercial bar, possibly with a music and light installation", "title": "bar" }, "2": { + "description": "A cafe to drink tea, coffee or an alcoholical bevarage in a quiet environment", "title": "cafe" } }, "tagRenderings": { "Classification": { + "mappings": { + "0": { + "then": "A pub, mostly for drinking beers in a warm, relaxed interior" + }, + "1": { + "then": "A more modern and commercial bar, possibly with a music and light installation" + }, + "2": { + "then": "A cafe to drink tea, coffee or an alcoholical bevarage in a quiet environment" + }, + "3": { + "then": "A restuarant where one can get a proper meal" + }, + "4": { + "then": "An open space where beer is served, typically seen in Germany" + } + }, "question": "What kind of cafe is this" }, "Name": { @@ -1055,7 +1190,8 @@ "0": { "then": "{name}" } - } + }, + "render": "Pub" } }, "charging_station": { @@ -1581,18 +1717,6 @@ "question": "What is the maximum amount of time one is allowed to stay here?", "render": "One can stay at most {canonical(maxstay)}" }, - "payment-options": { - "override": { - "mappings+": { - "0": { - "then": "Payment is done using a dedicated app" - }, - "1": { - "then": "Payment is done using a membership card" - } - } - } - }, "phone": { "question": "What number can one call if there is a problem with this charging station?", "render": "In case of problems, call {phone}" @@ -2014,6 +2138,14 @@ } }, "title": { + "mappings": { + "0": { + "then": "Charging station for ebikes" + }, + "1": { + "then": "Charging station for cars" + } + }, "render": "Charging station" }, "units": { @@ -3001,6 +3133,7 @@ "title": "fastfood" }, "2": { + "description": "A fastfood-buisiness focused on french fries", "title": "fries shop" } }, @@ -3015,12 +3148,56 @@ }, "2": { "then": "Mainly serves pasta" + }, + "3": { + "then": "This is kebab shop" + }, + "4": { + "then": "This is a sandwichbar" + }, + "5": { + "then": "Burgers are served here" + }, + "6": { + "then": "Sushi is served here" + }, + "7": { + "then": "Coffee is served here" + }, + "8": { + "then": "This is an italian restaurant (which serves more then pasta and pizza)" + }, + "9": { + "then": "French dishes are served here" + }, + "10": { + "then": "Chinese dishes are served here" + }, + "11": { + "then": "Greek dishes are served here" + }, + "12": { + "then": "Indian dishes are served here" + }, + "13": { + "then": "Turkish dishes are served here" + }, + "14": { + "then": "Thai dishes are served here" } }, "question": "Which food is served here?", "render": "This place mostly serves {cuisine}" }, "Fastfood vs restaurant": { + "mappings": { + "0": { + "then": "This is a fastfood-business, focussed on fast service. If seating is available, these are rather limited and functional." + }, + "1": { + "then": "A restaurant, focussed on creating a nice experience where one is served at the table" + } + }, "question": "What type of business is this?" }, "Name": { @@ -3041,9 +3218,51 @@ }, "question": "Does this place offer takea-way?" }, + "Vegan (no friture)": { + "mappings": { + "0": { + "then": "No vegan options available" + }, + "1": { + "then": "Some vegan options are available" + }, + "2": { + "then": "Vegan options are available" + }, + "3": { + "then": "All dishes are vegan" + } + }, + "question": "Does this business serve vegan meals?" + }, "Vegetarian (no friture)": { + "mappings": { + "0": { + "then": "No vegetarian options are available" + }, + "1": { + "then": "Some vegetarian options are available" + }, + "2": { + "then": "No vegetarian options are available" + }, + "3": { + "then": "All dishes are vegetarian" + } + }, "question": "Does this restaurant have a vegetarian option?" }, + "friture-oil": { + "mappings": { + "0": { + "then": "Vegetable oil" + }, + "1": { + "then": "Animal oil" + } + }, + "question": "Does this fries shop use vegetable or animal cooking?" + }, "friture-take-your-container": { "mappings": { "0": { @@ -3058,6 +3277,34 @@ }, "question": "If you bring your own container (such as a cooking pot and small pots), is it used to package your order?
" }, + "friture-vegan": { + "mappings": { + "0": { + "then": "Vegan snacks are available" + }, + "1": { + "then": "A small selection of vegan snacks are available" + }, + "2": { + "then": "No vegan snacks are available" + } + }, + "question": "Does this fries shop have vegan snacks?" + }, + "friture-vegetarian": { + "mappings": { + "0": { + "then": "Vegetarian snacks are available" + }, + "1": { + "then": "Only a small selection of snacks are vegetarian" + }, + "2": { + "then": "No vegetarian snacks are available" + } + }, + "question": "Does this fries shop have vegetarian snacks?" + }, "halal (no friture)": { "mappings": { "0": { @@ -3083,8 +3330,12 @@ }, "1": { "then": "Fastfood {name}" + }, + "2": { + "then": "Fastfood" } - } + }, + "render": "Restaurant" } }, "ghost_bike": { @@ -3131,6 +3382,7 @@ } }, "gps_track": { + "name": "Your travelled track", "tagRenderings": { "Privacy notice": { "render": "This is the path you've travelled since this website is opened. Don't worry - this is only visible to you and no one else. Your location data is never sent off-device." @@ -3262,7 +3514,32 @@ } }, "nature_reserve": { + "description": "A nature reserve is an area where nature can take its course", "tagRenderings": { + "Access tag": { + "mappings": { + "0": { + "then": "Publicly accessible" + }, + "1": { + "then": "Not accessible" + }, + "2": { + "then": "Not accessible as this is a private area" + }, + "3": { + "then": "Accessible despite being a privately owned area" + }, + "4": { + "then": "Only accessible with a guide or during organised activities" + }, + "5": { + "then": "Accessible with fee" + } + }, + "question": "Is this nature reserve accessible to the public?", + "render": "Accessin this nature reserve: {access:description}" + }, "Curator": { "question": "Whom is the curator of this nature reserve?
Respect privacy - only fill out a name if this is widely published", "render": "{curator} is the curator of this nature reserve" @@ -3285,16 +3562,39 @@ "question": "What email adress can one send to with questions and problems with this nature reserve?
Respect privacy - only fill out a personal email address if this is widely published", "render": "{email}" }, + "Name tag": { + "mappings": { + "0": { + "then": "This area doesn't have a name" + } + }, + "question": "What is the name of this area?", + "render": "This area is named {name}" + }, + "Operator tag": { + "mappings": { + "0": { + "then": "Operated by Natuurpunt" + }, + "1": { + "then": "Operated by {operator}" + }, + "2": { + "then": "Operated by Agentschap Natuur en Bos" + } + }, + "question": "Who operates this area?", + "render": "Operated by {operator}" + }, "Surface area": { "render": "Surface area: {_surface:ha}Ha" }, - "Website": { - "question": "On which webpage can one find more information about this nature reserve?" - }, "phone": { - "question": "What phone number can one call to with questions and problems with this nature reserve?
Respect privacy - only fill out a personal phone number address if this is widely published", - "render": "{phone}" + "question": "What phone number can one call to with questions and problems with this nature reserve?
Respect privacy - only fill out a personal phone number address if this is widely published" } + }, + "title": { + "render": "Nature reserve" } }, "note": { @@ -3354,6 +3654,13 @@ "question": "Only show open notes" } } + }, + "8": { + "options": { + "0": { + "question": "Hide import notes" + } + } } }, "name": "OpenStreetMap notes", @@ -3383,11 +3690,6 @@ "observation_tower": { "description": "Towers with a panoramic view", "name": "Observation towers", - "presets": { - "0": { - "title": "observation tower" - } - }, "tagRenderings": { "Fee": { "mappings": { @@ -3406,6 +3708,28 @@ "question": "Who maintains this tower?", "render": "Maintained by {operator}" }, + "access": { + "mappings": { + "0": { + "then": "This tower is publicly accessible" + }, + "1": { + "then": "This tower can only be visited with a guide" + } + }, + "question": "Can this tower be visited?" + }, + "elevator": { + "mappings": { + "0": { + "then": "This tower has an elevator which takes visitors to the top" + }, + "1": { + "then": "This tower does not have an elevator" + } + }, + "question": "Does this tower have an elevator?" + }, "name": { "mappings": { "0": { @@ -3414,6 +3738,10 @@ }, "question": "What is the name of this tower?", "render": "This tower is called {name}" + }, + "step_count": { + "question": "How much individual steps does one have to climb to reach the top of this tower?", + "render": "This tower has {step_count} steps to reach the top" } }, "title": { @@ -3480,7 +3808,7 @@ "name": "Playgrounds", "presets": { "0": { - "title": "Playground" + "title": "playground" } }, "tagRenderings": { @@ -3504,15 +3832,12 @@ "then": "Accessible to the general public" }, "1": { - "then": "Accessible to the general public" - }, - "2": { "then": "Only accessible for clients of the operating business" }, - "3": { + "2": { "then": "Only accessible to students of the school" }, - "4": { + "3": { "then": "Not accessible" } }, @@ -3548,9 +3873,6 @@ }, "1": { "then": "Always accessible" - }, - "2": { - "then": "Always accessible" } }, "question": "When is this playground accessible?" diff --git a/langs/layers/es.json b/langs/layers/es.json index 52519c942b..c71f31cc1d 100644 --- a/langs/layers/es.json +++ b/langs/layers/es.json @@ -1,4 +1,27 @@ { + "address": { + "description": "Direcciones", + "name": "Direcciones conocidas en OSM", + "tagRenderings": { + "fixme": { + "question": "¿Qué debe corregirse aquí? Expóngalo" + }, + "housenumber": { + "mappings": { + "0": { + "then": "Esta edificación no tiene número" + } + }, + "question": "¿Cuál es el número de esta casa?" + }, + "street": { + "question": "¿En qué calle se encuentra esta dirección?" + } + }, + "title": { + "render": "Domicilio conocido" + } + }, "artwork": { "description": "Diversas piezas de obras de arte", "name": "Obras de arte", @@ -9,19 +32,77 @@ }, "tagRenderings": { "artwork-artwork_type": { - "question": "Cuál es el tipo de esta obra de arte?", + "mappings": { + "0": { + "then": "Arquitectura" + }, + "1": { + "then": "Mural" + }, + "2": { + "then": "Pintura" + }, + "3": { + "then": "Escultura" + }, + "4": { + "then": "Estatua" + }, + "5": { + "then": "Busto" + }, + "7": { + "then": "Instalación" + }, + "8": { + "then": "Grafiti" + } + }, + "question": "¿Qué tipo de obra es esta pieza?", "render": "Esta es un {artwork_type}" } }, "title": { "mappings": { "0": { - "then": "Obra de arte {nombre}" + "then": "Obra de arte {name}" } }, "render": "Obra de arte" } }, + "barrier": { + "name": "Barreras", + "presets": { + "0": { + "title": "Bolardo" + } + }, + "tagRenderings": { + "Bollard type": { + "mappings": { + "1": { + "then": "Bolardo fijo" + }, + "3": { + "then": "Bolardo flexible, normalmente plástico" + }, + "4": { + "then": "Bolardo levadizo" + } + }, + "question": "¿Qué tipo de bolardo es este?" + } + }, + "title": { + "mappings": { + "0": { + "then": "Bolardo" + } + }, + "render": "Barrera" + } + }, "bench": { "name": "Bancos", "presets": { @@ -33,13 +114,43 @@ "bench-backrest": { "mappings": { "0": { - "then": "Respaldo: Si" + "then": "Respaldo: sí" }, "1": { - "then": "Respaldo: No" + "then": "Respaldo: no" } }, - "question": "¿Este banco tiene un respaldo?" + "question": "¿Este banco tiene respaldo?" + }, + "bench-colour": { + "mappings": { + "1": { + "then": "Color: verde" + }, + "2": { + "then": "Color: gris" + }, + "3": { + "then": "Color: blanco" + }, + "4": { + "then": "Color: rojo" + }, + "5": { + "then": "Color: negro" + }, + "6": { + "then": "Color: azul" + }, + "7": { + "then": "Color: amarillo" + } + }, + "question": "¿De qué color es este banco?", + "render": "Color: {colour}" + }, + "bench-direction": { + "question": "¿En qué dirección se mira al sentarse en el banco?" }, "bench-material": { "mappings": { @@ -74,11 +185,81 @@ } }, "bench_at_pt": { + "description": "Una capa que muestra todas las paradas de transporte público que tienen bancos", "name": "Bancos en una parada de transporte público", + "tagRenderings": { + "bench_at_pt-bench_type": { + "question": "¿Qué tipo de banco es este?" + }, + "bench_at_pt-name": { + "render": "{name}" + } + }, "title": { "render": "Banco" } }, + "bicycle_rental": { + "title": { + "render": "Alquiler de bicicletas" + } + }, + "bike_cafe": { + "tagRenderings": { + "bike_cafe-repair-tools": { + "question": "¿Hay herramientas para reparar su propia bicicleta?" + } + } + }, + "charging_station": { + "tagRenderings": { + "Authentication": { + "mappings": { + "0": { + "then": "Autenticación mediante tarjeta de membresía" + }, + "1": { + "then": "Autenticación mediante aplicación" + }, + "2": { + "then": "Autenticación mediante llamada telefónica disponible" + }, + "3": { + "then": "Autenticación mediante SMS disponible" + }, + "4": { + "then": "Autenticación mediante NFC disponible" + }, + "5": { + "then": "Autenticación mediante Money Card disponible" + }, + "6": { + "then": "Autenticación mediante tarjeta de débito disponible" + } + } + }, + "Network": { + "mappings": { + "1": { + "then": "No forma parte de una red mayor" + } + }, + "question": "¿Esta estación de carga forma parte de una red?", + "render": "Parte de la red {network}" + }, + "OH": { + "mappings": { + "0": { + "then": "Abre 24/7 (incluidos días festivos)" + } + }, + "question": "¿Cuándo abre esta estación de carga?" + }, + "Type": { + "question": "¿A qué vehículos se permite la carga aquí?" + } + } + }, "defibrillator": { "name": "Desfibriladores", "presets": { @@ -144,5 +325,12 @@ "title": { "render": "Bicicleta blanca" } + }, + "observation_tower": { + "tagRenderings": { + "access": { + "question": "¿Se puede visitar esta torre?" + } + } } } \ No newline at end of file diff --git a/langs/layers/fi.json b/langs/layers/fi.json index 95b22ff318..0b2b80e0fc 100644 --- a/langs/layers/fi.json +++ b/langs/layers/fi.json @@ -106,7 +106,7 @@ "bike_repair_station": { "presets": { "0": { - "title": "Pyöräpumppu" + "title": "pyöräpumppu" } } }, diff --git a/langs/layers/fr.json b/langs/layers/fr.json index f5fed30354..71ffa74c1b 100644 --- a/langs/layers/fr.json +++ b/langs/layers/fr.json @@ -628,15 +628,15 @@ "name": "Station velo (réparation, pompe à vélo)", "presets": { "0": { - "description": "Un dispositif pour gonfler vos pneus sur un emplacement fixe dans l'espace public.

Exemples de pompes à vélo

", - "title": "Pompe à vélo" + "description": "Un dispositif pour gonfler vos pneus sur un emplacement fixe dans l'espace public.", + "title": "pompe à vélo" }, "1": { - "description": "Un dispositif avec des outils pour réparer votre vélo combiné à une pompe a un emplacement fixe. Les outils sont souvent attachés par une chaîne pour empêcher le vol.

Exemple

", - "title": "Point de réparation vélo avec pompe" + "description": "Un dispositif avec des outils pour réparer votre vélo combiné à une pompe a un emplacement fixe. Les outils sont souvent attachés par une chaîne pour empêcher le vol.", + "title": "point de réparation vélo avec pompe" }, "2": { - "title": "Point de réparation vélo sans pompe" + "title": "point de réparation vélo sans pompe" } }, "tagRenderings": { @@ -719,9 +719,6 @@ "mappings": { "0": { "then": "Ouvert en permanence" - }, - "1": { - "then": "Ouvert en permanence" } }, "question": "Quand ce point de réparation de vélo est-il ouvert ?" @@ -1546,12 +1543,8 @@ "Surface area": { "render": "Superficie : {_surface:ha} ha" }, - "Website": { - "question": "Sur quelle page web peut-on trouver plus d'informations sur cette réserve naturelle ?" - }, "phone": { - "question": "Quel numéro de téléphone peut-on appeler pour poser des questions et résoudre des problèmes concernant cette réserve naturelle ?
Respecter la vie privée – renseignez un numéro de téléphone personnel seulement si celui-ci est largement publié", - "render": "{phone}" + "question": "Quel numéro de téléphone peut-on appeler pour poser des questions et résoudre des problèmes concernant cette réserve naturelle ?
Respecter la vie privée – renseignez un numéro de téléphone personnel seulement si celui-ci est largement publié" } } }, @@ -1586,7 +1579,7 @@ "name": "Aire de jeu", "presets": { "0": { - "title": "Terrain de jeux" + "title": "terrain de jeux" } }, "tagRenderings": { @@ -1610,15 +1603,12 @@ "then": "Accessible au public" }, "1": { - "then": "Accessible au public" - }, - "2": { "then": "Réservée aux clients" }, - "3": { + "2": { "then": "Réservée aux élèves de l’école" }, - "4": { + "3": { "then": "Non accessible" } }, @@ -1654,9 +1644,6 @@ }, "1": { "then": "Toujours accessible" - }, - "2": { - "then": "Toujours accessible" } }, "question": "Quand ce terrain de jeux est-il accessible ?" diff --git a/langs/layers/gl.json b/langs/layers/gl.json index 80c79d80a0..33e42935ac 100644 --- a/langs/layers/gl.json +++ b/langs/layers/gl.json @@ -152,13 +152,13 @@ "name": "Estación de bicicletas (arranxo, bomba de ar ou ambos)", "presets": { "0": { - "title": "Bomba de ar" + "title": "bomba de ar" }, "1": { - "title": "Estación de arranxo de bicicletas con bomba de ar" + "title": "estación de arranxo de bicicletas con bomba de ar" }, "2": { - "title": "Estación de arranxo de bicicletas sin bomba de ar" + "title": "estación de arranxo de bicicletas sin bomba de ar" } }, "tagRenderings": { diff --git a/langs/layers/hu.json b/langs/layers/hu.json index c296812786..cb169733f7 100644 --- a/langs/layers/hu.json +++ b/langs/layers/hu.json @@ -358,6 +358,17 @@ } } }, + "bicycle_rental": { + "tagRenderings": { + "bicycle_rental_type": { + "mappings": { + "5": { + "then": "Ez egy leadási pont: ennek a kerékpárkölcsönzőnek a kijelölt kerékpártárolója" + } + } + } + } + }, "bicycle_tube_vending_machine": { "tagRenderings": { "Still in use?": { @@ -621,7 +632,7 @@ }, "public_bookcase-website": { "question": "Van-e olyan weboldal, ahol további információ található erről a nyilvános könyvespolcról?", - "render": "További információ ezen a weboldalon." + "render": "További információ ezen a weboldalon" } }, "title": { diff --git a/langs/layers/id.json b/langs/layers/id.json index 600901e753..45e5e997db 100644 --- a/langs/layers/id.json +++ b/langs/layers/id.json @@ -1,4 +1,20 @@ { + "address": { + "description": "Alamat", + "name": "Alamat yang dikenal di OSM", + "tagRenderings": { + "fixme": { + "question": "Apa yang harus diperbaiki di sini? Tolong jelaskan" + }, + "housenumber": { + "mappings": { + "0": { + "then": "Bangunan ini tidak memiliki nomor rumah" + } + } + } + } + }, "artwork": { "description": "Beragam karya seni", "name": "Karya seni", @@ -298,9 +314,6 @@ "tagRenderings": { "Email": { "render": "{email}" - }, - "phone": { - "render": "{phone}" } } }, diff --git a/langs/layers/it.json b/langs/layers/it.json index a89eeb222a..9ce9dec7eb 100644 --- a/langs/layers/it.json +++ b/langs/layers/it.json @@ -508,15 +508,15 @@ "name": "Stazioni bici (riparazione, gonfiaggio o entrambi)", "presets": { "0": { - "description": "Un dispositivo per gonfiare le proprie gomme in un luogo fisso pubblicamente accessibile.

Esempi di pompe per biciclette

", - "title": "Pompa per bici" + "description": "Un dispositivo per gonfiare le proprie gomme in un luogo fisso pubblicamente accessibile.", + "title": "pompa per bici" }, "1": { - "description": "Un dispositivo con attrezzi per riparare la tua bici e una pompa in un luogo fisso. Gli attrezzi sono spesso attaccati ad una catena per prevenire il furto.

Esempio

", - "title": "Stazione di riparazione bici e pompa" + "description": "Un dispositivo con attrezzi per riparare la tua bici e una pompa in un luogo fisso. Gli attrezzi sono spesso attaccati ad una catena per prevenire il furto.", + "title": "stazione di riparazione bici e pompa" }, "2": { - "title": "Stazione di riparazione bici senza pompa" + "title": "stazione di riparazione bici senza pompa" } }, "tagRenderings": { @@ -596,9 +596,6 @@ "mappings": { "0": { "then": "Sempre aperto" - }, - "1": { - "then": "Sempre aperto" } }, "question": "Quando è aperto questo punto riparazione bici?" @@ -774,7 +771,7 @@ "then": "Noleggio di biciclette {name}" }, "3": { - "then": "Riparazione biciclette {name" + "then": "Riparazione biciclette {name}" }, "4": { "then": "Negozio di biciclette {name}" @@ -1234,12 +1231,8 @@ "Surface area": { "render": "Area: {_surface:ha} ha" }, - "Website": { - "question": "In quale pagina web si possono trovare altre informazioni riguardanti questa riserva naturale?" - }, "phone": { - "question": "Quale numero di telefono comporre per fare domande o segnalare problemi riguardanti questa riserva naturale?br/>Rispetta la privacy (inserisci il numero di telefono privato solo se questo è noto pubblicamente)", - "render": "{phone}" + "question": "Quale numero di telefono comporre per fare domande o segnalare problemi riguardanti questa riserva naturale?br/>Rispetta la privacy (inserisci il numero di telefono privato solo se questo è noto pubblicamente)" } } }, @@ -1274,7 +1267,7 @@ "name": "Campi da gioco", "presets": { "0": { - "title": "Campetto" + "title": "campetto" } }, "tagRenderings": { @@ -1298,15 +1291,12 @@ "then": "Accessibile pubblicamente" }, "1": { - "then": "Accessibile pubblicamente" - }, - "2": { "then": "Accessibile solamente ai clienti dell’attività che lo gestisce" }, - "3": { + "2": { "then": "Accessibile solamente agli studenti della scuola" }, - "4": { + "3": { "then": "Non accessibile" } }, @@ -1342,9 +1332,6 @@ }, "1": { "then": "Si può sempre accedere" - }, - "2": { - "then": "Si può sempre accedere" } }, "question": "Quando si può accedere a questo campetto?" diff --git a/langs/layers/nl.json b/langs/layers/nl.json index 5899a4f1b7..2c6d1c12db 100644 --- a/langs/layers/nl.json +++ b/langs/layers/nl.json @@ -3,6 +3,9 @@ "description": "Adressen", "name": "Bekende adressen in OSM", "tagRenderings": { + "fixme": { + "question": "Wat moet hier gecorrigeerd worden? Leg het uit" + }, "housenumber": { "mappings": { "0": { @@ -21,6 +24,55 @@ "render": "Bekend adres" } }, + "ambulancestation": { + "description": "Een ambulancestation is een plaats waar ambulances, medisch materiaal, persoonlijk beschermingsmateriaal en aanverwanten worden bewaard.", + "name": "Kaart van ambulancestations", + "presets": { + "0": { + "description": "Voeg een ambulancestation toe aan de kaart", + "title": "Ambulancestation" + } + }, + "tagRenderings": { + "ambulance-agency": { + "question": "Welke organisatie beheert dit station?", + "render": "Dit station wordt beheerd door {operator}." + }, + "ambulance-name": { + "question": "Hoe heet dit ambulancestation?", + "render": "Dit station heet {name}." + }, + "ambulance-operator-type": { + "mappings": { + "0": { + "then": "Dit station wordt beheerd door de overheid." + }, + "1": { + "then": "Dit station wordt beheerd door een informele of community organisatie." + }, + "2": { + "then": "Dit station wordt beheerd door een formele groep vrijwilligers." + }, + "3": { + "then": "Dit station wordt beheerd door een privé-organisatie." + } + }, + "question": "Wat voor een organisatie is de beheerder van dit station?", + "render": "De beheerder is van het type {operator:type}." + }, + "ambulance-place": { + "question": "Waar ligt het station? (v.b. naam van de buurt, dorp of stad)", + "render": "Dit station ligt in {addr:place}." + }, + "ambulance-street": { + "question": " In welke straat ligt dit station?", + "render": "Straat waar dit station ligt: {addr:street}" + } + }, + "title": { + "render": "Ambulancestation" + } + }, "artwork": { "description": "Verschillende soorten kunstwerken", "name": "Kunstwerken", @@ -150,7 +202,8 @@ "render": "Maximumbreedte: {maxwidth:physical} m" }, "Overlap (cyclebarrier)": { - "question": "Hoeveel overlappen de barrières?" + "question": "Hoeveel overlappen de barrières?", + "render": "Overlap: {overlap} m" }, "Space between barrier (cyclebarrier)": { "question": "Hoeveel ruimte is er tussen de barrières (langs de lengte van de weg)?", @@ -286,6 +339,7 @@ } }, "bench_at_pt": { + "description": "Een laag die stopplaatsen van openbaar vervoer toont waar er een zitbank is", "name": "Zitbanken aan bushaltes", "tagRenderings": { "bench_at_pt-bench_type": { @@ -363,7 +417,105 @@ "render": "Fietsbibliotheek" } }, + "bicycle_rental": { + "description": "Fietsverhuustations", + "name": "Fietsverhuur", + "presets": { + "0": { + "description": "Een bemande winkel die focust op fietsverhuur", + "title": "fietsverhuurzaak" + }, + "1": { + "title": "fietsverhuur" + } + }, + "tagRenderings": { + "8": { + "renderings": { + "0": { + "question": "Hoeveel type_plural kunnen hier uitgeleend worden?", + "render": "{capacity:bicycle_type} type_plural kunnen hier uitgeleend worden" + } + }, + "rewrite": { + "into": { + "0": { + "1": "Stadsfietsen" + }, + "1": { + "1": "elektrische fietsen" + }, + "2": { + "1": "Kinderfietsen" + }, + "3": { + "1": "BMX-fietsen" + }, + "4": { + "1": "mountainbike" + }, + "5": { + "1": "Fietstassen" + } + } + } + }, + "bicycle-types": { + "mappings": { + "0": { + "then": "Gewone stadsfietsen kunnen hier gehuurd worden" + }, + "1": { + "then": "Elektrische fietsen kunnen hier gehuurd worden" + }, + "2": { + "then": "BMX-fietsen kunnen hier gehuurd worden" + }, + "3": { + "then": "Mountainbikes kunnen hier gehuurd worden" + }, + "4": { + "then": "Kinderfietsen kunnen hier gehuurd worden" + } + }, + "question": "Wat voor soort fietsen en fietstoebehren worden hier verhuurd?", + "render": "{rental} wordt hier uitgeleend" + }, + "bicycle_rental_type": { + "mappings": { + "0": { + "then": "Dit is een zaak die focust op fietsverhuur" + }, + "1": { + "then": "Dit is een zaak die verschillende voorwerpen en/of voertuigen verhuurt, waaronder ook fietsen; al zijn fietsen niet de hoofdfocus" + }, + "2": { + "then": "Dit is een fietsenmaker of fietswinkel die ook fietsen veruurt" + }, + "3": { + "then": "Dit is een docking station waar de fietsen mechanisch in een grotere structuur worden vastgemaakt" + }, + "4": { + "then": "Hier is een machine die fietssleutels verdeelt en terugneemt, eventueel na aanmelden of betaling. De fietsen staan in de buurt geparkeerd" + }, + "5": { + "then": "Dit is een afzetpunt: een parking met duidelijke signalisatie waar (enkel) fietsen van deze fietsverhuur gezet worden" + } + }, + "question": "Wat voor fietsverhuur is dit?" + } + }, + "title": { + "mappings": { + "0": { + "then": "{name}" + } + }, + "render": "Fietsverhuur" + } + }, "bicycle_tube_vending_machine": { + "description": "Een laag met verkoopsautomaten met binnenbanden voor fietsen (dit kan een automaat zijn met énkel fietsbanden, of een gewone automaat met fietsbanden en andere fietsaccessoires zoals lichten, handschoenen, sloten,...)", "name": "Fietsbanden-verkoopsautomaat", "presets": { "0": { @@ -392,6 +544,7 @@ } }, "bike_cafe": { + "description": "Een fietscafé is een café dat gericht is op fietsers, bijvoorbeeld omdat het een fietspomp heeft, fietsgerelateerde decoratie heeft enzovoorts.", "name": "Fietscafé", "presets": { "0": { @@ -459,12 +612,45 @@ } }, "bike_cleaning": { + "description": "Een laag die plaatsen toont waar je je fiets kunt wassen", "name": "Fietsschoonmaakpunt", "presets": { "0": { "title": "Fietsschoonmaakpunt" } }, + "tagRenderings": { + "bike_cleaning-charge": { + "mappings": { + "0": { + "then": "Gratis fietsschoonmaakpunt" + }, + "1": { + "then": "Gratis te gebruiken" + }, + "2": { + "then": "Je moet betalen voor het fietsschoonmaakpunt" + } + }, + "question": "Hoeveel kost het gebruik van het fietsschoonmaakpunt?", + "render": "Het gebruik van het fietsschoonmaakpunt kost {charge}" + }, + "bike_cleaning-service:bicycle:cleaning:charge": { + "mappings": { + "0": { + "then": "Het fietsschoonmaakpunt is gratis" + }, + "1": { + "then": "Gratis te gebruiken" + }, + "2": { + "then": "Het fietsschoonmaakpunt is betalend, maar de prijs is onbekend" + } + }, + "question": "Hoeveel kost het gebruik van het fietsschoonmaakpunt?", + "render": "Het gebruik van het fietsschoonmaakpunt kost {service:bicycle:cleaning:charge}" + } + }, "title": { "mappings": { "0": { @@ -475,6 +661,7 @@ } }, "bike_parking": { + "description": "Een laag die toont waar je je fiets kunt parkeren", "name": "Fietsparking", "presets": { "0": { @@ -533,7 +720,7 @@ }, "Cargo bike capacity?": { "question": "Voor hoeveel bakfietsen heeft deze fietsparking plaats?", - "render": "Deze parking heeft plaats voor {capacity:cargo_bike} fietsen" + "render": "Deze parking heeft plaats voor {capacity:cargo_bike} bakfietsen" }, "Cargo bike spaces?": { "mappings": { @@ -541,7 +728,7 @@ "then": "Deze parking heeft plaats voor bakfietsen" }, "1": { - "then": "Er zijn speciale plaatsen voorzien voor bakfietsen" + "then": "Er zijn speciale plaatsen voorzien voor bakfietsen." }, "2": { "then": "Je mag hier geen bakfietsen parkeren" @@ -587,18 +774,19 @@ }, "bike_repair_station": { "description": "Deze laag toont fietspompen en herstelpunten voor fietsen", - "name": "Fietspunten (herstel, pomp of allebei)", + "name": "Fietspomp and fietsherstel", "presets": { "0": { - "description": "Een apparaat waar je je fietsbanden kan oppompen, beschikbaar in de publieke ruimte. De fietspomp in je kelder telt dus niet.

Voorbeelden

Examples of bicycle pumps

", - "title": "Fietspomp" + "description": "Een fietspomp in de publieke ruimte zonder extra gereedschap. De fietspomp in je kelder telt dus niet.", + "title": "fietspomp" }, "1": { - "description": "Een apparaat met zowel gereedschap om je fiets te herstellen, met een pomp. Deze zijn op een vastgemaakt op een plaats in de publieke ruimte, bv. aan een paal.

Voorbeeld

", - "title": "Herstelpunt en pomp" + "description": "Een fietspomp en gereedschap om je fiets te herstellen in de publieke ruimte. Deze zijn op een vastgemaakt, bijvoorbeeld aan een paal.", + "title": "herstelpunt en pomp" }, "2": { - "title": "Herstelpunt zonder pomp" + "description": "Gereedschap om je fiets te herstellen in de publieke ruimte (zonder pomp). Deze zijn op een vastgemaakt, bijvoorbeeld aan een paal.", + "title": "herstelpunt zonder pomp" } }, "tagRenderings": { @@ -616,6 +804,26 @@ }, "question": "Werkt de fietspomp nog?" }, + "access": { + "mappings": { + "0": { + "then": "Publiek toegankelijk" + }, + "1": { + "then": "Publiek toegankelijk" + }, + "2": { + "then": "Enkel voor klanten van de bijhorende zaak" + }, + "3": { + "then": "Niet publiek toegankelijk" + }, + "4": { + "then": "Niet publiek toegankelijk" + } + }, + "question": "Wie kan dit herstelpunt gebruiken?" + }, "bike_repair_station-available-services": { "mappings": { "0": { @@ -628,7 +836,7 @@ "then": "Er is zowel een pomp als gereedschap aanwezig" } }, - "question": "Welke functies biedt dit fietspunt?" + "question": "Welke functies biedt locatie?" }, "bike_repair_station-bike-chain-tool": { "mappings": { @@ -658,10 +866,10 @@ "then": "Manuele pomp" }, "1": { - "then": "Electrische pomp" + "then": "Elektrische pomp" } }, - "question": "Is dit een electrische fietspomp?" + "question": "Is dit een elektrische fietspomp?" }, "bike_repair_station-email": { "question": "Wat is het email-adres van de beheerder?" @@ -684,9 +892,6 @@ "mappings": { "0": { "then": "Dag en nacht open" - }, - "1": { - "then": "Dag en nacht open" } }, "question": "Wanneer is dit fietsherstelpunt open?" @@ -878,6 +1083,7 @@ } }, "bike_themed_object": { + "description": "Een laag met fietsgerelateerde diensten, die in geen enkele andere laag konden ondergebracht worden", "name": "Fietsgerelateerd object", "title": { "mappings": { @@ -934,13 +1140,6 @@ } } }, - "mapRendering": { - "0": { - "icon": { - "render": "./assets/layers/birdhide/birdhide.svg" - } - } - }, "name": "Vogelkijkhutten", "presets": { "0": { @@ -1022,6 +1221,7 @@ } }, "cafe_pub": { + "description": "Een laag die kroegen en koffiehuizen toont waar je iets kunt drinken. De laag zal je enkele vragen stellen", "filter": { "0": { "options": { @@ -1163,7 +1363,7 @@ "name": "Oplaadpunten", "presets": { "0": { - "title": "laadpunt met gewone stekker(s) (bedoeld om electrische fietsen op te laden)" + "title": "laadpunt voor elektrische fietsen met gewone stekker(s)" }, "1": { "title": "oplaadstation voor elektrische auto's" @@ -1367,13 +1567,13 @@ "Type": { "mappings": { "0": { - "then": "Fietsen kunnen hier opgeladen worden" + "then": "Elektrische fietsen kunnen hier opgeladen worden" }, "1": { "then": "Elektrische auto's kunnen hier opgeladen worden" }, "2": { - "then": "Electrische scooters (snorfiets of bromfiets) kunnen hier opgeladen worden" + "then": "Elektrische scooters (snorfiets of bromfiets) kunnen hier opgeladen worden" }, "3": { "then": "Vrachtwagens kunnen hier opgeladen worden" @@ -1604,18 +1804,6 @@ "question": "Hoelang mag een voertuig hier blijven staan?", "render": "De maximale parkeertijd hier is {canonical(maxstay)}" }, - "payment-options": { - "override": { - "mappings+": { - "0": { - "then": "Betalen via een app van het netwerk" - }, - "1": { - "then": "Betalen via een lidkaart van het netwerk" - } - } - } - }, "phone": { "question": "Wat is het telefoonnummer van de beheerder van dit oplaadpunt?", "render": "Bij problemen, bel naar {phone}" @@ -2037,7 +2225,15 @@ } }, "title": { - "render": "Oplaadpunten" + "mappings": { + "0": { + "then": "Oplaadpunt voor elektrische fietsen" + }, + "1": { + "then": "Oplaadpunt voor elektrische auto's" + } + }, + "render": "Oplaadpunt" }, "units": { "0": { @@ -2220,6 +2416,7 @@ } }, "cycleways_and_roads": { + "description": "Alle infrastructuur waar je over kunt fietsen, met vragen over die infrastructuur", "name": "Fietspaden, straten en wegen", "tagRenderings": { "Cycleway type for a road": { @@ -2400,6 +2597,32 @@ "render": "Deze weg is gemaakt van {surface}" }, "Surface of the street": { + "mappings": { + "0": { + "then": "Bruikbaar voor kleine, harde wielen: rollerblade, skateboard" + }, + "1": { + "then": "Bruikbaar voor smalle wielen: racefiets" + }, + "2": { + "then": "Bruikbaar voor normale wielen: stadsfiets, rolwagen, step" + }, + "3": { + "then": "Bruikbaar voor robuuste wielen: trekking fiets, auto, rickshaw" + }, + "4": { + "then": "Bruikbaar voor terreinvoertuigen: 4x4 personenwagens" + }, + "5": { + "then": "Bruikbaar voor terreinvoertuigen: zware 4x4 voertuigen" + }, + "6": { + "then": "Bruikbaar voor uitzonderlijke terreinvoertuigen: tractor, ATV" + }, + "7": { + "then": "Onmogelijk om met een voertuig met wielen te passeren" + } + }, "question": "Wat is de kwaliteit van deze straat?" }, "cyclelan-segregation": { @@ -2576,6 +2799,7 @@ } }, "defibrillator": { + "description": "Een laag die defibrillatoren toont die je kan gebruiken bij noodgevallen. Dit omvat zowel publiek beschikbare toestellen als defibrillatoren waarvoor het toestel enkel door personeel aangeboden kan worden", "name": "Defibrillatoren", "presets": { "0": { @@ -2617,6 +2841,9 @@ }, "2": { "then": "Dit is een gewone automatische defibrillator" + }, + "3": { + "then": "Dit is een speciaal type defibrillator: {defibrillator}" } }, "question": "Is dit een gewone automatische defibrillator of een manueel toestel enkel voor professionals?" @@ -2747,9 +2974,14 @@ } }, "entrance": { + "description": "Een laag met ingangen (van gebouwen etc.) waarmee je details kunt aanvullen die belangrijk zijn voor bijvoorbeeld rolstoelgebruikers (en fietsers, leveranciers, ...)", + "name": "Toegang", "tagRenderings": { "Door_type": { "mappings": { + "0": { + "then": "Het type deur is onbekend" + }, "1": { "then": "Een gewone deur die aan scharnieren ophangt en openzwaait" }, @@ -2761,6 +2993,17 @@ }, "4": { "then": "Een poort die langs boven dichtrolt, typisch voor garages" + }, + "5": { + "then": "Er is een toegang zonder een deur" + } + }, + "question": "Om wat voor deur gaat het?
Of de deur al of niet automatisch werkt, vragen we hierna " + }, + "Entrance type": { + "mappings": { + "0": { + "then": "Het specifieke type ingang is onbekend" } } } @@ -2955,7 +3198,7 @@ "friture-oil": { "mappings": { "0": { - "then": "Plantaardige olie" + "then": "Bakt in plantaardige olie" }, "1": { "then": "Dierlijk vet" @@ -3030,6 +3273,9 @@ }, "1": { "then": "Fastfood-zaak {name}" + }, + "2": { + "then": "Fastfood-zaak" } }, "render": "Eetgelegenheid" @@ -3078,6 +3324,7 @@ } }, "gps_track": { + "name": "Jouw afgelegde route", "tagRenderings": { "Privacy notice": { "render": "Dit is waar je was sinds je deze website hebt geopened. Dit is enkel zichtbaar voor jou en niemand anders, je locatie wordt niet verstuurd" @@ -3241,23 +3488,19 @@ "question": "Wat is de naam van dit gebied?", "render": "Dit gebied heet {name}" }, - "Name:nl-tag": { - "question": "Wat is de Nederlandstalige naam van dit gebied?", - "render": "Dit gebied heet {name:nl}" - }, "Non-editable description": { "render": "Extra info: {description}" }, "Operator tag": { "mappings": { "0": { - "then": "Dit gebied wordt beheerd door Natuurpunt" + "then": "Dit gebied wordt beheerd door Natuurpunt" }, "1": { - "then": "Dit gebied wordt beheerd door {operator}" + "then": "Dit gebied wordt beheerd door {operator}" }, "2": { - "then": "Dit gebied wordt beheerd door het Agentschap Natuur en Bos" + "then": "Dit gebied wordt beheerd door het Agentschap Natuur en Bos" } }, "question": "Wie beheert dit gebied?", @@ -3266,20 +3509,13 @@ "Surface area": { "render": "Totale oppervlakte: {_surface:ha}Ha" }, - "Website": { - "question": "Op welke webpagina kan men meer informatie vinden over dit natuurgebied?" - }, "phone": { - "question": "Waar kan men naartoe bellen voor vragen en meldingen van dit natuurgebied?
Respecteer privacy - geef enkel persoonlijke telefoonnummers als deze elders zijn gepubliceerd", - "render": "{phone}" + "question": "Waar kan men naartoe bellen voor vragen en meldingen van dit natuurgebied?
Respecteer privacy - geef enkel persoonlijke telefoonnummers als deze elders zijn gepubliceerd" } }, "title": { "mappings": { "0": { - "then": "{name:nl}" - }, - "1": { "then": "{name}" } }, @@ -3289,12 +3525,6 @@ "observation_tower": { "description": "Torens om van het uitzicht te genieten", "name": "Uitkijktorens", - "presets": { - "0": { - "description": "Een publiek toegankelijke uitkijktoren", - "title": "Uitkijktoren" - } - }, "tagRenderings": { "Fee": { "mappings": { @@ -3313,6 +3543,28 @@ "question": "Wie onderhoudt deze toren?", "render": "Wordt onderhouden door {operator}" }, + "access": { + "mappings": { + "0": { + "then": "Deze toren is publiek toegankelijk" + }, + "1": { + "then": "Deze toren can enkel bezocht worden met een gids" + } + }, + "question": "Is deze toren publiek toegankelijk?" + }, + "elevator": { + "mappings": { + "0": { + "then": "Deze toren heeft een lift die bezoekers naar de top van de toren brengt" + }, + "1": { + "then": "Deze toren heeft geen lift" + } + }, + "question": "Heeft deze toren een lift?" + }, "name": { "mappings": { "0": { @@ -3321,6 +3573,10 @@ }, "question": "Heeft deze toren een naam?", "render": "Deze toren heet {name}" + }, + "step_count": { + "question": "Hoeveel treden moet men beklimmen op de top van de toren te bereiken?", + "render": "Deze toren heeft {step_count} traptredes" } }, "title": { @@ -3354,8 +3610,8 @@ } }, "picnic_table": { - "description": "Deze laag toont picnictafels", - "name": "Picnictafels", + "description": "Deze laag toont picknicktafels", + "name": "Picknicktafels", "presets": { "0": { "title": "picnic-tafel" @@ -3365,18 +3621,18 @@ "picnic_table-material": { "mappings": { "0": { - "then": "Deze picnictafel is gemaakt uit hout" + "then": "Deze picknicktafel is gemaakt uit hout" }, "1": { - "then": "Deze picnictafel is gemaakt uit beton" + "then": "Deze picknicktafel is gemaakt uit beton" } }, - "question": "Van welk materiaal is deze picnictafel gemaakt?", - "render": "Deze picnictafel is gemaakt van {material}" + "question": "Van welk materiaal is deze picknicktafel gemaakt?", + "render": "Deze picknicktafel is gemaakt van {material}" } }, "title": { - "render": "Picnictafel" + "render": "Picknicktafel" } }, "play_forest": { @@ -3399,7 +3655,7 @@ "name": "Speeltuinen", "presets": { "0": { - "title": "Speeltuin" + "title": "speeltuin" } }, "tagRenderings": { @@ -3423,15 +3679,12 @@ "then": "Vrij toegankelijk voor het publiek" }, "1": { - "then": "Vrij toegankelijk voor het publiek" - }, - "2": { "then": "Enkel toegankelijk voor klanten van de bijhorende zaak" }, - "3": { - "then": "Vrij toegankelijk voor scholieren van de school" + "2": { + "then": "Enkel toegankelijk voor scholieren van de bijhorende school" }, - "4": { + "3": { "then": "Niet vrij toegankelijk" } }, @@ -3467,9 +3720,6 @@ }, "1": { "then": "Dag en nacht toegankelijk" - }, - "2": { - "then": "Dag en nacht toegankelijk" } }, "question": "Op welke uren is deze speeltuin toegankelijk?" @@ -4354,11 +4604,11 @@ "name": "Toiletten", "presets": { "0": { - "title": "publieke toilet" + "title": "publiek toilet" }, "1": { "description": "Deze toiletten hebben op zijn minst één rolstoeltoegankelijke WC", - "title": "rolstoeltoegankelijke, publieke toilet" + "title": "rolstoeltoegankelijke, publiek toilet" } }, "tagRenderings": { diff --git a/langs/layers/pl.json b/langs/layers/pl.json index 804fb7b590..d91bb5b5cc 100644 --- a/langs/layers/pl.json +++ b/langs/layers/pl.json @@ -223,11 +223,11 @@ "bike_repair_station": { "presets": { "0": { - "description": "Urządzenie do pompowania opon w stałym miejscu w przestrzeni publicznej.

Przykłady pompek rowerowych

", - "title": "Pompka do roweru" + "description": "Urządzenie do pompowania opon w stałym miejscu w przestrzeni publicznej.", + "title": "pompka do roweru" }, "1": { - "title": "Stacja naprawy rowerów i pompka" + "title": "stacja naprawy rowerów i pompka" } }, "tagRenderings": { diff --git a/langs/layers/pt.json b/langs/layers/pt.json index 4c5b84d471..df8d251349 100644 --- a/langs/layers/pt.json +++ b/langs/layers/pt.json @@ -412,7 +412,7 @@ "bike_repair_station": { "presets": { "0": { - "description": "Um aparelho para encher os seus pneus num local fixa no espaço público

Exemplos de bombas de bicicletas

" + "description": "Um aparelho para encher os seus pneus num local fixa no espaço público" } }, "tagRenderings": { @@ -477,9 +477,6 @@ "mappings": { "0": { "then": "Sempre aberto" - }, - "1": { - "then": "Sempre aberto" } } }, diff --git a/langs/layers/pt_BR.json b/langs/layers/pt_BR.json index 03d43821da..77f6a9cd00 100644 --- a/langs/layers/pt_BR.json +++ b/langs/layers/pt_BR.json @@ -355,8 +355,8 @@ "name": "Estações de bicicletas (reparo, bomba ou ambos)", "presets": { "0": { - "description": "Um dispositivo para encher seus pneus em um local fixa no espaço público

Exemplos de bombas de bicicletas

", - "title": "Bomba de bicicleta" + "description": "Um dispositivo para encher seus pneus em um local fixa no espaço público", + "title": "bomba de bicicleta" } }, "tagRenderings": { @@ -421,9 +421,6 @@ "mappings": { "0": { "then": "Sempre aberto" - }, - "1": { - "then": "Sempre aberto" } } }, diff --git a/langs/layers/ru.json b/langs/layers/ru.json index 1ea9cfa444..18fe498cfd 100644 --- a/langs/layers/ru.json +++ b/langs/layers/ru.json @@ -469,7 +469,7 @@ "bike_repair_station": { "presets": { "0": { - "title": "Велосипедный насос" + "title": "bелосипедный насос" } }, "tagRenderings": { @@ -1007,19 +1007,11 @@ "tagRenderings": { "Email": { "render": "{email}" - }, - "phone": { - "render": "{phone}" } } }, "observation_tower": { "name": "Смотровые башни", - "presets": { - "0": { - "title": "смотровая башня" - } - }, "title": { "mappings": { "0": { @@ -1089,7 +1081,7 @@ }, "playground-access": { "mappings": { - "4": { + "3": { "then": "Недоступно" } } @@ -1122,9 +1114,6 @@ }, "1": { "then": "Всегда доступен" - }, - "2": { - "then": "Всегда доступен" } }, "question": "Когда открыта эта игровая площадка?" diff --git a/langs/nl.json b/langs/nl.json index 342d344978..c13a4b84a0 100644 --- a/langs/nl.json +++ b/langs/nl.json @@ -17,10 +17,11 @@ "uploadMultipleDone": "{count} afbeeldingen zijn toegevoegd. Bedankt voor je bijdrage!", "toBig": "Je afbeelding is te groot, namelijk {actual_size}. Gelieve afbeeldingen van maximaal {max_size} te gebruiken", "ccbsExplanation": "Als je foto met de CC-BY-SA-licentie gepubliceerd wordt, dan mag je foto gebruikt worden voor alle doeleinden, maar je naam moet vermeld worden en afgeleide werken moeten onder dezelfde licentie gepubliceerd worden", - "ccoExplanation": "Als je foto in het publiek domein gepubliceerd wordt, dan mag iedereen je foto voor alle doeleinden gebruiken" + "ccoExplanation": "Als je foto in het publiek domein gepubliceerd wordt, dan mag iedereen je foto voor alle doeleinden gebruiken", + "ccbExplanation": "Als je foto met de CC-BY-SA-licentie gepubliceerd wordt, dan mag je foto gebruikt worden voor alle doeleinden, maar je naam moet vermeld worden" }, "centerMessage": { - "loadingData": "Data wordt geladen...", + "loadingData": "Data wordt geladen…", "zoomIn": "Zoom in om de data te zien en te bewerken", "ready": "Klaar!", "retrying": "Data inladen mislukt - wordt opnieuw geprobeerd over {count} seconden" @@ -30,12 +31,17 @@ "title": "Welkom bij MapComplete", "intro": "MapComplete is een OpenStreetMap-applicatie waar informatie over een specifiek thema bekeken en aangepast kan worden.", "pickTheme": "Kies hieronder een thema om te beginnen.", - "featuredThemeTitle": "Thema van de week" + "featuredThemeTitle": "Thema van de week", + "logIn": "Log in om andere thema's te zien waar je al in bewerkt hebt" }, "general": { + "loadingTheme": "{theme} wordt geladen...", + "poweredByOsm": "Gebouwd met OpenStreetMap", "loginWithOpenStreetMap": "Aanmelden met OpenStreetMap", "welcomeBack": "Je bent aangemeld. Welkom terug!", "loginToStart": "Meld je aan om deze vraag te beantwoorden", + "example": "Voorbeeld", + "examples": "Voorbeelden", "search": { "search": "Zoek naar een locatie", "searching": "Aan het zoeken...", @@ -44,14 +50,14 @@ }, "add": { "addNewMapLabel": "Klik hier om een item toe te voegen", - "addNew": "Voeg hier een {category} toe", + "addNew": "Voeg een {category} toe", "title": "Nieuw punt toevoegen?", - "intro": "Je klikte ergens waar er nog geen data is. Kies hieronder welk punt je wilt toevoegen
", - "pleaseLogin": "Gelieve je aan te melden om een punt to te voegen", + "intro": "Kies hieronder welk punt je wilt toevoegen
", + "pleaseLogin": "Gelieve je aan te melden om een punt to te voegen", "zoomInFurther": "Gelieve verder in te zoomen om een punt toe te voegen.", "stillLoading": "De data worden nog geladen. Nog even geduld en dan kan je een punt toevoegen.", - "confirmIntro": "

Voeg hier een {title} toe?

Het punt dat je hier toevoegt, is zichtbaar voor iedereen. Veel applicaties gebruiken deze data, voeg dus enkel punten toe die echt bestaan.", - "confirmButton": "Voeg hier een {category} toe
Je toevoeging is voor iedereen zichtbaar
", + "confirmIntro": "

Voeg een {title} toe?

Het punt dat je toevoegt, is zichtbaar voor iedereen. Veel applicaties gebruiken deze data, voeg dus enkel punten toe die echt bestaan.", + "confirmButton": "Voeg een {category} toe
Je toevoeging is voor iedereen zichtbaar
", "openLayerControl": "Open de laag-instellingen", "layerNotEnabled": "De laag {layer} is gedeactiveerd. Activeer deze om een punt toe te voegen", "presetInfo": "Het nieuwe object krijgt de attributen {tags}", @@ -59,7 +65,17 @@ "disableFilters": "Zet alle filters af", "hasBeenImported": "Dit object is reeds geimporteerd", "warnVisibleForEveryone": "Je toevoeging is voor iedereen zichtbaar", - "zoomInMore": "Zoom meer in om dit object te importeren" + "zoomInMore": "Zoom meer in om dit object te importeren", + "importTags": "Het object zal deze tags krijgen: {tags}", + "import": { + "hasBeenImported": "Dit object is geïmporteerd", + "officialThemesOnly": "In onofficiële thema's is de importeerknop uitgeschakeld om ongelukjes te vermijden", + "zoomInMore": "Zoom verder in om dit kaart-object te kunnen importeren", + "wrongType": "Dit object is geen punt of lijn, en kan daarom niet geïmporteerd worden", + "importTags": "Het element zal deze tags krijgen: {tags}", + "howToTest": "Voor testmode, voeg test=true of backend=osm-test to aan de URL. De wijzigingenset zal in de console geprint worden. Gelieve een PR te openen om dit thema als officieel thema toe te voegen en zo de import-knop te activeren." + }, + "wrongType": "Dit element is geen punt of lijn en kan daarom niet geïmporteerd worden" }, "pickLanguage": "Kies je taal: ", "about": "Bewerk en voeg data toe aan OpenStreetMap over een specifiek onderwerp op een gemakkelijke manier", @@ -83,7 +99,15 @@ }, "mapContributionsByAndHidden": "De zichtbare data heeft bijdragen van {contributors} en {hiddenCount} andere bijdragers", "mapContributionsBy": "De huidige data is bijgedragen door {contributors}", - "codeContributionsBy": "MapComplete is gebouwd door {contributors} en {hiddenCount} andere bijdragers" + "codeContributionsBy": "MapComplete is gebouwd door {contributors} en {hiddenCount} andere bijdragers", + "openMapillary": "Open Mapillary op deze locatie", + "donate": "Geef MapComplete financiële steun", + "editJosm": "Hier bewerken met JOSM", + "editId": "Hier bewerken met de OpenStreetMap online editor", + "openIssueTracker": "Geef een fout in de software door", + "josmOpened": "JOSM is geopend", + "josmNotOpened": "JOSM was niet bereikbaar. Controleer of het open staat en remote control is geactiveerd", + "openOsmcha": "Bekijk de laatste bijdragen gemaakt met {theme}" }, "sharescreen": { "intro": "

Deel deze kaart

Kopieer onderstaande link om deze kaart naar vrienden en familie door te sturen:", @@ -211,7 +235,12 @@ "downloadAsPdfHelper": "Perfect om de huidige kaart af te printen", "downloadAsPdf": "Download een PDF van de huidig zichtbare kaart", "title": "Download de zichtbare data", - "exporting": "Aan het exporteren…" + "exporting": "Aan het exporteren…", + "uploadGpx": "Track uploaden naar OpenStreetMap", + "downloadGpx": "Downloaden als GPX-bestand", + "downloadFeatureAsGpx": "Downloaden als GPX-bestand", + "downloadFeatureAsGeojson": "Downloaden als GeoJson bestand", + "downloadGpxHelper": "De meeste navigatie toestellen en applicaties kunnen een GPX-bestand openen" }, "cancel": "Annuleren", "testing": "Testmode - wijzigingen worden niet opgeslaan", @@ -229,7 +258,17 @@ "histogram": { "error_loading": "Kan het histogram niet laden" }, - "loading": "Aan het laden..." + "loading": "Aan het laden...", + "removeLocationHistory": "Verwijder de geschiedenis aan locaties", + "apply_button": { + "appliedOnAnotherObject": "Object {id} zal deze tags ontvangen: {tags}", + "isApplied": "De wijzigingen zijn doorgevoerd" + }, + "logout": "Afmelden", + "confirm": "Bevestigen", + "back": "Vorige", + "next": "Volgende", + "backToMapcomplete": "Terug naar het themaoverzicht" }, "reviews": { "title": "{count} beoordelingen", @@ -314,5 +353,130 @@ }, "multi_apply": { "autoApply": "Wijzigingen aan eigenschappen {attr_names} zullen ook worden uitgevoerd op {count} andere objecten." + }, + "importLayer": { + "layerName": "Hier is misschien een {title}", + "description": "Deze laag toont kaart-nota's die wijzen op een {title}", + "popupTitle": "Is hier een {title}?", + "importButton": "import_button({layerId}, _tags, Ik heb hier een {title} gevonden - voeg deze toe aan de kaart...,./assets/svg/addSmall.svg,,,id)", + "importHandled": "
Dit punt is afgehandeld. Bedankt om mee te helpen!
", + "notFound": "Ik kon hier geen {title} vinden - verwijder deze van de kaart", + "alreadyMapped": "Er staat hier reeds een {title} op de kaart; dit punt is een duplicaat. Verwijder deze van de kaart" + }, + "professional": { + "title": "Professionele ondersteuning voor MapComplete", + "indexPage": { + "button": "Ontdek onze services", + "hookMore": "We kunnen helpen bij het opzetten van terreinwerk, integreren van datasets en algemene OpenStreetMap-consultancy", + "hook": "Professionele ondersteuning nodig?" + }, + "text1": "

MapComplete is de editor die het gemakkelijk maakt om bij te dragen aan OpenStreetMap.

", + "aboutOsm": { + "aboutOsm": { + "title": "Wat is OpenStreetMap?", + "li1": "Sommige winkels hebben attibuten met openingsuren, telefoonnumer, een website, welke betaalmiddelen er geaccepteerd worden, wat ze verkopen, welke diensten ze aanbieden, …", + "li3": "en nog veel meer…", + "li2": "Toiletten hebben mogelijks informatie over rolstoeltoegankelijkheid, luiertafel, hoeveel een toiletbezoek kost, …", + "intro": "OpenStreetMap is een gedeelde, globale databank; gebouwd door vrijwilligers. Alle geodata is er welkom, als deze ter plaatse geverifieerd kan worden.
OpenStreetMap is zo uitgegroeid tot een uitgebreide databank: het bevat gegevens over miljoenen objecten binnen duizenden categorieën. Elk individueel object kan ook weer verschillende attributen hebben, waardoor veel nuance ontstaat:", + "li0": "Straten hebben een geometrie, maar kunnen ook informatie bevatten over de maximale toegestane snelheid, de wegbedekking, ofdat ze 's nachts verlicht zijn, een link naar Wikipedia, een link naar wat ze vernoemd zijn, welke wandel-, fiets- en busroutes er lopen, …" + }, + "benefits": { + "li1": "Je data heeft een groter bereik dan ooit tevoren door de vele hergebruikers zoals Bing Maps, Apple Maps, Facebook, Instagram, Pokemon Go, OsmAnd, Organic Maps, Maps.me, Mapbox, Komoot, de meeste fietsrouteplanners, …", + "intro": "Het kan erg moeilijk zijn om een eigen dataset achter te laten, want het opbouwen ervan kostte vaak veel tijd en moeite.
Echter, de voordelen om over te schakelen naar OpenStreetMap zijn enorm:", + "title": "Voordelen van het OpenStreetMap-ecosysteem", + "li0": "Je bent niet langer alleen om deze data te verzamelen en te onderhouden - een hele community helpt je", + "li2": "Veel overheidsorganisaties en gemeentes gebruiken OpenStreetMap op hun website" + }, + "vandalism": { + "li1": "een kleine, foutieve wijziging heeft weinig impact en brengt dus weinig op voor een vandaal", + "intro": "Omdat iedereen de data kan aanpassen, is het inderdaad mogelijk dat iemand opzettelijk een foute aanpassing maakt. Dit gebeurt in de praktijk echter nooit, want:", + "li0": "de technische drempel om een wijziging te maken is hoog", + "li2": "een wijziging met een grote impact wordt snel opgemerkt omdat er zoveel datagebruikers zijn", + "title": "Is vandalisme een probleem?", + "li3": "alle wijzigingen worden bijgehouden en gelinkt aan de bijdrager die ze maakt. Een gebruiker die veelvuldig en opzettelijk de data kapot maakt, wordt verbannen", + "li4": "In België en verschillende andere landen wordt elke eerste wijziging van een nieuwe bijdrager systematisch gecontroleerd en gecorrigeerd." + }, + "license": { + "title": "De licentie", + "li0": "Een product dat OpenStreetMap gebruikt moet de OpenStreetMap vermelden.", + "outro": "De licentie heeft enkele gevolgen - deze worden hieronder toegelicht.", + "intro": "OpenStreetMap wordt gepubliceerd onder de Open Database License. De volledige licentie kan als volgt worden samengevat:", + "li1": "OpenStreetMap-data moet open blijven. Dit betekent dat een kaart met OpenStreetMap-data opnieuw gekopieerd mag worden." + } + }, + "osmTitle": "Wat kunnen OpenStreetMap en MapComplete doen voor jouw organisatie?", + "intro": "De ontwikkelaar van MapComplete bied professionele ondersteuning aan. Dit document toont enkele mogelijkheden, frequente vragen en de grenzen van wat MapComplete kan.", + "text0": "

Het onderhouden en updaten van geodata is moeilijk en duur.
Bovendien verzamelen veel organisaties dezelfde data, onafhankelijk van elkaar - waardoor hetzelfde werk verschillende keren wordt gedaan, de data in niet-standaard formaten wordt bijgehouden en ieder een onvolledige, niet onderhouden dataset heeft

Parallel hiermee is er ook een grote community die geodata verzameld in een globale, gestandaardiseerde databank: OpenStreetMap.org.

", + "aboutMc": { + "title": "MapComplete gebruiken in je eigen organisatie", + "text0": "Als je een bestaand MapComplete-thema wilt gebruiken of in je website wilt embedden, dan mag je dit gratis doen. Dit is gratis en zal dat altijd zijn.", + "survey": { + "title": "Mogelijkheden om data te verzamelen", + "intro": "

MapComplete is een makkelijk te gebruiken hulpmiddel om ter plaatste met een smartphone of vanop afstand met een PC data te verzamelen. Met enkele klikken kan de nodige data toegevoegd worden aan OpenStreetMap.

\n

Wij kunnen voor jou een op maat gemaakte verzameltool maken die precies de data vraagt die nodig is.

\n

Heb je een dataset die (opnieuw) opgemeten moet worden? Dat is het perfecte moment om de stap naar OpenStreetMap te maken. MapComplete kan je eigen dataset en OpenStreetMap samen tonen, wat het makkelijk maakt om zowel de eigen locaties als de bijdragen van de community na te kijken.

\n" + }, + "internalUse": { + "title": "Data hergebruiken" + }, + "text2": "Twijfel je nog? We sommen de mogelijkheden hieronder op en beantwoorden enkele veelvoorkomende vragen", + "text1": "Wil je andere data visualiseren, maar bestaat er nog geen geschikte kaart voor? De MapComplete-ontwikkelaars kunnen dit op maat bouwen voor een schappelijk budget. Stuur je vraag via email, github of een bericht op osm.org", + "layers": { + "intro": "

MapComplete heeft een krachtig templatesysteem om snel een kaart op te zetten die precies toont wat je nodig hebt

\n

Deze data kan opgehaald van OpenStreetMap of van externe datasets komen - bijvoorbeeld om datasets met elkaar te vergelijken of om data te tonen die niet in OpenStreetMap thuishoort (bijvoorbeeld evenementen, statistieken, ...)

", + "title": "Welke data kan getoond worden met MapComplete?" + } + } + }, + "privacy": { + "geodata": "Op het moment dat MapComplete je locatie krijgt, blijft deze informatie en de geschiedenis ervan lokaal op je toestel. Je locatiedata wordt nooit automatisch doorgestuurd naar waar dan ook - behalve wanneer een bepaalde functionaliteit daar expliciet om vraagt.", + "tracking": "Om enig inzicht te krijgen in wie de site bezoekt, wordt er technische informatie verzameld. Dit omvat het land van waaruit je de site bezoekt, vanop welke website je doorklikte naar MapComplete, het type toestel en de schermgrootte. Een cookie wordt op he toestel geplaatst om mee te geven dat je de site eerder in de dag bezocht. De data is niet gedetailleerd genoeg om persoonlijke informatie te zijn. Er zijn enkel geaggregeerde statistieken mogelijk. Deze kunnen door iedereen bekeken worden.", + "title": "Privacyverklaring", + "geodataTitle": "Jouw locatie", + "trackingTitle": "Statistische informatie", + "intro": "We vinden privacy belangrijk, zowel for het individu als voor de samenleving. MapComplete probeert zo veel mogelijk te vermijden dat private gegevens worden verzameld. Daarom is er zelfs geen cookie banner nodig. Maar we geven graag informatie over welke data verzameld en gedeeld worden, onder welke omstandigheden, en waarom deze afwegingen gemaakt worden.", + "editingTitle": "Wanneer je wijzigingen maakt", + "miscCookiesTitle": "Andere cookies", + "miscCookies": "MapComplete integreert met verschillende andere services, in het bijzonder om afbeeldingen van kaart-objecten te tonen. Deze afbeeldingen zijn opgeslaan bij diverse websites, die elk cookies kunnen instellen.", + "whileYoureHere": "Vind je privacy belangrijk?", + "surveillance": "Gezien je de privacy-policy leest, vind je privacy waarschijnlijk belangrijk - wij ook! We hebben zelfs een kaart met bewakingcamera's gemaakt. Voeg er zeker toe!", + "editing": "Wanneer je een wijziging maakt, wordt deze wijziging opgeslaan op OpenStreetMap. Dit is zichtbaar voor iedereen. Een wijzigingenset gemaakt met MapComplete bevat de volgende data:\n
  • De aanpassingen aan de data
  • Je gebruikersnaam
  • Wanneer deze wijziging werd gemaakt
  • Het thema dat je gebruikt om de wijziging te maken
  • De taal van de gebruikersinterface
  • Een indicatie hoe ver jij je van de gewijzigde objecten bevindt. Andere bijdragers kunnen deze informatie gebruiken om af te leiden of de wijziging gemaakt door lokaal te gaan kijken of door onderzoek vanop afstand
Bekijk ook de privacy-policy op OpenStreetMap.org voor gedetailleerde info. We herinneren je eraan dat je een pseudoniem of fictieve naam kan gebruiken wanneer je je registreert." + }, + "validation": { + "string": { + "description": "een stukje tekst" + }, + "email": { + "description": "email-adres", + "feedback": "Dit is geen geldig email-adres", + "noAt": "Een email-adres moet een @ hebben" + }, + "phone": { + "description": "telefoonnummer", + "feedback": "Dit is geen geldig telefoonnummer" + }, + "url": { + "description": "een link naar een webpagina", + "feedback": "Dit is geen geldige link" + }, + "pnat": { + "description": "een positief, geheel getal", + "noZero": "Nul is niet toegelaten" + }, + "nat": { + "description": "een positief, geheel getal of nul", + "mustBePositive": "Dit getal moet positief zijn", + "notANumber": "Dit is geen getal", + "mustBeWhole": "Enkele gehele getallen zijn toegelaten" + }, + "int": { + "description": "een geheel getal" + }, + "float": { + "description": "een getal", + "feedback": "dit is geen getal" + }, + "pfloat": { + "description": "een positief getal" + }, + "tooLong": "Deze tekst is te lang. De tekst heeft {count} lettertekens, er mogen maximaal 255 letters zijn" } + } diff --git a/langs/pl.json b/langs/pl.json index e178ef3219..be3e99b27b 100644 --- a/langs/pl.json +++ b/langs/pl.json @@ -35,7 +35,7 @@ "zoomInFurther": "Powiększ jeszcze bardziej, aby dodać punkt.", "intro": "Kliknąłeś gdzieś, gdzie nie są jeszcze znane żadne dane.
", "title": "Czy dodać nowy punkt?", - "addNew": "Dodaj nową {kategorię} tutaj", + "addNew": "Dodaj nową {category} tutaj", "pleaseLogin": "Zaloguj się, aby dodać nowy punkt", "confirmButton": "Dodaj tutaj {category}.
Twój dodatek jest widoczny dla wszystkich
", "layerNotEnabled": "Warstwa {layer} nie jest włączona. Włącz tę warstwę, aby dodać punkt", @@ -78,7 +78,7 @@ "zoomInFurther": "Powiększ jeszcze bardziej, aby dodać punkt.", "intro": "Kliknąłeś gdzieś, gdzie nie są jeszcze znane żadne dane.
", "title": "Czy dodać nowy punkt?", - "addNew": "Dodaj nową {kategorię} tutaj", + "addNew": "Dodaj nową {category} tutaj", "pleaseLogin": "Zaloguj się, aby dodać nowy punkt", "confirmButton": "Dodaj tutaj {category}.
Twój dodatek jest widoczny dla wszystkich
", "layerNotEnabled": "Warstwa {layer} nie jest włączona. Włącz tę warstwę, aby dodać punkt", @@ -120,7 +120,7 @@ "friday": "Piątek", "thursday": "Czwartek" }, - "aboutMapcomplete": "

O MapComplete

Dzięki MapComplete możesz wzbogacić OpenStreetMap o informacje na pojedynczy temat. Odpowiedz na kilka pytań, a w ciągu kilku minut Twój wkład będzie dostępny na całym świecie! Opiekun tematu definiuje elementy, pytania i języki dla tematu.

Dowiedz się więcej

MapComplete zawsze oferuje następny krok, by dowiedzieć się więcej o OpenStreetMap.

  • Po osadzeniu na stronie internetowej, element iframe łączy się z pełnoekranowym MapComplete
  • Wersja pełnoekranowa oferuje informacje o OpenStreetMap
  • Przeglądanie działa bez logowania, ale edycja wymaga loginu OSM.
  • Jeżeli nie jesteś zalogowany, zostaniesz poproszony o zalogowanie się
  • Po udzieleniu odpowiedzi na jedno pytanie, możesz dodać nowe punkty do mapy
  • Po chwili wyświetlane są rzeczywiste tagi OSM, które później linkują do wiki


Zauważyłeś problem? Czy masz prośbę o dodanie jakiejś funkcji? Chcesz pomóc w tłumaczeniu? Udaj się do kodu źródłowego lub issue trackera.

Chcesz zobaczyć swoje postępy? Śledź liczbę edycji na OsmCha.

", + "aboutMapcomplete": "

O MapComplete

Dzięki MapComplete możesz wzbogacić OpenStreetMap o informacje na pojedynczy temat. Odpowiedz na kilka pytań, a w ciągu kilku minut Twój wkład będzie dostępny na całym świecie! Opiekun tematu definiuje elementy, pytania i języki dla tematu.

Dowiedz się więcej

MapComplete zawsze oferuje następny krok, by dowiedzieć się więcej o OpenStreetMap.

  • Po osadzeniu na stronie internetowej, element iframe łączy się z pełnoekranowym MapComplete
  • Wersja pełnoekranowa oferuje informacje o OpenStreetMap
  • Przeglądanie działa bez logowania, ale edycja wymaga loginu OSM.
  • Jeżeli nie jesteś zalogowany, zostaniesz poproszony o zalogowanie się
  • Po udzieleniu odpowiedzi na jedno pytanie, możesz dodać nowe punkty do mapy
  • Po chwili wyświetlane są rzeczywiste tagi OSM, które później linkują do wiki


Zauważyłeś problem? Czy masz prośbę o dodanie jakiejś funkcji? Chcesz pomóc w tłumaczeniu? Udaj się do kodu źródłowego lub issue trackera.

Chcesz zobaczyć swoje postępy? Śledź liczbę edycji na OsmCha.

", "noNameCategory": "{category} bez nazwy", "nameInlineQuestion": "Nazwa tej {category} to $$$", "osmLinkTooltip": "Zobacz ten obiekt na OpenStreetMap, aby uzyskać historię i więcej opcji edycji", @@ -189,7 +189,7 @@ "friday": "Piątek", "thursday": "Czwartek" }, - "aboutMapcomplete": "

O MapComplete

Dzięki MapComplete możesz wzbogacić OpenStreetMap o informacje na pojedynczy temat. Odpowiedz na kilka pytań, a w ciągu kilku minut Twój wkład będzie dostępny na całym świecie! Opiekun motywu definiuje elementy, pytania i języki dla tematu.

Dowiedz się więcej

MapComplete zawsze oferuje następny krok, by dowiedzieć się więcej o OpenStreetMap.

  • Po osadzeniu na stronie internetowej, iframe łączy się z pełnoekranowym MapComplete
  • Wersja pełnoekranowa oferuje informacje o OpenStreetMap
  • Przeglądanie działa bez logowania, ale edycja wymaga loginu OSM.
  • Jeżeli nie jesteś zalogowany, zostaniesz poproszony o zalogowanie się
  • Po udzieleniu odpowiedzi na jedno pytanie, możesz dodać nowe punkty do mapy
  • Po chwili wyświetlane są rzeczywiste tagi OSM, które później linkują do wiki


Zauważyłeś problem? Czy masz prośbę o dodanie jakiejś funkcji? Chcesz pomóc w tłumaczeniu? Udaj się do kodu źródłowego lub issue trackera.

Chcesz zobaczyć swoje postępy? Śledź liczbę edycji na OsmCha.

.", + "aboutMapcomplete": "

O MapComplete

Dzięki MapComplete możesz wzbogacić OpenStreetMap o informacje na pojedynczy temat. Odpowiedz na kilka pytań, a w ciągu kilku minut Twój wkład będzie dostępny na całym świecie! Opiekun motywu definiuje elementy, pytania i języki dla tematu.

Dowiedz się więcej

MapComplete zawsze oferuje następny krok, by dowiedzieć się więcej o OpenStreetMap.

  • Po osadzeniu na stronie internetowej, iframe łączy się z pełnoekranowym MapComplete
  • Wersja pełnoekranowa oferuje informacje o OpenStreetMap
  • Przeglądanie działa bez logowania, ale edycja wymaga loginu OSM.
  • Jeżeli nie jesteś zalogowany, zostaniesz poproszony o zalogowanie się
  • Po udzieleniu odpowiedzi na jedno pytanie, możesz dodać nowe punkty do mapy
  • Po chwili wyświetlane są rzeczywiste tagi OSM, które później linkują do wiki


Zauważyłeś problem? Czy masz prośbę o dodanie jakiejś funkcji? Chcesz pomóc w tłumaczeniu? Udaj się do kodu źródłowego lub issue trackera.

Chcesz zobaczyć swoje postępy? Śledź liczbę edycji na OsmCha.

.", "noNameCategory": "{category} bez nazwy", "nameInlineQuestion": "Nazwa tej {category} to $$$", "osmLinkTooltip": "Zobacz ten obiekt na OpenStreetMap, aby uzyskać historię i więcej opcji edycji", @@ -244,7 +244,7 @@ "loadingData": "Ładowanie danych…", "ready": "Zrobione!", "zoomIn": "Przybliż żeby zobaczyć lub edytować", - "retrying": "Ładowanie danych nie powiodło się. Spróbujemy ponownie za {liczba} sekund…" + "retrying": "Ładowanie danych nie powiodło się. Spróbujemy ponownie za {count} sekund…" }, "reviews": { "plz_login": "Zaloguj się, aby zostawić opinię", diff --git a/langs/pt.json b/langs/pt.json index 56fd314a5f..4445f80f06 100644 --- a/langs/pt.json +++ b/langs/pt.json @@ -73,7 +73,7 @@ "zoomInFurther": "Amplie mais para adicionar um ponto.", "openLayerControl": "Abra a caixa de controlo da camada", "disableFilters": "Desativar todos os filtros", - "addNew": "Adicionar uma nova {categoria} aqui", + "addNew": "Adicionar uma nova {category} aqui", "intro": "Clicou em algum lugar onde ainda não há dados conhecidos.
", "addNewMapLabel": "Adicionar novo item", "presetInfo": "O novo POI terá {tags}", @@ -90,8 +90,8 @@ }, "questions": { "websiteOf": "Qual é o site de {category}?", - "emailOf": "Qual é o endereço de e-mail de {categoria}?", - "emailIs": "O endereço de e-mail de {categoria} é {email}", + "emailOf": "Qual é o endereço de e-mail de {category}?", + "emailIs": "O endereço de e-mail de {category} é {email}", "websiteIs": "Site: {website}", "phoneNumberIs": "O número de telefone de {category} é {phone}", "phoneNumberOf": "Qual é o número de telefone de {category}?" @@ -184,7 +184,7 @@ "editThisTheme": "Editar este tema" }, "attribution": { - "themeBy": "Tema gerido por {autor}", + "themeBy": "Tema gerido por {author}", "iconAttribution": { "title": "Ícones usados" }, @@ -211,7 +211,7 @@ "streetcomplete": "Outra aplicação semelhante é o StreetComplete.", "createYourOwnTheme": "Crie o seu próprio tema MapComplete a partir do zero", "previouslyHiddenTitle": "Temas ocultos visitados anteriormente", - "hiddenExplanation": "Estes temas só são acessíveis a quem tem a hiperligação. Você descobriu {substituído} de {total_substituído} temas ocultos.", + "hiddenExplanation": "Estes temas só são acessíveis a quem tem a hiperligação. Você descobriu {hidden_discovered} de {total_hidden} temas ocultos.", "intro": "

Mais mapas temáticos?

Gosta de colecionar dados geográficos?
Tem mais temas disponíveis." }, "about": "Edite e adicione facilmente o OpenStreetMap para um determinado tema", diff --git a/langs/pt_BR.json b/langs/pt_BR.json index c6944abce7..8a3169dc11 100644 --- a/langs/pt_BR.json +++ b/langs/pt_BR.json @@ -125,7 +125,7 @@ "intro": "

Compartilhe este mapa

Compartilhe este mapa copiando o link abaixo e enviando-o para amigos e familiares:", "embedIntro": "

Incorpore em seu site

Por favor, incorpore este mapa em seu site.
Nós o encorajamos a fazer isso - você nem precisa pedir permissão.
É gratuito e sempre será. Quanto mais pessoas usarem isso, mais valioso se tornará." }, - "aboutMapcomplete": "

Sobre o MapComplete

Com o MapComplete, você pode enriquecer o OpenStreetMap com informações sobre umúnico tema.Responda a algumas perguntas e, em minutos, suas contribuições estarão disponíveis em todo o mundo! Omantenedor do temadefine elementos, questões e linguagens para o tema.

Saiba mais

MapComplete sempreoferece a próxima etapapara saber mais sobre o OpenStreetMap.

  • Quando incorporado em um site, o iframe vincula-se a um MapComplete em tela inteira
  • A versão em tela inteira oferece informações sobre o OpenStreetMap
  • A visualização funciona sem login, mas a edição requer um login do OSM.
  • Se você não estiver conectado, será solicitado que você faça o login
  • Depois de responder a uma única pergunta, você pode adicionar novos aponta para o mapa
  • Depois de um tempo, as tags OSM reais são mostradas, posteriormente vinculadas ao wiki


Você percebeuum problema? Você tem umasolicitação de recurso ? Querajudar a traduzir? Acesse o código-fonteou rastreador de problemas.

Quer verseu progresso? Siga a contagem de edição emOsmCha.

" + "aboutMapcomplete": "

Sobre o MapComplete

Com o MapComplete, você pode enriquecer o OpenStreetMap com informações sobre umúnico tema.Responda a algumas perguntas e, em minutos, suas contribuições estarão disponíveis em todo o mundo! Omantenedor do temadefine elementos, questões e linguagens para o tema.

Saiba mais

MapComplete sempreoferece a próxima etapapara saber mais sobre o OpenStreetMap.

  • Quando incorporado em um site, o iframe vincula-se a um MapComplete em tela inteira
  • A versão em tela inteira oferece informações sobre o OpenStreetMap
  • A visualização funciona sem login, mas a edição requer um login do OSM.
  • Se você não estiver conectado, será solicitado que você faça o login
  • Depois de responder a uma única pergunta, você pode adicionar novos aponta para o mapa
  • Depois de um tempo, as tags OSM reais são mostradas, posteriormente vinculadas ao wiki


Você percebeuum problema? Você tem umasolicitação de recurso ? Querajudar a traduzir? Acesse o código-fonteou rastreador de problemas.

Quer verseu progresso? Siga a contagem de edição emOsmCha.

" }, "index": { "pickTheme": "Escolha um tema abaixo para começar.", diff --git a/langs/ru.json b/langs/ru.json index a6bb476c04..991135945e 100644 --- a/langs/ru.json +++ b/langs/ru.json @@ -77,7 +77,7 @@ "zoomInToSeeThisLayer": "Увеличьте масштаб, чтобы увидеть этот слой" }, "backgroundMap": "Фоновая карта", - "aboutMapcomplete": "

О MapComplete

С помощью MapComplete вы можете обогатить OpenStreetMap информацией по одной теме. Ответьте на несколько вопросов, и через несколько минут ваши материалы будут доступны по всему миру! Сопровождающий темы определяет элементы, вопросы и языки для темы.

Узнайте больше

MapComplete всегда предлагает следующий шаг, чтобы узнать больше об OpenStreetMap.

  • При встраивании в веб-сайт iframe ссылается на полноэкранную версию MapComplete
  • Полноэкранная версия предлагает информацию об OpenStreetMap
  • Просмотр работает без входа, но для редактирования требуется вход в OSM.
  • Если вы не вошли в систему, вас попросят войти
  • Ответив на один вопрос, вы можете добавлять новые точки на карту
  • Через некоторое время отображаются актуальные OSM-метки с последующей ссылкой на вики


Вы заметили проблему? У вас есть запрос на функциональность? Хотите помочь с переводом? Зайдите на репозиторий с исходным кодом или трекер проблем.

Хотите увидеть свой прогресс? Следите за количеством правок на OsmCha.

", + "aboutMapcomplete": "

О MapComplete

С помощью MapComplete вы можете обогатить OpenStreetMap информацией по одной теме. Ответьте на несколько вопросов, и через несколько минут ваши материалы будут доступны по всему миру! Сопровождающий темы определяет элементы, вопросы и языки для темы.

Узнайте больше

MapComplete всегда предлагает следующий шаг, чтобы узнать больше об OpenStreetMap.

  • При встраивании в веб-сайт iframe ссылается на полноэкранную версию MapComplete
  • Полноэкранная версия предлагает информацию об OpenStreetMap
  • Просмотр работает без входа, но для редактирования требуется вход в OSM.
  • Если вы не вошли в систему, вас попросят войти
  • Ответив на один вопрос, вы можете добавлять новые точки на карту
  • Через некоторое время отображаются актуальные OSM-метки с последующей ссылкой на вики


Вы заметили проблему? У вас есть запрос на функциональность? Хотите помочь с переводом? Зайдите на репозиторий с исходным кодом или трекер проблем.

Хотите увидеть свой прогресс? Следите за количеством правок на OsmCha.

", "customThemeIntro": "

Пользовательские темы

Это ранее просмотренные темы, созданные пользователями.", "noTagsSelected": "Теги не выбраны", "getStartedNewAccount": " или создать новую учетную запись", diff --git a/langs/shared-questions/ca.json b/langs/shared-questions/ca.json index f889194a27..94a028fbb3 100644 --- a/langs/shared-questions/ca.json +++ b/langs/shared-questions/ca.json @@ -1,5 +1,5 @@ { - "undefined": { + "shared_questions": { "description": { "question": "Hi ha quelcom rellevant que no t'hem preguntat? Afegeix-ho aquí.
No repeteixis informació que ja hi és" }, @@ -21,7 +21,7 @@ "question": "S'accepten gossos en aquest negoci?" }, "email": { - "question": "Quina és l'adreça de correu electrònic de {name}?" + "question": "Quina és l'adreça de correu electrònic de {title()}?" }, "level": { "mappings": { @@ -42,7 +42,7 @@ "render": "Situat a la planta {level}" }, "opening_hours": { - "question": "Quin és l'horari d'obertura de {name}?", + "question": "Quin és l'horari d'obertura de {title()}?", "render": "

Horari d'obertura

{opening_hours_table(opening_hours)}" }, "payment-options": { @@ -57,7 +57,7 @@ "question": "Quins mètodes de pagament s'accepten aquí?" }, "phone": { - "question": "Quin és el telèfon de {name}?" + "question": "Quin és el telèfon de {title()}?" }, "service:electricity": { "mappings": { @@ -77,7 +77,7 @@ "question": "Aquest servei té endolls elèctrics, disponibles pels clients quan hi són dins?" }, "website": { - "question": "Quina és la web de {name}?" + "question": "Quina és la web de {title()}?" }, "wheelchair-access": { "mappings": { diff --git a/langs/shared-questions/cs.json b/langs/shared-questions/cs.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/langs/shared-questions/cs.json @@ -0,0 +1 @@ +{} diff --git a/langs/shared-questions/de.json b/langs/shared-questions/de.json index 5c5ce514e1..e1a837e671 100644 --- a/langs/shared-questions/de.json +++ b/langs/shared-questions/de.json @@ -1,5 +1,5 @@ { - "undefined": { + "shared_questions": { "description": { "question": "Gibt es noch etwas, das die vorhergehenden Fragen nicht abgedeckt haben? Hier wäre Platz dafür.
Bitte keine bereits erhobenen Informationen." }, @@ -21,7 +21,7 @@ "question": "Sind Hunde in diesem Geschäft erlaubt?" }, "email": { - "question": "Was ist die Mail-Adresse von {name}?" + "question": "Was ist die Mail-Adresse von {title()}?" }, "level": { "mappings": { @@ -42,7 +42,7 @@ "render": "Befindet sich im {level}ten Stock" }, "opening_hours": { - "question": "Was sind die Öffnungszeiten von {name}?", + "question": "Was sind die Öffnungszeiten von {title()}?", "render": "

Öffnungszeiten

{opening_hours_table(opening_hours)}" }, "payment-options": { @@ -57,7 +57,7 @@ "question": "Welche Zahlungsmethoden werden hier akzeptiert?" }, "phone": { - "question": "Was ist die Telefonnummer von {name}?" + "question": "Was ist die Telefonnummer von {title()}?" }, "service:electricity": { "mappings": { @@ -77,7 +77,7 @@ "question": "Gibt es an dieser Einrichtung Steckdosen, an denen Kunden ihre Geräte laden können?" }, "website": { - "question": "Was ist die Website von {name}?" + "question": "Was ist die Website von {title()}?" }, "wheelchair-access": { "mappings": { diff --git a/langs/shared-questions/en.json b/langs/shared-questions/en.json index caa62ddabe..82241f876b 100644 --- a/langs/shared-questions/en.json +++ b/langs/shared-questions/en.json @@ -1,5 +1,5 @@ { - "undefined": { + "shared_questions": { "description": { "question": "Is there still something relevant you couldn't give in the previous questions? Add it here.
Don't repeat already stated facts" }, @@ -21,7 +21,7 @@ "question": "Are dogs allowed in this business?" }, "email": { - "question": "What is the email address of {name}?" + "question": "What is the email address of {title()}?" }, "level": { "mappings": { @@ -36,13 +36,16 @@ }, "3": { "then": "Located on the first floor" + }, + "4": { + "then": "Located on the first basement level" } }, "question": "On what level is this feature located?", "render": "Located on the {level}th floor" }, "opening_hours": { - "question": "What are the opening hours of {name}?", + "question": "What are the opening hours of {title()}?", "render": "

Opening hours

{opening_hours_table(opening_hours)}" }, "payment-options": { @@ -56,8 +59,20 @@ }, "question": "Which methods of payment are accepted here?" }, + "payment-options-advanced": { + "override": { + "mappings+": { + "0": { + "then": "Payment is done using a dedicated app" + }, + "1": { + "then": "Payment is done using a membership card" + } + } + } + }, "phone": { - "question": "What is the phone number of {name}?" + "question": "What is the phone number of {title()}?" }, "service:electricity": { "mappings": { @@ -77,7 +92,7 @@ "question": "Does this amenity have electrical outlets, available to customers when they are inside?" }, "website": { - "question": "What is the website of {name}?" + "question": "What is the website of {title()}?" }, "wheelchair-access": { "mappings": { diff --git a/langs/shared-questions/eo.json b/langs/shared-questions/eo.json index 636b21d23c..164d1f878b 100644 --- a/langs/shared-questions/eo.json +++ b/langs/shared-questions/eo.json @@ -1,5 +1,5 @@ { - "undefined": { + "shared_questions": { "dog-access": { "mappings": { "0": { @@ -11,7 +11,7 @@ } }, "email": { - "question": "Kio estas la retpoŝta adreso de {name}?" + "question": "Kio estas la retpoŝta adreso de {title()}?" }, "level": { "mappings": { @@ -31,10 +31,10 @@ "render": "

Malfermitaj horoj

{opening_hours_table(opening_hours)}" }, "phone": { - "question": "Kio estas la telefonnumero de {name}?" + "question": "Kio estas la telefonnumero de {title()}?" }, "website": { - "question": "Kie estas la retejo de {name}?" + "question": "Kie estas la retejo de {title()}?" } } } \ No newline at end of file diff --git a/langs/shared-questions/es.json b/langs/shared-questions/es.json index 0967ef424b..e513f074e8 100644 --- a/langs/shared-questions/es.json +++ b/langs/shared-questions/es.json @@ -1 +1,17 @@ -{} +{ + "shared_questions": { + "description": { + "question": "¿Aún hay algo relevante que no ha encajado en las preguntas anteriores? Compártalo aquí.
No repita datos ya expresados" + }, + "dog-access": { + "mappings": { + "0": { + "then": "Se permiten perros" + }, + "1": { + "then": "No se permiten perros" + } + } + } + } +} \ No newline at end of file diff --git a/langs/shared-questions/fr.json b/langs/shared-questions/fr.json index aeb372cb37..d764695cb6 100644 --- a/langs/shared-questions/fr.json +++ b/langs/shared-questions/fr.json @@ -1,5 +1,5 @@ { - "undefined": { + "shared_questions": { "description": { "question": "Y a-t-il quelque chose de pertinent que vous n'avez pas pu donner à la dernière question ? Ajoutez-le ici.
Ne répétez pas des réponses déjà données" }, @@ -21,7 +21,7 @@ "question": "Est-ce que les chiens sont admis ici ?" }, "email": { - "question": "Quelle est l'adresse courriel de {name} ?" + "question": "Quelle est l'adresse courriel de {title()} ?" }, "level": { "mappings": { @@ -42,7 +42,7 @@ "render": "Étage {level}" }, "opening_hours": { - "question": "Quelles sont les horaires d'ouverture de {name} ?", + "question": "Quelles sont les horaires d'ouverture de {title()} ?", "render": "

Horaires d'ouverture

{opening_hours_table(opening_hours)}" }, "payment-options": { @@ -57,7 +57,7 @@ "question": "Quelles sont les méthodes de paiement acceptées ici ?" }, "phone": { - "question": "Quel est le numéro de téléphone de {name} ?" + "question": "Quel est le numéro de téléphone de {title()} ?" }, "service:electricity": { "mappings": { @@ -77,7 +77,7 @@ "question": "Des prises sont elles à disposition des client·e·s en intérieur ?" }, "website": { - "question": "Quel est le site web de {name} ?" + "question": "Quel est le site web de {title()} ?" }, "wheelchair-access": { "mappings": { diff --git a/langs/shared-questions/gl.json b/langs/shared-questions/gl.json index 2d52f7307a..f4c2fb4290 100644 --- a/langs/shared-questions/gl.json +++ b/langs/shared-questions/gl.json @@ -1,7 +1,7 @@ { - "undefined": { + "shared_questions": { "website": { - "question": "Cal é a páxina web de {name}?" + "question": "Cal é a páxina web de {title()}?" } } } \ No newline at end of file diff --git a/langs/shared-questions/hu.json b/langs/shared-questions/hu.json index eebb7ea7db..419784ebc1 100644 --- a/langs/shared-questions/hu.json +++ b/langs/shared-questions/hu.json @@ -1,5 +1,5 @@ { - "undefined": { + "shared_questions": { "description": { "question": "Van-e még valami lényeges, amit nem tudott megadni az előző kérdésekben? Itt megteheti.
Ne ismételjen meg már megadott tényeket" }, @@ -21,7 +21,7 @@ "question": "Be lehet-e vinni kutyát ebbe az üzletbe?" }, "email": { - "question": "Mi a(z) {name} e-mail címe?" + "question": "Mi a(z) {title()} e-mail címe?" }, "level": { "mappings": { @@ -42,7 +42,7 @@ "render": "A(z) {level}. emeleten" }, "opening_hours": { - "question": "Mikor van nyitva ez: {name}?", + "question": "Mikor van nyitva ez: {title()}?", "render": "

Nyitva tartás

{opening_hours_table(opening_hours)}" }, "payment-options": { @@ -56,8 +56,20 @@ }, "question": "Milyen fizetési módokat fogadnak el itt?" }, + "payment-options-advanced": { + "override": { + "mappings+": { + "0": { + "then": "Fizetés erre a célra szolgáló alkalmazással" + }, + "1": { + "then": "Fizetési tagsági kártyával" + } + } + } + }, "phone": { - "question": "Mi a telefonszáma ennek: {name}?" + "question": "Mi a telefonszáma ennek: {title()}?" }, "service:electricity": { "mappings": { @@ -77,7 +89,7 @@ "question": "Van-e ebben a létesítményben olyan konnektor, amely a bent tartózkodó ügyfelek rendelkezésére áll?" }, "website": { - "question": "Mi a weboldala ennek: {name}?" + "question": "Mi a weboldala ennek: {title()}?" }, "wheelchair-access": { "mappings": { diff --git a/langs/shared-questions/id.json b/langs/shared-questions/id.json index 7c29ed6e61..3bf4b6d9d3 100644 --- a/langs/shared-questions/id.json +++ b/langs/shared-questions/id.json @@ -1,7 +1,23 @@ { - "undefined": { + "shared_questions": { + "description": { + "question": "Apakah masih ada sesuatu yang relevan yang tidak dapat Anda berikan dalam pertanyaan sebelumnya? Tambahkan di sini.
Jangan ulangi fakta yang sudah dinyatakan " + }, + "dog-access": { + "mappings": { + "0": { + "then": "Anjing diperbolehkan" + }, + "1": { + "then": "Anjing tidak diperbolehkan" + }, + "2": { + "then": "Anjing diperbolehkan, tetapi mereka harus diikat" + } + } + }, "email": { - "question": "Apa alamat surel dari {name}?" + "question": "Apa alamat surel dari {title()}?" }, "level": { "mappings": { @@ -23,10 +39,10 @@ "question": "Metode pembayaran manakah yang di terima disini?" }, "phone": { - "question": "Nomor telepon dari {name|?" + "question": "Nomor telepon dari {title()}?" }, "website": { - "question": "Apa situs web dari {name}?" + "question": "Apa situs web dari {title()}?" } } } \ No newline at end of file diff --git a/langs/shared-questions/it.json b/langs/shared-questions/it.json index 2b13ebb8b0..4846721baf 100644 --- a/langs/shared-questions/it.json +++ b/langs/shared-questions/it.json @@ -1,5 +1,5 @@ { - "undefined": { + "shared_questions": { "description": { "question": "C'è ancora qualche informazione importante che non è stato possibile fornire nelle domande precedenti? Aggiungila qui.
Non ripetere informazioni già fornite" }, @@ -21,7 +21,7 @@ "question": "I cani sono ammessi in quest’attività?" }, "email": { - "question": "Qual è l'indirizzo email di {name}?" + "question": "Qual è l'indirizzo email di {title()}?" }, "level": { "mappings": { @@ -42,7 +42,7 @@ "render": "Si trova al piano numero {level}" }, "opening_hours": { - "question": "Quali sono gli orari di apertura di {name}?", + "question": "Quali sono gli orari di apertura di {title()}?", "render": "

Orari di apertura

{opening_hours_table(opening_hours)}" }, "payment-options": { @@ -57,10 +57,10 @@ "question": "Quali metodi di pagamento sono accettati qui?" }, "phone": { - "question": "Qual è il numero di telefono di {name}?" + "question": "Qual è il numero di telefono di {title()}?" }, "website": { - "question": "Qual è il sito web di {name}?" + "question": "Qual è il sito web di {title()}?" }, "wheelchair-access": { "mappings": { diff --git a/langs/shared-questions/ja.json b/langs/shared-questions/ja.json index 0967ef424b..9a874275a5 100644 --- a/langs/shared-questions/ja.json +++ b/langs/shared-questions/ja.json @@ -1 +1,116 @@ -{} +{ + "shared_questions": { + "description": { + "question": "前の質問で伝えきれなかった関連事項がまだありますか?ここに追加してください。
今後表示しない" + }, + "dog-access": { + "mappings": { + "0": { + "then": "ペット同伴可能" + }, + "1": { + "then": "ペット同伴不可" + }, + "2": { + "then": "ペット同伴可能。ただしリード着用" + }, + "3": { + "then": "犬同伴可能、自由に走り回れる" + } + }, + "question": "犬を飼うことができますか?" + }, + "email": { + "question": "{title()}のEメールアドレスは何ですか?" + }, + "level": { + "mappings": { + "0": { + "then": "地下にあります" + }, + "1": { + "then": "1階にあります" + }, + "2": { + "then": "1階にあります" + }, + "3": { + "then": "1階にあります" + } + }, + "question": "この機能は何階にあるのでしょうか?", + "render": "{level}階にあります" + }, + "opening_hours": { + "question": "{title()}の営業時間は?", + "render": "

営業時間

{opening_hours_table(opening_hours)}" + }, + "payment-options": { + "mappings": { + "0": { + "then": "現金利用可能" + }, + "1": { + "then": "お支払いはこちらで承ります" + } + }, + "question": "どのような支払い方法が可能ですか?" + }, + "phone": { + "question": "{title()}の電話番号は?" + }, + "service:electricity": { + "mappings": { + "0": { + "then": "屋内の席に座っているお客様には、家庭用コンセントがたくさん用意されており、そこで電子機器を充電することができます" + }, + "1": { + "then": "屋内の席に座ったお客様が充電できるよう、コンセントがいくつか用意されています" + }, + "2": { + "then": "屋内にはコンセントがありませんが、スタッフに声をかければ充電できるかもしれません" + }, + "3": { + "then": "屋内の席には、家庭用コンセントはありません" + } + }, + "question": "このアメニティにはコンセントがあり、お客様が店内にいるときにも利用できますか?" + }, + "website": { + "question": "{title()}のウェブサイトは?" + }, + "wheelchair-access": { + "mappings": { + "0": { + "then": "この場所は、車椅子の方のための特別仕様になっています" + }, + "1": { + "then": "この場所は、車いすで簡単に行くことができます" + }, + "2": { + "then": "車いすでこの場所まで行くことは可能ですが、簡単ではありません" + }, + "3": { + "then": "この場所は車いすでは行けません" + } + }, + "question": "車いすでのアクセスは可能ですか?" + }, + "wikipedia": { + "mappings": { + "0": { + "then": "ウィキペディアのページはまだリンクされていません" + } + }, + "question": "対応するウィキデータのエンティティは何ですか?" + }, + "wikipedialink": { + "mappings": { + "0": { + "then": "ウィキペディアと連動していない" + } + }, + "question": "Wikipediaの該当項目は何ですか?" + } + } +} \ No newline at end of file diff --git a/langs/shared-questions/nb_NO.json b/langs/shared-questions/nb_NO.json index 1dfffd0e37..7b1497c6e3 100644 --- a/langs/shared-questions/nb_NO.json +++ b/langs/shared-questions/nb_NO.json @@ -1,5 +1,5 @@ { - "undefined": { + "shared_questions": { "description": { "question": "Er det noe mer som er relevant du ikke kunne opplyse om i tidligere svar? Legg det til her.
Ikke gjenta fakta som allerede er nevnt" }, @@ -21,7 +21,7 @@ "question": "Tillates hunder i denne forretningen?" }, "email": { - "question": "Hva er e-postadressen til {name}?" + "question": "Hva er e-postadressen til {title()}?" }, "level": { "mappings": { @@ -40,7 +40,7 @@ } }, "opening_hours": { - "question": "Hva er åpningstidene for {name})", + "question": "Hva er åpningstidene for {title()})", "render": "

Åpningstider

{opening_hours_table(opening_hours)}" }, "payment-options": { @@ -55,10 +55,10 @@ "question": "Hvilke betalingsmetoder godtas her?" }, "phone": { - "question": "Hva er telefonnummeret til {name}?" + "question": "Hva er telefonnummeret til {title()}?" }, "website": { - "question": "Hva er nettsiden til {name}?" + "question": "Hva er nettsiden til {title()}?" }, "wheelchair-access": { "mappings": { diff --git a/langs/shared-questions/nl.json b/langs/shared-questions/nl.json index 5889646409..d876e305bb 100644 --- a/langs/shared-questions/nl.json +++ b/langs/shared-questions/nl.json @@ -1,5 +1,5 @@ { - "undefined": { + "shared_questions": { "description": { "question": "Zijn er nog andere relevante zaken die je niet in de bovenstaande vragen kwijt kon? Vul ze hier in.
Herhaal geen antwoorden die je reeds gaf" }, @@ -21,7 +21,7 @@ "question": "Zijn honden toegelaten in deze zaak?" }, "email": { - "question": "Wat is het e-mailadres van {name}?" + "question": "Wat is het e-mailadres van {title()}?" }, "level": { "mappings": { @@ -36,13 +36,16 @@ }, "3": { "then": "Bevindt zich op de eerste verdieping" + }, + "4": { + "then": "Bevindt zich in de eerste kelderverdieping" } }, "question": "Op welke verdieping bevindt dit punt zich?", "render": "Bevindt zich op de {level}de verdieping" }, "opening_hours": { - "question": "Wat zijn de openingstijden van {name}?", + "question": "Wat zijn de openingstijden van {title()}?", "render": "

Openingstijden

{opening_hours_table(opening_hours)}" }, "payment-options": { @@ -56,8 +59,20 @@ }, "question": "Welke betaalmiddelen worden hier geaccepteerd?" }, + "payment-options-advanced": { + "override": { + "mappings+": { + "0": { + "then": "Betalen via een app van het netwerk" + }, + "1": { + "then": "Betalen via een lidkaart van het netwerk" + } + } + } + }, "phone": { - "question": "Wat is het telefoonnummer van {name}?" + "question": "Wat is het telefoonnummer van {title()}?" }, "service:electricity": { "mappings": { @@ -77,7 +92,7 @@ "question": "Zijn er stekkers beschikbaar voor klanten die binnen zitten?" }, "website": { - "question": "Wat is de website van {name}?" + "question": "Wat is de website van {title()}?" }, "wheelchair-access": { "mappings": { diff --git a/langs/shared-questions/pl.json b/langs/shared-questions/pl.json index eb46bd032c..9e0b898f7b 100644 --- a/langs/shared-questions/pl.json +++ b/langs/shared-questions/pl.json @@ -1,17 +1,27 @@ { - "undefined": { + "shared_questions": { "description": { "question": "Czy jest jeszcze coś istotnego, czego nie mogłeś podać w poprzednich pytaniach? Dodaj to tutaj.
Nie powtarzaj już podanych faktów" }, "dog-access": { "mappings": { + "0": { + "then": "Psy dozwolone" + }, "1": { - "then": "Psom wstęp wzbroniony" + "then": "Psy nie dozwolone" + }, + "2": { + "then": "Psy dozwolone, ale muszą być na smyczy" + }, + "3": { + "then": "Psy dozwolone i mogą biegać bez ograniczeń" } - } + }, + "question": "Czy w tej firmie psy są dozwolone?" }, "email": { - "question": "Jaki jest adres e-mail do {name}?" + "question": "Jaki jest adres e-mail do {title()}?" }, "level": { "mappings": { @@ -32,7 +42,7 @@ "render": "Znajduje się na {level} piętrze" }, "opening_hours": { - "question": "Jakie są godziny otwarcia {name}?", + "question": "Jakie są godziny otwarcia {title()}?", "render": "

Godziny otwarcia

{opening_hours_table(opening_hours)}" }, "payment-options": { @@ -47,10 +57,60 @@ "question": "Jakie metody płatności są tutaj dostępne?" }, "phone": { - "question": "Jaki jest numer telefonu do {name}?" + "question": "Jaki jest numer telefonu do {title()}?" + }, + "service:electricity": { + "mappings": { + "0": { + "then": "W budynku znajduje się wiele gniazdek elektrycznych, gdzie klienci mogą naładować swoje urządzenia" + }, + "1": { + "then": "W budynku znajduje się kilka gniazdek elektrycznych, gdzie klienci mogą naładować swoje urządzenia" + }, + "2": { + "then": "W budynku nie ma gniazdek elektrycznych dostępnych dla klientów, ale mogą zostać one udostępnione po spytaniu obsługi" + }, + "3": { + "then": "W budynku nie ma gniazdek elektrycznych dostępnych dla klientów" + } + }, + "question": "Czy w tym przybytku znajdują się gniazdka elektryczne, gdzie klienci mogą naładować swoje urządzenia?" }, "website": { - "question": "Jaka jest strona internetowa {name}?" + "question": "Jaka jest strona internetowa {title()}?" + }, + "wheelchair-access": { + "mappings": { + "0": { + "then": "W tym miejscu zainstalowane zostały udogodnienia dla osób na wózkach inwalidzkich" + }, + "1": { + "then": "To miejsce jest łatwo dostępne dla osób na wózkach inwalidzkich" + }, + "2": { + "then": "To miejsce jest dostępne dla osób na wózkach inwalidzkich, ale z pewnymi trudnościami" + }, + "3": { + "then": "To miejsce jest niedostępne dla osób na wózkach inwalidzkich" + } + }, + "question": "Czy to miejsce jest dostępne dla osób na wózkach inwalidzkich?" + }, + "wikipedia": { + "mappings": { + "0": { + "then": "Link do strony Wikipedii nie został jeszcze określony" + } + }, + "question": "Jaki jest powiązany obiekt Wikidata?" + }, + "wikipedialink": { + "mappings": { + "0": { + "then": "Brak linku do strony Wikipedii" + } + }, + "question": "Jaki jest link do strony Wikipedii?" } } } \ No newline at end of file diff --git a/langs/shared-questions/pt.json b/langs/shared-questions/pt.json index 7a2669178b..f3ccf28f45 100644 --- a/langs/shared-questions/pt.json +++ b/langs/shared-questions/pt.json @@ -1,5 +1,5 @@ { - "undefined": { + "shared_questions": { "description": { "question": "Ainda há algo de relevante que não tenha podido dar nas perguntas anteriores? Adicione-o aqui.
Não repita factos já declarados" }, @@ -21,7 +21,7 @@ "question": "Os cães são permitidos neste estabelecimento?" }, "email": { - "question": "Qual é o endereço de e-mail de {name}?" + "question": "Qual é o endereço de e-mail de {title()}?" }, "level": { "mappings": { @@ -42,7 +42,7 @@ "render": "Está no {level}º andar" }, "opening_hours": { - "question": "Qual é o horário de funcionamento de {name}?", + "question": "Qual é o horário de funcionamento de {title()}?", "render": "

Horário de funcionamento

{opening_hours_table(opening_hours)}" }, "payment-options": { @@ -57,7 +57,7 @@ "question": "Que métodos de pagamento são aceites aqui?" }, "phone": { - "question": "Qual é o número de telefone de {name}?" + "question": "Qual é o número de telefone de {title()}?" }, "service:electricity": { "mappings": { @@ -77,7 +77,7 @@ "question": "Esta infraestrutura tem tomadas elétricas, disponíveis para os clientes quando estão no interior?" }, "website": { - "question": "Qual é o sítio web de {name}?" + "question": "Qual é o sítio web de {title()}?" }, "wheelchair-access": { "mappings": { diff --git a/langs/shared-questions/pt_BR.json b/langs/shared-questions/pt_BR.json index 6599af377e..a405927a9d 100644 --- a/langs/shared-questions/pt_BR.json +++ b/langs/shared-questions/pt_BR.json @@ -1,10 +1,10 @@ { - "undefined": { + "shared_questions": { "description": { "question": "Ainda há algo de relevante que não pôde dar nas perguntas anteriores? Adicione aqui.
Não repita fatos já declarados" }, "email": { - "question": "Qual o endereço de e-mail de {name}?" + "question": "Qual o endereço de e-mail de {title()}?" }, "level": { "mappings": { @@ -25,7 +25,7 @@ "render": "Localizado no {level}o andar" }, "opening_hours": { - "question": "Qual o horário de funcionamento de {name}?", + "question": "Qual o horário de funcionamento de {title()}?", "render": "

Horário de funcionamento

{opening_hours_table(opening_hours)}" }, "payment-options": { @@ -40,10 +40,10 @@ "question": "Quais métodos de pagamento são aceitos aqui?" }, "phone": { - "question": "Qual o número de telefone de {name}?" + "question": "Qual o número de telefone de {title()}?" }, "website": { - "question": "Qual o site de {name}?" + "question": "Qual o site de {title()}?" }, "wheelchair-access": { "mappings": { diff --git a/langs/shared-questions/ru.json b/langs/shared-questions/ru.json index c04c670327..224cb218da 100644 --- a/langs/shared-questions/ru.json +++ b/langs/shared-questions/ru.json @@ -1,5 +1,5 @@ { - "undefined": { + "shared_questions": { "description": { "question": "Есть ли ещё что-то важное, о чём вы не смогли рассказать в предыдущих вопросах? Добавьте это здесь.
Не повторяйте уже изложенные факты" }, @@ -21,7 +21,7 @@ "question": "Впускают ли собак в это здание?" }, "email": { - "question": "Какой адрес электронной почты у {name}?" + "question": "Какой адрес электронной почты у {title()}?" }, "level": { "mappings": { @@ -42,7 +42,7 @@ "render": "Расположено на {level}ом этаже" }, "opening_hours": { - "question": "Какое время работы у {name}?", + "question": "Какое время работы у {title()}?", "render": "

Часы работы

{opening_hours_table(opening_hours)}" }, "payment-options": { @@ -57,10 +57,10 @@ "question": "Какие способы оплаты здесь принимают?" }, "phone": { - "question": "Какой номер телефона у {name}?" + "question": "Какой номер телефона у {title()}?" }, "website": { - "question": "Какой сайт у {name}?" + "question": "Какой сайт у {title()}?" }, "wheelchair-access": { "mappings": { diff --git a/langs/shared-questions/sv.json b/langs/shared-questions/sv.json index d9dc3acb09..30c4c2b82d 100644 --- a/langs/shared-questions/sv.json +++ b/langs/shared-questions/sv.json @@ -1,5 +1,5 @@ { - "undefined": { + "shared_questions": { "description": { "question": "Finns det fortfarande någonting relevant som du inte kunde ge i de föregående frågorna? Lägg till det här.
Repetera inte redan angivna fakta" }, @@ -21,7 +21,7 @@ "question": "Tillåts hundar i den här affären?" }, "email": { - "question": "Vad är e-postadressen till {name}?" + "question": "Vad är e-postadressen till {title()}?" }, "level": { "mappings": { @@ -42,7 +42,7 @@ "render": "Ligger på {level}:e våningen" }, "opening_hours": { - "question": "Vilka är öppettiderna för {name}?", + "question": "Vilka är öppettiderna för {title()}?", "render": "

Öppettider

{opening_hours_table(opening_hours)}" }, "payment-options": { @@ -57,7 +57,7 @@ "question": "Vilka betalningsmetoder accepteras här?" }, "phone": { - "question": "Vad är telefonnumret till {name}?" + "question": "Vad är telefonnumret till {title()}?" }, "service:electricity": { "mappings": { @@ -77,7 +77,7 @@ "question": "Har den här bekvämligheten eluttag tillgängliga för kunder när de är inne?" }, "website": { - "question": "Vad är webbplatsen för {name}?" + "question": "Vad är webbplatsen för {title()}?" }, "wheelchair-access": { "mappings": { diff --git a/langs/shared-questions/zh_Hant.json b/langs/shared-questions/zh_Hant.json index f18875b11d..e5ab9caf3a 100644 --- a/langs/shared-questions/zh_Hant.json +++ b/langs/shared-questions/zh_Hant.json @@ -1,5 +1,5 @@ { - "undefined": { + "shared_questions": { "description": { "question": "有什麼相關的資訊你無法在先前的問題回應的嗎?請加在這邊吧。
不要重覆答覆已經知道的事情" }, @@ -21,7 +21,7 @@ "question": "這間商業空間是否允許犬隻?" }, "email": { - "question": "{name} 的電子郵件地址是什麼?" + "question": "{title()} 的電子郵件地址是什麼?" }, "level": { "mappings": { @@ -36,13 +36,16 @@ }, "3": { "then": "位於 2 樓" + }, + "4": { + "then": "位於地下一樓" } }, "question": "此圖徽位於哪個樓層/層級?", "render": "位於 {level} 樓" }, "opening_hours": { - "question": "{name} 的開放時間是什麼?", + "question": "{title()} 的開放時間是什麼?", "render": "

開放時間

{opening_hours_table(opening_hours)}" }, "payment-options": { @@ -56,8 +59,20 @@ }, "question": "這邊接受那種付款方式?" }, + "payment-options-advanced": { + "override": { + "mappings+": { + "0": { + "then": "使用專用應用程式付款" + }, + "1": { + "then": "使用會員卡付款" + } + } + } + }, "phone": { - "question": "{name} 的電話號碼是什麼?" + "question": "{title()} 的電話號碼是什麼?" }, "service:electricity": { "mappings": { @@ -77,7 +92,7 @@ "question": "這個便利設施有電器設備,能給客戶使用嗎?" }, "website": { - "question": "{name} 網址是什麼?" + "question": "{title()} 網址是什麼?" }, "wheelchair-access": { "mappings": { diff --git a/langs/sv.json b/langs/sv.json index 5ec958390d..e6d42adeb9 100644 --- a/langs/sv.json +++ b/langs/sv.json @@ -6,7 +6,7 @@ "ph_not_known": " ", "open_24_7": "Öppet dygnet runt", "closed_permanently": "Stängt tills vidare", - "closed_until": "Stängt till", + "closed_until": "Stängt till {date}", "openTill": "till", "opensAt": "från", "open_during_ph": "Om det är en röd dag är det här stället", diff --git a/langs/themes/cs.json b/langs/themes/cs.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/langs/themes/cs.json @@ -0,0 +1 @@ +{} diff --git a/langs/themes/de.json b/langs/themes/de.json index 627902acf9..b00308813d 100644 --- a/langs/themes/de.json +++ b/langs/themes/de.json @@ -631,14 +631,6 @@ }, "1": { "name": "Knotenpunkte", - "presets": { - "0": { - "title": "Knotenpunkt" - }, - "1": { - "title": "Knotenpunkt im Netzwerk Spree-Neiße" - } - }, "tagRenderings": { "node-expected_rcn_route_relations": { "question": "Mit wie vielen anderen Knoten des Fahrradknotenpunktnetzwerkes ist dieser Knoten verbunden?", @@ -700,7 +692,7 @@ "then": "Diese Straße ist keine Fahrradstraße" } }, - "question": "Ist die Straße {Name} eine Fahrradstraße?" + "question": "Ist die Straße {name} eine Fahrradstraße?" }, "1": { "question": "Wann wird diese Straße eine Fahrradstraße?", @@ -724,12 +716,12 @@ "layers": { "1": { "override": { - "name": "Straßen ohne Informationen zur Namensherkunft" + "=name": "Straßen ohne Informationen zur Namensherkunft" } }, "2": { "override": { - "name": "Parks und Waldflächen ohne Informationen zur Namensherkunft" + "=name": "Parks und Waldflächen ohne Informationen zur Namensherkunft" } } }, @@ -941,11 +933,6 @@ "shortDescription": "Dieses Thema zeigt alle (touristischen) Karten, die OpenStreetMap kennt", "title": "Eine Karte der Karten" }, - "natuurpunt": { - "description": "Auf dieser Karte können Sie alle Naturschutzgebiete von Natuurpunt finden ", - "shortDescription": "Diese Karte zeigt Naturschutzgebiete des flämischen Naturverbands Natuurpunt", - "title": "Die Karte von Natuurpunt" - }, "observation_towers": { "description": "Öffentlich zugänglicher Aussichtsturm", "shortDescription": "Öffentlich zugänglicher Aussichtsturm", @@ -1079,43 +1066,6 @@ "shortDescription": "Kartieren Sie alle Bäume", "title": "Bäume" }, - "uk_addresses": { - "description": "Tragen Sie zu OpenStreetMap bei, indem Sie Adressinformationen ausfüllen", - "layers": { - "2": { - "description": "Adressen", - "name": "Bekannte Adressen in OSM", - "tagRenderings": { - "uk_addresses_explanation_osm": { - "render": "Diese Adresse ist in OpenStreetMap gespeichert" - }, - "uk_addresses_housenumber": { - "mappings": { - "0": { - "then": "Dieses Gebäude hat keine Hausnummer" - } - }, - "question": "Wie lautet die Nummer dieses Hauses?", - "render": "Die Hausnummer ist {addr:housenumber}" - }, - "uk_addresses_street": { - "question": "In welcher Straße befindet sich diese Adresse?", - "render": "Diese Adresse befindet sich in der Straße {addr:street}" - } - }, - "title": { - "render": "Bekannte Adresse" - } - } - }, - "shortDescription": "Helfen Sie beim Aufbau eines offenen Datensatzes britischer Adressen", - "tileLayerSources": { - "0": { - "name": "Grenzverläufe gemäß osmuk.org" - } - }, - "title": "Adressen in Großbritannien" - }, "waste_basket": { "description": "Auf dieser Karte finden Sie Abfalleimer in Ihrer Nähe. Wenn ein Abfalleimer auf dieser Karte fehlt, können Sie ihn selbst hinzufügen", "shortDescription": "Eine Karte mit Abfalleimern", diff --git a/langs/themes/en.json b/langs/themes/en.json index e4ce014662..ccdc4f0802 100644 --- a/langs/themes/en.json +++ b/langs/themes/en.json @@ -12,6 +12,11 @@ "shortDescription": "A map of benches", "title": "Benches" }, + "bicycle_rental": { + "description": "On this map, you'll find the many bicycle rental stations as they are known by OpenStreetMap", + "shortDescription": "A map with bicycle rental stations and bicycle rental shops", + "title": "Bicycle rental" + }, "bicyclelib": { "description": "A bicycle library is a place where bicycles can be lent, often for a small yearly fee. A notable use case are bicycle libraries for kids, which allows them to change for a bigger bike when they've outgrown their current bike", "title": "Bicycle libraries" @@ -26,6 +31,7 @@ "title": "Open Bookcase Map" }, "cafes_and_pubs": { + "description": "Pubs and bars", "title": "Cafés and pubs" }, "campersite": { @@ -265,7 +271,7 @@ "descriptionTail": "The climbing map was originally made by Christian Neumann. Please get in touch if you have feedback or questions.

The project uses data of the OpenStreetMap project.

", "layers": { "0": { - "description": "A climbing club or organisations", + "description": "A climbing club or organisation", "name": "Climbing club", "presets": { "0": { @@ -273,7 +279,7 @@ "title": "Climbing club" }, "1": { - "description": "A NGO working around climbing", + "description": "An NGO working around climbing", "title": "Climbing NGO" } }, @@ -327,12 +333,12 @@ "then": "This route is not bolted" } }, - "question": "How much bolts does this route have before reaching the moulinette?", + "question": "How many bolts does this route have before reaching the anchor?", "render": "This route has {climbing:bolts} bolts" }, "Difficulty": { - "question": "What is the difficulty of this climbing route according to the french/belgian system?", - "render": "The difficulty is {climbing:grade:french} according to the french/belgian system" + "question": "What is the grade of this climbing route according to the french/belgian system?", + "render": "The grade is {climbing:grade:french} according to the french/belgian system" }, "Length": { "question": "How long is this climbing route (in meters)?", @@ -371,7 +377,7 @@ }, "tagRenderings": { "Contained routes hist": { - "render": "

Difficulties overview

{histogram(_difficulty_hist)}" + "render": "

Grades overview

{histogram(_difficulty_hist)}" }, "Contained routes length hist": { "render": "

Length overview

{histogram(_length_hist)}" @@ -483,7 +489,7 @@ "then": "You need a permit to access here" }, "2": { - "then": "Only custumers" + "then": "Only customers" }, "3": { "then": "Only club members" @@ -496,12 +502,12 @@ "render": "The routes are {canonical(climbing:length)} long on average" }, "5": { - "question": "What is the level of the easiest route here, accoring to the french classification system?", - "render": "The minimal difficulty is {climbing:grade:french:min} according to the french/belgian system" + "question": "What is the grade of the easiest route here, according to the french classification system?", + "render": "The lowest grade is {climbing:grade:french:min} according to the french/belgian system" }, "6": { - "question": "What is the level of the most difficult route here, accoring to the french classification system?", - "render": "The maximal difficulty is {climbing:grade:french:max} according to the french/belgian system" + "question": "What is the highest grade route here, according to the french classification system?", + "render": "The highest grade is {climbing:grade:french:max} according to the french/belgian system" }, "7": { "mappings": { @@ -721,12 +727,17 @@ "layers": { "1": { "override": { - "name": "Streets without etymology information" + "=name": "Streets without etymology information" } }, "2": { "override": { - "name": "Parks and forests without etymology information" + "=name": "Parks and forests without etymology information" + } + }, + "3": { + "override": { + "=name": "Education institutions without etymology information" } } }, @@ -821,16 +832,19 @@ "title": "Facade gardens" }, "food": { + "description": "Restaurants and fast food", "title": "Restaurants and fast food" }, "fritures": { + "description": "On this map, you'll find your favourite fries shop!", "layers": { "0": { "override": { "name": "Fries shop" } } - } + }, + "title": "Fries shops" }, "ghostbikes": { "description": "A ghost bike 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.

On this map, one can see all the ghost bikes which are known by OpenStreetMap. Is a ghost bike missing? Everyone can add or update information here - you only need to have a (free) OpenStreetMap account.", @@ -1001,10 +1015,14 @@ "shortDescription": "This theme shows all (touristic) maps that OpenStreetMap knows of", "title": "A map of maps" }, - "natuurpunt": { - "description": "On this map you can find all the nature reserves that Natuurpunt offers ", - "shortDescription": "This map shows the nature reserves of Natuurpunt", - "title": "The map of Natuurpunt" + "nature": { + "description": "On this map, one can find interesting infromation for tourists and nature lovers, such as ", + "shortDescription": "A map for nature lovers, with interesting POI's", + "title": "Into nature" + }, + "notes": { + "description": "A note is a pin on the map with some text to indicate something wrong.

Make sure to checkout the filter view to search for users and text.", + "title": "Notes on OpenStreetMap" }, "observation_towers": { "description": "Publicly accessible towers to enjoy the view", @@ -1268,91 +1286,6 @@ "shortDescription": "Map all the trees", "title": "Trees" }, - "uk_addresses": { - "description": "Contribute to OpenStreetMap by filling out address information", - "layers": { - "0": { - "name": "Inspire polygons" - }, - "1": { - "tagRenderings": { - "uk_addresses_embedding_outline": { - "mappings": { - "0": { - "then": "The INSPIRE-polygon containing this point has at least one address contained" - }, - "1": { - "then": "The INSPIRE-polygon containing this point has no addresses contained" - } - } - }, - "uk_addresses_explanation": { - "render": "There probably is an address here" - } - }, - "title": { - "render": "Address to be determined" - } - }, - "2": { - "description": "Addresses", - "name": "Known addresses in OSM", - "tagRenderings": { - "address-sign-image": { - "render": "{image_carousel(image:address)}
{image_upload(image:address, Add image of the address)}" - }, - "fixme": { - "question": "What should be fixed here? Please explain what the address is" - }, - "preview": { - "render": "To send a letter to this addres, you would write:
Name of the inhabitant
{addr:housename}
{addr:unit} {addr:housenumber} {addr:street}
{addr:place}
Suburb
Town
Postal code
" - }, - "uk_addresses_explanation_osm": { - "render": "This address is saved in OpenStreetMap" - }, - "uk_addresses_housenumber": { - "mappings": { - "0": { - "then": "This building has no house number" - } - }, - "question": "What is the number of this house?", - "render": "The housenumber is {addr:housenumber}" - }, - "uk_addresses_placename": { - "mappings": { - "0": { - "then": "No extra placename is given or needed" - } - }, - "question": "What is the place or locality?
This is additional information if the streetname alone isn't enough to find this address. Typical examples are 'Technology Park', 'XYZ Terrace', ...
", - "render": "The placename is {addr:place}" - }, - "uk_addresses_street": { - "question": "What street is this address located in?", - "render": "This address is in street {addr:street}" - }, - "uk_addresses_unit": { - "question": "What is the unit indication of this address?
This is the letter or number of the letterbox here, if multiple letterboxes share the same street and housenumber. If there are multiple at the same location, add them here with a ; between them
" - } - }, - "title": { - "render": "Known address" - } - } - }, - "shortDescription": "Help to build an open dataset of UK addresses", - "tileLayerSources": { - "0": { - "name": "Property boundaries by osmuk.org" - } - }, - "title": "UK Addresses" - }, - "waste": { - "description": "Map showing waste baskets and recycling facilities.", - "title": "Waste" - }, "waste_basket": { "description": "On this map, you'll find waste baskets near you. If a waste basket is missing on this map, you can add it yourself", "shortDescription": "A map with waste baskets", diff --git a/langs/themes/hu.json b/langs/themes/hu.json index 3acc85a739..67e3d2e821 100644 --- a/langs/themes/hu.json +++ b/langs/themes/hu.json @@ -4,28 +4,621 @@ "title": "Defibrillátor-térkép" }, "artwork": { - "description": "Isten hozott a nyílt műalkotástérképen, a világ minden táján megtalálható szobrok, mellszobrok, grafittik és más műalkotások térképén", + "description": "Isten hozta a nyílt műalkotástérképen, a világ minden táján megtalálható szobrok, mellszobrok, graffitik és más műalkotások gyűjtőhelyén", "title": "Műalkotástérkép" }, + "benches": { + "description": "Ez a térkép megjeleníti az OpenStreetMap-en rögzített összes padot: egyes padokat, valamint tömegközlekedési megállókban vagy menedékhelyeken található padokat. OpenStreetMap-fiókkal Ön is felrajzolhat új padokat, vagy szerkesztheti a meglévő padok részleteit.", + "shortDescription": "Padtérkép", + "title": "Padok" + }, + "bicyclelib": { + "description": "A kerékpárkönyvtárak olyan helyek, ahol kerékpárokat lehet kölcsönözni, gyakran egy kis éves díj ellenében. Figyelemre méltó felhasználásuk a gyerekeknek szánt kerékpárkönyvtárak, amelyek segítségével nagyobb kerékpárra válthatnak, amikor jelenlegi kerékpárjukat kinőtték", + "title": "Kerékpárkönyvtárak" + }, + "binoculars": { + "description": "Rúdra rögzített távcsövek térképe. Jellemzően turisztikailag érdekes, panorámás helyeken, kilátótornyok tetején vagy természetvédelmi területen találhatók.", + "shortDescription": "Rögzített távcsövek (binokulárok) térképe", + "title": "Távcsövek" + }, + "bookcases": { + "description": "A nyilvános könyvespolc egy kis utcai szekrény, doboz, régi telefonfülke vagy más tárgy, ahol könyveket tárolnak. Bárki tehet rá vagy vihet el róla könyvet. Ez a térkép ezeket a könyvespolcokat kívánja összegyűjteni. Ha felfedezett egy új könyvespolcot a közelben, akkor egy ingyenes OpenStreetMap-fiókkal gyorsan fel is rajzolhatja a térképre.", + "title": "Könyvespolctérkép" + }, + "cafes_and_pubs": { + "title": "Kávézók és kocsmák" + }, + "campersite": { + "description": "Ez az oldal az összes olyan hivatalos lakóautós megállóhelyet és helyet gyűjti össze, ahol szürke és fekete szennyvizet lehet üríteni. Hozzáadhat részleteket a nyújtott szolgáltatásokról és a költségekről, valamint képeket és értékeléseket. Ez egyszerre egy weboldal és egy webes alkalmazás. Az adatokat az OpenStreetMapen tároljuk, így mindig ingyenesek lesznek, és bármelyik alkalmazás újra felhasználhatja őket.", + "layers": { + "0": { + "description": "Lakóautós megállóhelyek", + "name": "Lakóautós megállóhely", + "presets": { + "0": { + "description": "Új hivatalos lakóautóhely hozzáadása. Ez arra vannak kijelölve, hogy lakóautóval ott éjszakázzunk. Lehet, hogy úgy néz ki, mint egy igazi kemping, de az is lehet, hogy csak olyan, mint egy parkoló. Előfordulhat, hogy egyáltalán nem jelzik őket, hanem csak egy önkormányzati határozatban vannak kijelölve. A lakóautósoknak szánt olyan hagyományos parkolók, ahol nem várhatóan nem fognak éjszakázni, -nem minősül- lakóautóhelynek. ", + "title": "lakóautós megállóhely" + } + }, + "tagRenderings": { + "caravansites-toilets": { + "mappings": { + "0": { + "then": "Itt van WC" + }, + "1": { + "then": "Itt nincs WC" + } + }, + "question": "Van-e itt WC?" + } + } + }, + "1": { + "presets": { + "0": { + "description": "Új egészségügyihulldék-lerakó hozzáadása. Ez egy olyan hely, ahol a lakókocsisok a szennyvizet vagy a vegyi WC hulladékát kiüríthetik. Gyakran van ivóvíz és áram is." + } + }, + "tagRenderings": { + "dumpstations-chemical-waste": { + "mappings": { + "0": { + "then": "Itt ártalmatlanítható a vegyi WC hulladéka" + }, + "1": { + "then": "Itt nem ártalmatlanítható a vegyi WC hulladéka" + } + }, + "question": "Elhelyezhető-e itt a vegyi WC hulladéka?" + } + } + } + }, + "overrideAll": { + "tagRenderings+": { + "1": { + "question": "Van-e itt elektromos áram?" + } + } + }, + "shortDescription": "Helyek, ahol lakóautóval eltöltheti az éjszakát", + "title": "Lakóautós megállóhelyek" + }, + "charging_stations": { + "description": "Ezen a térképen a elektromos töltőpontokról szóló információkat lehet megtalálni és megadni", + "shortDescription": "Elektromos töltőpontok világtérképe", + "title": "Elektromos töltőpontok" + }, + "climbing": { + "description": "Ezen a térképen különböző mászási lehetőségeket talál, például falmászótermeket, bouldertermeket és sziklákat a természetben.", + "descriptionTail": "A mászótérképet eredetileg Christian Neumann készítette. Ha észrevétele vagy kérdése van, kérjük, vele lépjen kapcsolatba.

A projekt az OpenStreetMap adatait használja

", + "layers": { + "0": { + "description": "Mászóegyesület vagy -szervezet", + "name": "Mászóegyesület", + "presets": { + "0": { + "description": "Egy mászóegyesület", + "title": "Mászóegyesület" + }, + "1": { + "description": "Mászással foglalkozó civil szervezet", + "title": "Mászószervezet" + } + }, + "tagRenderings": { + "climbing_club-name": { + "question": "Mi a neve ennek a mászóegyesületnek vagy szervezetnek?", + "render": "{name}" + } + }, + "title": { + "mappings": { + "0": { + "then": "Mászószervezet" + } + } + } + } + }, + "overrideAll": { + "tagRenderings+": { + "9": { + "mappings": { + "0": { + "then": "Itt lehetőség van sportmászásra" + }, + "1": { + "then": "Itt nincs lehetőség sportmászásra" + } + } + } + } + }, + "title": "Mászótérkép" + }, + "cycle_infra": { + "description": "Kerékpáros infrastruktúrával kapcsolatos dolgokat megjelenítő és szerkesztésre felkínáló térkép. Az #osoc21 (Open Summer of Code) alatt készült.", + "shortDescription": "Olyan térkép, ahol a kerékpáros infrastruktúrával kapcsolatos dolgokat tekinthet meg és szerkeszthet.", + "title": "Kerékpáros infrastruktúra" + }, + "cyclestreets": { + "description": "A kerékpárosutca (cyclestreet, Fahrradstraße) olyan utca, ahol gépjármű nem előzhet meg kerékpárost. Az ilyen utcákat külön közlekedési tábla jelzi. Kerékpárosutcák találhatók Hollandiában és Belgiumban, valamint Németországban és Franciaországban is. ", + "layers": { + "0": { + "description": "A kerékpárosutca olyan utca, ahol gépjármű nem előzhet meg a kerékpárost", + "name": "Kerékpárosutcák" + }, + "1": { + "description": "Ez az utca hamarosan kerékpárosutcává válik", + "name": "Jövőbeli kerékpárosutca", + "title": { + "mappings": { + "0": { + "then": "{name} nemsokára kerékpárosutca lesz" + } + }, + "render": "Jövőbeli kerékpárosutca" + } + }, + "2": { + "description": "Réteg bármely utca kerékpárosutcaként való megjelöléséhez", + "name": "Minden utca", + "title": { + "render": "Utca" + } + } + }, + "overrideAll": { + "tagRenderings+": { + "0": { + "mappings": { + "0": { + "then": "Ez az utca kerékpárosutca (és 30 km/h a sebességkorlátozás)" + }, + "1": { + "then": "Ez az utca kerékpárosutca" + }, + "2": { + "then": "Ez az utca hamarosan kerékpárosutcává válik" + }, + "3": { + "then": "Ez az utca nem kerékpárosutca" + } + }, + "question": "Kerékpárosutca-e {name}?" + }, + "1": { + "question": "Mikor lesz ez az utca kerékpárosutca?", + "render": "Ez az utca ekkor lesz kerékpárosutca: {cyclestreet:start_date}" + } + } + }, + "shortDescription": "Kerékpárosutcák térképe", + "title": "Kerékpárosutcák" + }, + "cyclofix": { + "description": "Ez a térkép kerékpárosoknak kíván könnyen használható megoldást nyújtani a számukra fontos infrastruktúra megtalálásához.

A bal alsó sarokban nyomon követheti pontos tartózkodási helyét (csak mobilon), és kiválaszthatja az Ön számára fontos rétegeket. Az eszköz segítségével gombostűket (érdekes pontokat, POI-kat) is szerkeszthet vagy felrajzolhat a térképre, a kérdések megválaszolásával pedig további adatokat szolgáltathat.

Minden módosítás automatikusan elmentődik az OpenStreetMap globális adatbázisában, és mások szabadon újra felhasználhatják.

A cyclofix projektről további információkat a cyclofix.osm.be oldalon talál.", + "title": "Cyclofix – nyílt térkép kerékpárosoknak" + }, + "drinking_water": { + "description": "Ezen a térképen a nyilvánosan hozzáférhető ivóvíznyerő helyek láthatók, szerkeszthetők és rajzolhatók fel könnyedén", + "title": "Ivóvíz" + }, + "entrances": { + "description": "Épületek bejáratai mutató térkép, amely a kerekesszékkel közlekedőknek fontos szempontokat jeleníti meg", + "shortDescription": "Akadálymentes útvonaltervezést segítő bejáratok feltérképezése", + "title": "Épületek bejáratai" + }, + "etymology": { + "description": "Ezen a térképen az látható, hogy egy objektum milyen névre hallgat. Az utcák, épületek stb. az OpenStreetMapről származnak, amely össze van kapcsolva a Wikidata adatbázissal. A felugró ablakban megjelenik a megfelelő Wikipedia-szócikk (ha van) vagy egy Wikidata-doboz arról, amiről az objektumot elnevezték. Ha magának az objektumnak van Wikipédia-oldala, az is megjelenik.

A térképet Ön is szerkesztheti!nagyítson rá, és az összes utca megjelenik. Ha valamelyikre rákattint, megjelenik Wikidata-kereső doboz. Néhány kattintással hozzáadhat egy etimológiai linket. Ne feledje, hogy ehhez szüksége van egy ingyenes OpenStreetMap-fiókra.", + "layers": { + "1": { + "override": { + "=name": "Etimológiai adat nélküli utcák" + } + }, + "2": { + "override": { + "=name": "Etimológiai adat nélküli parkok és erdők" + } + } + }, + "shortDescription": "Mi az eredete egy helynévnek?", + "title": "Etimológiai térkép" + }, + "facadegardens": { + "description": "A homlokzatkertek, zöld homlokzatok és fák a városban nemcsak békét és nyugalmat, hanem szebb várost, nagyobb biológiai sokféleséget, hűsítő hatást és jobb levegőminőséget is hoznak.
A Klimaan VZW és a Mechelen Klimaatneutraal a meglévő és új homlokzati kerteket szeretné feltérképezni, hogy példaként szolgáljanak a saját kertet építeni vágyóknak vagy a természetet kedvelő városi sétálóknak.
További információ a projektről a klimaan.be oldalon.", + "layers": { + "0": { + "description": "Homlokzati kertek", + "name": "Homlokzati kertek", + "presets": { + "0": { + "description": "Homlokzatkert hozzáadása", + "title": "homlokzatkert" + } + }, + "tagRenderings": { + "facadegardens-description": { + "question": "További leíró jellegű információ a kertről (ha szükséges, és följebb nincs leírva)", + "render": "További részletek: {description}" + }, + "facadegardens-direction": { + "question": "Milyen a kert tájolása?", + "render": "Tájolás: {direction} (0=észak, 90=kelet stb.)" + }, + "facadegardens-edible": { + "mappings": { + "0": { + "then": "Van benne ehető növény" + }, + "1": { + "then": "Nincs benne ehető növény" + } + }, + "question": "Van-e benne ehető növény?" + }, + "facadegardens-plants": { + "mappings": { + "0": { + "then": "Van benne szőlő" + }, + "1": { + "then": "Van benne virágos növény" + }, + "2": { + "then": "Van benne cserje" + }, + "3": { + "then": "Van benne talajtakaró növény" + } + }, + "question": "Milyen jellegű növények nőnek benne?" + }, + "facadegardens-rainbarrel": { + "mappings": { + "0": { + "then": "Van benne esővízgyűjtő hordó" + }, + "1": { + "then": "Nincs benne esővízgyűjtő hordó" + } + }, + "question": "Van-e a kertben vizeshordó?" + }, + "facadegardens-start_date": { + "question": "Mikor épült a kert? (Év megadása is elegendő)", + "render": "A kert építésének időpontja: {start_date}" + }, + "facadegardens-sunshine": { + "mappings": { + "0": { + "then": "A kert teljesen a napon van" + }, + "1": { + "then": "A kert részben árnyékban van" + }, + "2": { + "then": "A kert árnyékban van" + } + }, + "question": "Árnyékban vagy napon van a kert?" + } + }, + "title": { + "render": "Homlokzati kert" + } + } + }, + "shortDescription": "Ez a térkép homlokzati kerteket jelenít meg képekkel, valamint adatokkal a tájolásukról, a napsütésnek való kitettségükről és a bennük található növényzetről.", + "title": "Homlokzati kertek" + }, + "food": { + "title": "Éttermek és büfék" + }, + "fritures": { + "layers": { + "0": { + "override": { + "name": "Sültkrumplievő-hely" + } + } + } + }, "ghostbikes": { - "title": "Emlékkerékpárok" + "description": "A szellemkerékpár egy közlekedési balesetben elhunyt kerékpáros emlékműve: egy fehér kerékpár, amelyet állandó jelleggel a baleset helyszínének közelében helyeznek el.

A térképen az OpenStreetMap által ismert összes szellemkerékpár megtekinthető. Hiányzik róla egy szellemkerékpár? Bárki hozzáadhat vagy frissíthet adatokat – csak egy (ingyenes) OpenStreetMap-fiókra van szükség hozzá.", + "title": "Szellemkerékpárok" + }, + "grb": { + "description": "Ez a sablon a flandriai GRB épületimportálás automatizlását kívánja megkönnyíteni." + }, + "hackerspaces": { + "description": "Ezen a térképen hackerspace-ek láthatók, új hackerspace-eket lehet fölrajzolni vagy meglévők adatait frissíteni", + "layers": { + "0": { + "description": "Hackerspace", + "name": "Hackerspace", + "presets": { + "0": { + "description": "A hackerspace egy olyan hely, ahol szoftverek iránt érdeklő emberek találkoznak", + "title": "Hackerspace" + }, + "1": { + "description": "A makerspace olyan hely, ahol a barkácsolás szerelmesei találkoznak, hogy olyan elektronikai eszközökkel kísérletezzenek, mint például az Arduino vagy a LEDstrips.", + "title": "Makerspace" + } + }, + "tagRenderings": { + "is_makerspace": { + "mappings": { + "0": { + "then": "Ez egy makerspace" + }, + "1": { + "then": "Ez egy hagyományos (szoftverekkel foglalkozó) hackerspace" + } + }, + "question": "Ez hackerspace vagy makerspace?" + } + }, + "title": { + "mappings": { + "0": { + "then": " {name}" + } + }, + "render": "Hackerspace" + } + } + }, + "shortDescription": "Hackerspace-ek térképe", + "title": "Hackerspace-ek" + }, + "hailhydrant": { + "description": "Ezen a térképen tűzcsapokat, tűzoltóállomásokat, mentőállomásokat és tűzoltóállomásokat találhat és szerkeszthet kedvenc városrészeiben (vagy másutt).\n\nA bal alsó sarokban nyomon követheti pontos tartózkodási helyét (csak mobilon), és kiválaszthatja az Ön számára releváns rétegeket. Ezzel az eszközzel gombostűket (érdekes pontokat, POI-kat) is szerkeszthet vagy felrajzolhat a térképre, a rendelkezésre álló kérdések megválaszolásával pedig további részleteket adhat meg.\n\nAz Ön által elvégzett módosítások automatikusan elmentődnek az OpenStreetMap globális adatbázisában, és mások szabadon újra felhasználhatják azokat.", + "shortDescription": "Térkép tűzcsapok, tűzoltó készülékek, tűzoltóságok és mentőállomások megjelenítéséhez.", + "title": "Tűzcsapok, tűzoltó készülékek, tűzoltóságok és mentőállomások." + }, + "notes": { + "description": "A jegyzet egy gombostű a térképen egy szöveggel, amely azt jelzi, hogy valami nem stimmel.

Felhasználók vagy szövegek kereséséhez nézd meg a szűrő nézetet.", + "title": "Jegyzetek az OpenStreetMapen" + }, + "observation_towers": { + "description": "Nyilvános tornyok, hogy gyönyörködhessünk a kilátásban", + "shortDescription": "Nyilvános tornyok, hogy gyönyörködhessünk a kilátásban", + "title": "Kilátótornyok" + }, + "openwindpowermap": { + "description": "Szélerőművek megjelenítésére és szerkesztésére szolgáló térkép.", + "layers": { + "0": { + "name": "Szélerőmű", + "presets": { + "0": { + "title": "Szélerőmű" + } + }, + "tagRenderings": { + "turbine-diameter": { + "question": "Hány méter a rotorátmérője ennek a szélturbinának?", + "render": "A szélturbina rotorátmérője: {rotor:diameter} méter." + }, + "turbine-height": { + "question": "Hány méter a szélerőmű teljes magassága (a rotor sugarával együtt)?", + "render": "A szélerőmű teljes (rotor sugarával együtt számított) magassága: {height} méter." + }, + "turbine-operator": { + "question": "Ki üzemelteti ezt a szélturbinát?", + "render": "Ennek a szélerőműnek az üzemeltetője: {operator}." + }, + "turbine-output": { + "question": "Mekkora a teljesítménye ennek a szélturbinának? (pl. 2.3 MW)", + "render": "A szélerőmű teljesítménye: {generator:output:electricity}." + }, + "turbine-start-date": { + "question": "Mikor helyezték üzembe ezt a szélerőművet?", + "render": "A szélerőmű üzembe helyezése: {start_date}." + } + }, + "title": { + "render": "szélerőmű" + }, + "units": { + "0": { + "applicableUnits": { + "0": { + "human": " megawatt" + }, + "1": { + "human": " kilowatt" + }, + "2": { + "human": " watt" + }, + "3": { + "human": " gigawatt" + } + } + }, + "1": { + "applicableUnits": { + "0": { + "human": " méter" + } + } + } + } + } + }, + "title": "OpenWindPowerMap" + }, + "parkings": { + "description": "Ez a térkép különböző parkolókat jelenít meg", + "shortDescription": "Ez a térkép különböző parkolókat jelenít meg", + "title": "Parkolás" + }, + "playgrounds": { + "description": "Ezen a térképen játszótereket találsz, és további információkat adhatsz hozzájuk", + "shortDescription": "Egy térkép játszóterekkel", + "title": "Játszóterek" + }, + "postal_codes": { + "description": "Irányítószámok", + "layers": { + "0": { + "name": "irányítószámok", + "tagRenderings": { + "postal_code": { + "render": "Irányítószám: {postal_code}" + } + }, + "title": { + "render": "Irányítószám: {postal_code}" + } + }, + "2": { + "name": "polgármesteri hivatalok", + "title": { + "render": "{name} városháza" + } + } + }, + "shortDescription": "Irányítószámok", + "title": "Irányítószámok" + }, + "postboxes": { + "description": "Ezen a térképen postahivatalok és postaládák adatait találod és egészítheted ki. Utánanézhetsz, hogy hol adhatod fel a következő képeslapodat! :)
Hibát találtál, vagy hiányzik egy postaláda? Ezt a térképet mindössze egy ingyenes OpenStreetMap-fiókkal szerkesztheted. ", + "layers": { + "0": { + "description": "A postaládákat megjelenítő réteg.", + "name": "Postaládák", + "presets": { + "0": { + "title": "postaláda" + } + }, + "title": { + "render": "Postaláda" + } + }, + "1": { + "description": "Postákat megjelenítő réteg.", + "filter": { + "0": { + "options": { + "0": { + "question": "Most nyitva" + } + } + } + }, + "name": "Posták", + "presets": { + "0": { + "title": "Posta" + } + }, + "tagRenderings": { + "OH": { + "mappings": { + "0": { + "then": "Éjjel-nappal nyitva (munkaszüneti napokon is)" + } + }, + "question": "Mikor van nyitva ez a posta?", + "render": "Nyitva tartás: {opening_hours_table()}" + } + }, + "title": { + "render": "Posta" + } + } + }, + "shortDescription": "Posták és postaládák térképe", + "title": "Posta- és postaládatérkép" + }, + "shops": { + "description": "Ezen a térképen az üzletek alapvető adatait lehet megadni, például nyitvatartási időt és telefonszámokat.", + "shortDescription": "Szerkeszthető térkép üzletek alapvető adataival", + "title": "Bolttérkép" + }, + "sport_pitches": { + "description": "A sportpálya egy olyan terület, amelyen valamilyen sportot űznek", + "shortDescription": "Sportpályatérkép", + "title": "Sportpályák" + }, + "street_lighting": { + "description": "Ezen a térképen minden megtalálható, ami a közvilágítással kapcsolatos", + "layers": { + "1": { + "name": "Kivilágított utcák", + "tagRenderings": { + "lit": { + "mappings": { + "0": { + "then": "Ezen az utcán van közvilágítás" + }, + "1": { + "then": "Ezen az utcán nincs közvilágítás" + }, + "2": { + "then": "Ez az utca éjszaka ki van világítva" + }, + "3": { + "then": "Ez az utca éjjel-nappal ki van világítva" + } + }, + "question": "Ki van-e világítva ez az utca?" + } + }, + "title": { + "render": "Kivilágított utca" + } + }, + "2": { + "name": "Minden utca", + "tagRenderings": { + "lit": { + "mappings": { + "0": { + "then": "Ez az utca ki van világítva" + }, + "1": { + "then": "Ez az utca nincs kivilágítva" + }, + "2": { + "then": "Ez az utca éjjel ki van világítva" + }, + "3": { + "then": "Ez az utca éjjel-nappal ki van világítva" + } + }, + "question": "Ki van-e világítva ez az utca?" + } + }, + "title": { + "render": "Utca" + } + } + }, + "title": "Közvilágítás" + }, + "surveillance": { + "description": "Ezen a térképen térfigyelő kamerák láthatók.", + "shortDescription": "Térfigyelő kamerák és más figyelőeszközök", + "title": "Megfigyelt térfigyelés" + }, + "toilets": { + "description": "Nyilvános WC-k térképe", + "title": "WC-térkép" }, "trees": { "description": "Térképezzünk fel minden fát!", "shortDescription": "Az összes fa feltérképezése", "title": "Fatérkép" }, - "uk_addresses": { - "layers": { - "2": { - "description": "Címek", - "name": "Ismert címek az OSM-en", - "title": { - "render": "Ismert cím" - } - } - } - }, "waste_basket": { "description": "Ezen a térképen megtalálhatod a közeledben lévő szemeteskosarakat. Ha hiányzik egy kuka a térképről, te is felrajzolhatod", "shortDescription": "Szemeteskosarakat ábrázoló térkép", diff --git a/langs/themes/id.json b/langs/themes/id.json index a6003b64dc..d9fabf17f0 100644 --- a/langs/themes/id.json +++ b/langs/themes/id.json @@ -16,9 +16,14 @@ "campersite": { "layers": { "0": { + "description": "Tempat camping", + "name": "Tempat camping", "tagRenderings": { "caravansites-fee": { "mappings": { + "0": { + "then": "Anda perlu membayar untuk menggunakannya" + }, "1": { "then": "Boleh digunakan tanpa bayaran" } @@ -39,7 +44,19 @@ "question": "Tempat ini berbagi akses Web?" }, "caravansites-name": { - "question": "Apakah nama tempat ini?" + "question": "Apakah nama tempat ini?", + "render": "Tempat ini disebut {name}" + }, + "caravansites-sanitary-dump": { + "mappings": { + "0": { + "then": "Tempat ini memiliki tempat pembuangan sanitasi" + }, + "1": { + "then": "Tempat ini tidak memiliki tempat pembuangan sampah sanitasi" + } + }, + "question": "Apakah tempat ini memiliki tempat pembuangan sanitasi?" }, "caravansites-toilets": { "mappings": { @@ -55,7 +72,14 @@ "question": "Tempat sini terada situs web?", "render": "Situs resmi: {website}" } + }, + "title": { + "render": "Tempat kemping {name}" } + }, + "1": { + "description": "Tempat pembuangan sanitasi", + "name": "Tempat pembuangan sanitasi" } }, "overrideAll": { @@ -115,18 +139,148 @@ } } }, - "trees": { - "title": "Pohon" - }, - "uk_addresses": { - "description": "Berkontribusi untuk OpenStreetMap dengan mengisi informasi alamat", + "openwindpowermap": { "layers": { - "1": { + "0": { + "tagRenderings": { + "turbine-operator": { + "render": "Turbin angin ini dioperasikan oleh {operator}." + }, + "turbine-output": { + "question": "Berapa output daya dari turbin angin ini? (misalnya 2,3 MW)", + "render": "Output daya dari turbin angin ini adalah {generator:output:electricity}." + }, + "turbine-start-date": { + "question": "Kapan turbin angin ini mulai beroperasi?", + "render": "Turbin angin ini mulai beroperasi pada/dalam {start_date}." + } + }, "title": { - "render": "Alamat yang diketahui" + "mappings": { + "0": { + "then": "{name}" + } + }, + "render": "turbin angin" + }, + "units": { + "0": { + "applicableUnits": { + "0": { + "human": " megawat" + }, + "1": { + "human": " kilowat" + }, + "2": { + "human": " watt" + }, + "3": { + "human": " gigawatt" + } + } + }, + "1": { + "applicableUnits": { + "0": { + "human": " meter" + } + } + } } } }, - "title": "Alamat Inggris" + "title": "OpenWindPowerMap" + }, + "parkings": { + "description": "Peta ini menunjukkan tempat parkir yang berbeda", + "shortDescription": "Peta ini menunjukkan tempat parkir yang berbeda", + "title": "Tempat parkir" + }, + "personal": { + "title": "Tema pribadi" + }, + "playgrounds": { + "description": "Di peta ini, Anda menemukan taman bermain dan dapat menambahkan lebih banyak informasi", + "shortDescription": "Peta dengan taman bermain", + "title": "Taman bermain" + }, + "postal_codes": { + "description": "Kode pos", + "layers": { + "0": { + "name": "kode pos", + "tagRenderings": { + "postal_code": { + "render": "Kode posnya adalah {postal_code}" + } + }, + "title": { + "render": "Kode pos {postal_code}" + } + }, + "2": { + "name": "balai kota", + "title": { + "render": "Balai kota {name}" + } + } + }, + "shortDescription": "Kode pos", + "title": "Kode pos" + }, + "postboxes": { + "layers": { + "0": { + "description": "Layer yang memperlihatkan kotak pos.", + "name": "Kotak pos", + "presets": { + "0": { + "title": "kotak pos" + } + }, + "title": { + "render": "Kotak pos" + } + }, + "1": { + "description": "Layer yang menunjukkan kantor pos.", + "filter": { + "0": { + "options": { + "0": { + "question": "Saat ini buka" + } + } + } + }, + "name": "Kantor pos", + "presets": { + "0": { + "title": "Kantor Pos" + } + }, + "tagRenderings": { + "OH": { + "mappings": { + "0": { + "then": "Buka 24 jam (termasuk hari libur)" + } + }, + "question": "Jam berapa kantor pos ini buka?", + "render": "Jam Buka: {opening_hours_table()}" + } + }, + "title": { + "render": "Kantor Pos" + } + } + } + }, + "trees": { + "title": "Pohon" + }, + "waste_basket": { + "title": "Keranjang Sampah" } } \ No newline at end of file diff --git a/langs/themes/it.json b/langs/themes/it.json index fcafe28042..3534e7343e 100644 --- a/langs/themes/it.json +++ b/langs/themes/it.json @@ -645,7 +645,7 @@ "then": "Questa strada non è una strada ciclabile" } }, - "question": "È una strada ciclabile?" + "question": "È {name} una strada ciclabile?" }, "1": { "question": "Questa strada diventerà una strada ciclabile quando?", @@ -669,12 +669,12 @@ "layers": { "1": { "override": { - "name": "Strade senza informazioni etimologiche" + "=name": "Strade senza informazioni etimologiche" } }, "2": { "override": { - "name": "Parchi e foreste senza informazioni etimologiche" + "=name": "Parchi e foreste senza informazioni etimologiche" } } }, @@ -799,11 +799,6 @@ "shortDescription": "Questo tema mostra tutte le mappe (turistiche) conosciute da OpenStreetMap", "title": "Una cartina delle cartine" }, - "natuurpunt": { - "description": "In questa cartina è possibile trovare tutte le riserve naturali offerte da Natuupunt. ", - "shortDescription": "Questa cartina mostra le riserve naturali di Natuurpunt", - "title": "Riserve naturali" - }, "observation_towers": { "description": "Torri pubblicamente accessibili per godere della vista", "shortDescription": "Torri pubblicamente accessibili per godere della vista", @@ -921,11 +916,6 @@ "shortDescription": "Mappa tutti gli alberi", "title": "Alberi" }, - "uk_addresses": { - "description": "Contribuisci a OpenStreetMap inserendo le informazioni sull’indirizzo", - "shortDescription": "Aiuta a costruire un dataset libero per gli indirizzi nel Regno Unito", - "title": "Indirizzi UK" - }, "waste_basket": { "description": "In questa cartina troverai i cestini dei rifiuti nei tuoi paraggi. Se manca un cestino, puoi inserirlo tu stesso", "shortDescription": "Una cartina dei cestini dei rifiuti", diff --git a/langs/themes/ja.json b/langs/themes/ja.json index d2f6b71ba1..3af65c8871 100644 --- a/langs/themes/ja.json +++ b/langs/themes/ja.json @@ -518,8 +518,7 @@ "3": { "then": "この通りはcyclestreetではない" } - }, - "question": "この通りはcyclestreetですか?" + } }, "1": { "question": "この通りはいつcyclestreetになるんですか?", diff --git a/langs/themes/nb_NO.json b/langs/themes/nb_NO.json index 06bd4017a0..da448944f0 100644 --- a/langs/themes/nb_NO.json +++ b/langs/themes/nb_NO.json @@ -198,8 +198,7 @@ "3": { "then": "Denne gaten er ikke en sykkelvei" } - }, - "question": "Er denne gaten en sykkelvei?" + } } } }, @@ -240,9 +239,6 @@ "maps": { "title": "Et kart over kart" }, - "natuurpunt": { - "title": "Naturreservater" - }, "openwindpowermap": { "layers": { "0": { diff --git a/langs/themes/nl.json b/langs/themes/nl.json index 217ff11088..4e77e8d097 100644 --- a/langs/themes/nl.json +++ b/langs/themes/nl.json @@ -16,6 +16,11 @@ "shortDescription": "Een kaart van zitbanken", "title": "Zitbanken" }, + "bicycle_rental": { + "description": "Op deze kaart vind je verschillende fietsverhuurpunten en fietsverhuurzaken", + "shortDescription": "Een kaart met fietsverhuurpunten en fietsverhuurzaken", + "title": "Fietsverhuur" + }, "bicyclelib": { "description": "Een fietsbibliotheek is een plaats waar men een fiets kan lenen, vaak voor een klein bedrag per jaar. Een typisch voorbeeld zijn kinderfietsbibliotheken, waar men een fiets op maat van het kind kan lenen. Is het kind de fiets ontgroeid, dan kan het te kleine fietsje omgeruild worden voor een grotere.", "title": "Fietsbibliotheken" @@ -598,12 +603,12 @@ "layers": { "1": { "override": { - "name": "Straten zonder etymologische informatie" + "=name": "Straten zonder etymologische informatie" } }, "2": { "override": { - "name": "Parken en bossen zonder etymologische informatie" + "=name": "Parken en bossen zonder etymologische informatie" } } }, @@ -861,11 +866,6 @@ "shortDescription": "Deze kaart bevat informatie voor natuurliefhebbers", "title": "De Natuur in" }, - "natuurpunt": { - "description": "Op deze kaart vind je alle natuurgebieden die Natuurpunt ter beschikking stelt", - "shortDescription": "Deze kaart toont de natuurgebieden van Natuurpunt", - "title": "De Natuurpunt-kaart" - }, "observation_towers": { "description": "Publieke uitkijktorens om van het panorama te genieten", "shortDescription": "Publieke uitkijktorens om van het panorama te genieten", @@ -1041,12 +1041,6 @@ "shortDescription": "Bewakingscameras en dergelijke", "title": "Surveillance under Surveillance" }, - "toerisme_vlaanderen": { - "description": "

Pin je punt is een open toerismekaart waarin wandelaars en fietsers nuttige gegevens verzamelen die handig zijn voor andere wandelaars en fietsers.

We verzamelen 7 thematische lagen:

  1. Laadpunten voor e-bikes
  2. Openbare toiletten
  3. Zit- en picknickbankjes
  4. Uitkijkpunten, uitkijkplatformen en uitkijktorens
  5. Fietsherstelpunten
  6. Fietsverhuurpunten
  7. Speeltuinen

Klik op de exacte locatie op de kaart om een van deze 7 punten toe te voegen. Of corrigeer bestaande punten door erop te klikken.

", - "descriptionTail": "

Met de steun van Toerisme Vlaanderen

Meer informatie op toerismevlaaneren.be", - "shortDescription": "Een kaart om toeristisch relevante info op aan te duiden", - "title": "Pin je punt" - }, "toilets": { "description": "Een kaart met openbare toiletten", "title": "Open Toilettenkaart" @@ -1056,36 +1050,6 @@ "shortDescription": "Breng bomen in kaart", "title": "Bomen" }, - "uk_addresses": { - "description": "Draag bij aan OpenStreetMap door adresinformatie in te vullen", - "layers": { - "2": { - "description": "Adressen", - "name": "Bekende adressen in OSM", - "tagRenderings": { - "uk_addresses_housenumber": { - "mappings": { - "0": { - "then": "Dit gebouw heeft geen huisnummer" - } - }, - "render": "Het huisnummer is {addr:housenumber}" - } - }, - "title": { - "render": "Bekend adres" - } - } - } - }, - "waste": { - "description": "Kaart met afvalbakken en recyclingfaciliteiten.", - "title": "Afval" - }, - "waste_assen": { - "description": "Kaart met afvalbakken en recyclingfaciliteiten + een dataset voor Assen.", - "title": "Afval - Assen" - }, "waste_basket": { "description": "Op deze kaart vind je vuilnisbakken waar je afval in kan smijten. Ontbreekt er een vuilnisbak? Dan kan je die zelf toevoegen", "shortDescription": "Een kaart met vuilnisbakken", diff --git a/langs/themes/pt_BR.json b/langs/themes/pt_BR.json index 6c7de8bfd0..37227204d5 100644 --- a/langs/themes/pt_BR.json +++ b/langs/themes/pt_BR.json @@ -159,7 +159,7 @@ "then": "Estação de despejo" } }, - "render": "Estação de despejo {nome}" + "render": "Estação de despejo {name}" } } }, diff --git a/langs/themes/ru.json b/langs/themes/ru.json index b6166629c3..fdc231a61f 100644 --- a/langs/themes/ru.json +++ b/langs/themes/ru.json @@ -530,12 +530,5 @@ "description": "Нанесите все деревья на карту!", "shortDescription": "Карта деревьев", "title": "Деревья" - }, - "uk_addresses": { - "layers": { - "2": { - "description": "Адреса" - } - } } } \ No newline at end of file diff --git a/langs/themes/zh_Hant.json b/langs/themes/zh_Hant.json index 1a4652326b..055ce0e79c 100644 --- a/langs/themes/zh_Hant.json +++ b/langs/themes/zh_Hant.json @@ -309,12 +309,12 @@ "layers": { "1": { "override": { - "name": "道路沒有詞源資訊" + "=name": "道路沒有詞源資訊" } }, "2": { "override": { - "name": "公園與森哥沒有詞源資訊" + "=name": "公園與森哥沒有詞源資訊" } } }, @@ -434,9 +434,6 @@ "shortDescription": "這份主題顯示所有已知的開放街圖上的 (旅遊) 地圖", "title": "地圖的地圖" }, - "natuurpunt": { - "description": "在這張地圖上您可以找到 Natuurpunt 提供的所有自然保護區 " - }, "observation_towers": { "description": "開放可及能觀景的高塔", "shortDescription": "開發可及能觀景的高塔", @@ -655,14 +652,6 @@ "shortDescription": "所有樹木的地圖", "title": "樹木" }, - "uk_addresses": { - "layers": { - "2": { - "description": "地址", - "name": "OSM 上已知的地址" - } - } - }, "waste_basket": { "description": "在這份地圖當中,你可以找到你附近的垃圾筒。如果地圖有遺漏垃圾筒,你可以自己加上去", "shortDescription": "垃圾筒的地圖", diff --git a/langs/zh_Hant.json b/langs/zh_Hant.json index ce3b891db2..0e9fcf4bbc 100644 --- a/langs/zh_Hant.json +++ b/langs/zh_Hant.json @@ -89,7 +89,7 @@ "zoomInToSeeThisLayer": "放大來看這個圖層" }, "backgroundMap": "背景地圖", - "aboutMapcomplete": "

關於 MapComplete

使用 MapComplete 你可以藉由單一主題豐富開放街圖的圖資。回答幾個問題,然後幾分鐘之內你的貢獻立刻就傳遍全球!主題維護者定議主題的元素、問題與語言。

發現更多

MapComplete 總是提供學習更多開放街圖下一步的知識

  • 當你內嵌網站,網頁內嵌會連結到全螢幕的 MapComplete
  • 全螢幕的版本提供關於開放街圖的資訊
  • 不登入檢視成果,但是要編輯則需登入 OSM。
  • 如果你沒有登入,你會被要求先登入
  • 當你回答單一問題時,你可以在地圖新增新的節點
  • 過了一陣子,實際的 OSM-標籤會顯示,之後會連結到 wiki


你有注意到問題嗎?你想請求功能嗎?想要幫忙翻譯嗎?來到原始碼或是問題追蹤器。

想要看到你的進度嗎?到OsmCha追蹤編輯數。

", + "aboutMapcomplete": "

關於 MapComplete

使用 MapComplete 你可以藉由單一主題豐富開放街圖的圖資。回答幾個問題,然後幾分鐘之內你的貢獻立刻就傳遍全球!主題維護者定議主題的元素、問題與語言。

發現更多

MapComplete 總是提供學習更多開放街圖下一步的知識

  • 當你內嵌網站,網頁內嵌會連結到全螢幕的 MapComplete
  • 全螢幕的版本提供關於開放街圖的資訊
  • 不登入檢視成果,但是要編輯則需登入 OSM。
  • 如果你沒有登入,你會被要求先登入
  • 當你回答單一問題時,你可以在地圖新增新的節點
  • 過了一陣子,實際的 OSM-標籤會顯示,之後會連結到 wiki


你有注意到問題嗎?你想請求功能嗎?想要幫忙翻譯嗎?來到原始碼或是問題追蹤器。

想要看到你的進度嗎?到OsmCha追蹤編輯數。

", "customThemeIntro": "

客製化主題

觀看這些先前使用者創造的主題。", "noTagsSelected": "沒有選取標籤", "getStartedNewAccount": " 或是 註冊新帳號", diff --git a/notfound.ts b/notfound.ts index 12146ef4d9..2c2be6c6c4 100644 --- a/notfound.ts +++ b/notfound.ts @@ -1,11 +1,6 @@ import {FixedUiElement} from "./UI/Base/FixedUiElement"; import Combine from "./UI/Base/Combine"; -import {SubtleButton} from "./UI/Base/SubtleButton"; -import Svg from "./Svg"; +import BackToIndex from "./UI/BigComponents/BackToIndex"; new Combine([new FixedUiElement("This page is not found"), -new SubtleButton(Svg.back_svg(), "Back to index", { - url: "./index.html", - newTab: false -}) -]).AttachTo("maindiv") \ No newline at end of file + new BackToIndex()]).AttachTo("maindiv") \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 3498ed1707..29e5b3df30 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,10 +18,11 @@ "@types/jquery": "^3.5.5", "@types/leaflet-markercluster": "^1.0.3", "@types/leaflet-providers": "^1.2.0", - "@types/leaflet.markercluster": "^1.4.3", "@types/lz-string": "^1.3.34", + "@types/papaparse": "^5.3.1", "@types/prompt-sync": "^4.1.0", "@types/wikidata-sdk": "^6.1.0", + "@types/xml2js": "^0.4.9", "country-language": "^0.1.7", "email-validator": "^2.0.4", "escape-html": "^1.0.3", @@ -34,16 +35,15 @@ "leaflet-polylineoffset": "^1.1.1", "leaflet-providers": "^1.13.0", "leaflet-simple-map-screenshoter": "^0.4.4", - "leaflet.markercluster": "^1.4.1", "libphonenumber": "^0.0.9", "libphonenumber-js": "^1.7.55", "lz-string": "^1.4.4", "mangrove-reviews": "^0.1.3", "moment": "^2.29.0", - "npm-run-all": "^4.1.5", "opening_hours": "^3.6.0", "osm-auth": "^1.0.2", "osmtogeojson": "^3.0.0-beta.4", + "papaparse": "^5.3.1", "parcel": "^1.2.4", "prompt-sync": "^4.2.0", "svg-resizer": "github:vieron/svg-resizer", @@ -51,7 +51,8 @@ "togpx": "^0.5.4", "tslint": "^6.1.3", "wikibase-sdk": "^7.14.0", - "wikidata-sdk": "^7.14.0" + "wikidata-sdk": "^7.14.0", + "xml2js": "^0.4.23" }, "devDependencies": { "@babel/polyfill": "^7.10.4", @@ -59,8 +60,6 @@ "assert": "^2.0.0", "dependency-cruiser": "^10.4.0", "fs": "0.0.1-security", - "git-json-merge": "^0.4.5", - "marked": "^2.0.0", "read-file": "^0.2.0", "sharp": "^0.28.3", "ts-node": "^9.0.0", @@ -3238,14 +3237,6 @@ "@types/leaflet": "*" } }, - "node_modules/@types/leaflet.markercluster": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/@types/leaflet.markercluster/-/leaflet.markercluster-1.4.4.tgz", - "integrity": "sha512-BQAilNWlBpYl4+PrsJXLOh4vyv7KfWi5kh3Fclg5y4gEeNeXKqhS6y1zzBB4+wcTuVUnMWfm2G0MfqA4yA5A5A==", - "dependencies": { - "@types/leaflet": "*" - } - }, "node_modules/@types/lz-string": { "version": "1.3.34", "resolved": "https://registry.npmjs.org/@types/lz-string/-/lz-string-1.3.34.tgz", @@ -3254,8 +3245,15 @@ "node_modules/@types/node": { "version": "7.10.14", "resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.14.tgz", - "integrity": "sha512-29GS75BE8asnTno3yB6ubOJOO0FboExEqNJy4bpz0GSmW/8wPTNL4h9h63c6s1uTrOopCmJYe/4yJLh5r92ZUA==", - "dev": true + "integrity": "sha512-29GS75BE8asnTno3yB6ubOJOO0FboExEqNJy4bpz0GSmW/8wPTNL4h9h63c6s1uTrOopCmJYe/4yJLh5r92ZUA==" + }, + "node_modules/@types/papaparse": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.3.1.tgz", + "integrity": "sha512-1lbngk9wty2kCyQB42LjqSa12SEop3t9wcEC7/xYr3ujTSTmv7HWKjKYXly0GkMfQ42PRb2lFPFEibDOiMXS0g==", + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -3304,6 +3302,14 @@ "wikidata-sdk": "*" } }, + "node_modules/@types/xml2js": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.9.tgz", + "integrity": "sha512-CHiCKIihl1pychwR2RNX5mAYmJDACgFVCMT5OArMaO3erzwXVcBqPcusr+Vl8yeeXukxZqtF8mZioqX+mpjjdw==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/abab": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", @@ -3405,12 +3411,6 @@ "node": ">=0.4.0" } }, - "node_modules/adiff": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/adiff/-/adiff-0.2.13.tgz", - "integrity": "sha1-3D3TL5RNl/J366WM5SmXrf8fdyg=", - "dev": true - }, "node_modules/affine-hull": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/affine-hull/-/affine-hull-1.0.0.tgz", @@ -4449,6 +4449,19 @@ "fsevents": "~2.3.2" } }, + "node_modules/chokidar/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", @@ -4952,13 +4965,12 @@ } }, "node_modules/css-declaration-sorter/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -4976,17 +4988,6 @@ "node": ">=0.10.0" } }, - "node_modules/css-declaration-sorter/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/css-line-break": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-1.1.1.tgz", @@ -5227,13 +5228,12 @@ } }, "node_modules/cssnano-preset-default/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -5251,17 +5251,6 @@ "node": ">=0.10.0" } }, - "node_modules/cssnano-preset-default/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/cssnano-util-get-arguments": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", @@ -5290,13 +5279,12 @@ } }, "node_modules/cssnano-util-raw-cache/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -5314,17 +5302,6 @@ "node": ">=0.10.0" } }, - "node_modules/cssnano-util-raw-cache/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/cssnano-util-same-parent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", @@ -5334,13 +5311,12 @@ } }, "node_modules/cssnano/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -5358,17 +5334,6 @@ "node": ">=0.10.0" } }, - "node_modules/cssnano/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/csso": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", @@ -5917,15 +5882,6 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", @@ -6853,6 +6809,24 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -7065,22 +7039,6 @@ "assert-plus": "^1.0.0" } }, - "node_modules/git-json-merge": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/git-json-merge/-/git-json-merge-0.4.5.tgz", - "integrity": "sha512-akVUhyzRtkXGe5uAcw3AijF/253RA7tAPdfHtKLawYAhDjuyP+Ebr1YvZUv+7Jyr41g+IVRpKPBd2h+m6AHNqQ==", - "dev": true, - "dependencies": { - "detect-indent": "^6.0.0", - "xdiff": "^0.2.11" - }, - "bin": { - "git-json-merge": "bin/git-json-merge" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -7375,7 +7333,8 @@ "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true }, "node_modules/hsl-regex": { "version": "1.0.0", @@ -8908,14 +8867,6 @@ "file-saver": "^2.0.2" } }, - "node_modules/leaflet.markercluster": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.0.tgz", - "integrity": "sha512-Fvf/cq4o806mJL50n+fZW9+QALDDLPvt7vuAjlD2vfnxx3srMDs2vWINJze4nKYJYRY45OC6tM/669C3pLwMCA==", - "peerDependencies": { - "leaflet": "^1.3.1" - } - }, "node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -9139,18 +9090,6 @@ "node": ">=0.10.0" } }, - "node_modules/marked": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/marked/-/marked-2.0.3.tgz", - "integrity": "sha512-5otztIIcJfPc2qGTN8cVtOJEjNJZ0jwa46INMagrYfk0EvqtRuEHLsEe0LrFS0/q+ZRKT0+kXK7P2T1AN5lWRA==", - "dev": true, - "bin": { - "marked": "bin/marked" - }, - "engines": { - "node": ">= 8.16.2" - } - }, "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -9166,14 +9105,6 @@ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "engines": { - "node": ">= 0.10.0" - } - }, "node_modules/meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", @@ -9335,12 +9266,11 @@ } }, "node_modules/mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dependencies": { - "minimist": "0.0.8" + "minimist": "^1.2.5" }, "bin": { "mkdirp": "bin/cmd.js" @@ -9352,11 +9282,6 @@ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, - "node_modules/mkdirp/node_modules/minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, "node_modules/modern-normalize": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", @@ -9395,6 +9320,12 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "node_modules/nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "optional": true + }, "node_modules/nanocolors": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.1.6.tgz", @@ -9404,9 +9335,9 @@ } }, "node_modules/nanoid": { - "version": "3.1.25", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", - "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -9580,6 +9511,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -9591,6 +9523,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, "bin": { "semver": "bin/semver" } @@ -9620,84 +9553,6 @@ "node": ">=6" } }, - "node_modules/npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "bin": { - "npm-run-all": "bin/npm-run-all/index.js", - "run-p": "bin/run-p/index.js", - "run-s": "bin/run-s/index.js" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/npm-run-all/node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "engines": { - "node": ">=4" - } - }, "node_modules/npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -10090,6 +9945,11 @@ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" }, + "node_modules/papaparse": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.3.1.tgz", + "integrity": "sha512-Dbt2yjLJrCwH2sRqKFFJaN5XgIASO9YOFeFP8rIBRG2Ain8mqk5r1M6DkfvqEVozVcz3r3HaUGw253hA1nLIcA==" + }, "node_modules/parcel": { "version": "1.12.4", "resolved": "https://registry.npmjs.org/parcel/-/parcel-1.12.4.tgz", @@ -10314,13 +10174,12 @@ } }, "node_modules/parcel/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -10351,17 +10210,6 @@ "node": ">=0.10.0" } }, - "node_modules/parcel/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/parcel/node_modules/to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", @@ -10532,6 +10380,11 @@ "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz", "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=" }, + "node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, "node_modules/picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -10543,17 +10396,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -10638,13 +10480,12 @@ } }, "node_modules/postcss-calc/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -10662,17 +10503,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-calc/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-colormin": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", @@ -10689,13 +10519,12 @@ } }, "node_modules/postcss-colormin/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -10718,17 +10547,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-colormin/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-convert-values": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", @@ -10742,13 +10560,12 @@ } }, "node_modules/postcss-convert-values/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -10771,17 +10588,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-convert-values/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-discard-comments": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", @@ -10794,13 +10600,12 @@ } }, "node_modules/postcss-discard-comments/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -10818,17 +10623,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-discard-comments/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-discard-duplicates": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", @@ -10841,13 +10635,12 @@ } }, "node_modules/postcss-discard-duplicates/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -10865,17 +10658,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-discard-duplicates/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-discard-empty": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", @@ -10888,13 +10670,12 @@ } }, "node_modules/postcss-discard-empty/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -10912,17 +10693,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-discard-empty/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-discard-overridden": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", @@ -10935,13 +10705,12 @@ } }, "node_modules/postcss-discard-overridden/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -10959,17 +10728,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-discard-overridden/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-merge-longhand": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", @@ -10985,13 +10743,12 @@ } }, "node_modules/postcss-merge-longhand/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11014,17 +10771,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-merge-longhand/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-merge-rules": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", @@ -11042,13 +10788,12 @@ } }, "node_modules/postcss-merge-rules/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11079,17 +10824,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-merge-rules/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-minify-font-values": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", @@ -11103,13 +10837,12 @@ } }, "node_modules/postcss-minify-font-values/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11132,17 +10865,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-minify-font-values/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-minify-gradients": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", @@ -11158,13 +10880,12 @@ } }, "node_modules/postcss-minify-gradients/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11187,17 +10908,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-minify-gradients/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-minify-params": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", @@ -11215,13 +10925,12 @@ } }, "node_modules/postcss-minify-params/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11244,17 +10953,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-minify-params/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-minify-selectors": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", @@ -11270,13 +10968,12 @@ } }, "node_modules/postcss-minify-selectors/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11307,17 +11004,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-minify-selectors/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-modules-extract-imports": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", @@ -11449,13 +11135,12 @@ } }, "node_modules/postcss-normalize-charset/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11473,17 +11158,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-charset/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-normalize-display-values": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", @@ -11498,13 +11172,12 @@ } }, "node_modules/postcss-normalize-display-values/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11527,17 +11200,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-display-values/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-normalize-positions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", @@ -11553,13 +11215,12 @@ } }, "node_modules/postcss-normalize-positions/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11582,17 +11243,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-positions/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-normalize-repeat-style": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", @@ -11608,13 +11258,12 @@ } }, "node_modules/postcss-normalize-repeat-style/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11637,17 +11286,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-repeat-style/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-normalize-string": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", @@ -11662,13 +11300,12 @@ } }, "node_modules/postcss-normalize-string/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11691,17 +11328,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-string/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-normalize-timing-functions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", @@ -11716,13 +11342,12 @@ } }, "node_modules/postcss-normalize-timing-functions/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11745,17 +11370,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-timing-functions/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-normalize-unicode": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", @@ -11770,13 +11384,12 @@ } }, "node_modules/postcss-normalize-unicode/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11799,17 +11412,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-unicode/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-normalize-url": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", @@ -11825,13 +11427,12 @@ } }, "node_modules/postcss-normalize-url/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11854,17 +11455,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-url/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-normalize-whitespace": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", @@ -11878,13 +11468,12 @@ } }, "node_modules/postcss-normalize-whitespace/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11907,17 +11496,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-whitespace/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-ordered-values": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", @@ -11932,13 +11510,12 @@ } }, "node_modules/postcss-ordered-values/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -11961,17 +11538,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-ordered-values/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-reduce-initial": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", @@ -11987,13 +11553,12 @@ } }, "node_modules/postcss-reduce-initial/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -12011,17 +11576,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-reduce-initial/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-reduce-transforms": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", @@ -12037,13 +11591,12 @@ } }, "node_modules/postcss-reduce-transforms/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -12066,17 +11619,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-reduce-transforms/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-selector-parser": { "version": "6.0.6", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", @@ -12103,13 +11645,12 @@ } }, "node_modules/postcss-svgo/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -12132,17 +11673,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-svgo/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-unique-selectors": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", @@ -12157,13 +11687,12 @@ } }, "node_modules/postcss-unique-selectors/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -12181,17 +11710,6 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-unique-selectors/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-value-parser": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", @@ -13413,11 +12931,6 @@ "node": ">=0.10.0" } }, - "node_modules/shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, "node_modules/shelljs": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz", @@ -13455,9 +12968,9 @@ ] }, "node_modules/simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", "dev": true, "dependencies": { "decompress-response": "^4.2.0", @@ -13680,6 +13193,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -13688,12 +13202,14 @@ "node_modules/spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -13702,7 +13218,8 @@ "node_modules/spdx-license-ids": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true }, "node_modules/splaytree": { "version": "3.1.0", @@ -13986,22 +13503,6 @@ "node": ">=0.10.0" } }, - "node_modules/string.prototype.padend": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", - "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", @@ -14087,13 +13588,12 @@ } }, "node_modules/stylehacks/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -14124,17 +13624,6 @@ "node": ">=0.10.0" } }, - "node_modules/stylehacks/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/suncalc": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/suncalc/-/suncalc-1.8.0.tgz", @@ -15154,17 +14643,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/tslint/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/tslint/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -15891,13 +15369,12 @@ } }, "node_modules/uncss/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -15928,17 +15405,6 @@ "node": ">=0.10.0" } }, - "node_modules/uncss/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/underscore": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", @@ -16181,6 +15647,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -16485,18 +15952,6 @@ "async-limiter": "~1.0.0" } }, - "node_modules/xdiff": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/xdiff/-/xdiff-0.2.11.tgz", - "integrity": "sha1-cj1SPhtvJlojPK/HeGBiLqXS2Mg=", - "dev": true, - "dependencies": { - "adiff": "~0.2.4" - }, - "engines": { - "node": "*" - } - }, "node_modules/xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", @@ -19211,14 +18666,6 @@ "@types/leaflet": "*" } }, - "@types/leaflet.markercluster": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/@types/leaflet.markercluster/-/leaflet.markercluster-1.4.4.tgz", - "integrity": "sha512-BQAilNWlBpYl4+PrsJXLOh4vyv7KfWi5kh3Fclg5y4gEeNeXKqhS6y1zzBB4+wcTuVUnMWfm2G0MfqA4yA5A5A==", - "requires": { - "@types/leaflet": "*" - } - }, "@types/lz-string": { "version": "1.3.34", "resolved": "https://registry.npmjs.org/@types/lz-string/-/lz-string-1.3.34.tgz", @@ -19227,8 +18674,15 @@ "@types/node": { "version": "7.10.14", "resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.14.tgz", - "integrity": "sha512-29GS75BE8asnTno3yB6ubOJOO0FboExEqNJy4bpz0GSmW/8wPTNL4h9h63c6s1uTrOopCmJYe/4yJLh5r92ZUA==", - "dev": true + "integrity": "sha512-29GS75BE8asnTno3yB6ubOJOO0FboExEqNJy4bpz0GSmW/8wPTNL4h9h63c6s1uTrOopCmJYe/4yJLh5r92ZUA==" + }, + "@types/papaparse": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.3.1.tgz", + "integrity": "sha512-1lbngk9wty2kCyQB42LjqSa12SEop3t9wcEC7/xYr3ujTSTmv7HWKjKYXly0GkMfQ42PRb2lFPFEibDOiMXS0g==", + "requires": { + "@types/node": "*" + } }, "@types/parse-json": { "version": "4.0.0", @@ -19276,6 +18730,14 @@ "wikidata-sdk": "*" } }, + "@types/xml2js": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.9.tgz", + "integrity": "sha512-CHiCKIihl1pychwR2RNX5mAYmJDACgFVCMT5OArMaO3erzwXVcBqPcusr+Vl8yeeXukxZqtF8mZioqX+mpjjdw==", + "requires": { + "@types/node": "*" + } + }, "abab": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", @@ -19352,12 +18814,6 @@ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" }, - "adiff": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/adiff/-/adiff-0.2.13.tgz", - "integrity": "sha1-3D3TL5RNl/J366WM5SmXrf8fdyg=", - "dev": true - }, "affine-hull": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/affine-hull/-/affine-hull-1.0.0.tgz", @@ -20191,6 +19647,14 @@ "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" + }, + "dependencies": { + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + } } }, "chownr": { @@ -20616,27 +20080,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -20803,27 +20258,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -20865,27 +20311,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -20908,27 +20345,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -21355,12 +20783,6 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true - }, "detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", @@ -22107,6 +21529,16 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -22281,16 +21713,6 @@ "assert-plus": "^1.0.0" } }, - "git-json-merge": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/git-json-merge/-/git-json-merge-0.4.5.tgz", - "integrity": "sha512-akVUhyzRtkXGe5uAcw3AijF/253RA7tAPdfHtKLawYAhDjuyP+Ebr1YvZUv+7Jyr41g+IVRpKPBd2h+m6AHNqQ==", - "dev": true, - "requires": { - "detect-indent": "^6.0.0", - "xdiff": "^0.2.11" - } - }, "github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -22523,7 +21945,8 @@ "hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true }, "hsl-regex": { "version": "1.0.0", @@ -23679,12 +23102,6 @@ "file-saver": "^2.0.2" } }, - "leaflet.markercluster": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.0.tgz", - "integrity": "sha512-Fvf/cq4o806mJL50n+fZW9+QALDDLPvt7vuAjlD2vfnxx3srMDs2vWINJze4nKYJYRY45OC6tM/669C3pLwMCA==", - "requires": {} - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -23877,12 +23294,6 @@ "object-visit": "^1.0.0" } }, - "marked": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/marked/-/marked-2.0.3.tgz", - "integrity": "sha512-5otztIIcJfPc2qGTN8cVtOJEjNJZ0jwa46INMagrYfk0EvqtRuEHLsEe0LrFS0/q+ZRKT0+kXK7P2T1AN5lWRA==", - "dev": true - }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -23898,11 +23309,6 @@ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=" - }, "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", @@ -24024,18 +23430,11 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } + "minimist": "^1.2.5" } }, "mkdirp-classic": { @@ -24073,15 +23472,21 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "optional": true + }, "nanocolors": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.1.6.tgz", "integrity": "sha512-2pvTw6vYRaBLGir2xR7MxaJtyWkrn+C53EpW8yPotG+pdAwBvt0Xwk4VJ6VHLY0aLthVZPvDfm9TdZvrvAm5UQ==" }, "nanoid": { - "version": "3.1.25", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", - "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==" }, "nanomatch": { "version": "1.2.13", @@ -24244,6 +23649,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -24254,7 +23660,8 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, @@ -24274,63 +23681,6 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" }, - "npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "requires": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "dependencies": { - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - } - } - }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -24635,6 +23985,11 @@ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" }, + "papaparse": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.3.1.tgz", + "integrity": "sha512-Dbt2yjLJrCwH2sRqKFFJaN5XgIASO9YOFeFP8rIBRG2Ain8mqk5r1M6DkfvqEVozVcz3r3HaUGw253hA1nLIcA==" + }, "parcel": { "version": "1.12.4", "resolved": "https://registry.npmjs.org/parcel/-/parcel-1.12.4.tgz", @@ -24830,13 +24185,12 @@ } }, "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -24854,14 +24208,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - }, "to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", @@ -25000,16 +24346,16 @@ "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz", "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=" }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" }, - "pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==" - }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -25075,27 +24421,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25112,13 +24449,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25130,14 +24466,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25151,13 +24479,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25169,14 +24496,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25189,27 +24508,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25222,27 +24532,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25255,27 +24556,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25288,27 +24580,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25324,13 +24607,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25342,14 +24624,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25367,13 +24641,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-selector-parser": { @@ -25390,14 +24663,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25411,13 +24676,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25429,14 +24693,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25452,13 +24708,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25470,14 +24725,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25495,13 +24742,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25513,14 +24759,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25536,13 +24774,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-selector-parser": { @@ -25559,14 +24796,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25682,27 +24911,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25717,13 +24937,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25735,14 +24954,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25758,13 +24969,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25776,14 +24986,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25799,13 +25001,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25817,14 +25018,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25839,13 +25032,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25857,14 +25049,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25879,13 +25063,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25897,14 +25080,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25919,13 +25094,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25937,14 +25111,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25960,13 +25126,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -25978,14 +25143,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -25999,13 +25156,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -26017,14 +25173,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -26039,13 +25187,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -26057,14 +25204,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -26080,27 +25219,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -26116,13 +25246,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -26134,14 +25263,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -26165,13 +25286,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-value-parser": { @@ -26183,14 +25303,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -26205,27 +25317,18 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -27192,11 +26295,6 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, "shelljs": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz", @@ -27214,9 +26312,9 @@ "dev": true }, "simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", "dev": true, "requires": { "decompress-response": "^4.2.0", @@ -27408,6 +26506,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -27416,12 +26515,14 @@ "spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true }, "spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -27430,7 +26531,8 @@ "spdx-license-ids": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true }, "splaytree": { "version": "3.1.0", @@ -27655,16 +26757,6 @@ } } }, - "string.prototype.padend": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", - "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - } - }, "string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", @@ -27726,13 +26818,12 @@ }, "dependencies": { "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-selector-parser": { @@ -27749,14 +26840,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -28512,14 +27595,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -29153,13 +28228,12 @@ "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" }, "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "postcss-selector-parser": { @@ -29176,14 +28250,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -29387,6 +28453,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -29635,15 +28702,6 @@ "async-limiter": "~1.0.0" } }, - "xdiff": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/xdiff/-/xdiff-0.2.11.tgz", - "integrity": "sha1-cj1SPhtvJlojPK/HeGBiLqXS2Mg=", - "dev": true, - "requires": { - "adiff": "~0.2.4" - } - }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", diff --git a/package.json b/package.json index 759fe910da..dc17c552c7 100644 --- a/package.json +++ b/package.json @@ -7,12 +7,10 @@ "homepage": "https://mapcomplete.osm.be", "main": "index.js", "scripts": { - "increase-memory": "export NODE_OPTIONS=--max_old_space_size=8364", - "start": "npm run start:prepare && npm-run-all --parallel start:parallel:*", - "strt": "npm run start:prepare && npm run start:parallel:parcel", - "start:prepare": "ts-node scripts/generateLayerOverview.ts --no-fail && npm run increase-memory", - "start:parallel:parcel": "parcel serve *.html UI/** Logic/** assets/*.json assets/svg/* assets/generated/* assets/layers/*/*.svg assets/layers/*/*.jpg assets/layers/*/*.png assets/layers/*/*.css assets/tagRenderings/*.json assets/themes/*/*.svg assets/themes/*/*.css assets/themes/*/*.jpg assets/themes/*/*.png vendor/* vendor/*/*", - "start:parallel:tailwindcli": "tailwindcss -i index.css -o css/index-tailwind-output.css --watch", + "start": "npm run generate:layeroverview && npm run ", + "strt": "export NODE_OPTIONS=--max_old_space_size=8364 && parcel serve *.html UI/** Logic/** assets/*.json assets/svg/* assets/generated/* assets/layers/*/*.svg assets/layers/*/*.jpg assets/layers/*/*.png assets/layers/*/*.css assets/tagRenderings/*.json assets/themes/*/*.svg assets/themes/*/*.ttf assets/themes/*/*/*.ttf aassets/themes/*/*.otf assets/themes/*/*/*.otf ssets/themes/*/*.css assets/themes/*/*.jpg assets/themes/*/*.png vendor/* vendor/*/*", + "strttest": "export NODE_OPTIONS=--max_old_space_size=8364 && parcel serve test.html", + "watch:css": "tailwindcss -i index.css -o css/index-tailwind-output.css --watch", "generate:css": "tailwindcss -i index.css -o css/index-tailwind-output.css", "test": "ts-node test/TestAll.ts", "init": "npm ci && npm run generate && npm run generate:editor-layer-index && npm run generate:layouts && npm run clean", @@ -22,13 +20,14 @@ "generate:polygon-features": "ts-node scripts/downloadFile.ts https://raw.githubusercontent.com/tyrasd/osm-polygon-features/master/polygon-features.json assets/polygon-features.json", "generate:images": "ts-node scripts/generateIncludedImages.ts", "generate:translations": "ts-node scripts/generateTranslations.ts", - "watch:translations": "cd langs && ls | entr npm run generate:translations", + "watch:translations": "cd langs && ls | entr -c npm run generate:translations", "reset:translations": "ts-node scripts/generateTranslations.ts --ignore-weblate", "generate:layouts": "ts-node scripts/generateLayouts.ts", "generate:docs": "ts-node scripts/generateDocs.ts && ts-node scripts/generateTaginfoProjectFiles.ts", "generate:cache:speelplekken:mini": "ts-node scripts/generateCache.ts speelplekken 14 ../MapComplete-data/speelplekken_cache_mini/ 51.181710380278176 4.423413276672363 51.193007664772495 4.444141387939452", "generate:cache:speelplekken": "npm run generate:layeroverview && ts-node scripts/generateCache.ts speelplekken 14 ../MapComplete-data/speelplekken_cache/ 51.20 4.35 51.09 4.56", "generate:cache:natuurpunt": "npm run generate:layeroverview && ts-node scripts/generateCache.ts natuurpunt 12 ../MapComplete-data/natuurpunt_cache/ 50.40 2.1 51.54 6.4 --generate-point-overview nature_reserve,visitor_information_centre", + "generate:cache:natuurpunt:mini": "ts-node scripts/generateCache.ts natuurpunt 12 ../../git/MapComplete-data/natuurpunt_cache_mini/ 51.00792239979105 4.497699737548828 51.0353492224462554 4.539070129394531 --generate-point-overview nature_reserve,visitor_information_centre", "generate:layeroverview": "ts-node scripts/generateLayerOverview.ts --no-fail", "generate:licenses": "ts-node scripts/generateLicenseInfo.ts --no-fail", "query:licenses": "ts-node scripts/generateLicenseInfo.ts --query", @@ -36,15 +35,14 @@ "generate:contributor-list": "git log --pretty='%aN' | sort | uniq -c | sort -hr | sed 's/ *\\([0-9]*\\) \\(.*\\)$/{\"contributor\":\"\\2\", \"commits\":\\1}/' | tr '\\n' ',' | sed 's/^/{\"contributors\":[/' | sed 's/,$/]}/' | jq > assets/contributors.json", "generate:schemas": "ts2json-schema -p Models/ThemeConfig/Json/ -o Docs/Schemas/ -t tsconfig.json -R . -m \".*ConfigJson\" && ts-node scripts/fixSchemas.ts ", "optimize-images": "cd assets/generated/ && find -name '*.png' -exec optipng '{}' \\; && echo 'PNGs are optimized'", - "reset:layeroverview": "echo {\\\"layers\\\":[], \\\"themes\\\":[]} > ./assets/generated/known_layers_and_themes.json", + "reset:layeroverview": "echo {\\\"layers\\\":[], \\\"themes\\\":[]} > ./assets/generated/known_layers_and_themes.json && echo {\\\"layers\\\": []} > ./assets/generated/known_layers.json", "generate": "mkdir -p ./assets/generated && npm run reset:layeroverview && npm run generate:images && npm run generate:charging-stations && npm run generate:translations && npm run generate:licenses && npm run generate:layeroverview", "generate:charging-stations": "cd ./assets/layers/charging_station && ts-node csvToJson.ts && cd -", "prepare-deploy": "./scripts/build.sh", "gittag": "ts-node scripts/printVersion.ts | bash", "lint": "tslint --project . -c tslint.json '**.ts' ", - "clean": "rm -rf .cache/ && (find *.html | grep -v \"\\(404\\|index\\|land\\|test\\|preferences\\|customGenerator\\|professional\\|automaton\\|theme\\).html\" | xargs rm) && (ls | grep \"^index_[a-zA-Z_]\\+\\.ts$\" | xargs rm) && (ls | grep \".*.webmanifest$\" | xargs rm)", - "generate:dependency-graph": "node_modules/.bin/depcruise --exclude \"^node_modules\" --output-type dot Logic/State/MapState.ts > dependencies.dot && dot dependencies.dot -T svg -o dependencies.svg && rm dependencies.dot", - "bicycle_rental": "ts-node ./scripts/extractBikeRental.ts" + "clean": "rm -rf .cache/ && (find *.html | grep -v \"\\(404\\|index\\|land\\|test\\|preferences\\|customGenerator\\|professional\\|automaton\\|import_helper\\|import_viewer\\|theme\\).html\" | xargs rm) && (ls | grep \"^index_[a-zA-Z_]\\+\\.ts$\" | xargs rm) && (ls | grep \".*.webmanifest$\" | xargs rm)", + "generate:dependency-graph": "node_modules/.bin/depcruise --exclude \"^node_modules\" --output-type dot Logic/State/MapState.ts > dependencies.dot && dot dependencies.dot -T svg -o dependencies.svg && rm dependencies.dot" }, "keywords": [ "OpenStreetMap", @@ -62,10 +60,11 @@ "@types/jquery": "^3.5.5", "@types/leaflet-markercluster": "^1.0.3", "@types/leaflet-providers": "^1.2.0", - "@types/leaflet.markercluster": "^1.4.3", "@types/lz-string": "^1.3.34", + "@types/papaparse": "^5.3.1", "@types/prompt-sync": "^4.1.0", "@types/wikidata-sdk": "^6.1.0", + "@types/xml2js": "^0.4.9", "country-language": "^0.1.7", "email-validator": "^2.0.4", "escape-html": "^1.0.3", @@ -78,16 +77,15 @@ "leaflet-polylineoffset": "^1.1.1", "leaflet-providers": "^1.13.0", "leaflet-simple-map-screenshoter": "^0.4.4", - "leaflet.markercluster": "^1.4.1", "libphonenumber": "^0.0.9", "libphonenumber-js": "^1.7.55", "lz-string": "^1.4.4", "mangrove-reviews": "^0.1.3", "moment": "^2.29.0", - "npm-run-all": "^4.1.5", "opening_hours": "^3.6.0", "osm-auth": "^1.0.2", "osmtogeojson": "^3.0.0-beta.4", + "papaparse": "^5.3.1", "parcel": "^1.2.4", "prompt-sync": "^4.2.0", "svg-resizer": "github:vieron/svg-resizer", @@ -95,7 +93,8 @@ "togpx": "^0.5.4", "tslint": "^6.1.3", "wikibase-sdk": "^7.14.0", - "wikidata-sdk": "^7.14.0" + "wikidata-sdk": "^7.14.0", + "xml2js": "^0.4.23" }, "devDependencies": { "@babel/polyfill": "^7.10.4", @@ -103,8 +102,6 @@ "assert": "^2.0.0", "dependency-cruiser": "^10.4.0", "fs": "0.0.1-security", - "git-json-merge": "^0.4.5", - "marked": "^2.0.0", "read-file": "^0.2.0", "sharp": "^0.28.3", "ts-node": "^9.0.0", diff --git a/professional.html b/professional.html index 5fb01b054a..47f3cb281c 100644 --- a/professional.html +++ b/professional.html @@ -23,7 +23,7 @@ width: 100%; height: 100%; } - + p { margin: 0.75rem; margin-left: 0.2rem; diff --git a/scripts/ScriptUtils.ts b/scripts/ScriptUtils.ts index 817e32d6c2..91abecce45 100644 --- a/scripts/ScriptUtils.ts +++ b/scripts/ScriptUtils.ts @@ -4,10 +4,9 @@ import {Utils} from "../Utils"; import * as https from "https"; import {LayoutConfigJson} from "../Models/ThemeConfig/Json/LayoutConfigJson"; import {LayerConfigJson} from "../Models/ThemeConfig/Json/LayerConfigJson"; - +import xml2js from 'xml2js'; export default class ScriptUtils { - public static fixUtils() { Utils.externalDownloadFunction = ScriptUtils.DownloadJSON } @@ -46,7 +45,7 @@ export default class ScriptUtils { }) } - public static DownloadJSON(url, headers?: any): Promise { + private static DownloadJSON(url, headers?: any): Promise { return new Promise((resolve, reject) => { try { headers = headers ?? {} @@ -146,4 +145,18 @@ export default class ScriptUtils { return ScriptUtils.DownloadJSON(url) } + public static async ReadSvg(path: string): Promise{ + const root = await xml2js.parseStringPromise(readFileSync(path, "UTF8")) + return root.svg + } + + public static async ReadSvgSync(path: string, callback: ((svg: any) => void)): Promise{ + xml2js.parseString(readFileSync(path, "UTF8"),{async: false} , (err, root) => { + if(err){ + throw err + } + callback(root["svg"]); + }) + } + } diff --git a/scripts/build.sh b/scripts/build.sh index 809b996c03..a983fce246 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -25,6 +25,8 @@ cp -r assets/themes/ dist/assets/themes/ cp -r assets/svg/ dist/assets/svg/ cp assets/*.png dist/assets/ cp assets/*.svg dist/assets/ +cp assets/generated/*.png dist/assets/generated/ +cp assets/generated/*.svg dist/assets/generated/ SRC_MAPS="--no-source-maps" BRANCH=`git rev-parse --abbrev-ref HEAD` @@ -37,7 +39,11 @@ fi echo -e "\n\n Building non-theme pages" echo -e " ==========================\n\n" -parcel build --public-url "./" $SRC_MAPS "index.html" "404.html" "professional.html" "automaton.html" "land.html" "customGenerator.html" "theme.html" vendor +parcel build --public-url "./" $SRC_MAPS "index.html" "404.html" "professional.html" "automaton.html" "import_helper.html" "import_viewer.html" "land.html" "customGenerator.html" "theme.html" vendor +if [ $? -ne 0 ]; then + echo "ERROR - stopping the build" + exit 1 +fi echo -e "\n\n Building theme pages" echo -e " ======================\n\n" @@ -47,15 +53,9 @@ do echo -e "\n\n $theme" echo -e " ------------ \n\n" # Builds the necessary files for just one theme, e.g. 'bookcases.html' + 'index_bookcases.ts' + supporting file - # npm run generate && node --max_old_space_size=12000 $(which parcel) build - parcel build --public-url './' $SRC_MAPS "$theme.html" + parcel build --public-url './' $SRC_MAPS "$theme.html" + if [ $? -ne 0 ]; then + echo "ERROR - stopping the build" + exit 1 + fi done -# At last: a workaround; parcel 1.x borks the link to social images; the public-URL (./) is setup incorrectly, so we fix those -cd dist -echo -e "Fixing social images..." -for file in $(ls *.html) -do - echo "Hi!" - # sed -i 's!!!' $file - # sed -i 's!!!' $file -done \ No newline at end of file diff --git a/scripts/downloadFile.ts b/scripts/downloadFile.ts index 6e191919fe..c119915e7a 100644 --- a/scripts/downloadFile.ts +++ b/scripts/downloadFile.ts @@ -9,4 +9,4 @@ const DESTINATION = args[1]; console.log(`Downloading ${FILE_URL} to ${DESTINATION}`) const file = fs.createWriteStream(DESTINATION); -http.get(FILE_URL, response=>response.pipe(file)); +http.get(FILE_URL, response => response.pipe(file)); diff --git a/scripts/extractBikeRental.ts b/scripts/extractBikeRental.ts index 7b6a8f4b88..4ae2f6d388 100644 --- a/scripts/extractBikeRental.ts +++ b/scripts/extractBikeRental.ts @@ -3,7 +3,7 @@ import {OH} from "../UI/OpeningHours/OpeningHours"; function extractValue(vs: { __value }[]) { - if(vs === undefined){ + if (vs === undefined) { return undefined } for (const v of vs) { @@ -16,33 +16,34 @@ function extractValue(vs: { __value }[]) { } -function extract_oh_block (days) : string{ +function extract_oh_block(days): string { const oh = [] for (const day of days.day) { - const abbr = day.name.substr(0,2) + const abbr = day.name.substr(0, 2) const block = day.time_block[0] - const from = block.time_from.substr(0,5) - const to = block.time_until.substr(0,5) + const from = block.time_from.substr(0, 5) + const to = block.time_until.substr(0, 5) const by_appointment = block.by_appointment ? " \"by appointment\"" : "" oh.push(`${abbr} ${from}-${to}${by_appointment}`) } return oh.join("; ") } -function extract_oh(opening_periods){ + +function extract_oh(opening_periods) { const rules = [] - if(opening_periods === undefined){ + if (opening_periods === undefined) { return undefined; } for (const openingPeriod of opening_periods.opening_period ?? []) { let rule = extract_oh_block(openingPeriod.days) - if(openingPeriod.name.toLowerCase().indexOf("schoolvakantie") >= 0){ - rule = "SH "+rule + if (openingPeriod.name.toLowerCase().indexOf("schoolvakantie") >= 0) { + rule = "SH " + rule } rules.push(rule) } - return OH.simplify( rules.join(";")) + return OH.simplify(rules.join(";")) } - + function rewrite(obj, key) { if (obj[key] === undefined) { return @@ -109,12 +110,12 @@ for (const item of data) { metadata["addr:housenumber"] = addr.number metadata["phone"] = item.contact_info["telephone"] ?? item.contact_info["mobile"] metadata["email"] = item.contact_info["email_address"] - + const links = item.links?.link?.map(l => l.url) ?? [] metadata["website"] = item.contact_info["website"] ?? links[0] delete item["links"] - + delete item.location_info delete item.contact_info delete item.promotional_info @@ -136,25 +137,25 @@ for (const item of data) { metadata.fee = "yes" metadata.charge = extractValue(item.price_info?.extra_information?.value) const methods = item.price_info?.payment_methods?.payment_method - if(methods !== undefined){ + if (methods !== undefined) { methods.map(v => extractValue(v.value)).forEach(method => { metadata["payment:" + method.toLowerCase()] = "yes" }) } delete item.price_info - }else if(item.price_info?.prices?.length === 0){ + } else if (item.price_info?.prices?.length === 0) { delete item.price_info } - - - try{ - - if(item.labels_info?.labels_own?.label[0]?.code === "Billenkar"){ - metadata.rental = "quadricycle" - delete item.labels_info - } - }catch(e){ - + + + try { + + if (item.labels_info?.labels_own?.label[0]?.code === "Billenkar") { + metadata.rental = "quadricycle" + delete item.labels_info + } + } catch (e) { + } delete item["publishing_channels"] @@ -166,22 +167,20 @@ for (const item of data) { } delete item.media - const time_info = item.time_info?.time_info_regular - if(time_info?.permantly_open === true){ + if (time_info?.permantly_open === true) { metadata.opening_hours = "24/7" - }else{ + } else { metadata.opening_hours = extract_oh(time_info?.opening_periods) } delete item.time_info - const properties = {} for (const key in metadata) { const v = metadata[key] - if(v === null || v === undefined || v === ""){ + if (v === null || v === undefined || v === "") { delete metadata[key] continue } diff --git a/scripts/fixSchemas.ts b/scripts/fixSchemas.ts index 7899ae0957..5bf91fcb6f 100644 --- a/scripts/fixSchemas.ts +++ b/scripts/fixSchemas.ts @@ -2,6 +2,129 @@ import ScriptUtils from "./ScriptUtils"; import {readFileSync, writeFileSync} from "fs"; +interface JsonSchema { + description?: string, + type?: string, + properties?: any, + items?: JsonSchema | JsonSchema[], + anyOf: JsonSchema[], + enum: JsonSchema[], + "$ref": string +} + +function WalkScheme( + onEach: (schemePart: JsonSchema) => T, + scheme: JsonSchema, + registerSchemePath = false, + fullScheme: JsonSchema & { definitions?: any } = undefined, + path: string[] = [], + isHandlingReference = [] +): { path: string[], t: T }[] { + const results: { path: string[], t: T } [] = [] + if (scheme === undefined) { + return [] + } + if (scheme["$ref"] !== undefined) { + const ref = scheme["$ref"] + const prefix = "#/definitions/" + if (!ref.startsWith(prefix)) { + throw "References is not relative!" + } + const definitionName = ref.substr(prefix.length) + if (isHandlingReference.indexOf(definitionName) >= 0) { + return; + } + const loadedScheme = fullScheme.definitions[definitionName] + return WalkScheme(onEach, loadedScheme, registerSchemePath, fullScheme, path, [...isHandlingReference, definitionName]); + } + + fullScheme = fullScheme ?? scheme + var t = onEach(scheme) + if (t !== undefined) { + results.push({ + path: [...path], + t + }) + } + + + function walk(v: JsonSchema, pathPart: string) { + if (v === undefined) { + return + } + if (registerSchemePath) { + path.push("" + pathPart) + } + results.push(...WalkScheme(onEach, v, registerSchemePath, fullScheme, path, isHandlingReference)) + if (registerSchemePath) { + path.pop() + } + } + + function walkEach(scheme: JsonSchema[], pathPart: string) { + if (scheme === undefined) { + return + } + if (registerSchemePath) { + path.push("" + pathPart) + } + scheme.forEach((v, i) => walk(v, "" + i)) + if (registerSchemePath) { + path.pop() + } + } + + + + { + walkEach(scheme.enum, "enum") + walkEach(scheme.anyOf, "anyOf") + if (scheme.items !== undefined) { + + if (scheme.items["forEach"] !== undefined) { + walkEach(scheme.items, "items") + } else { + walk(scheme.items, "items") + } + } + + if (registerSchemePath) { + path.push("properties") + } + for (const key in scheme.properties) { + const prop = scheme.properties[key] + path.push(key) + results.push(...WalkScheme(onEach, prop, registerSchemePath, fullScheme, path, isHandlingReference)) + path.pop() + } + if (registerSchemePath) { + path.pop() + } + } + + return results +} + +function extractMeta(typename: string, path: string) { + const themeSchema = JSON.parse(readFileSync("./Docs/Schemas/" + typename + ".schema.json", "UTF-8")) + const withTypes = WalkScheme((schemePart) => { + if (schemePart.description === undefined) { + return; + } + const typeHint = schemePart.description.split("\n") + .find(line => line.trim().toLocaleLowerCase().startsWith("type:")) + ?.substr("type:".length)?.trim() + const type = schemePart.type ?? schemePart.anyOf; + return {typeHint, type} + }, themeSchema) + + writeFileSync("./assets/" + path + ".json", JSON.stringify(withTypes.map(({ + path, + t + }) => ({path, ...t})), null, " ")) +} + + function main() { const allSchemas = ScriptUtils.readDirRecSync("./Docs/Schemas").filter(pth => pth.endsWith("JSC.ts")) @@ -20,9 +143,12 @@ function main() { def["additionalProperties"] = false } } - writeFileSync(dir + "/" + name + ".schema.json", JSON.stringify(parsed, null, " "), "UTF8") } + + extractMeta("LayoutConfigJson", "layoutconfigmeta") + extractMeta("TagRenderingConfigJson", "tagrenderingconfigmeta") + } main() diff --git a/scripts/fixTheme.ts b/scripts/fixTheme.ts deleted file mode 100644 index e5f65750ab..0000000000 --- a/scripts/fixTheme.ts +++ /dev/null @@ -1,83 +0,0 @@ -/* - * This script attempt to automatically fix some basic issues when a theme from the custom generator is loaded - */ -import {Utils} from "../Utils" -import {readFileSync, writeFileSync} from "fs"; -import SmallLicense from "../Models/smallLicense"; -import ScriptUtils from "./ScriptUtils"; -import AllImageProviders from "../Logic/ImageProviders/AllImageProviders"; -import {LayoutConfigJson} from "../Models/ThemeConfig/Json/LayoutConfigJson"; -import LayerConfig from "../Models/ThemeConfig/LayerConfig"; - -ScriptUtils.fixUtils() - -if (process.argv.length == 2) { - console.log("USAGE: ts-node scripts/fixTheme ") - throw "No path specified" -} - -const path = process.argv[2] -const dir = path.substring(0, path.lastIndexOf("/")) - -console.log("Fixing up ", path) - -const themeConfigJson: LayoutConfigJson = JSON.parse(readFileSync(path, "UTF8")) - -const licenses: SmallLicense[] = [] - -const replacements: { source: string, destination: string }[] = [] - -for (const layerConfigJson of themeConfigJson.layers) { - if (typeof (layerConfigJson) === "string") { - continue; - } - if (layerConfigJson["overpassTags"] !== undefined) { - const tags = layerConfigJson["overpassTags"]; - layerConfigJson["overpassTags"] = undefined; - layerConfigJson["source"] = {osmTags: tags} - } - // @ts-ignore - const layerConfig = new LayerConfig(layerConfigJson, "fix theme", true) - const images: string[] = Array.from(layerConfig.ExtractImages()) - const remoteImages = images.filter(img => img.startsWith("http")) - - for (const remoteImage of remoteImages) { - - - const filename = remoteImage.substring(remoteImage.lastIndexOf("/")) - ScriptUtils.DownloadFileTo(remoteImage, dir + "/" + filename) - - - const imgPath = remoteImage.substring(remoteImage.lastIndexOf("/") + 1) - - for (const attributionSrc of AllImageProviders.ImageAttributionSource) { - try { - attributionSrc.GetAttributionFor(remoteImage).addCallbackAndRun(license => { - console.log("Downloaded an attribution!") - licenses.push({ - path: imgPath, - license: license?.license ?? "", - authors: Utils.NoNull([license?.artist]), - sources: [remoteImage] - }) - }) - } catch (e) { - // Hush hush - } - } - - replacements.push({source: remoteImage, destination: `${dir}/${imgPath}`}) - } -} - -let fixedThemeJson = JSON.stringify(themeConfigJson, null, " ") -for (const replacement of replacements) { - fixedThemeJson = fixedThemeJson.replace(new RegExp(replacement.source, "g"), replacement.destination) -} - -writeFileSync(dir + "/generated.license_info.json", JSON.stringify(licenses, null, " ")) -writeFileSync(path + ".autofixed.json", fixedThemeJson) - -console.log(`IMPORTANT: - 1) Copy generated.license_info.json over into license_info.json and add the missing attributions and authors - 2) Verify ${path}.autofixed.json as theme, and rename it to ${path}`) \ No newline at end of file diff --git a/scripts/generateCache.ts b/scripts/generateCache.ts index 9980c1959a..36f3303ce8 100644 --- a/scripts/generateCache.ts +++ b/scripts/generateCache.ts @@ -103,7 +103,7 @@ async function downloadRaw(targetdir: string, r: TileRange, theme: LayoutConfig, try { - const json = await ScriptUtils.DownloadJSON(url) + const json = await Utils.downloadJson(url) if ((json.remark ?? "").startsWith("runtime error")) { console.error("Got a runtime error: ", json.remark) failed++; @@ -142,7 +142,7 @@ async function downloadExtraData(theme: LayoutConfig)/* : any[] */ { continue; } console.log("Downloading extra data: ", source) - await ScriptUtils.DownloadJSON(source).then(json => allFeatures.push(...json.features)) + await Utils.downloadJson(source).then(json => allFeatures.push(...json.features)) } return allFeatures; } @@ -225,7 +225,8 @@ function sliceToTiles(allFeatures: FeatureSource, theme: LayoutConfig, relations {}, { includeDates: false, - includeNonDates: true + includeNonDates: true, + evaluateStrict: true }); @@ -354,7 +355,7 @@ function sliceToTiles(allFeatures: FeatureSource, theme: LayoutConfig, relations } -async function main(args: string[]) { +export async function main(args: string[]) { console.log("Cache builder started with args ", args.join(", ")) if (args.length < 6) { @@ -376,9 +377,28 @@ async function main(args: string[]) { const lat1 = Number(args[5]) const lon1 = Number(args[6]) + if (isNaN(lat0)) { + throw "The first number (a latitude) is not a valid number" + } + + if (isNaN(lon0)) { + throw "The second number (a longitude) is not a valid number" + } + if (isNaN(lat1)) { + throw "The third number (a latitude) is not a valid number" + } + + if (isNaN(lon1)) { + throw "The fourth number (a longitude) is not a valid number" + } + const tileRange = Tiles.TileRangeBetween(zoomlevel, lat0, lon0, lat1, lon1) + if (isNaN(tileRange.total)) { + throw "Something has gone wrong: tilerange is NAN" + } + if (tileRange.total === 0) { console.log("Tilerange has zero tiles - this is probably an error") return @@ -438,10 +458,13 @@ async function main(args: string[]) { let args = [...process.argv] -args.splice(0, 2) -try { - main(args).catch(e => console.error("Error building cache:", e)); -} catch (e) { - console.error("Error building cache:", e) +if (!args[1]?.endsWith("test/TestAll.ts")) { + args.splice(0, 2) + try { + main(args) + .then(() => console.log("All done!")) + .catch(e => console.error("Error building cache:", e)); + } catch (e) { + console.error("Error building cache:", e) + } } -console.log("All done!") \ No newline at end of file diff --git a/scripts/generateDocs.ts b/scripts/generateDocs.ts index 9e6bee37d3..4d43d5c027 100644 --- a/scripts/generateDocs.ts +++ b/scripts/generateDocs.ts @@ -1,7 +1,7 @@ import Combine from "../UI/Base/Combine"; import BaseUIElement from "../UI/BaseUIElement"; import Translations from "../UI/i18n/Translations"; -import {writeFileSync} from "fs"; +import {existsSync, writeFileSync} from "fs"; import {AllKnownLayouts} from "../Customizations/AllKnownLayouts"; import TableOfContents from "../UI/Base/TableOfContents"; import SimpleMetaTaggers, {SimpleMetaTagger} from "../Logic/SimpleMetaTagger"; @@ -14,9 +14,22 @@ import Title from "../UI/Base/Title"; import Minimap from "../UI/Base/Minimap"; import {QueryParameters} from "../Logic/Web/QueryParameters"; import QueryParameterDocumentation from "../UI/QueryParameterDocumentation"; +import ScriptUtils from "./ScriptUtils"; +import List from "../UI/Base/List"; +import SharedTagRenderings from "../Customizations/SharedTagRenderings"; function WriteFile(filename, html: BaseUIElement, autogenSource: string[]): void { + + for (const source of autogenSource) { + if(source.indexOf("*") > 0){ + continue + } + if(!existsSync(source)){ + throw "While creating a documentation file and checking that the generation sources are properly linked: source file "+source+" was not found. Typo?" + } + } + if (html instanceof Combine) { const toc = new TableOfContents(html); const els = html.getElements(); @@ -29,11 +42,11 @@ function WriteFile(filename, html: BaseUIElement, autogenSource: string[]): void } let md = new Combine([Translations.W(html), - "\n\nThis document is autogenerated from " + autogenSource.join(", ") + "\n\nThis document is autogenerated from " + autogenSource.map(file => `[${file}](https://github.com/pietervdvn/MapComplete/blob/develop/${file})`).join(", ") ]).AsMarkdown() md.replace(/\n\n\n+/g, "\n\n"); - + writeFileSync(filename, md); } @@ -43,13 +56,62 @@ AllKnownLayouts.GenOverviewsForSingleLayer((layer, element) => { WriteFile("./Docs/Layers/" + layer.id + ".md", element, [`assets/layers/${layer.id}/${layer.id}.json`]) }) -WriteFile("./Docs/SpecialRenderings.md", SpecialVisualizations.HelpMessage(), ["UI/SpecialVisualisations.ts"]) +WriteFile("./Docs/SpecialRenderings.md", SpecialVisualizations.HelpMessage(), ["UI/SpecialVisualizations.ts"]) WriteFile("./Docs/CalculatedTags.md", new Combine([new Title("Metatags", 1), SimpleMetaTaggers.HelpText(), ExtraFunctions.HelpText()]).SetClass("flex-col"), - ["SimpleMetaTagger", "ExtraFunction"]) -WriteFile("./Docs/SpecialInputElements.md", ValidatedTextField.HelpText(), ["ValidatedTextField.ts"]); -WriteFile("./Docs/BuiltinLayers.md", AllKnownLayouts.GenLayerOverviewText(), ["AllKnownLayers.ts"]) + ["Logic/SimpleMetaTagger.ts", "Logic/ExtraFunctions.ts"]) +WriteFile("./Docs/SpecialInputElements.md", ValidatedTextField.HelpText(), ["UI/Input/ValidatedTextField.ts"]); +WriteFile("./Docs/BuiltinLayers.md", AllKnownLayouts.GenLayerOverviewText(), ["Customizations/AllKnownLayouts.ts"]) +WriteFile("./Docs/BuiltinQuestions.md", SharedTagRenderings.HelpText(), ["Customizations/SharedTagRenderings.ts","assets/tagRenderings/questions.json"]) +{ + // Generate the builtinIndex which shows interlayer dependencies + var layers = ScriptUtils.getLayerFiles().map(f => f.parsed) + var builtinsPerLayer= new Map(); + var layersUsingBuiltin = new Map(); + for (const layer of layers) { + if(layer.tagRenderings === undefined){ + continue + } + const usedBuiltins : string[] = [] + for (const tagRendering of layer.tagRenderings) { + if(typeof tagRendering === "string"){ + usedBuiltins.push(tagRendering) + continue + } + if(tagRendering["builtin"] !== undefined){ + const builtins = tagRendering["builtin"] + if(typeof builtins === "string"){ + usedBuiltins.push(builtins) + }else{ + usedBuiltins.push(...builtins) + } + } + } + for (const usedBuiltin of usedBuiltins) { + var using = layersUsingBuiltin.get(usedBuiltin) + if(using === undefined){ + layersUsingBuiltin.set(usedBuiltin, [layer.id]) + }else{ + using.push(layer.id) + } + } + + builtinsPerLayer.set(layer.id, usedBuiltins) + } + + const docs = new Combine([ + new Title("Index of builtin TagRendering" ,1), + new Title("Existing builtin tagrenderings", 2), + ... Array.from(layersUsingBuiltin.entries()).map(([builtin, usedByLayers]) => + new Combine([ + new Title(builtin), + new List(usedByLayers) + ]).SetClass("flex flex-col") + ) + ]).SetClass("flex flex-col") + WriteFile("./Docs/BuiltinIndex.md", docs, ["assets/layers/*.json"]) +} Minimap.createMiniMap = _ => { console.log("Not creating a minimap, it is disabled"); @@ -58,12 +120,12 @@ Minimap.createMiniMap = _ => { const dummyLayout = new LayoutConfig({ - language: ["en"], id: ">theme<", maintainer: "pietervdvn", version: "0", - title: "", + title: {en:""}, description: "A theme to generate docs with", + socialImage: "./assets/SocialImage.png", startLat: 0, startLon: 0, startZoom: 0, @@ -85,7 +147,7 @@ new FeatureSwitchState(dummyLayout) QueryParameters.GetQueryParameter("layer-<layer-id>", "true", "Wether or not the layer with id is shown") -WriteFile("./Docs/URL_Parameters.md", QueryParameterDocumentation.GenerateQueryParameterDocs(), ["QueryParameters"]) +WriteFile("./Docs/URL_Parameters.md", QueryParameterDocumentation.GenerateQueryParameterDocs(), ["Logic/Web/QueryParameters.ts", "UI/QueryParameterDocumentation.ts"]) console.log("Generated docs") diff --git a/scripts/generateIncludedImages.ts b/scripts/generateIncludedImages.ts index a716751de9..d0902ae158 100644 --- a/scripts/generateIncludedImages.ts +++ b/scripts/generateIncludedImages.ts @@ -32,10 +32,10 @@ function genImages(dryrun = false) { } let rawName = name; - if(dryrun){ + if (dryrun) { rawName = "add"; } - + module += ` public static ${name} = "${svg}"\n` module += ` public static ${name}_img = Img.AsImageElement(Svg.${rawName})\n` module += ` public static ${name}_svg() { return new Img(Svg.${rawName}, true);}\n` diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts index f0b63f47fb..4ee9aa1299 100644 --- a/scripts/generateLayerOverview.ts +++ b/scripts/generateLayerOverview.ts @@ -4,18 +4,15 @@ import * as licenses from "../assets/generated/license_info.json" import {LayoutConfigJson} from "../Models/ThemeConfig/Json/LayoutConfigJson"; import {LayerConfigJson} from "../Models/ThemeConfig/Json/LayerConfigJson"; import Constants from "../Models/Constants"; -import { - DesugaringContext, - PrepareLayer, - PrepareTheme, - ValidateLayer, - ValidateThemeAndLayers -} from "../Models/ThemeConfig/Conversion/LegacyJsonConvert"; +import {PrevalidateTheme, ValidateLayer, ValidateThemeAndLayers} from "../Models/ThemeConfig/Conversion/Validation"; import {Translation} from "../UI/i18n/Translation"; import {TagRenderingConfigJson} from "../Models/ThemeConfig/Json/TagRenderingConfigJson"; import * as questions from "../assets/tagRenderings/questions.json"; import * as icons from "../assets/tagRenderings/icons.json"; import PointRenderingConfigJson from "../Models/ThemeConfig/Json/PointRenderingConfigJson"; +import {PrepareLayer} from "../Models/ThemeConfig/Conversion/PrepareLayer"; +import {PrepareTheme} from "../Models/ThemeConfig/Conversion/PrepareTheme"; +import {DesugaringContext} from "../Models/ThemeConfig/Conversion/Conversion"; // This scripts scans 'assets/layers/*.json' for layer definition files and 'assets/themes/*.json' for theme definition files. // It spits out an overview of those to be used to load them @@ -72,10 +69,16 @@ class LayerOverviewUtils { const dict = new Map(); for (const key in questions["default"]) { + if (key === "id") { + continue + } questions[key].id = key; dict.set(key, questions[key]) } for (const key in icons["default"]) { + if (key === "id") { + continue + } if (typeof icons[key] !== "object") { continue } @@ -84,12 +87,37 @@ class LayerOverviewUtils { } dict.forEach((value, key) => { + if (key === "id") { + return + } value.id = value.id ?? key; }) return dict; } + checkAllSvgs() { + const allSvgs = ScriptUtils.readDirRecSync("./assets") + .filter(path => path.endsWith(".svg")) + .filter(path => !path.startsWith("./assets/generated")) + let errCount = 0; + for (const path of allSvgs) { + const contents = readFileSync(path, "UTF8") + if (contents.indexOf("data:image/png;") < 0) { + continue; + } + console.warn("The SVG at " + path + " is a fake SVG: it contains PNG data!") + errCount++; + if (path.startsWith("./assets/svg")) { + throw "A core SVG is actually a PNG. Don't do this!" + } + } + if (errCount > 0) { + throw `There are ${errCount} fake svgs` + } + } + + main(_: string[]) { const licensePaths = new Set() @@ -105,7 +133,7 @@ class LayerOverviewUtils { "themes": Array.from(sharedThemes.values()) })) - writeFileSync("./assets/generated/known_layers.json", JSON.stringify(Array.from(sharedLayers.values()))) + writeFileSync("./assets/generated/known_layers.json", JSON.stringify({layers: Array.from(sharedLayers.values())})) { @@ -120,8 +148,9 @@ class LayerOverviewUtils { const rendering = (protolayer.mapRendering[0]) rendering.icon["mappings"] = iconsPerTheme writeFileSync('./assets/themes/mapcomplete-changes/mapcomplete-changes.json', JSON.stringify(proto, null, " ")) - } + + this.checkAllSvgs() } private buildLayerIndex(knownImagePaths: Set): Map { @@ -132,16 +161,16 @@ class LayerOverviewUtils { const sharedTagRenderings = this.getSharedTagRenderings(); const layerFiles = ScriptUtils.getLayerFiles(); const sharedLayers = new Map() - const prepLayer = new PrepareLayer(); const state: DesugaringContext = { tagRenderings: sharedTagRenderings, sharedLayers } + const prepLayer = new PrepareLayer(state); for (const sharedLayerJson of layerFiles) { const context = "While building builtin layer " + sharedLayerJson.path - const fixed = prepLayer.convertStrict(state, sharedLayerJson.parsed, context) + const fixed = prepLayer.convertStrict(sharedLayerJson.parsed, context) const validator = new ValidateLayer(knownImagePaths, sharedLayerJson.path, true); - validator.convertStrict(state, fixed, context) + validator.convertStrict(fixed, context) if (sharedLayers.has(fixed.id)) { throw "There are multiple layers with the id " + fixed.id @@ -168,10 +197,11 @@ class LayerOverviewUtils { let themeFile = themeInfo.parsed const themePath = themeInfo.path - themeFile = new PrepareTheme().convertStrict(convertState, themeFile, themePath) + new PrevalidateTheme().convertStrict(themeFile, themePath) + themeFile = new PrepareTheme(convertState).convertStrict(themeFile, themePath) new ValidateThemeAndLayers(knownImagePaths, themePath, true) - .convertStrict(convertState, themeFile, themePath) + .convertStrict(themeFile, themePath) this.writeTheme(themeFile) fixed.set(themeFile.id, themeFile) diff --git a/scripts/generateLayouts.ts b/scripts/generateLayouts.ts index 3922e24420..f315653265 100644 --- a/scripts/generateLayouts.ts +++ b/scripts/generateLayouts.ts @@ -6,6 +6,8 @@ import Constants from "../Models/Constants"; import * as all_known_layouts from "../assets/generated/known_layers_and_themes.json" import {LayoutConfigJson} from "../Models/ThemeConfig/Json/LayoutConfigJson"; import LayoutConfig from "../Models/ThemeConfig/LayoutConfig"; +import xml2js from 'xml2js'; +import ScriptUtils from "./ScriptUtils"; const sharp = require('sharp'); const template = readFileSync("theme.html", "utf8"); @@ -16,9 +18,7 @@ function enc(str: string): string { return encodeURIComponent(str.toLowerCase()); } -const alreadyWritten = [] - -async function createIcon(iconPath: string, size: number) { +async function createIcon(iconPath: string, size: number, alreadyWritten: string[]) { let name = iconPath.split(".").slice(0, -1).join("."); if (name.startsWith("./")) { name = name.substr(2) @@ -35,7 +35,7 @@ async function createIcon(iconPath: string, size: number) { readFileSync(newname); return newname; // File already exists - nothing to do } catch (e) { - // Errors are normal here if this file exists + // Errors are normal here if this file does not exists } try { @@ -51,7 +51,7 @@ async function createIcon(iconPath: string, size: number) { return newname; } -async function createManifest(layout: LayoutConfig) { +async function createManifest(layout: LayoutConfig, alreadyWritten: string[]) { const name = layout.id; Translation.forcedLanguage = "en" @@ -60,8 +60,20 @@ async function createManifest(layout: LayoutConfig) { let icon = layout.icon; if (icon.endsWith(".svg") || icon.startsWith("`) + const whiteBgPath = `./assets/generated/generated_theme_${layout.id}_white_background${icon.sizes.substr(icon.sizes.indexOf("x")+ 1)}.png` + if(!existsSync(whiteBgPath)){ + continue + } + apple_icons.push(``) } let themeSpecific = [ @@ -164,9 +181,12 @@ async function createLandingPage(layout: LayoutConfig, manifest) { ...apple_icons ].join("\n") + const loadingText = Translations.t.general.loadingTheme.Subs({theme: ogTitle}); let output = template - .replace("Loading MapComplete, hang on...", `Loading MapComplete theme ${ogTitle}...`) + .replace("Loading MapComplete, hang on...", loadingText.textFor(targetLanguage)) + .replace("Powered by OpenStreetMap", Translations.t.general.poweredByOsm.textFor(targetLanguage)) .replace(/.*/s, themeSpecific) + .replace(/.*/s, layout.shortDescription.textFor(targetLanguage)) .replace("", ``); try { @@ -180,64 +200,82 @@ async function createLandingPage(layout: LayoutConfig, manifest) { return output; } -async function createIndexFor(theme: LayoutConfig){ - const filename = "index_"+theme.id+".ts" +async function createIndexFor(theme: LayoutConfig) { + const filename = "index_" + theme.id + ".ts" writeFileSync(filename, `import * as themeConfig from "./assets/generated/themes/${theme.id}.json"\n`) appendFileSync(filename, codeTemplate) } -const generatedDir = "./assets/generated"; -if (!existsSync(generatedDir)) { - mkdirSync(generatedDir) -} - -const blacklist = ["", "test", ".", "..", "manifest", "index", "land", "preferences", "account", "openstreetmap", "custom","theme"] -// @ts-ignore -const all: LayoutConfigJson[] = all_known_layouts.themes; -for (const i in all) { - const layoutConfigJson: LayoutConfigJson = all[i] - const layout = new LayoutConfig(layoutConfigJson, true, "generating layouts") - const layoutName = layout.id - if (blacklist.indexOf(layoutName.toLowerCase()) >= 0) { - console.log(`Skipping a layout with name${layoutName}, it is on the blacklist`); - continue; +function createDir(path){ + if (!existsSync(path)) { + mkdirSync(path) } - const err = err => { - if (err !== null) { - console.log("Could not write manifest for ", layoutName, " because ", err) - } - }; - createManifest(layout).then(manifObj => { - const manif = JSON.stringify(manifObj, undefined, 2); - const manifestLocation = encodeURIComponent(layout.id.toLowerCase()) + ".webmanifest"; - writeFile(manifestLocation, manif, err); - - // Create a landing page for the given theme - createLandingPage(layout, manifObj).then(landing => { - writeFile(enc(layout.id) + ".html", landing, err) - }); - createIndexFor(layout) - }).catch(e => console.log("Could not generate the manifest: ", e)) - } -createManifest(new LayoutConfig({ - icon: "assets/svg/mapcomplete_logo.svg", - id: "index", - language: "en", - layers: [], - maintainer: "Pieter Vander Vennet", - socialImage: "assets/SocialImage.png", - startLat: 0, - startLon: 0, - startZoom: 0, - title: {en: "MapComplete"}, - version: Constants.vNumber, - description: {en: "A thematic map viewer and editor based on OpenStreetMap"} -})).then(manifObj => { - const manif = JSON.stringify(manifObj, undefined, 2); - writeFileSync("index.manifest", manif) -}) +async function main(): Promise{ + + const alreadyWritten = [] + createDir("./assets/generated") + createDir("./assets/generated/layers") + createDir("./assets/generated/themes") -console.log("All done!"); \ No newline at end of file + const blacklist = ["", "test", ".", "..", "manifest", "index", "land", "preferences", "account", "openstreetmap", "custom", "theme"] + // @ts-ignore + const all: LayoutConfigJson[] = all_known_layouts.themes; + const args = process.argv + const theme = args[2] + if(theme !== undefined){ + console.warn("Only generating layout "+theme) + } + for (const i in all) { + const layoutConfigJson: LayoutConfigJson = all[i] + if(theme !== undefined && layoutConfigJson.id !== theme){ + continue + } + const layout = new LayoutConfig(layoutConfigJson, true, "generating layouts") + const layoutName = layout.id + if (blacklist.indexOf(layoutName.toLowerCase()) >= 0) { + console.log(`Skipping a layout with name${layoutName}, it is on the blacklist`); + continue; + } + const err = err => { + if (err !== null) { + console.log("Could not write manifest for ", layoutName, " because ", err) + } + }; + await createManifest(layout, alreadyWritten).then(manifObj => { + const manif = JSON.stringify(manifObj, undefined, 2); + const manifestLocation = encodeURIComponent(layout.id.toLowerCase()) + ".webmanifest"; + writeFile(manifestLocation, manif, err); + + // Create a landing page for the given theme + createLandingPage(layout, manifObj).then(landing => { + writeFile(enc(layout.id) + ".html", landing, err) + }); + createIndexFor(layout) + }).catch(e => console.log("Could not generate the manifest: ", e)) + + } + + await createManifest(new LayoutConfig({ + icon: "./assets/svg/mapcomplete_logo.svg", + id: "index", + layers: [], + maintainer: "Pieter Vander Vennet", + socialImage: "assets/SocialImage.png", + startLat: 0, + startLon: 0, + startZoom: 0, + title: {en: "MapComplete"}, + version: Constants.vNumber, + description: {en: "A thematic map viewer and editor based on OpenStreetMap"} + }), alreadyWritten).then(manifObj => { + const manif = JSON.stringify(manifObj, undefined, 2); + writeFileSync("index.manifest", manif) + }) +} + +main().then(() => { + console.log("All done!") +}) \ No newline at end of file diff --git a/scripts/generateLicenseInfo.ts b/scripts/generateLicenseInfo.ts index 3d0e4a6b69..bb8e77cea8 100644 --- a/scripts/generateLicenseInfo.ts +++ b/scripts/generateLicenseInfo.ts @@ -2,6 +2,10 @@ import {existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync} from "fs import SmallLicense from "../Models/smallLicense"; import ScriptUtils from "./ScriptUtils"; + +function validateLicenseInfo(l : SmallLicense){ + l.sources.map(s => new URL(s)) +} /** * Sweeps the entire 'assets/' (except assets/generated) directory for image files and any 'license_info.json'-file. * Checks that the license info is included for each of them and generates a compiles license_info.json for those @@ -11,8 +15,6 @@ function generateLicenseInfos(paths: string[]): SmallLicense[] { const licenses = [] for (const path of paths) { try { - - const parsed = JSON.parse(readFileSync(path, "UTF-8")) if (Array.isArray(parsed)) { const l: SmallLicense[] = parsed @@ -22,12 +24,6 @@ function generateLicenseInfos(paths: string[]): SmallLicense[] { licenses.push(...l) } else { const smallLicens: SmallLicense = parsed; - /*if(parsed.license === "CC-BY"){ - console.log("Rewriting ", path) - parsed.license === "CC-BY 4.0" - writeFileSync(path, JSON.stringify(smallLicens, null, " ")) - }*/ - smallLicens.path = path.substring(0, 1 + path.lastIndexOf("/")) + smallLicens.path licenses.push(smallLicens) } @@ -91,6 +87,29 @@ knownLicenses.set("na", { sources: [] }) +knownLicenses.set("tv", { + authors: ["Toerisme Vlaanderen"], + path: undefined, + license: "CC0", + sources: ["https://toerismevlaanderen.be/pinjepunt","https://mapcomplete.osm.be/toerisme_vlaanderenn"] +}) + +knownLicenses.set("tvf", { + authors: ["Jo De Baerdemaeker "], + path: undefined, + license: "All rights reserved", + sources: ["https://www.studiotype.be/fonts/flandersart"] +}) + + + +knownLicenses.set("twemoji", { + authors: ["Twemoji"], + path: undefined, + license: "CC-BY 4.0", + sources: ["https://github.com/twitter/twemoji"] +}) + function promptLicenseFor(path): SmallLicense { console.log("License abbreviations:") @@ -206,6 +225,7 @@ function createFullLicenseOverview(licensePaths) { for (const licensePath of licensePaths) { const licenses = JSON.parse(readFileSync(licensePath, "UTF-8")) for (const license of licenses) { + validateLicenseInfo(license) const dir = licensePath.substring(0, licensePath.length - "license_info.json".length) license.path = dir + license.path allLicenses.push(license) @@ -216,18 +236,29 @@ function createFullLicenseOverview(licensePaths) { } console.log("Checking and compiling license info") -const contents = ScriptUtils.readDirRecSync("./assets") - .filter(entry => entry.indexOf("./assets/generated") != 0) -const licensePaths = contents.filter(entry => entry.indexOf("license_info.json") >= 0) -const licenseInfos = generateLicenseInfos(licensePaths); if (!existsSync("./assets/generated")) { mkdirSync("./assets/generated") } -const artwork = contents.filter(pth => pth.match(/(.svg|.png|.jpg)$/i) != null) +let contents = ScriptUtils.readDirRecSync("./assets") + .filter(entry => entry.indexOf("./assets/generated") != 0) +let licensePaths = contents.filter(entry => entry.indexOf("license_info.json") >= 0) +let licenseInfos = generateLicenseInfos(licensePaths); + + + +const artwork = contents.filter(pth => pth.match(/(.svg|.png|.jpg|.ttf|.otf|.woff)$/i) != null) const missingLicenses = missingLicenseInfos(licenseInfos, artwork) +if (process.argv.indexOf("--prompt") >= 0 || process.argv.indexOf("--query") >= 0) { + queryMissingLicenses(missingLicenses) + contents = ScriptUtils.readDirRecSync("./assets") + .filter(entry => entry.indexOf("./assets/generated") != 0) + licensePaths = contents.filter(entry => entry.indexOf("license_info.json") >= 0) + licenseInfos = generateLicenseInfos(licensePaths); +} + const invalidLicenses = licenseInfos.filter(l => (l.license ?? "") === "").map(l => `License for artwork ${l.path} is empty string or undefined`) for (const licenseInfo of licenseInfos) { for (const source of licenseInfo.sources) { @@ -241,9 +272,7 @@ for (const licenseInfo of licenseInfos) { } } } -if (process.argv.indexOf("--prompt") >= 0 || process.argv.indexOf("--query") >= 0) { - queryMissingLicenses(missingLicenses) -} + if (missingLicenses.length > 0) { const msg = `There are ${missingLicenses.length} licenses missing and ${invalidLicenses.length} invalid licenses.` console.log(missingLicenses.concat(invalidLicenses).join("\n")) diff --git a/scripts/generateTileOverview.ts b/scripts/generateTileOverview.ts index d93aae640b..24445f2fa0 100644 --- a/scripts/generateTileOverview.ts +++ b/scripts/generateTileOverview.ts @@ -19,23 +19,23 @@ function main(args: string[]) { continue } const z = match[1] - if(zoomLevel === undefined){ + if (zoomLevel === undefined) { zoomLevel = z - }else if(zoomLevel !== z){ + } else if (zoomLevel !== z) { throw "Mixed zoomlevels detected" } - + const x = match[2] const y = match[3] - if(indices[x] === undefined){ + if (indices[x] === undefined) { indices[x] = [] } indices[x].push(Number(y)) } indices["zoom"] = zoomLevel; const match = files[0].match("\(.*\)_\([0-9]*\)_\([0-9]*\)_\([0-9]*\).geojson") - const path = match[1]+"_"+zoomLevel+"_overview.json" - writeFileSync( path, JSON.stringify(indices)) + const path = match[1] + "_" + zoomLevel + "_overview.json" + writeFileSync(path, JSON.stringify(indices)) console.log("Written overview for", files.length, " tiles at", path) } diff --git a/scripts/generateTranslations.ts b/scripts/generateTranslations.ts index ccb7dffa11..997b3fd2c6 100644 --- a/scripts/generateTranslations.ts +++ b/scripts/generateTranslations.ts @@ -9,6 +9,11 @@ class TranslationPart { contents: Map = new Map() + /** + * Add a leaf object + * @param language + * @param obj + */ add(language: string, obj: any) { for (const key in obj) { const v = obj[key] @@ -135,6 +140,94 @@ class TranslationPart { } return `{${parts.join(",")}}`; } + + /** + * Recursively adds a translation object, the inverse of 'toJson' + * @param language + * @param object + * @private + */ + private addTranslation(language: string, object: any){ + for (const key in object) { + const v = object[key] + let subpart = this.contents.get(key) + if(subpart === undefined){ + subpart = new TranslationPart() + this.contents.set(key, subpart) + } + if(typeof v === "string"){ + subpart.contents.set(language, v) + }else{ + subpart.addTranslation(language, v) + } + } + + } + + static fromDirectory(path): TranslationPart{ + const files = ScriptUtils.readDirRecSync(path, 1).filter(file => file.endsWith(".json")) + const rootTranslation = new TranslationPart() + for (const file of files) { + const content = JSON.parse(readFileSync(file, "UTF8")) + rootTranslation.addTranslation(file.substr(0, file.length - ".json".length), content) + } + return rootTranslation + } + + validateStrict(ctx?:string): void { + const errors = this.validate() + for (const err of errors) { + console.error("ERROR in "+(ctx ?? "")+ " " +err.path.join(".")+"\n "+err.error) + } + if(errors.length > 0){ + throw ctx+" has "+errors.length+" inconsistencies in the translation" + } + } + + /** + * Checks the leaf objects: special values must be present and identical in every leaf + */ + validate(path = []): {error: string, path: string[]} [] { + const errors : {error: string, path: string[]} []= [] + const neededSubparts = new Set() + let isLeaf : boolean = undefined + this.contents.forEach((value, key) => { + if(typeof value === "string"){ + if(isLeaf === undefined){ + isLeaf = true + }else if(!isLeaf){ + errors.push({error:"Mixed node: non-leaf node has translation strings", path: path}) + } + + let subparts: string[] = value.match(/{[^}]*}/g) + if(subparts === null){ + if(neededSubparts.size > 0){ + errors.push({error:"The translation for "+key+" does not have any subparts, but expected "+Array.from(neededSubparts).join(",")+" . The full translation is "+value, path: path}) + } + return + } + + subparts = subparts.map(p => p.split(/\(.*\)/)[0]) + + neededSubparts.forEach(part => { + if(subparts.indexOf(part) < 0){ + errors.push({error:"The translation for "+key+" does not have the required subpart "+part+". The full translation is "+value, path: path}) + } + }) + + for (const subpart of subparts) { + neededSubparts.add(subpart) + } + + }else{ + const recErrors = value.validate([...path, key]) + errors.push(...recErrors) + } + }) + + return errors + } + } /** @@ -181,6 +274,14 @@ function transformTranslation(obj: any, depth = 1) { } +/** + * Formats the specified file, helps to prevent merge conflicts + * */ +function formatFile(path) { + const contents = JSON.parse(readFileSync(path, "utf8")) + writeFileSync(path, JSON.stringify(contents, null, " ")) +} + /** * Generates the big compiledTranslations file */ @@ -194,7 +295,6 @@ function genTranslations() { fs.writeFileSync("./assets/generated/CompiledTranslations.ts", module); - } /** @@ -206,16 +306,19 @@ function compileTranslationsFromWeblate() { .filter(path => path.indexOf(".json") > 0) const allTranslations = new TranslationPart() - + + allTranslations.validateStrict() + + for (const translationFile of translations) { - try{ - - const contents = JSON.parse(readFileSync(translationFile, "utf-8")); - let language = translationFile.substring(translationFile.lastIndexOf("/") + 1) - language = language.substring(0, language.length - 5) - allTranslations.add(language, contents) - }catch (e) { - throw "Could not read file "+ translationFile+" due to "+e + try { + + const contents = JSON.parse(readFileSync(translationFile, "utf-8")); + let language = translationFile.substring(translationFile.lastIndexOf("/") + 1) + language = language.substring(0, language.length - 5) + allTranslations.add(language, contents) + } catch (e) { + throw "Could not read file " + translationFile + " due to " + e } } @@ -228,7 +331,7 @@ function compileTranslationsFromWeblate() { * @param objects * @param target */ -function generateTranslationsObjectFrom(objects: { path: string, parsed: { id: string } }[], target: string) { +function generateTranslationsObjectFrom(objects: { path: string, parsed: { id: string } }[], target: string): string[] { const tr = new TranslationPart(); for (const layerFile of objects) { @@ -257,6 +360,7 @@ function generateTranslationsObjectFrom(objects: { path: string, parsed: { id: s writeFileSync(`langs/${target}/${lang}.json`, json) } + return langs } /** @@ -378,15 +482,8 @@ function mergeThemeTranslations() { const config = themeFile.parsed; mergeLayerTranslation(config, themeFile.path, loadTranslationFilesFrom("themes")) - const oldLanguages = config.language; const allTranslations = new TranslationPart(); allTranslations.recursiveAdd(config, themeFile.path) - const newLanguages = allTranslations.knownLanguages() - const languageDiff = newLanguages.filter(l => oldLanguages.indexOf(l) < 0).join(", ") - if (languageDiff !== "") { - config.language = newLanguages; - console.log(" :hooray: Got a new language for theme", config.id, ":", languageDiff) - } writeFileSync(themeFile.path, JSON.stringify(config, null, " ")) } } @@ -405,14 +502,24 @@ if (!themeOverwritesWeblate) { } else { console.log("Ignore weblate") } -generateTranslationsObjectFrom(ScriptUtils.getLayerFiles(), "layers") -generateTranslationsObjectFrom(ScriptUtils.getThemeFiles(), "themes") +const l1 = generateTranslationsObjectFrom(ScriptUtils.getLayerFiles(), "layers") +const l2 = generateTranslationsObjectFrom(ScriptUtils.getThemeFiles().filter(th => th.parsed.mustHaveLanguage === undefined), "themes") +const l3 = generateTranslationsObjectFrom([{path: questionsPath, parsed: questionsParsed}], "shared-questions") -generateTranslationsObjectFrom([{path: questionsPath, parsed: questionsParsed}], "shared-questions") +const usedLanguages = Utils.Dedup(l1.concat(l2).concat(l3)).filter(v => v !== "*") +usedLanguages.sort() +fs.writeFileSync("./assets/generated/used_languages.json", JSON.stringify({languages: usedLanguages})) if (!themeOverwritesWeblate) { // Generates the core translations compileTranslationsFromWeblate(); } -genTranslations() \ No newline at end of file +genTranslations() +formatFile("./langs/en.json") + +// SOme validation +TranslationPart.fromDirectory("./langs").validateStrict("./langs") +TranslationPart.fromDirectory("./langs/layers").validateStrict("layers") +TranslationPart.fromDirectory("./langs/themes").validateStrict("themes") +TranslationPart.fromDirectory("./langs/shared-questions").validateStrict("shared-questions") diff --git a/scripts/generateWikiPage.ts b/scripts/generateWikiPage.ts index 7a587d7f9e..1c06c0f531 100644 --- a/scripts/generateWikiPage.ts +++ b/scripts/generateWikiPage.ts @@ -2,17 +2,17 @@ import {writeFile} from "fs"; import Translations from "../UI/i18n/Translations"; import * as themeOverview from "../assets/generated/theme_overview.json" -function generateWikiEntry(layout: {hideFromOverview: boolean, id: string, shortDescription: any}) { +function generateWikiEntry(layout: { hideFromOverview: boolean, id: string, shortDescription: any }) { if (layout.hideFromOverview) { return ""; } - + const languagesInDescr = [] for (const shortDescriptionKey in layout.shortDescription) { languagesInDescr.push(shortDescriptionKey) } - - const languages = languagesInDescr .map(ln => `{{#language:${ln}|en}}`).join(", ") + + const languages = languagesInDescr.map(ln => `{{#language:${ln}|en}}`).join(", ") let auth = "Yes"; return `{{service_item |name= [https://mapcomplete.osm.be/${layout.id} ${layout.id}] diff --git a/scripts/lint.ts b/scripts/lint.ts index 7280fb693a..460eb8c874 100644 --- a/scripts/lint.ts +++ b/scripts/lint.ts @@ -1,6 +1,6 @@ import ScriptUtils from "./ScriptUtils"; import {writeFileSync} from "fs"; -import {FixLegacyTheme, UpdateLegacyLayer} from "../Models/ThemeConfig/LegacyJsonConvert"; +import {FixLegacyTheme, UpdateLegacyLayer} from "../Models/ThemeConfig/Conversion/LegacyJsonConvert"; /* * This script reads all theme and layer files and reformats them inplace @@ -10,8 +10,7 @@ import {FixLegacyTheme, UpdateLegacyLayer} from "../Models/ThemeConfig/LegacyJso const layerFiles = ScriptUtils.getLayerFiles(); for (const layerFile of layerFiles) { try { - const state : any = undefined; // FIXME - const fixed = new UpdateLegacyLayer().convertStrict(state,layerFile.parsed, "While linting "+layerFile.path); + const fixed = new UpdateLegacyLayer().convertStrict(layerFile.parsed, "While linting " + layerFile.path); writeFileSync(layerFile.path, JSON.stringify(fixed, null, " ")) } catch (e) { console.error("COULD NOT LINT LAYER" + layerFile.path + ":\n\t" + e) @@ -21,8 +20,7 @@ for (const layerFile of layerFiles) { const themeFiles = ScriptUtils.getThemeFiles() for (const themeFile of themeFiles) { try { - const state : any = undefined; // FIXME - const fixed = new FixLegacyTheme().convertStrict(state,themeFile.parsed, "While linting "+themeFile.path); + const fixed = new FixLegacyTheme().convertStrict(themeFile.parsed, "While linting " + themeFile.path); writeFileSync(themeFile.path, JSON.stringify(fixed, null, " ")) } catch (e) { console.error("COULD NOT LINT THEME" + themeFile.path + ":\n\t" + e) diff --git a/scripts/perProperty.ts b/scripts/perProperty.ts index 9531504413..9349499d15 100644 --- a/scripts/perProperty.ts +++ b/scripts/perProperty.ts @@ -1,38 +1,38 @@ import * as fs from "fs"; -function main(args){ - if(args.length < 2){ +function main(args) { + if (args.length < 2) { console.log("Given a single geojson file, generates the partitions for every found property") console.log("USAGE: perProperty `file.geojson` `property-key`") return } const path = args[0] const key = args[1] - - const data= JSON.parse(fs.readFileSync(path, "UTF8")) + + const data = JSON.parse(fs.readFileSync(path, "UTF8")) const perProperty = new Map() - console.log("Partitioning",data.features.length, "features") + console.log("Partitioning", data.features.length, "features") for (const feature of data.features) { const v = feature.properties[key] - if(!perProperty.has(v)){ + if (!perProperty.has(v)) { console.log("Found a new category:", v) perProperty.set(v, []) } perProperty.get(v).push(feature) } - - const stripped = path.substr(0, path.length - ".geojson".length) + + const stripped = path.substr(0, path.length - ".geojson".length) perProperty.forEach((features, v) => { - - fs.writeFileSync(stripped+"."+v.replace(/[^a-zA-Z0-9_]/g, "_")+".geojson", + + fs.writeFileSync(stripped + "." + v.replace(/[^a-zA-Z0-9_]/g, "_") + ".geojson", JSON.stringify({ - type:"FeatureCollection", + type: "FeatureCollection", features })) }) - + } let args = [...process.argv] diff --git a/scripts/postal_code_tools/createRoutablePoint.ts b/scripts/postal_code_tools/createRoutablePoint.ts index 727030d31f..4c1fff40a8 100644 --- a/scripts/postal_code_tools/createRoutablePoint.ts +++ b/scripts/postal_code_tools/createRoutablePoint.ts @@ -5,28 +5,28 @@ import {Utils} from "../../Utils"; async function main(args: string[]) { - +ScriptUtils.fixUtils() const pointCandidates = JSON.parse(readFileSync(args[0], "utf8")) const postcodes = JSON.parse(readFileSync(args[1], "utf8")) const output = args[2] ?? "centralCoordinates.csv" const perPostCode = new Map() - + const alreadyLoaded = new Set() - if(existsSync(output)){ - const lines = readFileSync(output, "UTF8").split("\n") + if (existsSync(output)) { + const lines = readFileSync(output, "UTF8").split("\n") lines.shift() lines.forEach(line => { - const postalCode = Number( line.split(",")[0]) + const postalCode = Number(line.split(",")[0]) alreadyLoaded.add(postalCode) }) - }else{ - writeFileSync(output,"postal_code,lon,lat\n","UTF-8") + } else { + writeFileSync(output, "postal_code,lon,lat\n", "UTF-8") } for (const boundary of postcodes.features) { const postcode = boundary.properties.nouveau_PO - if(alreadyLoaded.has(Number(postcode))){ + if (alreadyLoaded.has(Number(postcode))) { console.log("Skipping ", postcode, "as already loaded") continue } @@ -58,29 +58,29 @@ async function main(args: string[]) { const url = "https://staging.anyways.eu/routing-api/v1/routes?access_token=postal_code_script&turn_by_turn=false&format=geojson&language=en" - const depPoints :[number,number][] = Utils.NoNull( await Promise.all(candidates.map(async candidate => { - try{ + const depPoints: [number, number][] = Utils.NoNull(await Promise.all(candidates.map(async candidate => { + try { - const result = await ScriptUtils.DownloadJSON(url + "&loc=" + candidate.join("%2C") + "&loc=3.22000%2C51.21577&profile=car.short") + const result = await Utils.downloadJson(url + "&loc=" + candidate.join("%2C") + "&loc=3.22000%2C51.21577&profile=car.short") const depPoint = result.features.filter(f => f.geometry.type === "LineString")[0].geometry.coordinates[0] - return <[number,number]>[depPoint[0], depPoint[1]] // Drop elevation - }catch(e){ + return <[number, number]>[depPoint[0], depPoint[1]] // Drop elevation + } catch (e) { console.error("No result or could not calculate a route") } }))) - + const centers = boundaries.map(b => GeoOperations.centerpointCoordinates(b)) const center = GeoOperations.centerpointCoordinates({ - type:"Feature", - geometry:{ - type:"LineString", + type: "Feature", + geometry: { + type: "LineString", coordinates: centers } }) - + depPoints.sort((c0, c1) => GeoOperations.distanceBetween(c0, center) - GeoOperations.distanceBetween(c1, center)) - console.log("Sorted departure point candidates for ",postcode," are ", JSON.stringify(depPoints)) - appendFileSync(output,[postcode, ...depPoints[0]].join(", ")+"\n","UTF-8") + console.log("Sorted departure point candidates for ", postcode, " are ", JSON.stringify(depPoints)) + appendFileSync(output, [postcode, ...depPoints[0]].join(", ") + "\n", "UTF-8") } diff --git a/scripts/postal_code_tools/openaddressestogeojson.ts b/scripts/postal_code_tools/openaddressestogeojson.ts index ee87757c63..e3264a3863 100644 --- a/scripts/postal_code_tools/openaddressestogeojson.ts +++ b/scripts/postal_code_tools/openaddressestogeojson.ts @@ -29,9 +29,9 @@ async function main(args: string[]) { let i = 0; let failed = 0 - - let createdFiles : string [] = [] - if(!perPostalCode){ + + let createdFiles: string [] = [] + if (!perPostalCode) { fs.writeFileSync(outputFile, "") } // @ts-ignore @@ -63,21 +63,21 @@ async function main(args: string[]) { let targetFile = outputFile if (perPostalCode) { - if(parsed["postcode"] === ""){ + if (parsed["postcode"] === "") { continue } - if(isNaN(Number(parsed["postcode"]))){ + if (isNaN(Number(parsed["postcode"]))) { continue; } targetFile = outputFile + "-" + parsed["postcode"] + ".geojson" let isFirst = false - if(!existsSync(targetFile)){ + if (!existsSync(targetFile)) { writeFileSync(targetFile, '{ "type":"FeatureCollection", "features":[') createdFiles.push(targetFile) isFirst = true } - - if(!isFirst){ + + if (!isFirst) { fs.appendFileSync(targetFile, ",\n") } @@ -89,20 +89,20 @@ async function main(args: string[]) { coordinates: [lon, lat] } })) - - }else{ - - fs.appendFileSync(outputFile, JSON.stringify({ - type: "Feature", - properties: parsed, - geometry: { - type: "Point", - coordinates: [lon, lat] - } - }) + "\n") + } else { + + + fs.appendFileSync(outputFile, JSON.stringify({ + type: "Feature", + properties: parsed, + geometry: { + type: "Point", + coordinates: [lon, lat] + } + }) + "\n") } - + } @@ -112,7 +112,7 @@ async function main(args: string[]) { ScriptUtils.erasableLog("Closing ", createdFile, "and creating convex hull") fs.appendFileSync(createdFile, "]}") } - + console.log("Done! Converted ", i, "features (of which ", failed, "features don't have a coordinate)") } diff --git a/scripts/slice.ts b/scripts/slice.ts index 8fab5c52e8..9507befbf7 100644 --- a/scripts/slice.ts +++ b/scripts/slice.ts @@ -6,7 +6,7 @@ import ScriptUtils from "./ScriptUtils"; import {Utils} from "../Utils"; /** - * This script slices a big newline-delimeted geojson file into tiled geojson + * This script slices a big newline-delimeted geojson file into tiled geojson * It was used to convert the CRAB-data into geojson tiles */ @@ -117,7 +117,7 @@ async function main(args: string[]) { const keysToRemove = ["STRAATNMID", "GEMEENTE", "POSTCODE"] for (const f of allFeatures) { - if(f.properties === null){ + if (f.properties === null) { console.log("Got a feature without properties!", f) continue } @@ -126,10 +126,6 @@ async function main(args: string[]) { } delete f.bbox } - - //const knownKeys = Utils.Dedup([].concat(...allFeatures.map(f => Object.keys(f.properties)))) - //console.log("Kept keys: ", knownKeys) - TiledFeatureSource.createHierarchy( new StaticFeatureSource(allFeatures, false), { diff --git a/test.html b/test.html index bb618f4d0b..1ec543f931 100644 --- a/test.html +++ b/test.html @@ -25,6 +25,5 @@ - diff --git a/test.ts b/test.ts index 7b98702cdf..fdd7f691e8 100644 --- a/test.ts +++ b/test.ts @@ -1,6 +1,33 @@ +import Combine from "./UI/Base/Combine"; import ValidatedTextField from "./UI/Input/ValidatedTextField"; +import Title from "./UI/Base/Title"; +import {FixedUiElement} from "./UI/Base/FixedUiElement"; import {VariableUiElement} from "./UI/Base/VariableUIElement"; +import {UIEventSource} from "./Logic/UIEventSource"; +import {Translation} from "./UI/i18n/Translation"; + +new Combine( + ValidatedTextField.AvailableTypes().map(key => { + let inp; + const feedback = new UIEventSource(undefined) + try { + inp = ValidatedTextField.ForType(key).ConstructInputElement({ + feedback, + country: () => "be", + + }); + } catch (e) { + console.error(e) + inp = new FixedUiElement(e).SetClass("alert") + } + + return new Combine([ + new Title(key), + inp, + new VariableUiElement(inp.GetValue()), + new VariableUiElement(feedback.map(v => v?.SetClass("alert"))) + ]); + } + ) +).AttachTo("maindiv") -const tf = ValidatedTextField.InputForType("url") -tf.AttachTo("maindiv") -new VariableUiElement(tf.GetValue()).AttachTo("extradiv") \ No newline at end of file diff --git a/test/Actors.spec.ts b/test/Actors.spec.ts index bf30297d49..50e6e03870 100644 --- a/test/Actors.spec.ts +++ b/test/Actors.spec.ts @@ -53,7 +53,7 @@ export default class ActorsSpec extends T { [ "download latest version", () => { - const state = new UserRelatedState(new LayoutConfig(bookcaseJson, true, "tests" )) + const state = new UserRelatedState(new LayoutConfig( bookcaseJson, true, "tests")) const feature = { "type": "Feature", "id": "node/5568693115", diff --git a/test/CodeQuality.spec.ts b/test/CodeQuality.spec.ts new file mode 100644 index 0000000000..9962892e12 --- /dev/null +++ b/test/CodeQuality.spec.ts @@ -0,0 +1,35 @@ +import T from "./TestHelper"; +import {exec} from "child_process"; + +export default class CodeQualitySpec extends T { + constructor() { + super([ + [ + "no constructor.name in compiled code", () => { + + const excludedDirs = [".git", "node_modules", "dist", ".cache", ".parcel-cache", "assets"] + + exec("grep \"constructor.name\" -r . " + excludedDirs.map(d => "--exclude-dir=" + d).join(" "), ((error, stdout, stderr) => { + if (error?.message?.startsWith("Command failed: grep")) { + return; + } + if (error !== null) { + throw error + + } + if (stderr !== "") { + throw stderr + } + + const found = stdout.split("\n").filter(s => s !== "").filter(s => s.startsWith("test/")); + if (found.length > 0) { + throw "Found a 'constructor.name' at " + found.join(", ") + ". This is not allowed, as minification does erase names." + } + + })) + + } + ] + ]); + } +} \ No newline at end of file diff --git a/test/CreateCache.spec.ts b/test/CreateCache.spec.ts new file mode 100644 index 0000000000..801d946e75 --- /dev/null +++ b/test/CreateCache.spec.ts @@ -0,0 +1,53 @@ +import T from "./TestHelper"; +import {main} from "../scripts/generateCache" +import {existsSync, mkdirSync, readFileSync, rmdirSync, unlinkSync} from "fs"; +import ScriptUtils from "../scripts/ScriptUtils"; +import {Utils} from "../Utils"; + +export default class CreateCacheSpec extends T { + + constructor() { + super([["Tests cache generation", + async () => { + if (existsSync("/tmp/np-cache")) { + ScriptUtils.readDirRecSync("/tmp/np-cache").forEach(p => unlinkSync(p)) + rmdirSync("/tmp/np-cache") + } + mkdirSync("/tmp/np-cache") + CreateCacheSpec.initDownloads() + await main([ + "natuurpunt", + "12", + "/tmp/np-cache", + "51.15423567022531", "3.250579833984375", "51.162821593316934", "3.262810707092285", + "--generate-point-overview", "nature_reserve,visitor_information_centre" + ]) + await ScriptUtils.sleep(100) + const birdhides = JSON.parse(readFileSync("/tmp/np-cache/natuurpunt_birdhide_12_2085_1368.geojson","UTF8")) + T.equals(5, birdhides.features.length, "Got "+birdhides.features.length+" birdhidse") + T.isTrue(birdhides.features.some(f => f.properties.id === "node/5158056232"), "Didn't find birdhide node/5158056232 ") + } + ] + ] + ); + } + + + private static initDownloads(){ + Utils.injectJsonDownloadForTests( + "https://overpass-api.de/api/interpreter?data=%5Bout%3Ajson%5D%5Btimeout%3A60%5D%5Bbbox%3A51.124212757826875%2C3.1640625%2C51.17934297928927%2C3.251953125%5D%3B(nwr%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%5B%22leisure%22%3D%22nature_reserve%22%5D%3Bnwr%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%5B%22protect_class%22!~%22%5E98%24%22%5D%5B%22boundary%22%3D%22protected_area%22%5D%3Bnwr%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%5B%22information%22%3D%22visitor_centre%22%5D%3Bnwr%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%5B%22information%22%3D%22office%22%5D%3Bnwr%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%5B%22route%22~%22%5E.*foot.*%24%22%5D%3Bnwr%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%5B%22route%22~%22%5E.*hiking.*%24%22%5D%3Bnwr%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%5B%22route%22~%22%5E.*bycicle.*%24%22%5D%3Bnwr%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%5B%22route%22~%22%5E.*horse.*%24%22%5D%3Bnwr%5B%22amenity%22%3D%22toilets%22%5D%3Bnwr%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%5B%22leisure%22%3D%22bird_hide%22%5D%3Bnwr%5B%22leisure%22%3D%22picnic_table%22%5D%3Bnwr%5B%22amenity%22%3D%22drinking_water%22%5D%5B%22access%22!~%22%5Epermissive%24%22%5D%5B%22access%22!~%22%5Eprivate%24%22%5D%3Bnwr%5B%22amenity%22%3D%22parking%22%5D%3Bnwr%5B%22information%22%3D%22board%22%5D%3Bnwr%5B%22amenity%22%3D%22bench%22%5D%3Bnwr%5B%22man_made%22%3D%22watermill%22%5D%3Bnwr%5B%22id%22%3D%22location_track%22%5D%3Bnwr%5B%22id%22%3D%22gps%22%5D%3Bnwr%5B%22user%3Alocation%22%3D%22yes%22%5D%3Bnwr%5B%22user%3Ahome%22%3D%22yes%22%5D%3B)%3Bout%20body%3Bout%20meta%3B%3E%3Bout%20skel%20qt%3B" , + {"version":0.6,"generator":"Overpass API 0.7.57 93a4d346","osm3s":{"timestamp_osm_base":"2022-02-13T23:54:06Z","copyright":"The data included in this document is from www.openstreetmap.org. The data is made available under ODbL."},"elements":[{"type":"node","id":518224450,"lat":51.1548065,"lon":3.1880118,"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"street_side"}},{"type":"node","id":665418924,"lat":51.1575547,"lon":3.20522,"tags":{"amenity":"parking"}},{"type":"node","id":1168727903,"lat":51.1299141,"lon":3.1776123,"tags":{"amenity":"drinking_water","mapillary":"https://www.mapillary.com/app/?lat=51.129853685131906&lng=3.177603984688602&z=17&pKey=SEyKzIMUeKssni1ZLVe-9A&focus=photo&dateTo=2017-04-02&dateFrom=2017-04-01&x=0.5168826751181941&y=0.6114877557873634&zoom=0"}},{"type":"node","id":1168728245,"lat":51.1290938,"lon":3.1767502,"tags":{"amenity":"drinking_water","mapillary":"https://www.mapillary.com/app/?lat=51.129104406662464&lng=3.176675795895676&z=17&pKey=vSP3D_hWv3XCBtH75GnYUQ&focus=photo&dateTo=2017-04-02&dateFrom=2017-04-01"}},{"type":"node","id":1725842653,"lat":51.153364,"lon":3.2352655,"tags":{"amenity":"bench"}},{"type":"node","id":1744641290,"lat":51.1389321,"lon":3.2385407,"tags":{"amenity":"bench","backrest":"yes","material":"wood"}},{"type":"node","id":1746891135,"lat":51.1598841,"lon":3.2361425,"tags":{"amenity":"bench"}},{"type":"node","id":1810326078,"lat":51.1550855,"lon":3.2349358,"tags":{"amenity":"bench"}},{"type":"node","id":1810326092,"lat":51.1552302,"lon":3.234968,"tags":{"amenity":"bench"}},{"type":"node","id":2325437742,"lat":51.1770052,"lon":3.1967794,"tags":{"board_type":"board","information":"board","name":"Tillegembos","tourism":"information"}},{"type":"node","id":2325437743,"lat":51.1787363,"lon":3.1949036,"tags":{"board_type":"board","information":"board","name":"Tillegembos","tourism":"information"}},{"type":"node","id":2325437813,"lat":51.1733102,"lon":3.1895672,"tags":{"amenity":"bench","backrest":"yes","material":"wood"}},{"type":"node","id":2325437839,"lat":51.1763436,"lon":3.1984985,"tags":{"amenity":"bench","backrest":"yes","material":"wood"}},{"type":"node","id":2325437848,"lat":51.1770966,"lon":3.1963507,"tags":{"amenity":"bench","backrest":"yes","material":"wood"}},{"type":"node","id":2325437862,"lat":51.1773439,"lon":3.1948779,"tags":{"amenity":"bench","backrest":"yes","material":"wood"}},{"type":"node","id":2325437867,"lat":51.1775994,"lon":3.1888088,"tags":{"amenity":"bench","backrest":"yes","material":"wood"}},{"type":"node","id":2325437873,"lat":51.1778384,"lon":3.1913802,"tags":{"amenity":"bench","backrest":"yes","material":"wood"}},{"type":"node","id":2732486257,"lat":51.129741,"lon":3.1907419,"tags":{"board_type":"nature","information":"board","name":"Doeveren","tourism":"information"}},{"type":"node","id":3774054068,"lat":51.1586662,"lon":3.2271102,"tags":{"amenity":"bench"}},{"type":"node","id":4769106605,"lat":51.138264,"lon":3.1798655,"tags":{"backrest":"yes","leisure":"picnic_table"}},{"type":"node","id":4912238707,"lat":51.1448634,"lon":3.2455986,"tags":{"access":"yes","amenity":"parking","fee":"no","name":"Oostkamp","parking":"Carpool"}},{"type":"node","id":5637212235,"lat":51.1305439,"lon":3.1866873,"tags":{"board_type":"nature","image":"https://i.imgur.com/HehOQL9.jpg","information":"board","name":"Welkom Doeveren","tourism":"information"}},{"type":"node","id":5637224573,"lat":51.1281084,"lon":3.1881726,"tags":{"board_type":"nature","information":"board","name":"Welkom Doeveren","tourism":"information"}},{"type":"node","id":5637230107,"lat":51.1280884,"lon":3.1889798,"tags":{"information":"board","tourism":"information"}},{"type":"node","id":5637743026,"lat":51.1295973,"lon":3.1751122,"tags":{"information":"board","name":"Doeveren Wandelroute","tourism":"information"}},{"type":"node","id":5716130103,"lat":51.1767183,"lon":3.1947867,"tags":{"amenity":"bench","backrest":"yes"}},{"type":"node","id":5745783208,"lat":51.1782581,"lon":3.2410111,"tags":{"amenity":"bench"}},{"type":"node","id":5745807545,"lat":51.1784037,"lon":3.2369439,"tags":{"amenity":"bench"}},{"type":"node","id":5745807551,"lat":51.1783278,"lon":3.236678,"tags":{"amenity":"bench"}},{"type":"node","id":6535241426,"lat":51.1693142,"lon":3.1673093,"tags":{"amenity":"bench"}},{"type":"node","id":6535241427,"lat":51.169265,"lon":3.1673159,"tags":{"amenity":"bench"}},{"type":"node","id":6535241428,"lat":51.1692199,"lon":3.1673224,"tags":{"amenity":"bench"}},{"type":"node","id":6535241430,"lat":51.1685726,"lon":3.1678225,"tags":{"bench":"yes","leisure":"picnic_table","material":"wood"}},{"type":"node","id":6536026827,"lat":51.1703142,"lon":3.1691109,"tags":{"leisure":"picnic_table"}},{"type":"node","id":6536026828,"lat":51.1702795,"lon":3.1691552,"tags":{"leisure":"picnic_table"}},{"type":"node","id":6712112244,"lat":51.1595064,"lon":3.2021482,"tags":{"leisure":"picnic_table"}},{"type":"node","id":7304050040,"lat":51.1560908,"lon":3.1748919,"tags":{"amenity":"bench"}},{"type":"node","id":7304050041,"lat":51.1560141,"lon":3.1749533,"tags":{"amenity":"bench"}},{"type":"node","id":7304050042,"lat":51.156032,"lon":3.1749379,"tags":{"amenity":"bench"}},{"type":"node","id":7439979218,"lat":51.1780402,"lon":3.2178666,"tags":{"amenity":"bench","backrest":"yes"}},{"type":"node","id":7439979219,"lat":51.1780508,"lon":3.2179033,"tags":{"amenity":"bench","backrest":"yes"}},{"type":"node","id":7529262982,"lat":51.1585566,"lon":3.1715528,"tags":{"board_type":"map","information":"board","tourism":"information"}},{"type":"node","id":7529262984,"lat":51.1585786,"lon":3.1715385,"tags":{"leisure":"picnic_table"}},{"type":"node","id":7554879668,"lat":51.1573713,"lon":3.2043731,"tags":{"access":"yes","amenity":"toilets","fee":"no","toilets:disposal":"flush","unisex":"yes","wheelchair":"yes"}},{"type":"node","id":7554879669,"lat":51.1594855,"lon":3.2021507,"tags":{"leisure":"picnic_table"}},{"type":"node","id":7556988723,"lat":51.1330234,"lon":3.1839944,"tags":{"amenity":"bench","material":"wood"}},{"type":"node","id":7575825326,"lat":51.1386553,"lon":3.1797358,"tags":{"amenity":"bench"}},{"type":"node","id":7575825327,"lat":51.1382456,"lon":3.1797422,"tags":{"information":"board","tourism":"information"}},{"type":"node","id":8109498958,"lat":51.1332267,"lon":3.2341272,"tags":{"amenity":"bench","backrest":"yes"}},{"type":"node","id":8109498959,"lat":51.1335011,"lon":3.2343954,"tags":{"leisure":"picnic_table"}},{"type":"node","id":8198894646,"lat":51.125688,"lon":3.1856217,"tags":{"image":"https://i.imgur.com/O5kX20u.jpg","information":"board","tourism":"information"}},{"type":"node","id":8199012519,"lat":51.1262245,"lon":3.1802429,"tags":{"image":"https://i.imgur.com/tomw9p5.jpg","information":"board","tourism":"information"}},{"type":"node","id":8199244816,"lat":51.1252874,"lon":3.1837622,"tags":{"amenity":"bench"}},{"type":"node","id":8199301617,"lat":51.1256827,"lon":3.1853543,"tags":{"amenity":"bench","backrest":"no"}},{"type":"node","id":8255488518,"lat":51.1406698,"lon":3.235178,"tags":{"amenity":"bench","backrest":"yes"}},{"type":"node","id":9316104741,"lat":51.1330984,"lon":3.2335257,"tags":{"information":"board","tourism":"information"}},{"type":"node","id":9442532340,"lat":51.1763651,"lon":3.1947952,"tags":{"amenity":"bench","backrest":"yes","image":"https://i.imgur.com/eZ0Loii.jpg"}},{"type":"way","id":15242261,"nodes":[150996092,150996093,6754312552,6754312553,6754312550,6754312551,150996094,150996095,150996097,150996098,6754312560,6754312559,6754312558,150996099,6754312557,150996100,6754312555,6754312556,150996101,6754312554,150996092],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":16514228,"nodes":[170464837,170464839,170464840,170464841,170464837],"tags":{"access":"yes","amenity":"parking","fee":"no","maxstay":"4 hours","parking":"surface"}},{"type":"way","id":76706071,"nodes":[903903386,1038557094,1038557233,1038557143,1038557075,903903387,1038557195,903903388,903903390,903904576,903903386],"tags":{"access":"permissive","amenity":"parking"}},{"type":"way","id":89601157,"nodes":[1038557083,1038557078,1038557104,1038557072,1038557108,1038557230,1038557227,1038557102,1038557137,1038575040,1038557191,1038557014,6960473080,1038557035,1038557012,1038557083],"tags":{"amenity":"parking"}},{"type":"way","id":89604999,"nodes":[1038583404,1038583491,1038583375,1038583483,1038583479,1038583398,1038583459,1038583456,1038583446,1038583441,1038583425,1038583501,1038583451,1038583463,1038583476,1038583404],"tags":{"access":"yes","amenity":"parking","capacity":"57","carpool":"yes","description":"carpoolparking","fee":"no","name":"Loppem","parking":"surface"}},{"type":"way","id":92035679,"nodes":[1069177920,6853179264,1069177925,1069177919,6853179269,6853179268,6853179267,6853179215,6853179213,6853179214,1069178133,1069177984,6853179230,6853179228,6853179229,6853179224,6853179225,6853179227,6853179226,6853179216,6853179220,6853179219,6853179218,6853179217,6853179223,6853179221,6853179222,1069177967,1069177852,6853179211,6853179212,6853179210,6853179327,6853179208,6853179209,6853179203,1069177976,6853179207,6853179206,6853179205,6853179204,6853179202,1069177849,6852012579,6852012578,6852012580,6852012577,6852012581,6852012582,6852012583,1069177845,1759437085,1519342743,1519342742,1069178166,1069177853,1069177915,6853179235,6853179234,6853179236,1069177933,6853179237,6853179238,1069178021,6853179246,6853179244,6853179245,6853179240,6853179243,6853179241,6853179242,6853179239,6853179248,6853179249,6853179250,6853179247,1069177873,6853179262,6853179263,6853179260,6853179261,6853179256,6853179259,6853179257,6853179258,1069177920],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":101248451,"nodes":[1168728158,1168728325,1168728159,5637669355,1168728109,1168728158],"tags":{"access":"private","amenity":"parking","name":"Parking Merkenveld"}},{"type":"way","id":101248462,"nodes":[1168727876,1168728288,1168728412,1168728208,1168727876],"tags":{"amenity":"toilets","building":"yes","source:geometry:date":"2019-03-14","source:geometry:ref":"Gbg/6588148"}},{"type":"way","id":131622387,"nodes":[1448421093,1448421099,1448421091,1448421081,1448421093],"tags":{"amenity":"parking","name":"Tudor - Zeeweg","parking":"surface"}},{"type":"way","id":145691934,"nodes":[1590642859,1590642860,1590642858,1590642849,1590642859],"tags":{"amenity":"parking"}},{"type":"way","id":145691937,"nodes":[1590642829,1590642828,1590642830,1590642832,1590642829],"tags":{"amenity":"parking"}},{"type":"way","id":158901716,"nodes":[1710245713,1710245718,1710245707,1710245705,1710245703,1710245715,1710245711,1710245709,1710245701,1710245713],"tags":{"access":"yes","amenity":"parking","capacity":"14","fee":"no","parking":"surface"}},{"type":"way","id":158904558,"nodes":[1710262742,1710262745,1710262735,1710262733,1710262732,1710262743,1710262741,1710262739,1710262744,1710262737,1710262736,1710262731,1710262738,1710262742],"tags":{"access":"yes","alt_name":"Schoolparking","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":158906028,"nodes":[1710276259,1710276251,1810330766,1710276255,1710276261,1710276240,1710276232,1710276257,1710276243,1710276253,1810347217,1710276242,1710276259],"tags":{"access":"yes","amenity":"parking","fee":"no","name":"Parking Sportcentrum De Valkaart","parking":"surface"}},{"type":"way","id":160825858,"nodes":[1728421375,1728421374,1728421379,1728421377,1728421376,1728421378,1728421375],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":162602213,"nodes":[1920143232,7393009684,7393048385,1744641293,1523513488,1744641292,1920143232],"tags":{"amenity":"parking","capacity":"15"}},{"type":"way","id":165489167,"nodes":[4912197370,4912197365,4912197373,4912197364,4912197372,1770289505,4912197362,4912197371,4912197374,4912197363,4912197368,4912197366,4912197369,4912197367,4912197370],"tags":{"access":"yes","amenity":"parking","fee":"no","name":"Bad Neuheimplein","parking":"surface"}},{"type":"way","id":168291852,"nodes":[1795793399,4979389763,1795793409,1795793395,1795793393,1795793397,1795793407,1795793406,1795793408,1795793405,1795793399],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":169875513,"nodes":[1810345951,1810345955,1810345947,1810345944,1810345951],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":170015605,"nodes":[1811673425,1811673421,1811673418,1811673423,1811673425],"tags":{"access":"private","amenity":"parking","name":"gheeraert E40","operator":"Gheeraert"}},{"type":"way","id":170018487,"nodes":[1811699779,1811699778,1811699776,1811699777,1811699779],"tags":{"access":"private","amenity":"parking","name":"Gheeraert vooraan"}},{"type":"way","id":170559194,"nodes":[1817319304,1817319302,1817319297,1817319301,1817319304],"tags":{"access":"private","amenity":"parking","name":"Gheeraert laadkade"}},{"type":"way","id":170559195,"nodes":[1817319299,1817319303,1817319300,1817319292,1817319299],"tags":{"access":"private","amenity":"parking","name":"Gheeraert spoorweg trailers"}},{"type":"way","id":170559196,"nodes":[1817319293,1817319289,1817319291,1817319296,1817319293],"tags":{"access":"private","amenity":"parking","name":"Gheeraert spoorweg trucks"}},{"type":"way","id":170559197,"nodes":[1817319294,1817319298,1817319295,1817319290,1817319294],"tags":{"access":"private","amenity":"parking","name":"Gheeraert zijkant"}},{"type":"way","id":170559292,"nodes":[1817320496,1817320494,1817320493,1817320495,1817320496],"tags":{"access":"private","amenity":"parking","name":"Gheeraert vooraan gebouw"}},{"type":"way","id":170559832,"nodes":[1817324515,1817324509,1817324491,6397031888,4044172008,4044172003,4044171997,4044171962,4044171957,4044171976,1817324489,1817324488,3550860268,1817324505,3550860269,1817324513,1817324515],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":223674368,"nodes":[2325437844,8191691971,8191691973,8191691972,2325437840,8191691970,414025563,2325437844],"tags":{"amenity":"parking","name":"Tillegembos","parking":"surface"}},{"type":"way","id":237214948,"nodes":[2451574741,2451574742,2451574744,1015583939,2451574741],"tags":{"access":"private","amenity":"parking"}},{"type":"way","id":237214949,"nodes":[2451574748,2451574746,2451574747,2451574749,2451574748],"tags":{"access":"private","amenity":"parking"}},{"type":"way","id":237214950,"nodes":[2451569392,1015567837,2451574745,2451574743,2451578121,2451569392],"tags":{"access":"private","amenity":"parking"}},{"type":"way","id":325909586,"nodes":[3325315243,111759500,3325315247,3325315232,3325315230,3325315226,1169056712,3325315243],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":326834162,"nodes":[3335137807,3335137692,3335137795,9163493632,3335137802,3335137812,9163486855,9163486856,3335137823,3335137807],"tags":{"access":"customers","amenity":"parking","operator":"Best Western Weinebrugge","parking":"surface"}},{"type":"way","id":327849054,"nodes":[3346575929,3346575873,3346575876,3346575843,3346575845,3346575891,3346575901,3346575923,3346575928,3346575950,3346575929],"tags":{"access":"private","amenity":"parking","parking":"surface"}},{"type":"way","id":327849055,"nodes":[3346575945,3346575946,3346575943,3346575933,3346575925,3346575917,3346575903,3346575908,3346575889,3346575886,3346575945],"tags":{"access":"customers","amenity":"parking","parking":"surface"}},{"type":"way","id":327849056,"nodes":[3346575865,3346575853,3346575855,3346575846,3346575840,3346575858,3346575865],"tags":{"access":"private","amenity":"parking","parking":"surface"}},{"type":"way","id":374677860,"nodes":[3780611504,3780611502,3780611500,3780611503,3780611504],"tags":{"amenity":"parking"}},{"type":"way","id":374677861,"nodes":[3780611495,3780611493,3780611492,3780611494,3780611495],"tags":{"amenity":"parking"}},{"type":"way","id":374677862,"nodes":[3780611498,3780611497,3780611496,3780611499,3780611501,3780611498],"tags":{"amenity":"parking"}},{"type":"way","id":389912371,"nodes":[3930713440,3930713451,3930713447,3930713437,3930713440],"tags":{"amenity":"parking"}},{"type":"way","id":389912372,"nodes":[3930713454,3930713442,3930713435,3930713429,5826811614,3930713426,3930713430,6982605752,6982605754,3930713438,6982605769,6982605766,6982605767,6982605762,6982605764,3930713446,3930713454],"tags":{"access":"customers","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":401995684,"nodes":[4044171963,4044171954,4044171924,4044171936,4044171941,4044171963],"tags":{"access":"private","amenity":"parking","parking":"surface"}},{"type":"way","id":500067820,"nodes":[4912203166,4912203165,4912203164,4912203163,4912203162,4912203161,4912203160,4912203166],"tags":{"access":"yes","amenity":"parking","parking":"surface"}},{"type":"way","id":500067821,"nodes":[4912203170,4912203169,4912203168,4912203167,4912203170],"tags":{"access":"yes","amenity":"parking","parking":"surface"}},{"type":"way","id":500067822,"nodes":[4912203174,4912203173,4912203172,4912203171,4912203174],"tags":{"access":"yes","amenity":"parking","parking":"surface"}},{"type":"way","id":500067823,"nodes":[4912203179,4912203178,4912203177,4912203176,4912203179],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":500069613,"nodes":[4912214695,4912214685,4912214694,4912214693,4912214692,4912214680,4912214695],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":500071452,"nodes":[4912225068,4912225062,4912225063,4912225053,4912225064,4912214694,4912214685,4912225068],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":500071455,"nodes":[4912225070,4912214681,4912214686,4912225052,4912225051,4912225067,4912225062,4912225068,4912225070],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":500071458,"nodes":[4912214695,4912214680,4912225069,4912225050,1525460846,4912214681,4912225070,4912214695],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":533276307,"nodes":[5173881316,5173881317,5173881318,7054196467,5173881316],"tags":{"amenity":"parking"}},{"type":"way","id":533276308,"nodes":[5173881320,5173881621,5173881622,5173881623,5173881320],"tags":{"amenity":"parking"}},{"type":"way","id":533276309,"nodes":[5173881624,5173881625,5173881626,5173881627,5173881624],"tags":{"amenity":"parking"}},{"type":"way","id":579848581,"nodes":[4043782112,5825400688,5552466020,6997096756,6997096759,6997096758,5552466018,5552466013,5552466014,6997076567,4043782112],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":584455569,"nodes":[5586765933,5586765934,5586765935,5586765936,5586765933],"tags":{"amenity":"parking"}},{"type":"way","id":585977870,"nodes":[5587844460,5599314384,5599314385,1659850846,6870850178,5587844462,5587844461,6870863414,5587844460],"tags":{"amenity":"parking"}},{"type":"way","id":587014342,"nodes":[5607796820,5607798725,5607798721,5607798722,5607796819,5607798723,5607796820],"tags":{"access":"permissive","amenity":"parking","park_ride":"no","parking":"surface","surface":"paved"}},{"type":"way","id":590167103,"nodes":[5635001277,5635001274,5635001275,5635001276,5635001277],"tags":{"amenity":"parking"}},{"type":"way","id":590167113,"nodes":[5635001312,5635001306,7767137237,7767137235,7767137236,7767137234,5635001312],"tags":{"amenity":"parking"}},{"type":"way","id":590167134,"nodes":[5635001374,5635001373,5635001372,5635001371,5635001374],"tags":{"amenity":"parking"}},{"type":"way","id":590167135,"nodes":[5635001378,5635001377,5635001376,5635001375,5635001378],"tags":{"amenity":"parking"}},{"type":"way","id":590167136,"nodes":[5635001382,5635001381,5635001380,5635001379,5635001382],"tags":{"amenity":"parking"}},{"type":"way","id":590167137,"nodes":[5635001386,5882873336,5882873337,5882873338,5882873335,6593340582,6593340583,5882873334,6593340584,5635001385,5635001384,5635001383,5635001386],"tags":{"amenity":"parking"}},{"type":"way","id":590167147,"nodes":[5635001417,5635001414,5635001415,5635001416,5635001417],"tags":{"amenity":"parking"}},{"type":"way","id":601406079,"nodes":[5716136617,5716136618,5716136619,5716136620,5716136617],"tags":{"amenity":"parking"}},{"type":"way","id":632813009,"nodes":[5974489618,1810326044,1810326087,5974489617,5972179348,5972179347,5972179346,5972179345,5972179344,5972179343,5972179331,5974489616,5974489615,5974489614,5974489618],"tags":{"amenity":"parking","name":"Gemeenteplein","parking":"surface"}},{"type":"way","id":668043297,"nodes":[6255587424,6255587425,6255587426,6255587427,6255587424],"tags":{"access":"private","amenity":"parking"}},{"type":"way","id":670104236,"nodes":[6275462768,6275462769,6275462770,6275462771,6275462768],"tags":{"amenity":"parking"}},{"type":"way","id":670104238,"nodes":[6275462772,6275462989,6275462773,6275462774,6275462775,6275462772],"tags":{"amenity":"parking"}},{"type":"way","id":670104239,"nodes":[6275462776,6275462777,6275462778,6275462779,6275462776],"tags":{"amenity":"parking"}},{"type":"way","id":670104241,"nodes":[6275462780,6275462781,6275462782,6275462783,6275462780],"tags":{"amenity":"parking"}},{"type":"way","id":670104242,"nodes":[6275462784,6275462985,6275462988,6275462986,6275462987,6275462784],"tags":{"amenity":"parking"}},{"type":"way","id":671840055,"nodes":[6291339827,6291339828,6291339816,6291339815,6291339822,6291339821,6291339829,6291339830,6291339827],"tags":{"amenity":"parking"}},{"type":"way","id":695825223,"nodes":[1519476746,6533893620,6533893621,6533893622,1519476797,1519476620,1519476746],"tags":{"access":"yes","amenity":"parking"}},{"type":"way","id":695825224,"nodes":[1519476744,6533893624,6533893625,6533893626,1519476698,1519476635,1519476744],"tags":{"access":"yes","amenity":"parking"}},{"type":"way","id":696040917,"nodes":[6536026850,6536026851,6536026852,6536026853,6536026850],"tags":{"amenity":"parking","name":"Kasteel Tudor"}},{"type":"way","id":696043218,"nodes":[6536038234,6536038235,6536038236,6536038237,6536038234],"tags":{"access":"customers","amenity":"parking"}},{"type":"way","id":700675991,"nodes":[6579962064,6579962065,6579962066,6579962068,6579962067,6579962064],"tags":{"access":"private","amenity":"parking","parking":"surface"}},{"type":"way","id":705278707,"nodes":[6625037999,6625038000,6625038001,6625038002,6625038003,6004375826,6625038005,6625038006,6625037999],"tags":{"amenity":"parking"}},{"type":"way","id":719482833,"nodes":[6754312544,6754312543,6754312542,6754312541,6754312544],"tags":{"access":"yes","amenity":"parking","capacity":"5"}},{"type":"way","id":719482834,"nodes":[6754312565,6754312564,6754312563,6754312562,6754312565],"tags":{"access":"yes","amenity":"parking","capacity":"12"}},{"type":"way","id":737054013,"nodes":[5826811496,5826811497,5826811494,5826811495,5826811496],"tags":{"amenity":"parking"}},{"type":"way","id":737054014,"nodes":[5826810676,5826810673,5826810674,5826810675,5826810676],"tags":{"amenity":"parking"}},{"type":"way","id":737054015,"nodes":[5826810681,5826810678,5826810679,5826810680,5826810681],"tags":{"amenity":"parking"}},{"type":"way","id":737093410,"nodes":[5826811559,5826811536,5826811535,5826811561,5826811560,5826811559],"tags":{"access":"yes","amenity":"parking","capacity":"4","fee":"no","parking":"surface"}},{"type":"way","id":737093411,"nodes":[5826811551,5826811547,5826811548,5826811549,5826811550,5826811551],"tags":{"access":"yes","amenity":"parking","capacity":"4","fee":"no","parking":"surface"}},{"type":"way","id":739652949,"nodes":[6925536542,6925536541,6925536540,6925536539,6925536542],"tags":{"amenity":"parking","capacity":"6","parking":"surface"}},{"type":"way","id":741675236,"nodes":[6943148207,6943148206,6943148205,6943148204,1637742821,6943148203,6943148202,6943148201,6943148200,6943148199,6943148198,6943148197,6943148207],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":742295526,"nodes":[6949357909,6949357908,6949357907,6949357906,6949357909],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":742295527,"nodes":[6949357913,6949357912,6949357911,6949357910,6949357913],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":742295528,"nodes":[6949357917,6949357916,6949357915,6949357914,6949357917],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":742295529,"nodes":[6949357921,6949357920,6949357919,6949357918,6949357921],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":746170866,"nodes":[6982906547,6982906546,6982906545,6982906544,6982906543,6982906542,6982906547],"tags":{"access":"customers","amenity":"parking"}},{"type":"way","id":747880657,"nodes":[3325315397,6997076566,6997076565,6997076563,6997076562,6997076564,3325315395,3325315397],"tags":{"access":"customers","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":763977465,"nodes":[7137343680,7137343681,7137343682,7137343683,7137343680],"tags":{"access":"private","amenity":"parking","parking":"surface"}},{"type":"way","id":763977466,"nodes":[7137343684,7137383185,7137383186,7137383187,7137343684],"tags":{"access":"private","amenity":"parking","parking":"surface"}},{"type":"way","id":803821090,"nodes":[7519058290,7519058289,7519058288,7519058287,7519058290],"tags":{"access":"private","amenity":"parking","parking":"surface"}},{"type":"way","id":803821091,"nodes":[7519058294,7519058293,7519058292,7519058291,7519058294],"tags":{"access":"private","amenity":"parking","parking":"surface"}},{"type":"way","id":803821092,"nodes":[7519058298,7519058297,7519058296,7519058295,7519058298],"tags":{"access":"private","amenity":"parking","parking":"surface"}},{"type":"way","id":803821093,"nodes":[7519058302,7519058301,7519058300,7519058299,7519058302],"tags":{"access":"private","amenity":"parking","capacity":"6","parking":"surface"}},{"type":"way","id":804963962,"nodes":[7529417225,7529417226,7529417227,7529417228,7529417229,7529417230,7529417232,7529417225],"tags":{"access":"customers","amenity":"parking","fee":"no","operator":"’t Kiekekot","parking":"surface","surface":"unpaved"}},{"type":"way","id":806875503,"nodes":[4042671969,7545532512,7545532514,7545532513,3359977305,4042671969],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":806963547,"nodes":[7546193222,7546193221,7546193220,7546193219,7546193222],"tags":{"access":"private","amenity":"parking","parking":"surface"}},{"type":"way","id":865357121,"nodes":[8065883228,8065883227,8065883226,8065883225,8065883228],"tags":{"amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":865357122,"nodes":[8065883233,8065883230,8065883229,8065883232,8065883233],"tags":{"amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":879281221,"nodes":[8179735269,8179735268,8179735267,8179735266,8179735265,8179735264,8179735224,8179735269],"tags":{"access":"customers","amenity":"parking","parking":"surface"}},{"type":"way","id":881770201,"nodes":[8200275847,8200275848,8200275844,8200275853,8200275849,8200275847],"tags":{"amenity":"parking","parking":"surface","surface":"grass"}},{"type":"way","id":978360549,"nodes":[5761770202,5761770204,9052878229,9052878228,5761770202],"tags":{"amenity":"parking"}},{"type":"way","id":1009692722,"nodes":[9316118540,9316118536,9316118531,9316118535,9316118534,9316118533,9316118530,9316118532,3311835478,9316118540],"tags":{"amenity":"parking","parking":"street_side"}},{"type":"relation","id":8188853,"members":[{"type":"way","ref":577572397,"role":"outer"},{"type":"way","ref":577572399,"role":"outer"}],"tags":{"access":"guided","curator":"Luc Maene;Geert De Clercq","email":"lucmaene@hotmail.com;geert.de.clercq1@pandora.be","landuse":"meadow","leisure":"nature_reserve","name":"De Wulgenbroeken","natural":"wetland","operator":"Natuurpunt Brugge","type":"multipolygon","website":"https://natuurpuntbrugge.be/wulgenbroeken/","wetland":"wet_meadow","wikidata":"Q60061498","wikipedia":"nl:Wulgenbroeken"}},{"type":"relation","id":11163488,"members":[{"type":"way","ref":810604915,"role":"outer"},{"type":"way","ref":989393316,"role":"outer"},{"type":"way","ref":389026405,"role":"inner"},{"type":"way","ref":810607458,"role":"outer"}],"tags":{"access":"yes","curator":"Kris Lesage","description":"Wat Doeveren zo uniek maakt, zijn zijn kleine heidegebiedjes met soorten die erg verschillen van de Kempense heide. Doeveren en omstreken was vroeger één groot heidegebied, maar bestaat nu grotendeels uit bossen.","dog":"leashed","email":"doeveren@natuurpuntzedelgem.be","image":"https://i.imgur.com/NEAsQZG.jpg","image:0":"https://i.imgur.com/Dq71hyQ.jpg","image:1":"https://i.imgur.com/mAIiT4f.jpg","image:2":"https://i.imgur.com/dELZU97.jpg","image:3":"https://i.imgur.com/Bso57JC.jpg","image:4":"https://i.imgur.com/9DtcfXo.jpg","image:5":"https://i.imgur.com/0R6eBfk.jpg","image:6":"https://i.imgur.com/b0JpvbR.jpg","leisure":"nature_reserve","name":"Doeveren","operator":"Natuurpunt Zedelgem","phone":"+32 486 25 25 30","type":"multipolygon","website":"https://www.natuurpuntzedelgem.be/gebieden/doeveren/","wikidata":"Q56395754","wikipedia":"nl:Doeveren (natuurgebied)"}},{"type":"relation","id":11790117,"members":[{"type":"way","ref":863373849,"role":"outer"},{"type":"way","ref":777280458,"role":"outer"}],"tags":{"access":"no","description:0":"In gebruik als waterbuffering","leisure":"nature_reserve","name":"Kerkebeek","operator":"Natuurpunt Brugge","type":"multipolygon"}},{"type":"node","id":518224450,"lat":51.1548065,"lon":3.1880118,"timestamp":"2021-08-14T21:49:28Z","version":5,"changeset":109683837,"user":"effem","uid":16437,"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"street_side"}},{"type":"node","id":665418924,"lat":51.1575547,"lon":3.20522,"timestamp":"2012-05-12T20:13:39Z","version":2,"changeset":11580224,"user":"martino260","uid":655442,"tags":{"amenity":"parking"}},{"type":"node","id":1168727903,"lat":51.1299141,"lon":3.1776123,"timestamp":"2017-04-03T08:34:05Z","version":2,"changeset":47403889,"user":"philippec","uid":76884,"tags":{"amenity":"drinking_water","mapillary":"https://www.mapillary.com/app/?lat=51.129853685131906&lng=3.177603984688602&z=17&pKey=SEyKzIMUeKssni1ZLVe-9A&focus=photo&dateTo=2017-04-02&dateFrom=2017-04-01&x=0.5168826751181941&y=0.6114877557873634&zoom=0"}},{"type":"node","id":1168728245,"lat":51.1290938,"lon":3.1767502,"timestamp":"2019-10-07T11:06:57Z","version":3,"changeset":75370316,"user":"Hopperpop","uid":3664604,"tags":{"amenity":"drinking_water","mapillary":"https://www.mapillary.com/app/?lat=51.129104406662464&lng=3.176675795895676&z=17&pKey=vSP3D_hWv3XCBtH75GnYUQ&focus=photo&dateTo=2017-04-02&dateFrom=2017-04-01"}},{"type":"node","id":1725842653,"lat":51.153364,"lon":3.2352655,"timestamp":"2012-07-02T17:33:00Z","version":2,"changeset":12090625,"user":"martino260","uid":655442,"tags":{"amenity":"bench"}},{"type":"node","id":1744641290,"lat":51.1389321,"lon":3.2385407,"timestamp":"2012-09-18T13:29:52Z","version":3,"changeset":13156159,"user":"martino260","uid":655442,"tags":{"amenity":"bench","backrest":"yes","material":"wood"}},{"type":"node","id":1746891135,"lat":51.1598841,"lon":3.2361425,"timestamp":"2012-05-09T18:22:11Z","version":1,"changeset":11551825,"user":"martino260","uid":655442,"tags":{"amenity":"bench"}},{"type":"node","id":1810326078,"lat":51.1550855,"lon":3.2349358,"timestamp":"2012-07-02T19:50:15Z","version":1,"changeset":12093439,"user":"martino260","uid":655442,"tags":{"amenity":"bench"}},{"type":"node","id":1810326092,"lat":51.1552302,"lon":3.234968,"timestamp":"2012-07-02T19:50:16Z","version":1,"changeset":12093439,"user":"martino260","uid":655442,"tags":{"amenity":"bench"}},{"type":"node","id":2325437742,"lat":51.1770052,"lon":3.1967794,"timestamp":"2013-05-30T12:19:08Z","version":1,"changeset":16350909,"user":"peeweeke","uid":494726,"tags":{"board_type":"board","information":"board","name":"Tillegembos","tourism":"information"}},{"type":"node","id":2325437743,"lat":51.1787363,"lon":3.1949036,"timestamp":"2013-05-30T12:19:08Z","version":1,"changeset":16350909,"user":"peeweeke","uid":494726,"tags":{"board_type":"board","information":"board","name":"Tillegembos","tourism":"information"}},{"type":"node","id":2325437813,"lat":51.1733102,"lon":3.1895672,"timestamp":"2013-05-30T12:19:09Z","version":1,"changeset":16350909,"user":"peeweeke","uid":494726,"tags":{"amenity":"bench","backrest":"yes","material":"wood"}},{"type":"node","id":2325437839,"lat":51.1763436,"lon":3.1984985,"timestamp":"2013-05-30T12:19:10Z","version":1,"changeset":16350909,"user":"peeweeke","uid":494726,"tags":{"amenity":"bench","backrest":"yes","material":"wood"}},{"type":"node","id":2325437848,"lat":51.1770966,"lon":3.1963507,"timestamp":"2013-05-30T12:19:10Z","version":1,"changeset":16350909,"user":"peeweeke","uid":494726,"tags":{"amenity":"bench","backrest":"yes","material":"wood"}},{"type":"node","id":2325437862,"lat":51.1773439,"lon":3.1948779,"timestamp":"2013-05-30T12:19:10Z","version":1,"changeset":16350909,"user":"peeweeke","uid":494726,"tags":{"amenity":"bench","backrest":"yes","material":"wood"}},{"type":"node","id":2325437867,"lat":51.1775994,"lon":3.1888088,"timestamp":"2013-05-30T12:19:11Z","version":1,"changeset":16350909,"user":"peeweeke","uid":494726,"tags":{"amenity":"bench","backrest":"yes","material":"wood"}},{"type":"node","id":2325437873,"lat":51.1778384,"lon":3.1913802,"timestamp":"2013-05-30T12:19:11Z","version":1,"changeset":16350909,"user":"peeweeke","uid":494726,"tags":{"amenity":"bench","backrest":"yes","material":"wood"}},{"type":"node","id":2732486257,"lat":51.129741,"lon":3.1907419,"timestamp":"2014-03-21T21:15:28Z","version":1,"changeset":21234491,"user":"meannder","uid":149496,"tags":{"board_type":"nature","information":"board","name":"Doeveren","tourism":"information"}},{"type":"node","id":3774054068,"lat":51.1586662,"lon":3.2271102,"timestamp":"2015-10-05T20:34:04Z","version":1,"changeset":34456387,"user":"TripleBee","uid":497177,"tags":{"amenity":"bench"}},{"type":"node","id":4769106605,"lat":51.138264,"lon":3.1798655,"timestamp":"2020-05-31T19:49:45Z","version":3,"changeset":86019474,"user":"Hopperpop","uid":3664604,"tags":{"backrest":"yes","leisure":"picnic_table"}},{"type":"node","id":4912238707,"lat":51.1448634,"lon":3.2455986,"timestamp":"2017-06-13T08:12:04Z","version":1,"changeset":49491753,"user":"Jakka","uid":2403313,"tags":{"access":"yes","amenity":"parking","fee":"no","name":"Oostkamp","parking":"Carpool"}},{"type":"node","id":5637212235,"lat":51.1305439,"lon":3.1866873,"timestamp":"2021-11-22T11:54:45Z","version":4,"changeset":114095475,"user":"L'imaginaire","uid":654234,"tags":{"board_type":"nature","image":"https://i.imgur.com/HehOQL9.jpg","information":"board","name":"Welkom Doeveren","tourism":"information"}},{"type":"node","id":5637224573,"lat":51.1281084,"lon":3.1881726,"timestamp":"2020-06-01T22:39:30Z","version":2,"changeset":86065716,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"board_type":"nature","information":"board","name":"Welkom Doeveren","tourism":"information"}},{"type":"node","id":5637230107,"lat":51.1280884,"lon":3.1889798,"timestamp":"2018-05-23T11:55:01Z","version":1,"changeset":59208628,"user":"Jakka","uid":2403313,"tags":{"information":"board","tourism":"information"}},{"type":"node","id":5637743026,"lat":51.1295973,"lon":3.1751122,"timestamp":"2021-10-08T08:53:14Z","version":2,"changeset":112251989,"user":"DieterWesttoer","uid":13062237,"tags":{"information":"board","name":"Doeveren Wandelroute","tourism":"information"}},{"type":"node","id":5716130103,"lat":51.1767183,"lon":3.1947867,"timestamp":"2018-06-24T22:04:21Z","version":1,"changeset":60130942,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"amenity":"bench","backrest":"yes"}},{"type":"node","id":5745783208,"lat":51.1782581,"lon":3.2410111,"timestamp":"2018-07-07T18:42:23Z","version":1,"changeset":60494990,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"amenity":"bench"}},{"type":"node","id":5745807545,"lat":51.1784037,"lon":3.2369439,"timestamp":"2018-07-07T18:58:25Z","version":1,"changeset":60495307,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"amenity":"bench"}},{"type":"node","id":5745807551,"lat":51.1783278,"lon":3.236678,"timestamp":"2018-07-07T18:58:25Z","version":1,"changeset":60495307,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"amenity":"bench"}},{"type":"node","id":6535241426,"lat":51.1693142,"lon":3.1673093,"timestamp":"2019-06-09T13:50:19Z","version":1,"changeset":71071874,"user":"Hopperpop","uid":3664604,"tags":{"amenity":"bench"}},{"type":"node","id":6535241427,"lat":51.169265,"lon":3.1673159,"timestamp":"2019-06-09T13:50:19Z","version":1,"changeset":71071874,"user":"Hopperpop","uid":3664604,"tags":{"amenity":"bench"}},{"type":"node","id":6535241428,"lat":51.1692199,"lon":3.1673224,"timestamp":"2019-06-09T13:50:19Z","version":1,"changeset":71071874,"user":"Hopperpop","uid":3664604,"tags":{"amenity":"bench"}},{"type":"node","id":6535241430,"lat":51.1685726,"lon":3.1678225,"timestamp":"2019-06-09T13:50:19Z","version":1,"changeset":71071874,"user":"Hopperpop","uid":3664604,"tags":{"bench":"yes","leisure":"picnic_table","material":"wood"}},{"type":"node","id":6536026827,"lat":51.1703142,"lon":3.1691109,"timestamp":"2019-06-09T22:54:45Z","version":1,"changeset":71082671,"user":"Hopperpop","uid":3664604,"tags":{"leisure":"picnic_table"}},{"type":"node","id":6536026828,"lat":51.1702795,"lon":3.1691552,"timestamp":"2019-06-09T22:54:45Z","version":1,"changeset":71082671,"user":"Hopperpop","uid":3664604,"tags":{"leisure":"picnic_table"}},{"type":"node","id":6712112244,"lat":51.1595064,"lon":3.2021482,"timestamp":"2020-05-24T21:35:50Z","version":2,"changeset":85695537,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"leisure":"picnic_table"}},{"type":"node","id":7304050040,"lat":51.1560908,"lon":3.1748919,"timestamp":"2020-03-17T19:11:00Z","version":1,"changeset":82315744,"user":"Hopperpop","uid":3664604,"tags":{"amenity":"bench"}},{"type":"node","id":7304050041,"lat":51.1560141,"lon":3.1749533,"timestamp":"2020-03-17T19:11:00Z","version":1,"changeset":82315744,"user":"Hopperpop","uid":3664604,"tags":{"amenity":"bench"}},{"type":"node","id":7304050042,"lat":51.156032,"lon":3.1749379,"timestamp":"2020-03-17T19:11:00Z","version":1,"changeset":82315744,"user":"Hopperpop","uid":3664604,"tags":{"amenity":"bench"}},{"type":"node","id":7439979218,"lat":51.1780402,"lon":3.2178666,"timestamp":"2020-04-24T00:56:14Z","version":1,"changeset":84027933,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"amenity":"bench","backrest":"yes"}},{"type":"node","id":7439979219,"lat":51.1780508,"lon":3.2179033,"timestamp":"2020-04-24T00:56:14Z","version":1,"changeset":84027933,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"amenity":"bench","backrest":"yes"}},{"type":"node","id":7529262982,"lat":51.1585566,"lon":3.1715528,"timestamp":"2020-05-17T16:12:04Z","version":1,"changeset":85340264,"user":"Hopperpop","uid":3664604,"tags":{"board_type":"map","information":"board","tourism":"information"}},{"type":"node","id":7529262984,"lat":51.1585786,"lon":3.1715385,"timestamp":"2020-05-17T16:12:04Z","version":1,"changeset":85340264,"user":"Hopperpop","uid":3664604,"tags":{"leisure":"picnic_table"}},{"type":"node","id":7554879668,"lat":51.1573713,"lon":3.2043731,"timestamp":"2020-05-24T21:35:50Z","version":1,"changeset":85695537,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"access":"yes","amenity":"toilets","fee":"no","toilets:disposal":"flush","unisex":"yes","wheelchair":"yes"}},{"type":"node","id":7554879669,"lat":51.1594855,"lon":3.2021507,"timestamp":"2020-05-24T21:35:50Z","version":1,"changeset":85695537,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"leisure":"picnic_table"}},{"type":"node","id":7556988723,"lat":51.1330234,"lon":3.1839944,"timestamp":"2020-05-25T19:19:56Z","version":1,"changeset":85730259,"user":"Hopperpop","uid":3664604,"tags":{"amenity":"bench","material":"wood"}},{"type":"node","id":7575825326,"lat":51.1386553,"lon":3.1797358,"timestamp":"2020-05-31T19:49:45Z","version":1,"changeset":86019474,"user":"Hopperpop","uid":3664604,"tags":{"amenity":"bench"}},{"type":"node","id":7575825327,"lat":51.1382456,"lon":3.1797422,"timestamp":"2020-05-31T19:49:45Z","version":1,"changeset":86019474,"user":"Hopperpop","uid":3664604,"tags":{"information":"board","tourism":"information"}},{"type":"node","id":8109498958,"lat":51.1332267,"lon":3.2341272,"timestamp":"2020-11-11T20:42:45Z","version":1,"changeset":93951029,"user":"L'imaginaire","uid":654234,"tags":{"amenity":"bench","backrest":"yes"}},{"type":"node","id":8109498959,"lat":51.1335011,"lon":3.2343954,"timestamp":"2020-11-11T20:42:45Z","version":1,"changeset":93951029,"user":"L'imaginaire","uid":654234,"tags":{"leisure":"picnic_table"}},{"type":"node","id":8198894646,"lat":51.125688,"lon":3.1856217,"timestamp":"2020-12-06T23:39:34Z","version":3,"changeset":95384686,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"image":"https://i.imgur.com/O5kX20u.jpg","information":"board","tourism":"information"}},{"type":"node","id":8199012519,"lat":51.1262245,"lon":3.1802429,"timestamp":"2020-12-07T00:12:14Z","version":3,"changeset":95385124,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"image":"https://i.imgur.com/tomw9p5.jpg","information":"board","tourism":"information"}},{"type":"node","id":8199244816,"lat":51.1252874,"lon":3.1837622,"timestamp":"2020-12-06T17:14:52Z","version":1,"changeset":95374174,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"amenity":"bench"}},{"type":"node","id":8199301617,"lat":51.1256827,"lon":3.1853543,"timestamp":"2020-12-06T17:14:52Z","version":1,"changeset":95374174,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"amenity":"bench","backrest":"no"}},{"type":"node","id":8255488518,"lat":51.1406698,"lon":3.235178,"timestamp":"2020-12-23T18:20:35Z","version":1,"changeset":96342158,"user":"L'imaginaire","uid":654234,"tags":{"amenity":"bench","backrest":"yes"}},{"type":"node","id":9316104741,"lat":51.1330984,"lon":3.2335257,"timestamp":"2021-12-06T18:31:00Z","version":1,"changeset":114629890,"user":"L'imaginaire","uid":654234,"tags":{"information":"board","tourism":"information"}},{"type":"node","id":9442532340,"lat":51.1763651,"lon":3.1947952,"timestamp":"2022-01-23T16:26:28Z","version":2,"changeset":116506336,"user":"L'imaginaire","uid":654234,"tags":{"amenity":"bench","backrest":"yes","image":"https://i.imgur.com/eZ0Loii.jpg"}},{"type":"way","id":15242261,"timestamp":"2020-04-05T07:08:45Z","version":8,"changeset":83089516,"user":"Hopperpop","uid":3664604,"nodes":[150996092,150996093,6754312552,6754312553,6754312550,6754312551,150996094,150996095,150996097,150996098,6754312560,6754312559,6754312558,150996099,6754312557,150996100,6754312555,6754312556,150996101,6754312554,150996092],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":16514228,"timestamp":"2017-06-13T07:14:23Z","version":9,"changeset":49490318,"user":"Jakka","uid":2403313,"nodes":[170464837,170464839,170464840,170464841,170464837],"tags":{"access":"yes","amenity":"parking","fee":"no","maxstay":"4 hours","parking":"surface"}},{"type":"way","id":76706071,"timestamp":"2017-06-17T07:51:31Z","version":4,"changeset":49608752,"user":"rowers2","uid":2445224,"nodes":[903903386,1038557094,1038557233,1038557143,1038557075,903903387,1038557195,903903388,903903390,903904576,903903386],"tags":{"access":"permissive","amenity":"parking"}},{"type":"way","id":89601157,"timestamp":"2019-11-09T18:40:50Z","version":3,"changeset":76851428,"user":"Hopperpop","uid":3664604,"nodes":[1038557083,1038557078,1038557104,1038557072,1038557108,1038557230,1038557227,1038557102,1038557137,1038575040,1038557191,1038557014,6960473080,1038557035,1038557012,1038557083],"tags":{"amenity":"parking"}},{"type":"way","id":89604999,"timestamp":"2020-01-16T22:01:28Z","version":5,"changeset":79667667,"user":"Hopperpop","uid":3664604,"nodes":[1038583404,1038583491,1038583375,1038583483,1038583479,1038583398,1038583459,1038583456,1038583446,1038583441,1038583425,1038583501,1038583451,1038583463,1038583476,1038583404],"tags":{"access":"yes","amenity":"parking","capacity":"57","carpool":"yes","description":"carpoolparking","fee":"no","name":"Loppem","parking":"surface"}},{"type":"way","id":92035679,"timestamp":"2019-10-05T08:05:33Z","version":7,"changeset":75311122,"user":"skyman81","uid":955688,"nodes":[1069177920,6853179264,1069177925,1069177919,6853179269,6853179268,6853179267,6853179215,6853179213,6853179214,1069178133,1069177984,6853179230,6853179228,6853179229,6853179224,6853179225,6853179227,6853179226,6853179216,6853179220,6853179219,6853179218,6853179217,6853179223,6853179221,6853179222,1069177967,1069177852,6853179211,6853179212,6853179210,6853179327,6853179208,6853179209,6853179203,1069177976,6853179207,6853179206,6853179205,6853179204,6853179202,1069177849,6852012579,6852012578,6852012580,6852012577,6852012581,6852012582,6852012583,1069177845,1759437085,1519342743,1519342742,1069178166,1069177853,1069177915,6853179235,6853179234,6853179236,1069177933,6853179237,6853179238,1069178021,6853179246,6853179244,6853179245,6853179240,6853179243,6853179241,6853179242,6853179239,6853179248,6853179249,6853179250,6853179247,1069177873,6853179262,6853179263,6853179260,6853179261,6853179256,6853179259,6853179257,6853179258,1069177920],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":101248451,"timestamp":"2018-05-23T14:18:27Z","version":2,"changeset":59213416,"user":"Jakka","uid":2403313,"nodes":[1168728158,1168728325,1168728159,5637669355,1168728109,1168728158],"tags":{"access":"private","amenity":"parking","name":"Parking Merkenveld"}},{"type":"way","id":101248462,"timestamp":"2020-05-25T13:53:02Z","version":3,"changeset":85720081,"user":"Pieter Vander Vennet","uid":3818858,"nodes":[1168727876,1168728288,1168728412,1168728208,1168727876],"tags":{"amenity":"toilets","building":"yes","source:geometry:date":"2019-03-14","source:geometry:ref":"Gbg/6588148"}},{"type":"way","id":131622387,"timestamp":"2015-01-09T12:06:51Z","version":2,"changeset":28017707,"user":"TripleBee","uid":497177,"nodes":[1448421093,1448421099,1448421091,1448421081,1448421093],"tags":{"amenity":"parking","name":"Tudor - Zeeweg","parking":"surface"}},{"type":"way","id":145691934,"timestamp":"2012-01-15T12:43:37Z","version":1,"changeset":10397429,"user":"Sanderd17","uid":253266,"nodes":[1590642859,1590642860,1590642858,1590642849,1590642859],"tags":{"amenity":"parking"}},{"type":"way","id":145691937,"timestamp":"2012-01-15T12:43:37Z","version":1,"changeset":10397429,"user":"Sanderd17","uid":253266,"nodes":[1590642829,1590642828,1590642830,1590642832,1590642829],"tags":{"amenity":"parking"}},{"type":"way","id":158901716,"timestamp":"2017-06-13T07:12:20Z","version":2,"changeset":49490264,"user":"Jakka","uid":2403313,"nodes":[1710245713,1710245718,1710245707,1710245705,1710245703,1710245715,1710245711,1710245709,1710245701,1710245713],"tags":{"access":"yes","amenity":"parking","capacity":"14","fee":"no","parking":"surface"}},{"type":"way","id":158904558,"timestamp":"2020-12-22T22:39:41Z","version":4,"changeset":96283379,"user":"M!dgard","uid":763799,"nodes":[1710262742,1710262745,1710262735,1710262733,1710262732,1710262743,1710262741,1710262739,1710262744,1710262737,1710262736,1710262731,1710262738,1710262742],"tags":{"access":"yes","alt_name":"Schoolparking","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":158906028,"timestamp":"2017-06-13T07:27:19Z","version":5,"changeset":49490646,"user":"Jakka","uid":2403313,"nodes":[1710276259,1710276251,1810330766,1710276255,1710276261,1710276240,1710276232,1710276257,1710276243,1710276253,1810347217,1710276242,1710276259],"tags":{"access":"yes","amenity":"parking","fee":"no","name":"Parking Sportcentrum De Valkaart","parking":"surface"}},{"type":"way","id":160825858,"timestamp":"2012-04-23T20:35:52Z","version":1,"changeset":11399632,"user":"martino260","uid":655442,"nodes":[1728421375,1728421374,1728421379,1728421377,1728421376,1728421378,1728421375],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":162602213,"timestamp":"2020-04-11T18:12:16Z","version":8,"changeset":83407731,"user":"JanFi","uid":672253,"nodes":[1920143232,7393009684,7393048385,1744641293,1523513488,1744641292,1920143232],"tags":{"amenity":"parking","capacity":"15"}},{"type":"way","id":165489167,"timestamp":"2020-10-12T19:06:29Z","version":3,"changeset":92371840,"user":"L'imaginaire","uid":654234,"nodes":[4912197370,4912197365,4912197373,4912197364,4912197372,1770289505,4912197362,4912197371,4912197374,4912197363,4912197368,4912197366,4912197369,4912197367,4912197370],"tags":{"access":"yes","amenity":"parking","fee":"no","name":"Bad Neuheimplein","parking":"surface"}},{"type":"way","id":168291852,"timestamp":"2017-07-19T11:17:33Z","version":3,"changeset":50402298,"user":"martino260","uid":655442,"nodes":[1795793399,4979389763,1795793409,1795793395,1795793393,1795793397,1795793407,1795793406,1795793408,1795793405,1795793399],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":169875513,"timestamp":"2017-06-13T07:26:09Z","version":2,"changeset":49490613,"user":"Jakka","uid":2403313,"nodes":[1810345951,1810345955,1810345947,1810345944,1810345951],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":170015605,"timestamp":"2017-06-17T07:51:33Z","version":4,"changeset":49608752,"user":"rowers2","uid":2445224,"nodes":[1811673425,1811673421,1811673418,1811673423,1811673425],"tags":{"access":"private","amenity":"parking","name":"gheeraert E40","operator":"Gheeraert"}},{"type":"way","id":170018487,"timestamp":"2017-06-17T07:51:33Z","version":3,"changeset":49608752,"user":"rowers2","uid":2445224,"nodes":[1811699779,1811699778,1811699776,1811699777,1811699779],"tags":{"access":"private","amenity":"parking","name":"Gheeraert vooraan"}},{"type":"way","id":170559194,"timestamp":"2017-06-17T07:51:33Z","version":2,"changeset":49608752,"user":"rowers2","uid":2445224,"nodes":[1817319304,1817319302,1817319297,1817319301,1817319304],"tags":{"access":"private","amenity":"parking","name":"Gheeraert laadkade"}},{"type":"way","id":170559195,"timestamp":"2017-06-17T07:51:33Z","version":2,"changeset":49608752,"user":"rowers2","uid":2445224,"nodes":[1817319299,1817319303,1817319300,1817319292,1817319299],"tags":{"access":"private","amenity":"parking","name":"Gheeraert spoorweg trailers"}},{"type":"way","id":170559196,"timestamp":"2017-06-17T07:51:33Z","version":2,"changeset":49608752,"user":"rowers2","uid":2445224,"nodes":[1817319293,1817319289,1817319291,1817319296,1817319293],"tags":{"access":"private","amenity":"parking","name":"Gheeraert spoorweg trucks"}},{"type":"way","id":170559197,"timestamp":"2017-06-17T07:51:33Z","version":2,"changeset":49608752,"user":"rowers2","uid":2445224,"nodes":[1817319294,1817319298,1817319295,1817319290,1817319294],"tags":{"access":"private","amenity":"parking","name":"Gheeraert zijkant"}},{"type":"way","id":170559292,"timestamp":"2017-06-17T07:51:33Z","version":2,"changeset":49608752,"user":"rowers2","uid":2445224,"nodes":[1817320496,1817320494,1817320493,1817320495,1817320496],"tags":{"access":"private","amenity":"parking","name":"Gheeraert vooraan gebouw"}},{"type":"way","id":170559832,"timestamp":"2020-10-07T10:51:41Z","version":6,"changeset":92105788,"user":"effem","uid":16437,"nodes":[1817324515,1817324509,1817324491,6397031888,4044172008,4044172003,4044171997,4044171962,4044171957,4044171976,1817324489,1817324488,3550860268,1817324505,3550860269,1817324513,1817324515],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":223674368,"timestamp":"2020-12-03T18:47:28Z","version":3,"changeset":95244226,"user":"L'imaginaire","uid":654234,"nodes":[2325437844,8191691971,8191691973,8191691972,2325437840,8191691970,414025563,2325437844],"tags":{"amenity":"parking","name":"Tillegembos","parking":"surface"}},{"type":"way","id":237214948,"timestamp":"2017-06-17T07:51:35Z","version":2,"changeset":49608752,"user":"rowers2","uid":2445224,"nodes":[2451574741,2451574742,2451574744,1015583939,2451574741],"tags":{"access":"private","amenity":"parking"}},{"type":"way","id":237214949,"timestamp":"2017-06-17T07:51:35Z","version":2,"changeset":49608752,"user":"rowers2","uid":2445224,"nodes":[2451574748,2451574746,2451574747,2451574749,2451574748],"tags":{"access":"private","amenity":"parking"}},{"type":"way","id":237214950,"timestamp":"2017-06-17T07:51:35Z","version":3,"changeset":49608752,"user":"rowers2","uid":2445224,"nodes":[2451569392,1015567837,2451574745,2451574743,2451578121,2451569392],"tags":{"access":"private","amenity":"parking"}},{"type":"way","id":325909586,"timestamp":"2016-01-05T18:51:49Z","version":2,"changeset":36387330,"user":"JanFi","uid":672253,"nodes":[3325315243,111759500,3325315247,3325315232,3325315230,3325315226,1169056712,3325315243],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":326834162,"timestamp":"2021-10-10T21:49:11Z","version":4,"changeset":112350014,"user":"Pieter Vander Vennet","uid":3818858,"nodes":[3335137807,3335137692,3335137795,9163493632,3335137802,3335137812,9163486855,9163486856,3335137823,3335137807],"tags":{"access":"customers","amenity":"parking","operator":"Best Western Weinebrugge","parking":"surface"}},{"type":"way","id":327849054,"timestamp":"2015-02-12T20:26:22Z","version":1,"changeset":28807613,"user":"escada","uid":436365,"nodes":[3346575929,3346575873,3346575876,3346575843,3346575845,3346575891,3346575901,3346575923,3346575928,3346575950,3346575929],"tags":{"access":"private","amenity":"parking","parking":"surface"}},{"type":"way","id":327849055,"timestamp":"2016-10-08T21:24:46Z","version":2,"changeset":42742859,"user":"maggot27","uid":118021,"nodes":[3346575945,3346575946,3346575943,3346575933,3346575925,3346575917,3346575903,3346575908,3346575889,3346575886,3346575945],"tags":{"access":"customers","amenity":"parking","parking":"surface"}},{"type":"way","id":327849056,"timestamp":"2015-02-12T20:26:22Z","version":1,"changeset":28807613,"user":"escada","uid":436365,"nodes":[3346575865,3346575853,3346575855,3346575846,3346575840,3346575858,3346575865],"tags":{"access":"private","amenity":"parking","parking":"surface"}},{"type":"way","id":374677860,"timestamp":"2015-10-10T09:08:20Z","version":1,"changeset":34545536,"user":"Jakka","uid":2403313,"nodes":[3780611504,3780611502,3780611500,3780611503,3780611504],"tags":{"amenity":"parking"}},{"type":"way","id":374677861,"timestamp":"2015-10-10T09:08:20Z","version":1,"changeset":34545536,"user":"Jakka","uid":2403313,"nodes":[3780611495,3780611493,3780611492,3780611494,3780611495],"tags":{"amenity":"parking"}},{"type":"way","id":374677862,"timestamp":"2015-10-10T09:08:20Z","version":1,"changeset":34545536,"user":"Jakka","uid":2403313,"nodes":[3780611498,3780611497,3780611496,3780611499,3780611501,3780611498],"tags":{"amenity":"parking"}},{"type":"way","id":389912371,"timestamp":"2016-01-06T16:51:45Z","version":1,"changeset":36407948,"user":"Spectrokid","uid":19775,"nodes":[3930713440,3930713451,3930713447,3930713437,3930713440],"tags":{"amenity":"parking"}},{"type":"way","id":389912372,"timestamp":"2019-11-16T13:17:09Z","version":4,"changeset":77164376,"user":"Hopperpop","uid":3664604,"nodes":[3930713454,3930713442,3930713435,3930713429,5826811614,3930713426,3930713430,6982605752,6982605754,3930713438,6982605769,6982605766,6982605767,6982605762,6982605764,3930713446,3930713454],"tags":{"access":"customers","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":401995684,"timestamp":"2020-10-07T10:52:00Z","version":3,"changeset":92105972,"user":"effem","uid":16437,"nodes":[4044171963,4044171954,4044171924,4044171936,4044171941,4044171963],"tags":{"access":"private","amenity":"parking","parking":"surface"}},{"type":"way","id":500067820,"timestamp":"2017-06-13T07:49:12Z","version":1,"changeset":49491219,"user":"Jakka","uid":2403313,"nodes":[4912203166,4912203165,4912203164,4912203163,4912203162,4912203161,4912203160,4912203166],"tags":{"access":"yes","amenity":"parking","parking":"surface"}},{"type":"way","id":500067821,"timestamp":"2017-06-13T07:49:12Z","version":1,"changeset":49491219,"user":"Jakka","uid":2403313,"nodes":[4912203170,4912203169,4912203168,4912203167,4912203170],"tags":{"access":"yes","amenity":"parking","parking":"surface"}},{"type":"way","id":500067822,"timestamp":"2017-06-13T07:49:12Z","version":1,"changeset":49491219,"user":"Jakka","uid":2403313,"nodes":[4912203174,4912203173,4912203172,4912203171,4912203174],"tags":{"access":"yes","amenity":"parking","parking":"surface"}},{"type":"way","id":500067823,"timestamp":"2017-06-13T07:49:12Z","version":1,"changeset":49491219,"user":"Jakka","uid":2403313,"nodes":[4912203179,4912203178,4912203177,4912203176,4912203179],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":500069613,"timestamp":"2018-10-11T09:30:48Z","version":2,"changeset":63409550,"user":"Jakka","uid":2403313,"nodes":[4912214695,4912214685,4912214694,4912214693,4912214692,4912214680,4912214695],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":500071452,"timestamp":"2018-10-11T09:30:48Z","version":2,"changeset":63409550,"user":"Jakka","uid":2403313,"nodes":[4912225068,4912225062,4912225063,4912225053,4912225064,4912214694,4912214685,4912225068],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":500071455,"timestamp":"2018-10-11T09:30:48Z","version":2,"changeset":63409550,"user":"Jakka","uid":2403313,"nodes":[4912225070,4912214681,4912214686,4912225052,4912225051,4912225067,4912225062,4912225068,4912225070],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":500071458,"timestamp":"2018-10-11T09:30:48Z","version":2,"changeset":63409550,"user":"Jakka","uid":2403313,"nodes":[4912214695,4912214680,4912225069,4912225050,1525460846,4912214681,4912225070,4912214695],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":533276307,"timestamp":"2019-12-13T10:02:12Z","version":2,"changeset":78364882,"user":"skyman81","uid":955688,"nodes":[5173881316,5173881317,5173881318,7054196467,5173881316],"tags":{"amenity":"parking"}},{"type":"way","id":533276308,"timestamp":"2017-10-17T23:36:18Z","version":1,"changeset":53027174,"user":"Pieter Vander Vennet","uid":3818858,"nodes":[5173881320,5173881621,5173881622,5173881623,5173881320],"tags":{"amenity":"parking"}},{"type":"way","id":533276309,"timestamp":"2017-10-17T23:36:18Z","version":1,"changeset":53027174,"user":"Pieter Vander Vennet","uid":3818858,"nodes":[5173881624,5173881625,5173881626,5173881627,5173881624],"tags":{"amenity":"parking"}},{"type":"way","id":579848581,"timestamp":"2020-04-05T07:08:57Z","version":6,"changeset":83089516,"user":"Hopperpop","uid":3664604,"nodes":[4043782112,5825400688,5552466020,6997096756,6997096759,6997096758,5552466018,5552466013,5552466014,6997076567,4043782112],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":584455569,"timestamp":"2019-10-31T19:49:18Z","version":2,"changeset":76465627,"user":"Hopperpop","uid":3664604,"nodes":[5586765933,5586765934,5586765935,5586765936,5586765933],"tags":{"amenity":"parking"}},{"type":"way","id":585977870,"timestamp":"2019-10-11T13:28:22Z","version":2,"changeset":75566739,"user":"Hopperpop","uid":3664604,"nodes":[5587844460,5599314384,5599314385,1659850846,6870850178,5587844462,5587844461,6870863414,5587844460],"tags":{"amenity":"parking"}},{"type":"way","id":587014342,"timestamp":"2018-05-09T19:13:29Z","version":1,"changeset":58829130,"user":"Sille Van Landschoot","uid":4852501,"nodes":[5607796820,5607798725,5607798721,5607798722,5607796819,5607798723,5607796820],"tags":{"access":"permissive","amenity":"parking","park_ride":"no","parking":"surface","surface":"paved"}},{"type":"way","id":590167103,"timestamp":"2018-05-22T12:37:36Z","version":1,"changeset":59179114,"user":"ForstEK","uid":1737608,"nodes":[5635001277,5635001274,5635001275,5635001276,5635001277],"tags":{"amenity":"parking"}},{"type":"way","id":590167113,"timestamp":"2020-07-29T17:45:20Z","version":2,"changeset":88691835,"user":"JanFi","uid":672253,"nodes":[5635001312,5635001306,7767137237,7767137235,7767137236,7767137234,5635001312],"tags":{"amenity":"parking"}},{"type":"way","id":590167134,"timestamp":"2018-05-22T12:37:37Z","version":1,"changeset":59179114,"user":"ForstEK","uid":1737608,"nodes":[5635001374,5635001373,5635001372,5635001371,5635001374],"tags":{"amenity":"parking"}},{"type":"way","id":590167135,"timestamp":"2018-05-22T12:37:37Z","version":1,"changeset":59179114,"user":"ForstEK","uid":1737608,"nodes":[5635001378,5635001377,5635001376,5635001375,5635001378],"tags":{"amenity":"parking"}},{"type":"way","id":590167136,"timestamp":"2018-05-22T12:37:37Z","version":1,"changeset":59179114,"user":"ForstEK","uid":1737608,"nodes":[5635001382,5635001381,5635001380,5635001379,5635001382],"tags":{"amenity":"parking"}},{"type":"way","id":590167137,"timestamp":"2019-07-06T15:58:19Z","version":3,"changeset":71962591,"user":"gjosch","uid":1776978,"nodes":[5635001386,5882873336,5882873337,5882873338,5882873335,6593340582,6593340583,5882873334,6593340584,5635001385,5635001384,5635001383,5635001386],"tags":{"amenity":"parking"}},{"type":"way","id":590167147,"timestamp":"2018-05-22T12:37:38Z","version":1,"changeset":59179114,"user":"ForstEK","uid":1737608,"nodes":[5635001417,5635001414,5635001415,5635001416,5635001417],"tags":{"amenity":"parking"}},{"type":"way","id":601406079,"timestamp":"2018-06-24T22:15:06Z","version":1,"changeset":60131072,"user":"Pieter Vander Vennet","uid":3818858,"nodes":[5716136617,5716136618,5716136619,5716136620,5716136617],"tags":{"amenity":"parking"}},{"type":"way","id":632813009,"timestamp":"2018-10-11T09:24:42Z","version":1,"changeset":63409297,"user":"Jakka","uid":2403313,"nodes":[5974489618,1810326044,1810326087,5974489617,5972179348,5972179347,5972179346,5972179345,5972179344,5972179343,5972179331,5974489616,5974489615,5974489614,5974489618],"tags":{"amenity":"parking","name":"Gemeenteplein","parking":"surface"}},{"type":"way","id":668043297,"timestamp":"2019-04-10T18:34:27Z","version":2,"changeset":69093378,"user":"RudolpheDeer","uid":9408828,"nodes":[6255587424,6255587425,6255587426,6255587427,6255587424],"tags":{"access":"private","amenity":"parking"}},{"type":"way","id":670104236,"timestamp":"2019-02-13T00:05:02Z","version":1,"changeset":67147239,"user":"Pieter Vander Vennet","uid":3818858,"nodes":[6275462768,6275462769,6275462770,6275462771,6275462768],"tags":{"amenity":"parking"}},{"type":"way","id":670104238,"timestamp":"2019-02-13T00:05:02Z","version":1,"changeset":67147239,"user":"Pieter Vander Vennet","uid":3818858,"nodes":[6275462772,6275462989,6275462773,6275462774,6275462775,6275462772],"tags":{"amenity":"parking"}},{"type":"way","id":670104239,"timestamp":"2019-02-13T00:05:02Z","version":1,"changeset":67147239,"user":"Pieter Vander Vennet","uid":3818858,"nodes":[6275462776,6275462777,6275462778,6275462779,6275462776],"tags":{"amenity":"parking"}},{"type":"way","id":670104241,"timestamp":"2019-02-13T00:05:02Z","version":1,"changeset":67147239,"user":"Pieter Vander Vennet","uid":3818858,"nodes":[6275462780,6275462781,6275462782,6275462783,6275462780],"tags":{"amenity":"parking"}},{"type":"way","id":670104242,"timestamp":"2019-02-13T00:05:02Z","version":1,"changeset":67147239,"user":"Pieter Vander Vennet","uid":3818858,"nodes":[6275462784,6275462985,6275462988,6275462986,6275462987,6275462784],"tags":{"amenity":"parking"}},{"type":"way","id":671840055,"timestamp":"2019-02-20T15:15:45Z","version":1,"changeset":67395313,"user":"Tim Couwelier","uid":7246683,"nodes":[6291339827,6291339828,6291339816,6291339815,6291339822,6291339821,6291339829,6291339830,6291339827],"tags":{"amenity":"parking"}},{"type":"way","id":695825223,"timestamp":"2019-06-08T15:19:24Z","version":1,"changeset":71053301,"user":"Hopperpop","uid":3664604,"nodes":[1519476746,6533893620,6533893621,6533893622,1519476797,1519476620,1519476746],"tags":{"access":"yes","amenity":"parking"}},{"type":"way","id":695825224,"timestamp":"2019-06-08T15:19:24Z","version":1,"changeset":71053301,"user":"Hopperpop","uid":3664604,"nodes":[1519476744,6533893624,6533893625,6533893626,1519476698,1519476635,1519476744],"tags":{"access":"yes","amenity":"parking"}},{"type":"way","id":696040917,"timestamp":"2019-06-09T23:24:59Z","version":2,"changeset":71082992,"user":"Hopperpop","uid":3664604,"nodes":[6536026850,6536026851,6536026852,6536026853,6536026850],"tags":{"amenity":"parking","name":"Kasteel Tudor"}},{"type":"way","id":696043218,"timestamp":"2019-06-09T23:24:59Z","version":1,"changeset":71082992,"user":"Hopperpop","uid":3664604,"nodes":[6536038234,6536038235,6536038236,6536038237,6536038234],"tags":{"access":"customers","amenity":"parking"}},{"type":"way","id":700675991,"timestamp":"2020-12-18T10:48:20Z","version":2,"changeset":96062619,"user":"Hopperpop","uid":3664604,"nodes":[6579962064,6579962065,6579962066,6579962068,6579962067,6579962064],"tags":{"access":"private","amenity":"parking","parking":"surface"}},{"type":"way","id":705278707,"timestamp":"2020-09-30T20:36:55Z","version":2,"changeset":91787895,"user":"L'imaginaire","uid":654234,"nodes":[6625037999,6625038000,6625038001,6625038002,6625038003,6004375826,6625038005,6625038006,6625037999],"tags":{"amenity":"parking"}},{"type":"way","id":719482833,"timestamp":"2019-08-28T21:18:49Z","version":1,"changeset":73857967,"user":"Hopperpop","uid":3664604,"nodes":[6754312544,6754312543,6754312542,6754312541,6754312544],"tags":{"access":"yes","amenity":"parking","capacity":"5"}},{"type":"way","id":719482834,"timestamp":"2019-08-28T21:18:49Z","version":1,"changeset":73857967,"user":"Hopperpop","uid":3664604,"nodes":[6754312565,6754312564,6754312563,6754312562,6754312565],"tags":{"access":"yes","amenity":"parking","capacity":"12"}},{"type":"way","id":737054013,"timestamp":"2019-10-20T15:39:32Z","version":1,"changeset":75957554,"user":"Hopperpop","uid":3664604,"nodes":[5826811496,5826811497,5826811494,5826811495,5826811496],"tags":{"amenity":"parking"}},{"type":"way","id":737054014,"timestamp":"2019-10-20T15:39:32Z","version":1,"changeset":75957554,"user":"Hopperpop","uid":3664604,"nodes":[5826810676,5826810673,5826810674,5826810675,5826810676],"tags":{"amenity":"parking"}},{"type":"way","id":737054015,"timestamp":"2019-10-20T15:39:32Z","version":1,"changeset":75957554,"user":"Hopperpop","uid":3664604,"nodes":[5826810681,5826810678,5826810679,5826810680,5826810681],"tags":{"amenity":"parking"}},{"type":"way","id":737093410,"timestamp":"2021-08-14T21:52:07Z","version":2,"changeset":109683899,"user":"effem","uid":16437,"nodes":[5826811559,5826811536,5826811535,5826811561,5826811560,5826811559],"tags":{"access":"yes","amenity":"parking","capacity":"4","fee":"no","parking":"surface"}},{"type":"way","id":737093411,"timestamp":"2021-08-14T21:52:03Z","version":2,"changeset":109683899,"user":"effem","uid":16437,"nodes":[5826811551,5826811547,5826811548,5826811549,5826811550,5826811551],"tags":{"access":"yes","amenity":"parking","capacity":"4","fee":"no","parking":"surface"}},{"type":"way","id":739652949,"timestamp":"2019-10-28T20:18:16Z","version":1,"changeset":76314556,"user":"Hopperpop","uid":3664604,"nodes":[6925536542,6925536541,6925536540,6925536539,6925536542],"tags":{"amenity":"parking","capacity":"6","parking":"surface"}},{"type":"way","id":741675236,"timestamp":"2020-12-17T22:07:55Z","version":4,"changeset":96029554,"user":"Hopperpop","uid":3664604,"nodes":[6943148207,6943148206,6943148205,6943148204,1637742821,6943148203,6943148202,6943148201,6943148200,6943148199,6943148198,6943148197,6943148207],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":742295526,"timestamp":"2019-11-05T19:27:15Z","version":1,"changeset":76664875,"user":"Hopperpop","uid":3664604,"nodes":[6949357909,6949357908,6949357907,6949357906,6949357909],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":742295527,"timestamp":"2019-11-05T19:27:15Z","version":1,"changeset":76664875,"user":"Hopperpop","uid":3664604,"nodes":[6949357913,6949357912,6949357911,6949357910,6949357913],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":742295528,"timestamp":"2019-11-05T19:27:15Z","version":1,"changeset":76664875,"user":"Hopperpop","uid":3664604,"nodes":[6949357917,6949357916,6949357915,6949357914,6949357917],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":742295529,"timestamp":"2019-11-05T19:27:15Z","version":1,"changeset":76664875,"user":"Hopperpop","uid":3664604,"nodes":[6949357921,6949357920,6949357919,6949357918,6949357921],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":746170866,"timestamp":"2019-11-16T15:27:02Z","version":1,"changeset":77167609,"user":"Hopperpop","uid":3664604,"nodes":[6982906547,6982906546,6982906545,6982906544,6982906543,6982906542,6982906547],"tags":{"access":"customers","amenity":"parking"}},{"type":"way","id":747880657,"timestamp":"2021-09-19T12:40:45Z","version":2,"changeset":111407274,"user":"Hopperpop","uid":3664604,"nodes":[3325315397,6997076566,6997076565,6997076563,6997076562,6997076564,3325315395,3325315397],"tags":{"access":"customers","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":763977465,"timestamp":"2020-12-17T21:59:46Z","version":2,"changeset":96029554,"user":"Hopperpop","uid":3664604,"nodes":[7137343680,7137343681,7137343682,7137343683,7137343680],"tags":{"access":"private","amenity":"parking","parking":"surface"}},{"type":"way","id":763977466,"timestamp":"2020-12-17T21:59:40Z","version":2,"changeset":96029554,"user":"Hopperpop","uid":3664604,"nodes":[7137343684,7137383185,7137383186,7137383187,7137343684],"tags":{"access":"private","amenity":"parking","parking":"surface"}},{"type":"way","id":803821090,"timestamp":"2020-05-14T17:37:10Z","version":1,"changeset":85215781,"user":"Hopperpop","uid":3664604,"nodes":[7519058290,7519058289,7519058288,7519058287,7519058290],"tags":{"access":"private","amenity":"parking","parking":"surface"}},{"type":"way","id":803821091,"timestamp":"2020-05-14T17:37:10Z","version":1,"changeset":85215781,"user":"Hopperpop","uid":3664604,"nodes":[7519058294,7519058293,7519058292,7519058291,7519058294],"tags":{"access":"private","amenity":"parking","parking":"surface"}},{"type":"way","id":803821092,"timestamp":"2020-05-14T17:37:10Z","version":1,"changeset":85215781,"user":"Hopperpop","uid":3664604,"nodes":[7519058298,7519058297,7519058296,7519058295,7519058298],"tags":{"access":"private","amenity":"parking","parking":"surface"}},{"type":"way","id":803821093,"timestamp":"2020-05-14T17:37:10Z","version":1,"changeset":85215781,"user":"Hopperpop","uid":3664604,"nodes":[7519058302,7519058301,7519058300,7519058299,7519058302],"tags":{"access":"private","amenity":"parking","capacity":"6","parking":"surface"}},{"type":"way","id":804963962,"timestamp":"2020-05-17T17:09:31Z","version":1,"changeset":85342199,"user":"Hopperpop","uid":3664604,"nodes":[7529417225,7529417226,7529417227,7529417228,7529417229,7529417230,7529417232,7529417225],"tags":{"access":"customers","amenity":"parking","fee":"no","operator":"’t Kiekekot","parking":"surface","surface":"unpaved"}},{"type":"way","id":806875503,"timestamp":"2020-05-21T15:48:37Z","version":1,"changeset":85563652,"user":"Hopperpop","uid":3664604,"nodes":[4042671969,7545532512,7545532514,7545532513,3359977305,4042671969],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":806963547,"timestamp":"2020-05-21T21:16:34Z","version":1,"changeset":85574048,"user":"Hopperpop","uid":3664604,"nodes":[7546193222,7546193221,7546193220,7546193219,7546193222],"tags":{"access":"private","amenity":"parking","parking":"surface"}},{"type":"way","id":865357121,"timestamp":"2020-10-30T14:45:23Z","version":1,"changeset":93296961,"user":"L'imaginaire","uid":654234,"nodes":[8065883228,8065883227,8065883226,8065883225,8065883228],"tags":{"amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":865357122,"timestamp":"2020-10-30T14:45:23Z","version":1,"changeset":93296961,"user":"L'imaginaire","uid":654234,"nodes":[8065883233,8065883230,8065883229,8065883232,8065883233],"tags":{"amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":879281221,"timestamp":"2020-11-30T14:18:18Z","version":1,"changeset":95050429,"user":"M!dgard","uid":763799,"nodes":[8179735269,8179735268,8179735267,8179735266,8179735265,8179735264,8179735224,8179735269],"tags":{"access":"customers","amenity":"parking","parking":"surface"}},{"type":"way","id":881770201,"timestamp":"2020-12-07T00:46:56Z","version":1,"changeset":95385582,"user":"Pieter Vander Vennet","uid":3818858,"nodes":[8200275847,8200275848,8200275844,8200275853,8200275849,8200275847],"tags":{"amenity":"parking","parking":"surface","surface":"grass"}},{"type":"way","id":978360549,"timestamp":"2021-09-01T08:53:08Z","version":1,"changeset":110553113,"user":"JanFi","uid":672253,"nodes":[5761770202,5761770204,9052878229,9052878228,5761770202],"tags":{"amenity":"parking"}},{"type":"way","id":1009692722,"timestamp":"2021-12-06T18:34:20Z","version":1,"changeset":114629990,"user":"L'imaginaire","uid":654234,"nodes":[9316118540,9316118536,9316118531,9316118535,9316118534,9316118533,9316118530,9316118532,3311835478,9316118540],"tags":{"amenity":"parking","parking":"street_side"}},{"type":"relation","id":8188853,"timestamp":"2020-07-05T12:38:48Z","version":13,"changeset":87554177,"user":"Pieter Vander Vennet","uid":3818858,"members":[{"type":"way","ref":577572397,"role":"outer"},{"type":"way","ref":577572399,"role":"outer"}],"tags":{"access":"guided","curator":"Luc Maene;Geert De Clercq","email":"lucmaene@hotmail.com;geert.de.clercq1@pandora.be","landuse":"meadow","leisure":"nature_reserve","name":"De Wulgenbroeken","natural":"wetland","operator":"Natuurpunt Brugge","type":"multipolygon","website":"https://natuurpuntbrugge.be/wulgenbroeken/","wetland":"wet_meadow","wikidata":"Q60061498","wikipedia":"nl:Wulgenbroeken"}},{"type":"relation","id":11163488,"timestamp":"2021-10-04T14:09:47Z","version":15,"changeset":112079863,"user":"DieterWesttoer","uid":13062237,"members":[{"type":"way","ref":810604915,"role":"outer"},{"type":"way","ref":989393316,"role":"outer"},{"type":"way","ref":389026405,"role":"inner"},{"type":"way","ref":810607458,"role":"outer"}],"tags":{"access":"yes","curator":"Kris Lesage","description":"Wat Doeveren zo uniek maakt, zijn zijn kleine heidegebiedjes met soorten die erg verschillen van de Kempense heide. Doeveren en omstreken was vroeger één groot heidegebied, maar bestaat nu grotendeels uit bossen.","dog":"leashed","email":"doeveren@natuurpuntzedelgem.be","image":"https://i.imgur.com/NEAsQZG.jpg","image:0":"https://i.imgur.com/Dq71hyQ.jpg","image:1":"https://i.imgur.com/mAIiT4f.jpg","image:2":"https://i.imgur.com/dELZU97.jpg","image:3":"https://i.imgur.com/Bso57JC.jpg","image:4":"https://i.imgur.com/9DtcfXo.jpg","image:5":"https://i.imgur.com/0R6eBfk.jpg","image:6":"https://i.imgur.com/b0JpvbR.jpg","leisure":"nature_reserve","name":"Doeveren","operator":"Natuurpunt Zedelgem","phone":"+32 486 25 25 30","type":"multipolygon","website":"https://www.natuurpuntzedelgem.be/gebieden/doeveren/","wikidata":"Q56395754","wikipedia":"nl:Doeveren (natuurgebied)"}},{"type":"relation","id":11790117,"timestamp":"2020-10-24T19:11:01Z","version":1,"changeset":92997462,"user":"Pieter Vander Vennet","uid":3818858,"members":[{"type":"way","ref":863373849,"role":"outer"},{"type":"way","ref":777280458,"role":"outer"}],"tags":{"access":"no","description:0":"In gebruik als waterbuffering","leisure":"nature_reserve","name":"Kerkebeek","operator":"Natuurpunt Brugge","type":"multipolygon"}},{"type":"node","id":1038638696,"lat":51.1197075,"lon":3.1827007},{"type":"node","id":7578975029,"lat":51.1199041,"lon":3.1828945},{"type":"node","id":7578975030,"lat":51.1201514,"lon":3.1831942},{"type":"node","id":1038638743,"lat":51.1202445,"lon":3.1894878},{"type":"node","id":7578975002,"lat":51.1202598,"lon":3.1897155},{"type":"node","id":7578975007,"lat":51.1199771,"lon":3.1863015},{"type":"node","id":7578975008,"lat":51.1199523,"lon":3.1863031},{"type":"node","id":7578975009,"lat":51.1199279,"lon":3.1859524},{"type":"node","id":1168728109,"lat":51.1275839,"lon":3.1765505},{"type":"node","id":1168728158,"lat":51.1278835,"lon":3.1763986},{"type":"node","id":1168728159,"lat":51.1276298,"lon":3.1767808},{"type":"node","id":5637669355,"lat":51.1276039,"lon":3.1766509},{"type":"node","id":1038638723,"lat":51.1272818,"lon":3.184601},{"type":"node","id":7554434438,"lat":51.1225298,"lon":3.1847624},{"type":"node","id":7578865273,"lat":51.122084,"lon":3.1846859},{"type":"node","id":7578975032,"lat":51.1215762,"lon":3.1842866},{"type":"node","id":1168727876,"lat":51.1290569,"lon":3.1766033},{"type":"node","id":1168728208,"lat":51.1289763,"lon":3.1767696},{"type":"node","id":1168728288,"lat":51.1291195,"lon":3.1766799},{"type":"node","id":1168728325,"lat":51.1279295,"lon":3.1766288},{"type":"node","id":1168728412,"lat":51.1290389,"lon":3.1768463},{"type":"node","id":1038638712,"lat":51.1282367,"lon":3.1840296},{"type":"node","id":1168727824,"lat":51.1312478,"lon":3.182233},{"type":"node","id":3922375256,"lat":51.1301155,"lon":3.1848042},{"type":"node","id":3922380071,"lat":51.1304048,"lon":3.1838954},{"type":"node","id":3922380081,"lat":51.1305694,"lon":3.1845093},{"type":"node","id":3922380086,"lat":51.1306445,"lon":3.1848152},{"type":"node","id":3922380092,"lat":51.1307378,"lon":3.1849591},{"type":"node","id":7577430793,"lat":51.1289492,"lon":3.1836032},{"type":"node","id":7578975024,"lat":51.1299598,"lon":3.1841704},{"type":"node","id":7578975028,"lat":51.1322547,"lon":3.1833542},{"type":"node","id":7578975049,"lat":51.1313772,"lon":3.1838431},{"type":"node","id":9167054153,"lat":51.1310258,"lon":3.1823668},{"type":"node","id":9167054154,"lat":51.13145,"lon":3.1841492},{"type":"node","id":9167054156,"lat":51.1316731,"lon":3.1850331},{"type":"node","id":9274761589,"lat":51.1297088,"lon":3.1831312},{"type":"node","id":9274761596,"lat":51.1296735,"lon":3.1831518},{"type":"node","id":929120698,"lat":51.1276376,"lon":3.1903134},{"type":"node","id":1038638592,"lat":51.1264889,"lon":3.19027},{"type":"node","id":1038638661,"lat":51.1258582,"lon":3.1854626},{"type":"node","id":1038638721,"lat":51.125636,"lon":3.1855855},{"type":"node","id":1038638753,"lat":51.123845,"lon":3.1880289},{"type":"node","id":3921878998,"lat":51.1255719,"lon":3.1902463},{"type":"node","id":3921879004,"lat":51.1275463,"lon":3.188843},{"type":"node","id":3921879011,"lat":51.1271626,"lon":3.1872368},{"type":"node","id":3921879019,"lat":51.1277666,"lon":3.1868505},{"type":"node","id":7554434436,"lat":51.1252645,"lon":3.1852941},{"type":"node","id":7578865274,"lat":51.1230564,"lon":3.187978},{"type":"node","id":7578865275,"lat":51.1226417,"lon":3.188075},{"type":"node","id":7578904489,"lat":51.1247504,"lon":3.1900249},{"type":"node","id":7578974988,"lat":51.1223221,"lon":3.1906513},{"type":"node","id":7578974989,"lat":51.1224255,"lon":3.1905646},{"type":"node","id":7578974990,"lat":51.1224672,"lon":3.1905195},{"type":"node","id":7578974991,"lat":51.1228709,"lon":3.1901867},{"type":"node","id":7578974992,"lat":51.1229568,"lon":3.1901459},{"type":"node","id":7578974995,"lat":51.123814,"lon":3.1899138},{"type":"node","id":7578974996,"lat":51.1239199,"lon":3.189925},{"type":"node","id":7578974997,"lat":51.1244111,"lon":3.1899686},{"type":"node","id":7578974998,"lat":51.1248503,"lon":3.190215},{"type":"node","id":7578974999,"lat":51.1247917,"lon":3.1900516},{"type":"node","id":7578975000,"lat":51.1248293,"lon":3.1900978},{"type":"node","id":7578975001,"lat":51.1248444,"lon":3.1901483},{"type":"node","id":7578975035,"lat":51.1250798,"lon":3.1851611},{"type":"node","id":7578975045,"lat":51.1278881,"lon":3.1882941},{"type":"node","id":9199177059,"lat":51.1256647,"lon":3.1855696},{"type":"node","id":7578987409,"lat":51.1232707,"lon":3.1920382},{"type":"node","id":7578987413,"lat":51.1260416,"lon":3.1973652},{"type":"node","id":7578987414,"lat":51.1263443,"lon":3.1973775},{"type":"node","id":7578987416,"lat":51.1278708,"lon":3.1974134},{"type":"node","id":7578987417,"lat":51.126749,"lon":3.197258},{"type":"node","id":1675648152,"lat":51.1281877,"lon":3.1903323},{"type":"node","id":2732486274,"lat":51.1302553,"lon":3.1886305},{"type":"node","id":3921879018,"lat":51.1280809,"lon":3.188102},{"type":"node","id":3922380061,"lat":51.1301929,"lon":3.1895402},{"type":"node","id":3922380083,"lat":51.1305788,"lon":3.1884337},{"type":"node","id":3922380095,"lat":51.130784,"lon":3.1852632},{"type":"node","id":7578865281,"lat":51.1283938,"lon":3.1903716},{"type":"node","id":7578865283,"lat":51.1288414,"lon":3.1904911},{"type":"node","id":7578960079,"lat":51.1303025,"lon":3.1855669},{"type":"node","id":7578975012,"lat":51.1294792,"lon":3.1906231},{"type":"node","id":7578975015,"lat":51.1297374,"lon":3.1907018},{"type":"node","id":7578975016,"lat":51.1300451,"lon":3.1907679},{"type":"node","id":7578975018,"lat":51.1305785,"lon":3.186668},{"type":"node","id":7578975019,"lat":51.130956,"lon":3.1881852},{"type":"node","id":7578975021,"lat":51.1303082,"lon":3.1855908},{"type":"node","id":7578975026,"lat":51.1310167,"lon":3.1861981},{"type":"node","id":7578975027,"lat":51.1318642,"lon":3.1857905},{"type":"node","id":7578975040,"lat":51.1280348,"lon":3.1889503},{"type":"node","id":7578975044,"lat":51.1279308,"lon":3.1875031},{"type":"node","id":7578975046,"lat":51.1279329,"lon":3.1881992},{"type":"node","id":9167054157,"lat":51.1308023,"lon":3.1852517},{"type":"node","id":9274761591,"lat":51.1310994,"lon":3.1862668},{"type":"node","id":9274761592,"lat":51.1310643,"lon":3.1862655},{"type":"node","id":9274761593,"lat":51.1310386,"lon":3.1862393},{"type":"node","id":7578987418,"lat":51.128003,"lon":3.1959031},{"type":"node","id":7578987419,"lat":51.1282167,"lon":3.193723},{"type":"node","id":5745833239,"lat":51.1258572,"lon":3.1996713},{"type":"node","id":5745833240,"lat":51.1257519,"lon":3.1995939},{"type":"node","id":5745833241,"lat":51.1253365,"lon":3.1991234},{"type":"node","id":7578987410,"lat":51.1243814,"lon":3.1988516},{"type":"node","id":7578987411,"lat":51.1243992,"lon":3.1989686},{"type":"node","id":7578987412,"lat":51.1259883,"lon":3.1997074},{"type":"node","id":7578987415,"lat":51.1260745,"lon":3.1997142},{"type":"node","id":1590642829,"lat":51.1333867,"lon":3.2308055},{"type":"node","id":1590642832,"lat":51.1334371,"lon":3.2308262},{"type":"node","id":1590642849,"lat":51.1336392,"lon":3.2305316},{"type":"node","id":1590642858,"lat":51.133659,"lon":3.2303991},{"type":"node","id":1590642859,"lat":51.1336899,"lon":3.2305508},{"type":"node","id":1590642860,"lat":51.1337096,"lon":3.2304183},{"type":"node","id":1590642828,"lat":51.1333653,"lon":3.2309374},{"type":"node","id":1590642830,"lat":51.1334157,"lon":3.2309581},{"type":"node","id":3311835478,"lat":51.133195,"lon":3.2334351},{"type":"node","id":9316118530,"lat":51.1331607,"lon":3.2333604},{"type":"node","id":9316118531,"lat":51.1330927,"lon":3.2334241},{"type":"node","id":9316118532,"lat":51.1331767,"lon":3.233347},{"type":"node","id":9316118533,"lat":51.133147,"lon":3.2333808},{"type":"node","id":9316118534,"lat":51.1331302,"lon":3.2334006},{"type":"node","id":9316118535,"lat":51.1331127,"lon":3.2334144},{"type":"node","id":9316118536,"lat":51.1330784,"lon":3.2334281},{"type":"node","id":9316118540,"lat":51.1330946,"lon":3.2335103},{"type":"node","id":6579962064,"lat":51.1367061,"lon":3.1640546},{"type":"node","id":6579962065,"lat":51.1361156,"lon":3.1646435},{"type":"node","id":6579962066,"lat":51.1357413,"lon":3.1637334},{"type":"node","id":6579962067,"lat":51.1359511,"lon":3.1637408},{"type":"node","id":6579962068,"lat":51.1359389,"lon":3.1638093},{"type":"node","id":7546193219,"lat":51.1456739,"lon":3.1637073},{"type":"node","id":7546193220,"lat":51.1455706,"lon":3.1643444},{"type":"node","id":7546193221,"lat":51.1456623,"lon":3.1643821},{"type":"node","id":7546193222,"lat":51.1457656,"lon":3.1637451},{"type":"node","id":3359977305,"lat":51.1464982,"lon":3.1689911},{"type":"node","id":4042671969,"lat":51.1461398,"lon":3.169233},{"type":"node","id":7545532512,"lat":51.1463103,"lon":3.169498},{"type":"node","id":7545532513,"lat":51.1466008,"lon":3.1695349},{"type":"node","id":7545532514,"lat":51.1464331,"lon":3.16962},{"type":"node","id":8200275848,"lat":51.1409105,"lon":3.1800288},{"type":"node","id":8200275844,"lat":51.1416967,"lon":3.1797728},{"type":"node","id":8200275847,"lat":51.1411211,"lon":3.1805153},{"type":"node","id":8200275849,"lat":51.1417397,"lon":3.1802115},{"type":"node","id":8200275853,"lat":51.1417351,"lon":3.1801651},{"type":"node","id":111759500,"lat":51.1483444,"lon":3.1886487},{"type":"node","id":1169056712,"lat":51.1482974,"lon":3.1884805},{"type":"node","id":3325315226,"lat":51.147926,"lon":3.1887015},{"type":"node","id":3325315230,"lat":51.1479856,"lon":3.1889124},{"type":"node","id":3325315232,"lat":51.1480454,"lon":3.1891027},{"type":"node","id":3325315243,"lat":51.1483285,"lon":3.1885919},{"type":"node","id":3325315247,"lat":51.1484007,"lon":3.1888131},{"type":"node","id":5826810673,"lat":51.1512507,"lon":3.1914885},{"type":"node","id":5826810674,"lat":51.15126,"lon":3.1914533},{"type":"node","id":5826810675,"lat":51.1510883,"lon":3.1912776},{"type":"node","id":5826810676,"lat":51.151057,"lon":3.1912906},{"type":"node","id":5826810678,"lat":51.1509897,"lon":3.1911759},{"type":"node","id":5826810679,"lat":51.1510025,"lon":3.1911334},{"type":"node","id":5826810680,"lat":51.1509352,"lon":3.1908874},{"type":"node","id":5826810681,"lat":51.1509074,"lon":3.1908689},{"type":"node","id":5826811494,"lat":51.1512125,"lon":3.1911315},{"type":"node","id":5826811495,"lat":51.1512055,"lon":3.191187},{"type":"node","id":5826811496,"lat":51.151296,"lon":3.1914182},{"type":"node","id":5826811497,"lat":51.1513261,"lon":3.1914182},{"type":"node","id":5826811535,"lat":51.1517839,"lon":3.1959375},{"type":"node","id":5826811536,"lat":51.1518581,"lon":3.1959708},{"type":"node","id":5826811547,"lat":51.1515913,"lon":3.196115},{"type":"node","id":5826811548,"lat":51.1516307,"lon":3.1961465},{"type":"node","id":5826811549,"lat":51.1516435,"lon":3.1961076},{"type":"node","id":5826811550,"lat":51.1516087,"lon":3.1959541},{"type":"node","id":5826811551,"lat":51.1515437,"lon":3.1959024},{"type":"node","id":5826811559,"lat":51.1517896,"lon":3.1957717},{"type":"node","id":5826811560,"lat":51.1517417,"lon":3.1957528},{"type":"node","id":5826811561,"lat":51.1517365,"lon":3.1957872},{"type":"node","id":3325315395,"lat":51.1544187,"lon":3.1856685},{"type":"node","id":3325315397,"lat":51.1545358,"lon":3.1860117},{"type":"node","id":3930713426,"lat":51.1571474,"lon":3.1889324},{"type":"node","id":3930713429,"lat":51.1573669,"lon":3.1883265},{"type":"node","id":3930713430,"lat":51.1573202,"lon":3.1890776},{"type":"node","id":3930713435,"lat":51.1574561,"lon":3.1883916},{"type":"node","id":3930713437,"lat":51.1574971,"lon":3.1893349},{"type":"node","id":3930713438,"lat":51.1574907,"lon":3.1884223},{"type":"node","id":3930713440,"lat":51.1575693,"lon":3.1890951},{"type":"node","id":3930713442,"lat":51.1575932,"lon":3.1879961},{"type":"node","id":3930713446,"lat":51.1577118,"lon":3.1885611},{"type":"node","id":3930713447,"lat":51.157698,"lon":3.1894886},{"type":"node","id":3930713451,"lat":51.1577702,"lon":3.1892488},{"type":"node","id":3930713454,"lat":51.1577969,"lon":3.1882567},{"type":"node","id":4043782112,"lat":51.1549447,"lon":3.1864571},{"type":"node","id":5552466013,"lat":51.1545783,"lon":3.1874672},{"type":"node","id":5552466014,"lat":51.1543143,"lon":3.1873045},{"type":"node","id":5552466018,"lat":51.1545999,"lon":3.1873846},{"type":"node","id":5552466020,"lat":51.1548079,"lon":3.1868846},{"type":"node","id":5825400688,"lat":51.1549303,"lon":3.1867969},{"type":"node","id":5826811614,"lat":51.1572659,"lon":3.1885288},{"type":"node","id":6949357906,"lat":51.1572911,"lon":3.1915323},{"type":"node","id":6949357909,"lat":51.1573109,"lon":3.1914572},{"type":"node","id":6949357910,"lat":51.1574373,"lon":3.1913744},{"type":"node","id":6949357911,"lat":51.1574179,"lon":3.1914502},{"type":"node","id":6949357912,"lat":51.1575109,"lon":3.1915112},{"type":"node","id":6949357913,"lat":51.1575304,"lon":3.1914354},{"type":"node","id":6949357914,"lat":51.1574638,"lon":3.1912712},{"type":"node","id":6949357915,"lat":51.1574444,"lon":3.1913473},{"type":"node","id":6949357916,"lat":51.1575599,"lon":3.191423},{"type":"node","id":6949357917,"lat":51.1575803,"lon":3.1913473},{"type":"node","id":6949357918,"lat":51.157501,"lon":3.1911303},{"type":"node","id":6949357919,"lat":51.1574808,"lon":3.1912058},{"type":"node","id":6949357920,"lat":51.1577374,"lon":3.1913724},{"type":"node","id":6949357921,"lat":51.1577563,"lon":3.1912987},{"type":"node","id":6982605752,"lat":51.1574664,"lon":3.1885975},{"type":"node","id":6982605754,"lat":51.1574428,"lon":3.1885793},{"type":"node","id":6982605762,"lat":51.1576066,"lon":3.1884793},{"type":"node","id":6982605764,"lat":51.1576853,"lon":3.18854},{"type":"node","id":6982605766,"lat":51.1575125,"lon":3.1884502},{"type":"node","id":6982605767,"lat":51.1575959,"lon":3.1885145},{"type":"node","id":6982605769,"lat":51.1575152,"lon":3.1884412},{"type":"node","id":6982906542,"lat":51.1591649,"lon":3.1904238},{"type":"node","id":6982906543,"lat":51.1592937,"lon":3.1905221},{"type":"node","id":6982906544,"lat":51.1593438,"lon":3.1903659},{"type":"node","id":6982906545,"lat":51.1593158,"lon":3.1903453},{"type":"node","id":6982906546,"lat":51.1593351,"lon":3.1902852},{"type":"node","id":6982906547,"lat":51.1592385,"lon":3.1902052},{"type":"node","id":6997076562,"lat":51.1546633,"lon":3.1858333},{"type":"node","id":6997076563,"lat":51.1546293,"lon":3.1858642},{"type":"node","id":6997076564,"lat":51.154594,"lon":3.1856715},{"type":"node","id":6997076565,"lat":51.1546727,"lon":3.1859889},{"type":"node","id":6997076566,"lat":51.1545545,"lon":3.1860687},{"type":"node","id":6997076567,"lat":51.1543063,"lon":3.1869337},{"type":"node","id":6997096756,"lat":51.1547387,"lon":3.1868376},{"type":"node","id":6997096758,"lat":51.1546899,"lon":3.1870707},{"type":"node","id":6997096759,"lat":51.1546751,"lon":3.1870601},{"type":"node","id":7137343680,"lat":51.1558646,"lon":3.1876808},{"type":"node","id":7137343681,"lat":51.1558466,"lon":3.1877456},{"type":"node","id":7137343682,"lat":51.1555824,"lon":3.187559},{"type":"node","id":7137343683,"lat":51.1556004,"lon":3.1874941},{"type":"node","id":7137343684,"lat":51.1555549,"lon":3.1874612},{"type":"node","id":7137383185,"lat":51.1555369,"lon":3.1875268},{"type":"node","id":7137383186,"lat":51.1553925,"lon":3.1874261},{"type":"node","id":7137383187,"lat":51.1554105,"lon":3.1873604},{"type":"node","id":7519058287,"lat":51.1555296,"lon":3.1858152},{"type":"node","id":7519058288,"lat":51.1555027,"lon":3.1858752},{"type":"node","id":7519058289,"lat":51.1556329,"lon":3.1860234},{"type":"node","id":7519058290,"lat":51.1556597,"lon":3.1859634},{"type":"node","id":7519058291,"lat":51.1557039,"lon":3.1860155},{"type":"node","id":7519058292,"lat":51.1556789,"lon":3.1860736},{"type":"node","id":7519058293,"lat":51.1558105,"lon":3.1862177},{"type":"node","id":7519058294,"lat":51.1558355,"lon":3.1861597},{"type":"node","id":7519058295,"lat":51.1557209,"lon":3.185828},{"type":"node","id":7519058296,"lat":51.1556932,"lon":3.1858902},{"type":"node","id":7519058297,"lat":51.1558686,"lon":3.1860888},{"type":"node","id":7519058298,"lat":51.1558963,"lon":3.1860265},{"type":"node","id":7519058299,"lat":51.1555421,"lon":3.1856365},{"type":"node","id":7519058300,"lat":51.1555168,"lon":3.1856923},{"type":"node","id":7519058301,"lat":51.1556479,"lon":3.1858437},{"type":"node","id":7519058302,"lat":51.1556732,"lon":3.1857879},{"type":"node","id":150996092,"lat":51.1554945,"lon":3.1954639},{"type":"node","id":150996093,"lat":51.155531,"lon":3.1953168},{"type":"node","id":150996094,"lat":51.1554912,"lon":3.1943936},{"type":"node","id":150996095,"lat":51.155456,"lon":3.1942488},{"type":"node","id":150996097,"lat":51.155432,"lon":3.1942095},{"type":"node","id":150996098,"lat":51.155397,"lon":3.1941906},{"type":"node","id":150996099,"lat":51.1552938,"lon":3.1945134},{"type":"node","id":150996100,"lat":51.1552701,"lon":3.1949002},{"type":"node","id":150996101,"lat":51.1553901,"lon":3.1953415},{"type":"node","id":1015567837,"lat":51.1603457,"lon":3.1926746},{"type":"node","id":1015583939,"lat":51.1598982,"lon":3.1934595},{"type":"node","id":1659850846,"lat":51.1562462,"lon":3.1925019},{"type":"node","id":1811699776,"lat":51.1604859,"lon":3.1920734},{"type":"node","id":1811699777,"lat":51.1605587,"lon":3.1917984},{"type":"node","id":1817319289,"lat":51.1599853,"lon":3.1935159},{"type":"node","id":1817319290,"lat":51.1600476,"lon":3.1933385},{"type":"node","id":1817319291,"lat":51.1600745,"lon":3.1934309},{"type":"node","id":1817319292,"lat":51.1602073,"lon":3.1941751},{"type":"node","id":1817319293,"lat":51.160208,"lon":3.1941098},{"type":"node","id":1817319294,"lat":51.1602178,"lon":3.1935425},{"type":"node","id":1817319295,"lat":51.1602385,"lon":3.19297},{"type":"node","id":1817319296,"lat":51.1602972,"lon":3.1940248},{"type":"node","id":1817319297,"lat":51.1603313,"lon":3.193809},{"type":"node","id":1817319298,"lat":51.1603427,"lon":3.1930326},{"type":"node","id":1817319299,"lat":51.1603716,"lon":3.1940192},{"type":"node","id":1817319300,"lat":51.1603777,"lon":3.1946319},{"type":"node","id":1817319301,"lat":51.1604665,"lon":3.193304},{"type":"node","id":1817319302,"lat":51.1604758,"lon":3.1939077},{"type":"node","id":1817319303,"lat":51.1605421,"lon":3.194476},{"type":"node","id":1817319304,"lat":51.1606037,"lon":3.1933895},{"type":"node","id":1817320493,"lat":51.1604248,"lon":3.1927398},{"type":"node","id":1817320494,"lat":51.1604851,"lon":3.192495},{"type":"node","id":2451569392,"lat":51.1598651,"lon":3.1919974},{"type":"node","id":2451574741,"lat":51.1594995,"lon":3.1924908},{"type":"node","id":2451574742,"lat":51.1596217,"lon":3.1923259},{"type":"node","id":2451574743,"lat":51.1597161,"lon":3.1922023},{"type":"node","id":2451574744,"lat":51.1600391,"lon":3.1932123},{"type":"node","id":2451574745,"lat":51.1601904,"lon":3.192947},{"type":"node","id":2451574746,"lat":51.1603862,"lon":3.1925461},{"type":"node","id":2451574747,"lat":51.1604272,"lon":3.19257},{"type":"node","id":2451574748,"lat":51.1604837,"lon":3.1921535},{"type":"node","id":2451574749,"lat":51.1605266,"lon":3.1921769},{"type":"node","id":2451578121,"lat":51.159758,"lon":3.1921448},{"type":"node","id":5587844460,"lat":51.1562664,"lon":3.1919544},{"type":"node","id":5587844461,"lat":51.15612,"lon":3.1920681},{"type":"node","id":5587844462,"lat":51.1561808,"lon":3.1922614},{"type":"node","id":5599314384,"lat":51.1563882,"lon":3.1923707},{"type":"node","id":5599314385,"lat":51.1563587,"lon":3.1924465},{"type":"node","id":6754312541,"lat":51.154716,"lon":3.1952084},{"type":"node","id":6754312542,"lat":51.1547723,"lon":3.1953372},{"type":"node","id":6754312543,"lat":51.1548078,"lon":3.1952983},{"type":"node","id":6754312544,"lat":51.1547519,"lon":3.1951702},{"type":"node","id":6754312550,"lat":51.1555879,"lon":3.1950341},{"type":"node","id":6754312551,"lat":51.1556025,"lon":3.194956},{"type":"node","id":6754312552,"lat":51.1555664,"lon":3.1952408},{"type":"node","id":6754312553,"lat":51.1556188,"lon":3.1951751},{"type":"node","id":6754312554,"lat":51.1554565,"lon":3.195427},{"type":"node","id":6754312555,"lat":51.1552894,"lon":3.1950649},{"type":"node","id":6754312556,"lat":51.1553277,"lon":3.1951991},{"type":"node","id":6754312557,"lat":51.1552774,"lon":3.1947027},{"type":"node","id":6754312558,"lat":51.1553131,"lon":3.1943816},{"type":"node","id":6754312559,"lat":51.1553397,"lon":3.1942577},{"type":"node","id":6754312560,"lat":51.1553697,"lon":3.1942084},{"type":"node","id":6754312562,"lat":51.1548064,"lon":3.1954209},{"type":"node","id":6754312563,"lat":51.1548266,"lon":3.1954893},{"type":"node","id":6754312564,"lat":51.1550417,"lon":3.1953175},{"type":"node","id":6754312565,"lat":51.1550193,"lon":3.1952538},{"type":"node","id":6870850178,"lat":51.1561935,"lon":3.1923019},{"type":"node","id":6870863414,"lat":51.1562489,"lon":3.1919675},{"type":"node","id":6949357907,"lat":51.1575239,"lon":3.1916859},{"type":"node","id":6949357908,"lat":51.1575439,"lon":3.1916101},{"type":"node","id":1448421081,"lat":51.167491,"lon":3.1713256},{"type":"node","id":1448421091,"lat":51.1677042,"lon":3.1714548},{"type":"node","id":1448421093,"lat":51.1677455,"lon":3.1702529},{"type":"node","id":1448421099,"lat":51.1679647,"lon":3.1703977},{"type":"node","id":6536026850,"lat":51.1711159,"lon":3.1669401},{"type":"node","id":6536026851,"lat":51.1712692,"lon":3.167296},{"type":"node","id":6536026852,"lat":51.1711296,"lon":3.1674712},{"type":"node","id":6536026853,"lat":51.1709602,"lon":3.1671189},{"type":"node","id":6536038234,"lat":51.1711913,"lon":3.165543},{"type":"node","id":6536038235,"lat":51.1711301,"lon":3.1656263},{"type":"node","id":6536038236,"lat":51.1712318,"lon":3.1658161},{"type":"node","id":6536038237,"lat":51.171293,"lon":3.1657327},{"type":"node","id":1038583451,"lat":51.1625071,"lon":3.191602},{"type":"node","id":4044171936,"lat":51.1609177,"lon":3.1911926},{"type":"node","id":4044171941,"lat":51.1609801,"lon":3.191229},{"type":"node","id":4044171963,"lat":51.1611962,"lon":3.1913534},{"type":"node","id":903903386,"lat":51.1618084,"lon":3.1932127},{"type":"node","id":903903387,"lat":51.1623536,"lon":3.1936011},{"type":"node","id":903903388,"lat":51.1624429,"lon":3.1931156},{"type":"node","id":903903390,"lat":51.1618641,"lon":3.1930197},{"type":"node","id":903904576,"lat":51.1618211,"lon":3.1931711},{"type":"node","id":1038557012,"lat":51.16155,"lon":3.1931121},{"type":"node","id":1038557014,"lat":51.1613774,"lon":3.1930711},{"type":"node","id":1038557035,"lat":51.1615349,"lon":3.1931712},{"type":"node","id":1038557072,"lat":51.1616138,"lon":3.1927483},{"type":"node","id":1038557075,"lat":51.162286,"lon":3.1935989},{"type":"node","id":1038557078,"lat":51.1616517,"lon":3.1928439},{"type":"node","id":1038557083,"lat":51.1616055,"lon":3.1930249},{"type":"node","id":1038557094,"lat":51.1618993,"lon":3.193299},{"type":"node","id":1038557102,"lat":51.1613235,"lon":3.1927138},{"type":"node","id":1038557104,"lat":51.1615987,"lon":3.1928077},{"type":"node","id":1038557108,"lat":51.1615113,"lon":3.1926816},{"type":"node","id":1038557137,"lat":51.1608873,"lon":3.1924416},{"type":"node","id":1038557143,"lat":51.1622248,"lon":3.193662},{"type":"node","id":1038557191,"lat":51.1608171,"lon":3.1926951},{"type":"node","id":1038557195,"lat":51.162409,"lon":3.1933428},{"type":"node","id":1038557227,"lat":51.1613767,"lon":3.1925113},{"type":"node","id":1038557230,"lat":51.1615281,"lon":3.1926132},{"type":"node","id":1038557233,"lat":51.1619765,"lon":3.1933723},{"type":"node","id":1038575040,"lat":51.1608523,"lon":3.1925679},{"type":"node","id":1038583375,"lat":51.1625113,"lon":3.1926776},{"type":"node","id":1038583398,"lat":51.1624305,"lon":3.1925743},{"type":"node","id":1038583404,"lat":51.1627055,"lon":3.191826},{"type":"node","id":1038583425,"lat":51.1624272,"lon":3.1916637},{"type":"node","id":1038583441,"lat":51.1621479,"lon":3.1921546},{"type":"node","id":1038583446,"lat":51.1622018,"lon":3.1921814},{"type":"node","id":1038583456,"lat":51.162174,"lon":3.1922806},{"type":"node","id":1038583459,"lat":51.162259,"lon":3.1924885},{"type":"node","id":1038583463,"lat":51.162661,"lon":3.1917442},{"type":"node","id":1038583476,"lat":51.1626425,"lon":3.1918448},{"type":"node","id":1038583479,"lat":51.1624196,"lon":3.1926561},{"type":"node","id":1038583483,"lat":51.1625037,"lon":3.1927232},{"type":"node","id":1038583491,"lat":51.1625701,"lon":3.1926387},{"type":"node","id":1038583501,"lat":51.1624928,"lon":3.1917013},{"type":"node","id":1811673418,"lat":51.1618484,"lon":3.1950253},{"type":"node","id":1811673421,"lat":51.1619875,"lon":3.1951427},{"type":"node","id":1811673423,"lat":51.162144,"lon":3.193835},{"type":"node","id":1811673425,"lat":51.1622452,"lon":3.1939149},{"type":"node","id":1811699778,"lat":51.1608187,"lon":3.1922973},{"type":"node","id":1811699779,"lat":51.1608915,"lon":3.1920223},{"type":"node","id":1817320495,"lat":51.1607269,"lon":3.192929},{"type":"node","id":1817320496,"lat":51.1607872,"lon":3.1926841},{"type":"node","id":1817324488,"lat":51.1615575,"lon":3.1921423},{"type":"node","id":1817324489,"lat":51.1612682,"lon":3.1920196},{"type":"node","id":1817324491,"lat":51.1617501,"lon":3.1918468},{"type":"node","id":1817324505,"lat":51.1618272,"lon":3.1921231},{"type":"node","id":1817324509,"lat":51.1618658,"lon":3.191793},{"type":"node","id":1817324513,"lat":51.1619814,"lon":3.1920002},{"type":"node","id":1817324515,"lat":51.161985,"lon":3.191793},{"type":"node","id":3550860268,"lat":51.1617349,"lon":3.1921922},{"type":"node","id":3550860269,"lat":51.1619403,"lon":3.1920686},{"type":"node","id":4044171924,"lat":51.1608199,"lon":3.1916126},{"type":"node","id":4044171954,"lat":51.1610853,"lon":3.191781},{"type":"node","id":4044171957,"lat":51.1611433,"lon":3.1918701},{"type":"node","id":4044171962,"lat":51.1611926,"lon":3.1916807},{"type":"node","id":4044171976,"lat":51.1612826,"lon":3.1919582},{"type":"node","id":4044171997,"lat":51.1613568,"lon":3.1917787},{"type":"node","id":4044172003,"lat":51.1613248,"lon":3.1919027},{"type":"node","id":4044172008,"lat":51.1614345,"lon":3.1919767},{"type":"node","id":6397031888,"lat":51.1615029,"lon":3.1919851},{"type":"node","id":6960473080,"lat":51.1614227,"lon":3.1931004},{"type":"node","id":3335137692,"lat":51.1698302,"lon":3.1965654},{"type":"node","id":3335137795,"lat":51.1698788,"lon":3.1970728},{"type":"node","id":3335137802,"lat":51.1700082,"lon":3.1971734},{"type":"node","id":3335137807,"lat":51.1701139,"lon":3.1965001},{"type":"node","id":3335137812,"lat":51.1703247,"lon":3.197352},{"type":"node","id":3335137823,"lat":51.1703133,"lon":3.1966232},{"type":"node","id":6255587427,"lat":51.1694775,"lon":3.1980047},{"type":"node","id":9163486855,"lat":51.1703854,"lon":3.1970901},{"type":"node","id":9163486856,"lat":51.1702114,"lon":3.1969688},{"type":"node","id":9163493632,"lat":51.1699473,"lon":3.197063},{"type":"node","id":414025563,"lat":51.1768198,"lon":3.1839265},{"type":"node","id":2325437840,"lat":51.1765747,"lon":3.1839745},{"type":"node","id":2325437844,"lat":51.1768286,"lon":3.1825946},{"type":"node","id":8191691970,"lat":51.1767611,"lon":3.1839766},{"type":"node","id":8191691971,"lat":51.1767812,"lon":3.1826167},{"type":"node","id":8191691972,"lat":51.1765804,"lon":3.1826583},{"type":"node","id":8191691973,"lat":51.1766324,"lon":3.182616},{"type":"node","id":5716136617,"lat":51.1773127,"lon":3.1969033},{"type":"node","id":5716136618,"lat":51.1771859,"lon":3.1969078},{"type":"node","id":5716136619,"lat":51.177203,"lon":3.1981369},{"type":"node","id":5716136620,"lat":51.1773298,"lon":3.1981324},{"type":"node","id":6004375826,"lat":51.1786839,"lon":3.1952389},{"type":"node","id":6625037999,"lat":51.1788016,"lon":3.1950645},{"type":"node","id":6625038000,"lat":51.1789916,"lon":3.1966631},{"type":"node","id":6625038001,"lat":51.1789003,"lon":3.1966838},{"type":"node","id":6625038002,"lat":51.1788554,"lon":3.1963547},{"type":"node","id":6625038003,"lat":51.1788165,"lon":3.1963622},{"type":"node","id":6625038005,"lat":51.1785124,"lon":3.1952362},{"type":"node","id":6625038006,"lat":51.1784779,"lon":3.1950618},{"type":"node","id":6925536539,"lat":51.1522475,"lon":3.1985416},{"type":"node","id":6925536540,"lat":51.1522635,"lon":3.1986187},{"type":"node","id":6925536541,"lat":51.1523922,"lon":3.1985517},{"type":"node","id":6925536542,"lat":51.1523766,"lon":3.1984746},{"type":"node","id":1637742821,"lat":51.158524,"lon":3.199021},{"type":"node","id":5586765933,"lat":51.1566667,"lon":3.2008881},{"type":"node","id":5586765934,"lat":51.1564286,"lon":3.2012575},{"type":"node","id":5586765935,"lat":51.1562496,"lon":3.2008579},{"type":"node","id":5586765936,"lat":51.1564982,"lon":3.200522},{"type":"node","id":6943148197,"lat":51.1581916,"lon":3.1989071},{"type":"node","id":6943148198,"lat":51.1582377,"lon":3.1989899},{"type":"node","id":6943148199,"lat":51.1581859,"lon":3.1990728},{"type":"node","id":6943148200,"lat":51.1583257,"lon":3.199295},{"type":"node","id":6943148201,"lat":51.1583563,"lon":3.199246},{"type":"node","id":6943148202,"lat":51.1583988,"lon":3.1993135},{"type":"node","id":6943148203,"lat":51.1585529,"lon":3.1990669},{"type":"node","id":6943148204,"lat":51.1586554,"lon":3.1988109},{"type":"node","id":6943148205,"lat":51.1585617,"lon":3.1986619},{"type":"node","id":6943148206,"lat":51.1586782,"lon":3.1984755},{"type":"node","id":6943148207,"lat":51.1585692,"lon":3.1982996},{"type":"node","id":8065883225,"lat":51.1366029,"lon":3.233506},{"type":"node","id":8065883226,"lat":51.1364627,"lon":3.2335338},{"type":"node","id":8065883227,"lat":51.1363922,"lon":3.2326314},{"type":"node","id":8065883228,"lat":51.1365324,"lon":3.2326036},{"type":"node","id":8065883229,"lat":51.1374344,"lon":3.2333338},{"type":"node","id":8065883230,"lat":51.1373632,"lon":3.2324534},{"type":"node","id":8065883232,"lat":51.1375819,"lon":3.2333035},{"type":"node","id":8065883233,"lat":51.1375107,"lon":3.232423},{"type":"node","id":1795793393,"lat":51.1475704,"lon":3.233832},{"type":"node","id":3346575840,"lat":51.146485,"lon":3.2349284},{"type":"node","id":3346575846,"lat":51.1465127,"lon":3.2355341},{"type":"node","id":3346575853,"lat":51.1466617,"lon":3.2349708},{"type":"node","id":3346575855,"lat":51.1466787,"lon":3.2355171},{"type":"node","id":3346575858,"lat":51.1466968,"lon":3.2342532},{"type":"node","id":3346575865,"lat":51.1468756,"lon":3.2344143},{"type":"node","id":3346575873,"lat":51.1469706,"lon":3.2366779},{"type":"node","id":3346575929,"lat":51.1474307,"lon":3.2366434},{"type":"node","id":1523513488,"lat":51.1398248,"lon":3.2392608},{"type":"node","id":1744641292,"lat":51.1395814,"lon":3.2390365},{"type":"node","id":1744641293,"lat":51.1397822,"lon":3.2393867},{"type":"node","id":1920143232,"lat":51.1394724,"lon":3.2390121},{"type":"node","id":7393009684,"lat":51.1394307,"lon":3.2390001},{"type":"node","id":7393048385,"lat":51.1394135,"lon":3.2390524},{"type":"node","id":3346575843,"lat":51.1465041,"lon":3.2376453},{"type":"node","id":3346575845,"lat":51.146508,"lon":3.2378517},{"type":"node","id":3346575876,"lat":51.1470052,"lon":3.237604},{"type":"node","id":3346575886,"lat":51.147098,"lon":3.2412975},{"type":"node","id":3346575889,"lat":51.1471585,"lon":3.2428761},{"type":"node","id":3346575891,"lat":51.1471715,"lon":3.2377865},{"type":"node","id":3346575901,"lat":51.1472492,"lon":3.2398591},{"type":"node","id":3346575903,"lat":51.1472654,"lon":3.242623},{"type":"node","id":3346575908,"lat":51.1472751,"lon":3.2428571},{"type":"node","id":3346575917,"lat":51.1473518,"lon":3.2426093},{"type":"node","id":3346575923,"lat":51.1473906,"lon":3.2398205},{"type":"node","id":3346575925,"lat":51.147408,"lon":3.2424474},{"type":"node","id":3346575928,"lat":51.1474263,"lon":3.24062},{"type":"node","id":3346575933,"lat":51.1474728,"lon":3.2421565},{"type":"node","id":3346575943,"lat":51.1475354,"lon":3.2418174},{"type":"node","id":3346575945,"lat":51.1475494,"lon":3.2412786},{"type":"node","id":3346575946,"lat":51.1475667,"lon":3.2415454},{"type":"node","id":6291339815,"lat":51.1434669,"lon":3.2496811},{"type":"node","id":6291339816,"lat":51.1434103,"lon":3.2497287},{"type":"node","id":6291339821,"lat":51.1435685,"lon":3.2496576},{"type":"node","id":6291339822,"lat":51.1434825,"lon":3.2497283},{"type":"node","id":6291339827,"lat":51.1437401,"lon":3.2490327},{"type":"node","id":6291339828,"lat":51.1433037,"lon":3.2494123},{"type":"node","id":6291339829,"lat":51.1436099,"lon":3.2497855},{"type":"node","id":6291339830,"lat":51.1439041,"lon":3.249535},{"type":"node","id":170464837,"lat":51.1533286,"lon":3.236239},{"type":"node","id":170464839,"lat":51.1532379,"lon":3.2364578},{"type":"node","id":1710262731,"lat":51.1513274,"lon":3.2373199},{"type":"node","id":1710262732,"lat":51.1508759,"lon":3.2370371},{"type":"node","id":1710262733,"lat":51.1509316,"lon":3.2370599},{"type":"node","id":1710262735,"lat":51.1510166,"lon":3.2370123},{"type":"node","id":1710262738,"lat":51.1512751,"lon":3.2372984},{"type":"node","id":1710262742,"lat":51.1513127,"lon":3.237065},{"type":"node","id":1710262743,"lat":51.1508201,"lon":3.2373832},{"type":"node","id":1710262745,"lat":51.151027,"lon":3.2369479},{"type":"node","id":1795793395,"lat":51.1476158,"lon":3.2338163},{"type":"node","id":1795793397,"lat":51.1475842,"lon":3.2344427},{"type":"node","id":1795793399,"lat":51.1477641,"lon":3.233033},{"type":"node","id":1795793405,"lat":51.1477717,"lon":3.2338665},{"type":"node","id":1795793406,"lat":51.1480775,"lon":3.2344787},{"type":"node","id":1795793407,"lat":51.1478893,"lon":3.2344203},{"type":"node","id":1795793408,"lat":51.1481719,"lon":3.2342485},{"type":"node","id":1795793409,"lat":51.147607,"lon":3.2330256},{"type":"node","id":4979389763,"lat":51.1476223,"lon":3.2330288},{"type":"node","id":8179735224,"lat":51.156047,"lon":3.2252534},{"type":"node","id":8179735264,"lat":51.1560464,"lon":3.2252785},{"type":"node","id":8179735265,"lat":51.1558544,"lon":3.2252597},{"type":"node","id":8179735266,"lat":51.1556789,"lon":3.2252522},{"type":"node","id":8179735267,"lat":51.1555253,"lon":3.2252547},{"type":"node","id":8179735268,"lat":51.1555747,"lon":3.2250024},{"type":"node","id":8179735269,"lat":51.1560527,"lon":3.2250198},{"type":"node","id":1525460846,"lat":51.1550489,"lon":3.2347709},{"type":"node","id":1810326044,"lat":51.1547625,"lon":3.2355098},{"type":"node","id":1810326087,"lat":51.1547809,"lon":3.2353708},{"type":"node","id":4912203160,"lat":51.1554941,"lon":3.2364781},{"type":"node","id":4912203161,"lat":51.1554192,"lon":3.2369649},{"type":"node","id":4912203162,"lat":51.1554175,"lon":3.2371071},{"type":"node","id":4912203163,"lat":51.1554301,"lon":3.2372063},{"type":"node","id":4912203164,"lat":51.1553847,"lon":3.2372197},{"type":"node","id":4912203165,"lat":51.1553763,"lon":3.2369502},{"type":"node","id":4912203166,"lat":51.1554512,"lon":3.236462},{"type":"node","id":4912203167,"lat":51.1555218,"lon":3.2366455},{"type":"node","id":4912203168,"lat":51.1554742,"lon":3.2369592},{"type":"node","id":4912203169,"lat":51.155516,"lon":3.2369752},{"type":"node","id":4912203170,"lat":51.1555635,"lon":3.2366616},{"type":"node","id":4912203171,"lat":51.1556125,"lon":3.2360775},{"type":"node","id":4912203172,"lat":51.155547,"lon":3.2364923},{"type":"node","id":4912203173,"lat":51.1555893,"lon":3.2365092},{"type":"node","id":4912203174,"lat":51.1556547,"lon":3.2360945},{"type":"node","id":4912203176,"lat":51.1554841,"lon":3.2362949},{"type":"node","id":4912203177,"lat":51.1553752,"lon":3.2362591},{"type":"node","id":4912203178,"lat":51.1553968,"lon":3.2360924},{"type":"node","id":4912203179,"lat":51.1555056,"lon":3.2361281},{"type":"node","id":4912214680,"lat":51.1553544,"lon":3.2348128},{"type":"node","id":4912214681,"lat":51.1550186,"lon":3.2346814},{"type":"node","id":4912214685,"lat":51.1554486,"lon":3.2338965},{"type":"node","id":4912214686,"lat":51.1550098,"lon":3.2346405},{"type":"node","id":4912214692,"lat":51.155386,"lon":3.2347722},{"type":"node","id":4912214693,"lat":51.1555155,"lon":3.2338415},{"type":"node","id":4912214694,"lat":51.1554587,"lon":3.2338214},{"type":"node","id":4912214695,"lat":51.1553292,"lon":3.2347521},{"type":"node","id":4912225050,"lat":51.1553136,"lon":3.234866},{"type":"node","id":4912225051,"lat":51.1551036,"lon":3.2337751},{"type":"node","id":4912225052,"lat":51.1549825,"lon":3.2346307},{"type":"node","id":4912225053,"lat":51.1551894,"lon":3.2336789},{"type":"node","id":4912225062,"lat":51.1551528,"lon":3.233747},{"type":"node","id":4912225063,"lat":51.1551831,"lon":3.2337249},{"type":"node","id":4912225064,"lat":51.1554653,"lon":3.2337755},{"type":"node","id":4912225067,"lat":51.1551309,"lon":3.2337849},{"type":"node","id":4912225068,"lat":51.1551727,"lon":3.2337999},{"type":"node","id":4912225069,"lat":51.1553182,"lon":3.2348322},{"type":"node","id":4912225070,"lat":51.1550516,"lon":3.2346556},{"type":"node","id":5972179331,"lat":51.154488,"lon":3.2350802},{"type":"node","id":5972179343,"lat":51.1545781,"lon":3.2351138},{"type":"node","id":5972179344,"lat":51.1546444,"lon":3.2351409},{"type":"node","id":5972179345,"lat":51.1546431,"lon":3.2351485},{"type":"node","id":5972179346,"lat":51.1547126,"lon":3.2351739},{"type":"node","id":5972179347,"lat":51.154714,"lon":3.2351659},{"type":"node","id":5972179348,"lat":51.1547795,"lon":3.235188},{"type":"node","id":5974489614,"lat":51.1546386,"lon":3.2355125},{"type":"node","id":5974489615,"lat":51.1544914,"lon":3.2353516},{"type":"node","id":5974489616,"lat":51.1544813,"lon":3.2351384},{"type":"node","id":5974489617,"lat":51.1548024,"lon":3.2352003},{"type":"node","id":5974489618,"lat":51.154732,"lon":3.2356091},{"type":"node","id":7529417225,"lat":51.159095,"lon":3.2366844},{"type":"node","id":7529417226,"lat":51.1589926,"lon":3.2372825},{"type":"node","id":7529417227,"lat":51.1588687,"lon":3.2372286},{"type":"node","id":7529417228,"lat":51.1589264,"lon":3.2368918},{"type":"node","id":7529417229,"lat":51.1588879,"lon":3.236875},{"type":"node","id":7529417230,"lat":51.1589326,"lon":3.2366138},{"type":"node","id":7529417232,"lat":51.159019,"lon":3.2366513},{"type":"node","id":170464840,"lat":51.1531619,"lon":3.2376814},{"type":"node","id":170464841,"lat":51.1532306,"lon":3.2376888},{"type":"node","id":1710245701,"lat":51.1528676,"lon":3.2390068},{"type":"node","id":1710245703,"lat":51.1527703,"lon":3.239403},{"type":"node","id":1710245705,"lat":51.1527888,"lon":3.2390966},{"type":"node","id":1710245707,"lat":51.1526357,"lon":3.2390543},{"type":"node","id":1710245709,"lat":51.1528763,"lon":3.2390382},{"type":"node","id":1710245711,"lat":51.1528928,"lon":3.2390631},{"type":"node","id":1710245713,"lat":51.1528729,"lon":3.2389738},{"type":"node","id":1710245715,"lat":51.1528645,"lon":3.2394083},{"type":"node","id":1710245718,"lat":51.1526407,"lon":3.2389524},{"type":"node","id":1710262736,"lat":51.1512857,"lon":3.2375783},{"type":"node","id":1710262737,"lat":51.151234,"lon":3.2375571},{"type":"node","id":1710262739,"lat":51.151183,"lon":3.2375939},{"type":"node","id":1710262741,"lat":51.1511924,"lon":3.2375358},{"type":"node","id":1710262744,"lat":51.1512252,"lon":3.2376112},{"type":"node","id":3346575950,"lat":51.1475926,"lon":3.2406028},{"type":"node","id":1728421374,"lat":51.1554436,"lon":3.2438233},{"type":"node","id":1728421375,"lat":51.15594,"lon":3.2438649},{"type":"node","id":1728421377,"lat":51.15559,"lon":3.2439695},{"type":"node","id":1728421379,"lat":51.1554335,"lon":3.243944},{"type":"node","id":1770289505,"lat":51.1565437,"lon":3.2437924},{"type":"node","id":4912197362,"lat":51.1565535,"lon":3.2438327},{"type":"node","id":4912197363,"lat":51.1562818,"lon":3.2438374},{"type":"node","id":4912197364,"lat":51.1565321,"lon":3.2435757},{"type":"node","id":4912197365,"lat":51.1565279,"lon":3.2433181},{"type":"node","id":4912197366,"lat":51.1562804,"lon":3.2435833},{"type":"node","id":4912197367,"lat":51.1562798,"lon":3.2431702},{"type":"node","id":4912197368,"lat":51.1562813,"lon":3.2437497},{"type":"node","id":4912197369,"lat":51.1562802,"lon":3.243488},{"type":"node","id":4912197370,"lat":51.1565257,"lon":3.2431702},{"type":"node","id":4912197371,"lat":51.1565542,"lon":3.2439044},{"type":"node","id":4912197372,"lat":51.1565308,"lon":3.2437482},{"type":"node","id":4912197373,"lat":51.1565294,"lon":3.2434893},{"type":"node","id":4912197374,"lat":51.1562835,"lon":3.2439005},{"type":"node","id":1710276232,"lat":51.1572435,"lon":3.2451269},{"type":"node","id":1710276240,"lat":51.156984,"lon":3.2453481},{"type":"node","id":1710276242,"lat":51.1567167,"lon":3.2452913},{"type":"node","id":1710276243,"lat":51.1570484,"lon":3.2451},{"type":"node","id":1710276251,"lat":51.1562241,"lon":3.2457572},{"type":"node","id":1710276253,"lat":51.156868,"lon":3.2451689},{"type":"node","id":1710276255,"lat":51.1563873,"lon":3.2456553},{"type":"node","id":1710276257,"lat":51.1572402,"lon":3.2450303},{"type":"node","id":1710276259,"lat":51.1561703,"lon":3.2454299},{"type":"node","id":1710276261,"lat":51.1564411,"lon":3.2457304},{"type":"node","id":1728421376,"lat":51.1555858,"lon":3.2441572},{"type":"node","id":1728421378,"lat":51.1559348,"lon":3.2441264},{"type":"node","id":1810330766,"lat":51.1562599,"lon":3.2457349},{"type":"node","id":1810345944,"lat":51.1572859,"lon":3.2458614},{"type":"node","id":1810345947,"lat":51.1568366,"lon":3.2461909},{"type":"node","id":1810345951,"lat":51.1572074,"lon":3.2455895},{"type":"node","id":1810345955,"lat":51.1567582,"lon":3.245919},{"type":"node","id":1810347217,"lat":51.1568783,"lon":3.2452387},{"type":"node","id":6255587424,"lat":51.1699788,"lon":3.1988617},{"type":"node","id":6255587425,"lat":51.1695322,"lon":3.1995447},{"type":"node","id":6255587426,"lat":51.1690026,"lon":3.1986489},{"type":"node","id":5173881316,"lat":51.1728811,"lon":3.210692},{"type":"node","id":5173881317,"lat":51.1728829,"lon":3.21077},{"type":"node","id":5173881318,"lat":51.1726197,"lon":3.2107914},{"type":"node","id":5173881320,"lat":51.1728794,"lon":3.2108575},{"type":"node","id":5173881621,"lat":51.1728791,"lon":3.2109364},{"type":"node","id":5173881622,"lat":51.1727133,"lon":3.2109488},{"type":"node","id":5173881623,"lat":51.1727117,"lon":3.2108703},{"type":"node","id":5173881624,"lat":51.1728613,"lon":3.211069},{"type":"node","id":5173881625,"lat":51.1728601,"lon":3.2111406},{"type":"node","id":5173881626,"lat":51.1727019,"lon":3.2111316},{"type":"node","id":5173881627,"lat":51.1727041,"lon":3.2110597},{"type":"node","id":6275462772,"lat":51.1733576,"lon":3.2110928},{"type":"node","id":6275462773,"lat":51.1733528,"lon":3.2112295},{"type":"node","id":6275462774,"lat":51.1735278,"lon":3.2112449},{"type":"node","id":6275462775,"lat":51.1735325,"lon":3.2111082},{"type":"node","id":6275462776,"lat":51.1736659,"lon":3.2112568},{"type":"node","id":6275462777,"lat":51.1736113,"lon":3.2112529},{"type":"node","id":6275462784,"lat":51.1735598,"lon":3.2109277},{"type":"node","id":6275462985,"lat":51.1734626,"lon":3.2109229},{"type":"node","id":6275462986,"lat":51.1734599,"lon":3.2110592},{"type":"node","id":6275462987,"lat":51.1735572,"lon":3.211064},{"type":"node","id":6275462988,"lat":51.1734613,"lon":3.2109904},{"type":"node","id":6275462989,"lat":51.173357,"lon":3.2111476},{"type":"node","id":7054196467,"lat":51.1726209,"lon":3.2107131},{"type":"node","id":8042845810,"lat":51.1737696,"lon":3.206708},{"type":"node","id":8042845811,"lat":51.1734466,"lon":3.2056148},{"type":"node","id":5952389321,"lat":51.1668901,"lon":3.2166736},{"type":"node","id":5952389322,"lat":51.1664592,"lon":3.2166337},{"type":"node","id":5952389323,"lat":51.1659941,"lon":3.2166018},{"type":"node","id":5172938444,"lat":51.1667283,"lon":3.2192609},{"type":"node","id":5536609426,"lat":51.1664884,"lon":3.2184803},{"type":"node","id":5536620510,"lat":51.1668363,"lon":3.2197448},{"type":"node","id":5536620511,"lat":51.1671911,"lon":3.2210959},{"type":"node","id":5952389320,"lat":51.1665059,"lon":3.2183884},{"type":"node","id":5536620506,"lat":51.1675299,"lon":3.2170283},{"type":"node","id":5536620507,"lat":51.1672585,"lon":3.2168071},{"type":"node","id":6275462778,"lat":51.1736042,"lon":3.2115044},{"type":"node","id":6275462779,"lat":51.1736588,"lon":3.2115083},{"type":"node","id":6275462780,"lat":51.1735687,"lon":3.2112964},{"type":"node","id":6275462781,"lat":51.1735211,"lon":3.2112937},{"type":"node","id":6275462782,"lat":51.1735156,"lon":3.2115423},{"type":"node","id":6275462783,"lat":51.1735632,"lon":3.211545},{"type":"node","id":5536620505,"lat":51.1683944,"lon":3.2180288},{"type":"node","id":5536620512,"lat":51.1673641,"lon":3.2217199},{"type":"node","id":5536620513,"lat":51.1675007,"lon":3.2221772},{"type":"node","id":5536620514,"lat":51.1679104,"lon":3.2236675},{"type":"node","id":5536620516,"lat":51.1679955,"lon":3.224005},{"type":"node","id":5536620824,"lat":51.1700823,"lon":3.2236258},{"type":"node","id":5536620826,"lat":51.171324,"lon":3.2230929},{"type":"node","id":5536620827,"lat":51.1717731,"lon":3.2213846},{"type":"node","id":5536620828,"lat":51.170726,"lon":3.2202369},{"type":"node","id":5536620829,"lat":51.1706206,"lon":3.2201178},{"type":"node","id":5536620830,"lat":51.170049,"lon":3.2215441},{"type":"node","id":5536620831,"lat":51.1699442,"lon":3.2215294},{"type":"node","id":5536620832,"lat":51.1683757,"lon":3.2194636},{"type":"node","id":6067483781,"lat":51.1675243,"lon":3.222207},{"type":"node","id":6067483782,"lat":51.1713888,"lon":3.2231705},{"type":"node","id":7794736251,"lat":51.1688401,"lon":3.2184325},{"type":"node","id":1069177852,"lat":51.1789546,"lon":3.2021791},{"type":"node","id":1069177853,"lat":51.1801636,"lon":3.2031369},{"type":"node","id":1069177873,"lat":51.1791663,"lon":3.2034541},{"type":"node","id":1069177915,"lat":51.1799187,"lon":3.2029579},{"type":"node","id":1069177919,"lat":51.1786053,"lon":3.2030903},{"type":"node","id":1069177920,"lat":51.1790417,"lon":3.2033998},{"type":"node","id":1069177925,"lat":51.1788415,"lon":3.2032442},{"type":"node","id":1069177933,"lat":51.1798479,"lon":3.2029364},{"type":"node","id":1069177967,"lat":51.178467,"lon":3.2025563},{"type":"node","id":1069177976,"lat":51.1791427,"lon":3.2026954},{"type":"node","id":1069177984,"lat":51.1783718,"lon":3.2028231},{"type":"node","id":1069178021,"lat":51.1793534,"lon":3.2033094},{"type":"node","id":1069178133,"lat":51.1784113,"lon":3.2028156},{"type":"node","id":6853179202,"lat":51.1792037,"lon":3.2026994},{"type":"node","id":6853179203,"lat":51.1790601,"lon":3.2026755},{"type":"node","id":6853179204,"lat":51.1791861,"lon":3.2027108},{"type":"node","id":6853179205,"lat":51.1791741,"lon":3.2027122},{"type":"node","id":6853179206,"lat":51.1791634,"lon":3.2027102},{"type":"node","id":6853179207,"lat":51.1791526,"lon":3.2027048},{"type":"node","id":6853179208,"lat":51.1790128,"lon":3.202488},{"type":"node","id":6853179209,"lat":51.1790434,"lon":3.2026225},{"type":"node","id":6853179210,"lat":51.1789811,"lon":3.2023837},{"type":"node","id":6853179211,"lat":51.1789744,"lon":3.2022415},{"type":"node","id":6853179212,"lat":51.1789438,"lon":3.2022643},{"type":"node","id":6853179213,"lat":51.1784216,"lon":3.2028567},{"type":"node","id":6853179214,"lat":51.1784157,"lon":3.2028375},{"type":"node","id":6853179215,"lat":51.1784506,"lon":3.2029294},{"type":"node","id":6853179216,"lat":51.1783884,"lon":3.2026704},{"type":"node","id":6853179217,"lat":51.178422,"lon":3.2026034},{"type":"node","id":6853179218,"lat":51.1784117,"lon":3.2026185},{"type":"node","id":6853179219,"lat":51.1784021,"lon":3.2026354},{"type":"node","id":6853179220,"lat":51.1783957,"lon":3.2026505},{"type":"node","id":6853179221,"lat":51.178443,"lon":3.2025785},{"type":"node","id":6853179222,"lat":51.1784546,"lon":3.202567},{"type":"node","id":6853179223,"lat":51.1784321,"lon":3.2025906},{"type":"node","id":6853179224,"lat":51.1783719,"lon":3.2027464},{"type":"node","id":6853179225,"lat":51.1783749,"lon":3.2027238},{"type":"node","id":6853179226,"lat":51.1783827,"lon":3.2026894},{"type":"node","id":6853179227,"lat":51.1783784,"lon":3.2027066},{"type":"node","id":6853179228,"lat":51.1783697,"lon":3.2027864},{"type":"node","id":6853179229,"lat":51.1783704,"lon":3.2027651},{"type":"node","id":6853179230,"lat":51.1783703,"lon":3.2028048},{"type":"node","id":6853179234,"lat":51.1798837,"lon":3.2029379},{"type":"node","id":6853179235,"lat":51.1798988,"lon":3.2029445},{"type":"node","id":6853179236,"lat":51.1798661,"lon":3.2029354},{"type":"node","id":6853179237,"lat":51.1798345,"lon":3.2029407},{"type":"node","id":6853179238,"lat":51.1798207,"lon":3.2029479},{"type":"node","id":6853179239,"lat":51.1792634,"lon":3.2033377},{"type":"node","id":6853179240,"lat":51.1793019,"lon":3.2033359},{"type":"node","id":6853179241,"lat":51.1792828,"lon":3.20334},{"type":"node","id":6853179242,"lat":51.1792732,"lon":3.2033393},{"type":"node","id":6853179243,"lat":51.1792921,"lon":3.2033388},{"type":"node","id":6853179244,"lat":51.1793279,"lon":3.2033257},{"type":"node","id":6853179245,"lat":51.1793153,"lon":3.2033313},{"type":"node","id":6853179246,"lat":51.1793413,"lon":3.2033182},{"type":"node","id":6853179247,"lat":51.1792384,"lon":3.2033981},{"type":"node","id":6853179248,"lat":51.1792572,"lon":3.2033605},{"type":"node","id":6853179249,"lat":51.1792512,"lon":3.2033774},{"type":"node","id":6853179250,"lat":51.1792456,"lon":3.2033888},{"type":"node","id":6853179256,"lat":51.1790996,"lon":3.2034514},{"type":"node","id":6853179257,"lat":51.1790731,"lon":3.2034317},{"type":"node","id":6853179258,"lat":51.1790581,"lon":3.2034168},{"type":"node","id":6853179259,"lat":51.1790862,"lon":3.2034422},{"type":"node","id":6853179260,"lat":51.179133,"lon":3.2034648},{"type":"node","id":6853179261,"lat":51.1791191,"lon":3.203461},{"type":"node","id":6853179262,"lat":51.1791546,"lon":3.2034608},{"type":"node","id":6853179263,"lat":51.1791443,"lon":3.2034639},{"type":"node","id":6853179264,"lat":51.1789437,"lon":3.2033089},{"type":"node","id":6853179267,"lat":51.1785146,"lon":3.2030128},{"type":"node","id":6853179268,"lat":51.1785517,"lon":3.2030489},{"type":"node","id":6853179269,"lat":51.1785863,"lon":3.2030773},{"type":"node","id":6853179327,"lat":51.1789936,"lon":3.2024248},{"type":"node","id":7252820961,"lat":51.175521,"lon":3.2045972},{"type":"node","id":7252863798,"lat":51.1754304,"lon":3.2044959},{"type":"node","id":8042845806,"lat":51.1753353,"lon":3.2041851},{"type":"node","id":8042845807,"lat":51.175363,"lon":3.2043314},{"type":"node","id":8042845812,"lat":51.1752711,"lon":3.2040127},{"type":"node","id":4036885076,"lat":51.1740632,"lon":3.2050437},{"type":"node","id":4036899624,"lat":51.1767493,"lon":3.2082945},{"type":"node","id":5607796819,"lat":51.1782483,"lon":3.2091883},{"type":"node","id":5607796820,"lat":51.1785128,"lon":3.2086016},{"type":"node","id":5607798721,"lat":51.1786474,"lon":3.2090453},{"type":"node","id":5607798722,"lat":51.1782874,"lon":3.2093115},{"type":"node","id":5607798723,"lat":51.178141,"lon":3.2088491},{"type":"node","id":5607798725,"lat":51.1785713,"lon":3.2087945},{"type":"node","id":5728443539,"lat":51.1753294,"lon":3.2097039},{"type":"node","id":5728443540,"lat":51.1752216,"lon":3.2089278},{"type":"node","id":6275462768,"lat":51.174424,"lon":3.2105467},{"type":"node","id":6275462769,"lat":51.1743524,"lon":3.2105548},{"type":"node","id":6275462770,"lat":51.1743644,"lon":3.2108257},{"type":"node","id":6275462771,"lat":51.1744361,"lon":3.2108176},{"type":"node","id":7252820962,"lat":51.1756015,"lon":3.204854},{"type":"node","id":7252820963,"lat":51.1755802,"lon":3.204928},{"type":"node","id":7252820964,"lat":51.1755132,"lon":3.2049422},{"type":"node","id":7252820965,"lat":51.1754719,"lon":3.2050156},{"type":"node","id":7252820966,"lat":51.1754575,"lon":3.2051212},{"type":"node","id":7252820967,"lat":51.1755143,"lon":3.2052892},{"type":"node","id":7252820968,"lat":51.1755533,"lon":3.2055086},{"type":"node","id":7252820969,"lat":51.1755563,"lon":3.2060065},{"type":"node","id":7252820970,"lat":51.175491,"lon":3.2064409},{"type":"node","id":7252820971,"lat":51.1753674,"lon":3.2068348},{"type":"node","id":7252820972,"lat":51.1751944,"lon":3.2070531},{"type":"node","id":7252820973,"lat":51.1751195,"lon":3.2071478},{"type":"node","id":7252820974,"lat":51.1750834,"lon":3.2072467},{"type":"node","id":7252820975,"lat":51.1750963,"lon":3.2073579},{"type":"node","id":7252820976,"lat":51.1751376,"lon":3.2074032},{"type":"node","id":7252820977,"lat":51.175215,"lon":3.2073826},{"type":"node","id":7252820978,"lat":51.1752848,"lon":3.2073785},{"type":"node","id":7252820979,"lat":51.1754252,"lon":3.2073858},{"type":"node","id":7252820980,"lat":51.1754615,"lon":3.2074926},{"type":"node","id":7252820981,"lat":51.1754259,"lon":3.20756},{"type":"node","id":7252820982,"lat":51.17537,"lon":3.2076668},{"type":"node","id":7252820983,"lat":51.1753304,"lon":3.2078901},{"type":"node","id":7252820984,"lat":51.1753152,"lon":3.2079319},{"type":"node","id":7252874885,"lat":51.1754423,"lon":3.2080951},{"type":"node","id":7252874886,"lat":51.1754991,"lon":3.2083134},{"type":"node","id":7252874887,"lat":51.1755307,"lon":3.2084864},{"type":"node","id":7252874888,"lat":51.1755729,"lon":3.2087064},{"type":"node","id":7252874889,"lat":51.1753248,"lon":3.2088635},{"type":"node","id":7252874890,"lat":51.1752645,"lon":3.2092365},{"type":"node","id":7252874891,"lat":51.1747746,"lon":3.2093558},{"type":"node","id":8042845789,"lat":51.1748587,"lon":3.209526},{"type":"node","id":8042845790,"lat":51.1749489,"lon":3.2096774},{"type":"node","id":8042845791,"lat":51.1750595,"lon":3.2097458},{"type":"node","id":8042845792,"lat":51.1753557,"lon":3.2077924},{"type":"node","id":8042845793,"lat":51.1754621,"lon":3.2074425},{"type":"node","id":8042845794,"lat":51.1754531,"lon":3.2074092},{"type":"node","id":8042845795,"lat":51.1754729,"lon":3.2051839},{"type":"node","id":8042845796,"lat":51.1754907,"lon":3.2052089},{"type":"node","id":8042845797,"lat":51.1755084,"lon":3.2052355},{"type":"node","id":8042845798,"lat":51.1755235,"lon":3.2053482},{"type":"node","id":8042845799,"lat":51.1755387,"lon":3.2053805},{"type":"node","id":8042845800,"lat":51.1755584,"lon":3.2057251},{"type":"node","id":8042845801,"lat":51.1755536,"lon":3.205762},{"type":"node","id":8042845802,"lat":51.1755492,"lon":3.2061312},{"type":"node","id":8042845803,"lat":51.1755305,"lon":3.2062755},{"type":"node","id":8042845804,"lat":51.1754335,"lon":3.2066603},{"type":"node","id":8042845805,"lat":51.1755929,"lon":3.2047843},{"type":"node","id":8042845808,"lat":51.1746278,"lon":3.2090183},{"type":"node","id":8042845809,"lat":51.1740796,"lon":3.2076268},{"type":"node","id":8042845844,"lat":51.1768218,"lon":3.20861},{"type":"node","id":8042845845,"lat":51.1767935,"lon":3.2085031},{"type":"node","id":8042845846,"lat":51.1769413,"lon":3.2089936},{"type":"node","id":8042845847,"lat":51.1757541,"lon":3.2096988},{"type":"node","id":8042845848,"lat":51.1757421,"lon":3.2096812},{"type":"node","id":8042845849,"lat":51.1757312,"lon":3.2096924},{"type":"node","id":8042845850,"lat":51.1757202,"lon":3.2096478},{"type":"node","id":8042845851,"lat":51.1756902,"lon":3.2096207},{"type":"node","id":8042845852,"lat":51.1756712,"lon":3.2096143},{"type":"node","id":8042845853,"lat":51.1756602,"lon":3.2095745},{"type":"node","id":8042845854,"lat":51.1756552,"lon":3.2095537},{"type":"node","id":8042845855,"lat":51.1756657,"lon":3.2095174},{"type":"node","id":8042845856,"lat":51.175658,"lon":3.20908},{"type":"node","id":8042845857,"lat":51.1756525,"lon":3.2093366},{"type":"node","id":8042845858,"lat":51.1756466,"lon":3.2088282},{"type":"node","id":8042845859,"lat":51.1756582,"lon":3.2089151},{"type":"node","id":8042845860,"lat":51.1765521,"lon":3.20839},{"type":"node","id":1069177845,"lat":51.1809357,"lon":3.2035366},{"type":"node","id":1069177849,"lat":51.1803975,"lon":3.2017749},{"type":"node","id":1069178166,"lat":51.1804195,"lon":3.2033098},{"type":"node","id":1519342742,"lat":51.1805239,"lon":3.2032684},{"type":"node","id":1519342743,"lat":51.18064,"lon":3.2036951},{"type":"node","id":1759437085,"lat":51.1806986,"lon":3.2036647},{"type":"node","id":6852012577,"lat":51.1804541,"lon":3.2017867},{"type":"node","id":6852012578,"lat":51.1804124,"lon":3.2018177},{"type":"node","id":6852012579,"lat":51.1804106,"lon":3.2018165},{"type":"node","id":6852012580,"lat":51.1804143,"lon":3.2018177},{"type":"node","id":6852012581,"lat":51.1808363,"lon":3.2030295},{"type":"node","id":6852012582,"lat":51.1807955,"lon":3.2030595},{"type":"node","id":6852012583,"lat":51.180798,"lon":3.2030712},{"type":"node","id":1519476620,"lat":51.1786696,"lon":3.2199463},{"type":"node","id":1519476635,"lat":51.179306,"lon":3.2193119},{"type":"node","id":1519476698,"lat":51.1795485,"lon":3.2192221},{"type":"node","id":1519476744,"lat":51.1791125,"lon":3.2194529},{"type":"node","id":1519476746,"lat":51.178483,"lon":3.2203218},{"type":"node","id":1519476797,"lat":51.1788731,"lon":3.2196593},{"type":"node","id":3780611492,"lat":51.1761568,"lon":3.2238485},{"type":"node","id":3780611493,"lat":51.1762213,"lon":3.223901},{"type":"node","id":3780611494,"lat":51.1762626,"lon":3.2237172},{"type":"node","id":3780611495,"lat":51.1763208,"lon":3.2237628},{"type":"node","id":3780611496,"lat":51.1763248,"lon":3.2236414},{"type":"node","id":3780611497,"lat":51.1763881,"lon":3.2236926},{"type":"node","id":3780611498,"lat":51.1764876,"lon":3.2235544},{"type":"node","id":3780611499,"lat":51.1766551,"lon":3.2232337},{"type":"node","id":3780611500,"lat":51.176687,"lon":3.2231945},{"type":"node","id":3780611501,"lat":51.1767105,"lon":3.2232776},{"type":"node","id":3780611502,"lat":51.176751,"lon":3.2232465},{"type":"node","id":3780611503,"lat":51.1767812,"lon":3.2230729},{"type":"node","id":3780611504,"lat":51.1768505,"lon":3.2231083},{"type":"node","id":6533893620,"lat":51.178521,"lon":3.2203687},{"type":"node","id":6533893621,"lat":51.1786845,"lon":3.220025},{"type":"node","id":6533893622,"lat":51.1789011,"lon":3.2197183},{"type":"node","id":6533893624,"lat":51.1791343,"lon":3.2195235},{"type":"node","id":6533893625,"lat":51.1793269,"lon":3.2193854},{"type":"node","id":6533893626,"lat":51.1795596,"lon":3.219299},{"type":"node","id":5536620518,"lat":51.1683264,"lon":3.224863},{"type":"node","id":5536620519,"lat":51.1684352,"lon":3.2251117},{"type":"node","id":5536620520,"lat":51.1685675,"lon":3.2254022},{"type":"node","id":5536620821,"lat":51.1687379,"lon":3.2258223},{"type":"node","id":5536620822,"lat":51.1693682,"lon":3.2250177},{"type":"node","id":5536620823,"lat":51.1693734,"lon":3.225049},{"type":"node","id":5536620825,"lat":51.1707605,"lon":3.2244639},{"type":"node","id":5536620837,"lat":51.1697793,"lon":3.2260181},{"type":"node","id":5536620838,"lat":51.1699712,"lon":3.2262338},{"type":"node","id":5536620839,"lat":51.1701247,"lon":3.2263242},{"type":"node","id":5536620840,"lat":51.1704719,"lon":3.2266478},{"type":"node","id":5536620841,"lat":51.1701028,"lon":3.2281081},{"type":"node","id":5536620842,"lat":51.1698158,"lon":3.2276446},{"type":"node","id":5536620843,"lat":51.1696441,"lon":3.2273837},{"type":"node","id":5536620844,"lat":51.1695154,"lon":3.2272009},{"type":"node","id":5536620845,"lat":51.169536,"lon":3.2271664},{"type":"node","id":5536620846,"lat":51.1694515,"lon":3.2270181},{"type":"node","id":5635001306,"lat":51.1737078,"lon":3.2354437},{"type":"node","id":5635001371,"lat":51.1722128,"lon":3.2340273},{"type":"node","id":5635001372,"lat":51.1723921,"lon":3.2343394},{"type":"node","id":5635001373,"lat":51.1724213,"lon":3.2342967},{"type":"node","id":5635001374,"lat":51.1722421,"lon":3.2339846},{"type":"node","id":5635001375,"lat":51.1728995,"lon":3.2339319},{"type":"node","id":5635001376,"lat":51.1729253,"lon":3.2339922},{"type":"node","id":5635001377,"lat":51.1723583,"lon":3.2340816},{"type":"node","id":5635001378,"lat":51.1723268,"lon":3.2340173},{"type":"node","id":5635001379,"lat":51.172885,"lon":3.2337993},{"type":"node","id":5635001380,"lat":51.1728611,"lon":3.2338706},{"type":"node","id":5635001381,"lat":51.1723325,"lon":3.2339419},{"type":"node","id":5635001382,"lat":51.1723464,"lon":3.2338696},{"type":"node","id":5882873334,"lat":51.1736186,"lon":3.2330966},{"type":"node","id":5882873335,"lat":51.1735451,"lon":3.2327633},{"type":"node","id":5882873336,"lat":51.1737001,"lon":3.2327438},{"type":"node","id":5882873337,"lat":51.1736796,"lon":3.2318764},{"type":"node","id":5882873338,"lat":51.1735265,"lon":3.2318782},{"type":"node","id":6593340582,"lat":51.1727872,"lon":3.2328745},{"type":"node","id":6593340583,"lat":51.1728013,"lon":3.2332051},{"type":"node","id":6593340584,"lat":51.1736743,"lon":3.2331435},{"type":"node","id":7767137235,"lat":51.1735198,"lon":3.2355568},{"type":"node","id":7767137236,"lat":51.1735366,"lon":3.2355246},{"type":"node","id":7767137237,"lat":51.1735198,"lon":3.2356399},{"type":"node","id":5635001274,"lat":51.1751425,"lon":3.2346144},{"type":"node","id":5635001275,"lat":51.1751696,"lon":3.2347601},{"type":"node","id":5635001276,"lat":51.1750553,"lon":3.2348141},{"type":"node","id":5635001277,"lat":51.1750282,"lon":3.2346684},{"type":"node","id":5635001312,"lat":51.174002,"lon":3.2349367},{"type":"node","id":5635001383,"lat":51.1740709,"lon":3.233056},{"type":"node","id":5635001384,"lat":51.1740249,"lon":3.2330598},{"type":"node","id":5635001385,"lat":51.1740265,"lon":3.2331313},{"type":"node","id":5635001386,"lat":51.1740597,"lon":3.2327202},{"type":"node","id":5635001414,"lat":51.174281,"lon":3.2336147},{"type":"node","id":5635001415,"lat":51.174081,"lon":3.2338914},{"type":"node","id":5635001416,"lat":51.1740489,"lon":3.2338323},{"type":"node","id":5635001417,"lat":51.1742489,"lon":3.2335556},{"type":"node","id":5761770202,"lat":51.1783111,"lon":3.2342484},{"type":"node","id":5761770204,"lat":51.1782819,"lon":3.2339616},{"type":"node","id":7767137234,"lat":51.1739713,"lon":3.2348766},{"type":"node","id":9052878228,"lat":51.1781206,"lon":3.234323},{"type":"node","id":9052878229,"lat":51.1781054,"lon":3.2339448},{"type":"way","id":810604915,"nodes":[1168727824,9167054153,9274761589,9274761596,7577430793,1038638712,1038638723,1038638661,9199177059,1038638721,7554434436,7578975035,7554434438,7578865273,7578975032,7578975030,7578975029,1038638696,7578975009,7578975008,7578975007,1038638743,7578975002,7578974988,7578974989,7578974990,7578974991,7578974992,7578865275,7578865274,1038638753,7578974995,7578974996,7578974997,7578904489,7578974999,7578975000,7578975001,7578974998,3921878998,1038638592,929120698,1675648152,7578865281,7578865283,7578975012,7578975015,7578975016,3922380061,2732486274,3922380083,7578975019,7578975018,7578975021,7578960079,3922375256,7578975024,3922380071]},{"type":"way","id":989393316,"nodes":[3922380071,3922380081,3922380086,3922380092,3922380095,9167054157,7578975026,9274761593,9274761592,9274761591,7578975027,9167054156,9167054154,7578975049,7578975028,1168727824]},{"type":"way","id":389026405,"nodes":[3921879019,7578975044,3921879018,7578975046,7578975045,7578975040,3921879004,3921879011,3921879019]},{"type":"way","id":810607458,"nodes":[7578987409,7578987410,7578987411,5745833241,5745833240,5745833239,7578987412,7578987415,7578987413,7578987414,7578987417,7578987416,7578987418,7578987419,7578987409]},{"type":"way","id":777280458,"nodes":[8042845812,8042845806,8042845807,7252863798,7252820961,8042845805,7252820962,7252820963,7252820964,7252820965,7252820966,8042845795,8042845796,8042845797,7252820967,8042845798,8042845799,7252820968,8042845800,8042845801,7252820969,8042845802,8042845803,7252820970,8042845804,7252820971,7252820972,7252820973,7252820974,7252820975,7252820976,7252820977,7252820978,7252820979,8042845794,8042845793,7252820980,7252820981,7252820982,8042845792,7252820983,7252820984,7252874885,7252874886,7252874887,7252874888,7252874889,5728443540,7252874890,5728443539,8042845791,8042845790,8042845789,7252874891,8042845808,8042845809,8042845810,8042845811,4036885076,8042845812]},{"type":"way","id":577572397,"nodes":[5536620518,5536620519,5536620520,5536620821,5536620822,5536620823,5536620824,5536620825,5536620826,6067483782,5536620827,5536620828,5536620829,5536620830,5536620831,5536620832,7794736251,5536620505,5536620506,5536620507,5952389321,5952389322,5952389323,5536609426,5952389320,5172938444,5536620510,5536620511,5536620512,5536620513,6067483781,5536620514,5536620516,5536620518]},{"type":"way","id":863373849,"nodes":[4036899624,8042845845,8042845844,8042845846,8042845847,8042845848,8042845849,8042845850,8042845851,8042845852,8042845853,8042845854,8042845855,8042845857,8042845856,8042845859,8042845858,8042845860,4036899624]},{"type":"way","id":577572399,"nodes":[5536620837,5536620838,5536620839,5536620840,5536620841,5536620842,5536620843,5536620844,5536620845,5536620846,5536620837]}]} + ) + + Utils.injectJsonDownloadForTests( + "https://overpass-api.de/api/interpreter?data=%5Bout%3Ajson%5D%5Btimeout%3A60%5D%5Bbbox%3A51.124212757826875%2C3.251953125%2C51.17934297928927%2C3.33984375%5D%3B(nwr%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%5B%22leisure%22%3D%22nature_reserve%22%5D%3Bnwr%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%5B%22protect_class%22!~%22%5E98%24%22%5D%5B%22boundary%22%3D%22protected_area%22%5D%3Bnwr%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%5B%22information%22%3D%22visitor_centre%22%5D%3Bnwr%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%5B%22information%22%3D%22office%22%5D%3Bnwr%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%5B%22route%22~%22%5E.*foot.*%24%22%5D%3Bnwr%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%5B%22route%22~%22%5E.*hiking.*%24%22%5D%3Bnwr%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%5B%22route%22~%22%5E.*bycicle.*%24%22%5D%3Bnwr%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%5B%22route%22~%22%5E.*horse.*%24%22%5D%3Bnwr%5B%22amenity%22%3D%22toilets%22%5D%3Bnwr%5B%22operator%22~%22%5E.*%5BnN%5Datuurpunt.*%24%22%5D%5B%22leisure%22%3D%22bird_hide%22%5D%3Bnwr%5B%22leisure%22%3D%22picnic_table%22%5D%3Bnwr%5B%22amenity%22%3D%22drinking_water%22%5D%5B%22access%22!~%22%5Epermissive%24%22%5D%5B%22access%22!~%22%5Eprivate%24%22%5D%3Bnwr%5B%22amenity%22%3D%22parking%22%5D%3Bnwr%5B%22information%22%3D%22board%22%5D%3Bnwr%5B%22amenity%22%3D%22bench%22%5D%3Bnwr%5B%22man_made%22%3D%22watermill%22%5D%3Bnwr%5B%22id%22%3D%22location_track%22%5D%3Bnwr%5B%22id%22%3D%22gps%22%5D%3Bnwr%5B%22user%3Alocation%22%3D%22yes%22%5D%3Bnwr%5B%22user%3Ahome%22%3D%22yes%22%5D%3B)%3Bout%20body%3Bout%20meta%3B%3E%3Bout%20skel%20qt%3B" , + {"version":0.6,"generator":"Overpass API 0.7.57 93a4d346","osm3s":{"timestamp_osm_base":"2022-02-14T00:02:14Z","copyright":"The data included in this document is from www.openstreetmap.org. The data is made available under ODbL."},"elements":[{"type":"node","id":668981602,"lat":51.1588243,"lon":3.2558654,"tags":{"amenity":"bench"}},{"type":"node","id":668981622,"lat":51.1565636,"lon":3.2549888,"tags":{"leisure":"bird_hide","operator":"Natuurpunt Vallei van de Zuidleie","shelter":"no"}},{"type":"node","id":1580339675,"lat":51.1395949,"lon":3.3332507,"tags":{"amenity":"parking"}},{"type":"node","id":1764571836,"lat":51.1701118,"lon":3.3363371,"tags":{"amenity":"parking"}},{"type":"node","id":2121652779,"lat":51.1268536,"lon":3.3239607,"tags":{"amenity":"parking"}},{"type":"node","id":2386053906,"lat":51.162161,"lon":3.263065,"tags":{"amenity":"toilets"}},{"type":"node","id":2978180520,"lat":51.1329149,"lon":3.3362322,"tags":{"amenity":"bench"}},{"type":"node","id":2978183271,"lat":51.1324243,"lon":3.3373735,"tags":{"amenity":"bench"}},{"type":"node","id":2978184471,"lat":51.1436385,"lon":3.2916539,"tags":{"amenity":"bench","backrest":"yes","check_date":"2021-02-26"}},{"type":"node","id":3925976407,"lat":51.1787486,"lon":3.2831866,"tags":{"leisure":"picnic_table"}},{"type":"node","id":5158056232,"lat":51.1592067,"lon":3.2567111,"tags":{"leisure":"bird_hide","operator":"Natuurpunt Vallei van de Zuidleie","shelter":"no"}},{"type":"node","id":5718776382,"lat":51.1609023,"lon":3.2582509,"tags":{"check_date":"2021-02-26","covered":"no","leisure":"picnic_table"}},{"type":"node","id":5718776383,"lat":51.1609488,"lon":3.2581877,"tags":{"check_date":"2021-02-26","covered":"no","leisure":"picnic_table"}},{"type":"node","id":5745727100,"lat":51.1594639,"lon":3.2604304,"tags":{"amenity":"bench"}},{"type":"node","id":5745739587,"lat":51.1580397,"lon":3.263101,"tags":{"check_date":"2021-02-26","leisure":"picnic_table"}},{"type":"node","id":5745739588,"lat":51.1580631,"lon":3.2630345,"tags":{"check_date":"2021-02-26","leisure":"picnic_table"}},{"type":"node","id":5961596093,"lat":51.1588103,"lon":3.2633933,"tags":{"leisure":"picnic_table"}},{"type":"node","id":5964032193,"lat":51.1514821,"lon":3.2723766,"tags":{"leisure":"picnic_table"}},{"type":"node","id":6034563379,"lat":51.1421689,"lon":3.3022271,"tags":{"leisure":"picnic_table"}},{"type":"node","id":6034564191,"lat":51.1722186,"lon":3.2823584,"tags":{"leisure":"picnic_table"}},{"type":"node","id":6034565298,"lat":51.1722796,"lon":3.282329,"tags":{"leisure":"picnic_table"}},{"type":"node","id":6145151111,"lat":51.1690435,"lon":3.3388676,"tags":{"amenity":"bench"}},{"type":"node","id":6145151112,"lat":51.1690023,"lon":3.3388636,"tags":{"amenity":"bench"}},{"type":"node","id":6216549651,"lat":51.1292813,"lon":3.332369,"tags":{"amenity":"bench"}},{"type":"node","id":6216549652,"lat":51.1292768,"lon":3.3324259,"tags":{"amenity":"bench"}},{"type":"node","id":7204447030,"lat":51.1791769,"lon":3.283116,"tags":{"board_type":"nature","information":"board","mapillary":"0BHVgU1XCyTMM9cjvidUqk","name":"De Assebroekse Meersen","tourism":"information"}},{"type":"node","id":7468175778,"lat":51.1344104,"lon":3.3348246,"tags":{"leisure":"picnic_table"}},{"type":"node","id":7602473480,"lat":51.1503874,"lon":3.2836867,"tags":{"leisure":"picnic_table"}},{"type":"node","id":7602473482,"lat":51.150244,"lon":3.2842925,"tags":{"board_type":"wildlife","information":"board","name":"Waterbeestjes","operator":"Natuurpunt Vallei van de Zuidleie","tourism":"information"}},{"type":"node","id":7602699080,"lat":51.1367031,"lon":3.3320712,"tags":{"amenity":"bench","backrest":"yes","material":"metal"}},{"type":"node","id":7680940369,"lat":51.1380074,"lon":3.3369928,"tags":{"amenity":"bench"}},{"type":"node","id":7726850522,"lat":51.1418585,"lon":3.3064234,"tags":{"image:0":"https://i.imgur.com/Bh6UjYy.jpg","information":"board","tourism":"information"}},{"type":"node","id":7727071212,"lat":51.1501173,"lon":3.2845352,"tags":{"board_type":"wildlife","image:0":"https://i.imgur.com/mFEQJWd.jpg","information":"board","name":"Vleermuizen","operator":"Natuurpunt Vallei van de Zuidleie","tourism":"information"}},{"type":"node","id":9122376662,"lat":51.1720505,"lon":3.3308524,"tags":{"amenity":"bench"}},{"type":"node","id":9425818876,"lat":51.1325315,"lon":3.3371616,"tags":{"leisure":"picnic_table","mapillary":"101961548889238"}},{"type":"way","id":149408639,"nodes":[1623924235,1623924236,1623924238,1864750831,1623924241,1623924235],"tags":{"amenity":"parking"}},{"type":"way","id":149553206,"nodes":[1625199938,1625199951,8377691836,8378081366,8378081429,8378081386,1625199950,6414383775,1625199827,1625199938],"tags":{"amenity":"parking"}},{"type":"way","id":184402308,"nodes":[1948836195,1948836194,1948836193,1948836189,1948836192,1948836195],"tags":{"building":"yes","leisure":"bird_hide","operator":"Natuurpunt Vallei van de Zuidleie","shelter":"yes","wheelchair":"yes"}},{"type":"way","id":184402309,"nodes":[1948836029,1948836038,1948836032,1948836025,1948836023,1948836029],"tags":{"building":"yes","leisure":"bird_hide","operator":"Natuurpunt Vallei van de Zuidleie","shelter":"yes","source:geometry:date":"2011-11-07","source:geometry:ref":"Gbg/3489204"}},{"type":"way","id":184402331,"nodes":[1948836104,1948836072,1948836068,1948836093,1948836104],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":236979353,"nodes":[2449323191,7962681624,7962681623,7962681621,7962681622,2449323193,7962681620,7962681619,8360787098,4350143592,6794421028,6794421027,6794421041,7962681614,2123461969,2449323198,7962681615,7962681616,6794421042,2449323191],"tags":{"amenity":"parking"}},{"type":"way","id":251590503,"nodes":[2577910543,2577910530,2577910542,2577910520,6418533335,2577910526,2577910545,2577910543],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":313090489,"nodes":[3190107423,3190107435,3190107442,3190107439,3190107432,3190107428,3190107424,3190107400,3190107393,3190107377,3190107371,3190107374,3190107408,3190107407,3190107415,3190107416,3190107420,3190107423],"tags":{"amenity":"parking"}},{"type":"way","id":314531418,"nodes":[7468171455,7468171451,7727393212,7727393211,7727393210,7727393208,7727393209,8781449489,7727393207,7727393206,7727393205,7727393204,7727393203,7727393202,7727393201,7727393200,7390697550,7390697534,7727393199,7727393198,7727393197,7390697549,7727393196,7727393195,7727393194,7727393193,7727393192,7727393191,7727393190,7727393189,7727393188,7727393187,7727393186,7727393185,7727339384,7727339383,7727339382,1553169911,1553169836,1493821433,1493821422,3185248088,7727339364,7727339365,7727339366,7727339367,7727339368,7727339369,7727339370,7727339371,7727339372,7727339373,7727339374,7727339375,7727339376,7727339377,3185248049,3185248048,3185248042,3185248040,7727339378,7727339379,7727339380,7727339381,7468171438,7468171442,7468171430,7468171432,7468171446,7468171404,7468171405,7468171422,7468171426,7468171433,7468171423,7468171428,7468171431,7468171429,7468171406,7468171407,7468171444,7468171408,7468171409,7468171410,7468171411,7468171412,7468171413,7190927792,7190927791,7190927793,7190927787,7190927788,7190927789,7190927790,7190927786,7602692242,7190927785,7190873584,7468171450,7190873582,7190873576,7190873578,7190873577,7468171455],"tags":{"access":"yes","dog":"leashed","dogs":"leashed","image":"https://i.imgur.com/cOfwWTj.jpg","image:0":"https://i.imgur.com/RliQdyi.jpg","image:1":"https://i.imgur.com/IeKHahz.jpg","image:2":"https://i.imgur.com/1K0IORH.jpg","image:3":"https://i.imgur.com/jojP09s.jpg","image:4":"https://i.imgur.com/DK6kT51.jpg","image:5":"https://i.imgur.com/RizbGM1.jpg","image:6":"https://i.imgur.com/hyoY6Cl.jpg","image:7":"https://i.imgur.com/xDd7Wrq.jpg","leisure":"nature_reserve","name":"Miseriebocht","operator":"Natuurpunt Beernem","website":"https://www.natuurpunt.be/natuurgebied/miseriebocht","wikidata":"Q97060915"}},{"type":"way","id":366318480,"nodes":[3702926557,3702926558,3702926559,3702926560,3702926557],"tags":{"amenity":"parking"}},{"type":"way","id":366318481,"nodes":[3702878648,3702926561,3702926562,3702926563,3702926564,3702926565,3702926566,3702926567,3702878648],"tags":{"amenity":"parking"}},{"type":"way","id":366318482,"nodes":[3702926568,8292789053,8292789054,3702878654,3702926568],"tags":{"amenity":"parking"}},{"type":"way","id":366320440,"nodes":[3702956173,3702956174,3702956175,3702956176,3702956173],"tags":{"amenity":"parking","name":"Kleine Beer"}},{"type":"way","id":366321706,"nodes":[3702969714,3702969715,3702969716,3702969717,3702969714],"tags":{"amenity":"parking"}},{"type":"way","id":480267681,"nodes":[4732689641,4732689640,4732689639,4732689638,4732689637,4732689636,4732689635,4732689634,4732689633,4732689632,4732689631,4732689630,4732689629,4732689628,4732689627,4732689626,8294875888,4732689641],"tags":{"amenity":"parking"}},{"type":"way","id":554341620,"nodes":[5349884603,5349884602,5349884601,5349884600,5349884603],"tags":{"amenity":"parking"}},{"type":"way","id":554341621,"nodes":[5349884607,5349884606,5349884605,5349884604,5349884607],"tags":{"amenity":"parking"}},{"type":"way","id":561902092,"nodes":[5417516023,5417515520,5417516021,5417516022,5417516023],"tags":{"building":"yes","image":"https://i.imgur.com/WmViSbL.jpg","leisure":"bird_hide","operator":"Natuurpunt Vallei van de Zuidleie","shelter":"yes","wheelchair":"no"}},{"type":"way","id":605915064,"nodes":[5745739924,5745739925,5745739926,5745739927,5745739924],"tags":{"amenity":"parking","surface":"fine2"}},{"type":"way","id":650285088,"nodes":[3645188881,6100803131,6100803130,6100803129,6100803124,6100803125,6100803128,6100803127,6100803126,3645188881],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":655944574,"nodes":[6145151107,6145151108,6145151109,6145151115,6145151114,6145151110,6145151107],"tags":{"amenity":"parking"}},{"type":"way","id":664171069,"nodes":[6216549610,6216549611,6216549612,6216549613,1413470849,1413470848,6216549605,6216549604,6216549610],"tags":{"amenity":"parking"}},{"type":"way","id":664171076,"nodes":[6216549656,6216549655,8307316294,6216549661,6216549657,6216549658,6216549659,6216549660,6216549656],"tags":{"amenity":"parking","capacity":"50"}},{"type":"way","id":665330334,"nodes":[6227395993,6227395991,6227395992,6227395997,6227395993],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface","surface":"asphalt"}},{"type":"way","id":684598363,"nodes":[3227068565,6416001161,6414352054,6414352055,7274233390,7274233391,7274233397,7274233395,7274233396,6414352053,3227068568,3227068565],"tags":{"amenity":"parking","fee":"no"}},{"type":"way","id":684599810,"nodes":[1317838331,8279842668,1384096112,1317838328,6414374315,3227068446,6414374316,6414374317,6414374318,3227068456,6414374319,6414374320,6414374321,1317838317,1317838331],"tags":{"access":"no","amenity":"parking","operator":"Politie"}},{"type":"way","id":761474468,"nodes":[7114502201,7114502203,7114502200,7114502202,3170562439,3170562437,3170562431,7114502240,7114502211,7114502212,7114502214,7114502215,7114502228,7114502234,7114502235,7114502236,7114502237,7114502238,7114502239,7114502233,7114502232,7114502231,7114502229,7114502230,7114502227,7114502226,7114502225,7114502216,7114502217,7114502224,3170562392,7114502218,3170562394,7114502219,7114502220,7114502221,7114502222,7114502223,3170562395,3170562396,3170562397,3170562402,3170562410,7114502209,7114502208,7114502207,7114502205,7114502206,3170562436,1475188519,1475188516,6627605025,8294886142,7114502201],"tags":{"image":"http://valleivandezuidleie.be/wp-content/uploads/2011/12/2011-03-24_G12_088_1_1.JPG","leisure":"nature_reserve","name":"Merlebeek-Meerberg","natural":"wetland","operator":"Natuurpunt Vallei van de Zuidleie","start_date":"2011","website":"http://valleivandezuidleie.be/info-over-de-vallei-van-de-zuidleie/merlebeek/","wetland":"wet_meadow"}},{"type":"way","id":813859435,"nodes":[7602479690,7459257985,7602479691,7459154784,7459154782,7602479692,5482441357,7602479693,7602479694,7602479695,7602479696,7602479690],"tags":{"access":"yes","image:0":"https://i.imgur.com/nb9nawa.jpg","landuse":"grass","leisure":"nature_reserve","name:signed":"no","natural":"grass","operator":"Natuurpunt Vallei van de Zuidleie"}},{"type":"way","id":826103452,"nodes":[7713176912,7713176911,7713176910,7713176909,7713176912],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":893176022,"nodes":[1927235214,8301349336,8301349335,8301349337,1927235214],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":895943476,"nodes":[8328251887,8328251886,8328251885,8328251884,8328251887],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":895943477,"nodes":[8328251891,8328251890,8328251889,8328251888,8328251891],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":895943478,"nodes":[8328251895,8328251894,8328251893,8328251892,8328251895],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":895943479,"nodes":[8328251897,8328251896,8328251901,8328251900,8328251897],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":895943480,"nodes":[8328251898,8328251899,8328251903,8328251902,8328251898],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":895943481,"nodes":[8328251907,8328251906,8328251905,8328251904,8328251907],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":895943482,"nodes":[8328251911,8328251910,8328251909,8328251908,8328251911],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":901952767,"nodes":[8378097127,8378097126,8378097125,8378097124,8378097127],"tags":{"amenity":"parking","parking":"street_side"}},{"type":"way","id":901952768,"nodes":[8378097134,8378097133,8378097132,8378097131,8378097130,8378097129,8378097128,8378097134],"tags":{"amenity":"parking","parking":"street_side"}},{"type":"way","id":947325182,"nodes":[8497007549,8768981525,8768981522,8768981524,8768981521,8768981523,8768981520,8768981519,6206789709,8768981533,8497007549],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":966827815,"nodes":[8945026757,8945026756,8945026755,8945026754,8945026757],"tags":{"access":"customers","amenity":"parking","parking":"surface"}},{"type":"relation","id":2589413,"members":[{"type":"way","ref":663050030,"role":"outer"},{"type":"way","ref":184402334,"role":"outer"},{"type":"way","ref":184402332,"role":"outer"},{"type":"way","ref":184402325,"role":"outer"},{"type":"way","ref":184402326,"role":"outer"},{"type":"way","ref":314899865,"role":"outer"},{"type":"way","ref":314956402,"role":"outer"}],"tags":{"access":"yes","image":"https://i.imgur.com/Yu4qHh5.jpg","leisure":"nature_reserve","name":"Warandeputten","operator":"Natuurpunt Vallei van de Zuidleie","type":"multipolygon","wikipedia":"nl:Warandeputten"}},{"type":"relation","id":8782624,"members":[{"type":"way","ref":315041273,"role":"outer"},{"type":"way","ref":631377343,"role":"outer"},{"type":"way","ref":631371237,"role":"outer"},{"type":"way","ref":631371236,"role":"outer"},{"type":"way","ref":631371234,"role":"outer"},{"type":"way","ref":631377344,"role":"outer"},{"type":"way","ref":631371232,"role":"outer"},{"type":"way","ref":631371231,"role":"outer"},{"type":"way","ref":315041263,"role":"outer"},{"type":"way","ref":631371228,"role":"outer"},{"type":"way","ref":631377341,"role":"outer"},{"type":"way","ref":315041261,"role":"outer"},{"type":"way","ref":631371223,"role":"outer"}],"tags":{"access":"yes","image:0":"https://i.imgur.com/VuzX5jW.jpg","image:1":"https://i.imgur.com/tPppmJG.jpg","image:2":"https://i.imgur.com/ecY3RER.jpg","image:3":"https://i.imgur.com/lr4FK6j.jpg","image:5":"https://i.imgur.com/uufEeE6.jpg","leisure":"nature_reserve","name":"Leiemeersen Noord","operator":"Natuurpunt Vallei van de Zuidleie","type":"multipolygon","website":"http://valleivandezuidleie.be/info-over-de-vallei-van-de-zuidleie/leiemeersen-noord/"}},{"type":"relation","id":8890076,"members":[{"type":"way","ref":640979982,"role":"outer"},{"type":"way","ref":640979978,"role":"outer"}],"tags":{"access":"yes","image:0":"https://i.imgur.com/SAAaKBH.jpg","image:1":"https://i.imgur.com/DGK9iBN.jpg","image:2":"https://i.imgur.com/bte1KJx.jpg","image:3":"https://i.imgur.com/f75Gxnx.jpg","leisure":"nature_reserve","name":"Gevaerts Noord","operator":"Natuurpunt Vallei van de Zuidleie","type":"multipolygon"}},{"type":"relation","id":9118029,"members":[{"type":"way","ref":606165130,"role":"outer"},{"type":"way","ref":655652319,"role":"outer"},{"type":"way","ref":655652321,"role":"outer"}],"tags":{"access":"no","image:0":"https://i.imgur.com/eBufo0v.jpg","image:1":"https://i.imgur.com/kBej2Nk.jpg","image:2":"https://i.imgur.com/QKoyIRl.jpg","leisure":"nature_reserve","name":"De Leiemeersen","note":"Door de hoge kwetsbaarheid van het gebied zijn De Leiemeersen enkel te bezoeken onder begeleiding van een gids","note:mapping":"NIET VOOR BEGINNENDE MAPPERS! Dit gebied is met relaties als multipolygonen gemapt (zo'n 50 stuks). Als je niet weet hoe dit werkt, vraag hulp.","note_1":"wetland=marsh is het veenmoerasgebied","operator":"Natuurpunt Vallei van de Zuidleie","type":"multipolygon","website":"http://valleivandezuidleie.be/info-over-de-vallei-van-de-zuidleie/leiemeersen/"}},{"type":"node","id":668981602,"lat":51.1588243,"lon":3.2558654,"timestamp":"2012-07-06T17:58:39Z","version":2,"changeset":12133044,"user":"martino260","uid":655442,"tags":{"amenity":"bench"}},{"type":"node","id":668981622,"lat":51.1565636,"lon":3.2549888,"timestamp":"2020-03-23T23:54:26Z","version":4,"changeset":82544029,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"leisure":"bird_hide","operator":"Natuurpunt Vallei van de Zuidleie","shelter":"no"}},{"type":"node","id":1580339675,"lat":51.1395949,"lon":3.3332507,"timestamp":"2012-01-07T00:44:42Z","version":1,"changeset":10317754,"user":"popaultje","uid":519184,"tags":{"amenity":"parking"}},{"type":"node","id":1764571836,"lat":51.1701118,"lon":3.3363371,"timestamp":"2012-05-24T21:06:50Z","version":1,"changeset":11693640,"user":"popaultje","uid":519184,"tags":{"amenity":"parking"}},{"type":"node","id":2121652779,"lat":51.1268536,"lon":3.3239607,"timestamp":"2013-01-20T20:12:50Z","version":1,"changeset":14725799,"user":"tomvdb","uid":437764,"tags":{"amenity":"parking"}},{"type":"node","id":2386053906,"lat":51.162161,"lon":3.263065,"timestamp":"2018-01-19T21:31:30Z","version":2,"changeset":55589374,"user":"L'imaginaire","uid":654234,"tags":{"amenity":"toilets"}},{"type":"node","id":2978180520,"lat":51.1329149,"lon":3.3362322,"timestamp":"2014-07-24T21:29:38Z","version":1,"changeset":24338416,"user":"pieterjanheyse","uid":254767,"tags":{"amenity":"bench"}},{"type":"node","id":2978183271,"lat":51.1324243,"lon":3.3373735,"timestamp":"2019-09-14T05:02:25Z","version":2,"changeset":74462201,"user":"JanFi","uid":672253,"tags":{"amenity":"bench"}},{"type":"node","id":2978184471,"lat":51.1436385,"lon":3.2916539,"timestamp":"2021-02-26T10:22:54Z","version":3,"changeset":100041319,"user":"s8evq","uid":3710738,"tags":{"amenity":"bench","backrest":"yes","check_date":"2021-02-26"}},{"type":"node","id":3925976407,"lat":51.1787486,"lon":3.2831866,"timestamp":"2019-08-12T19:48:31Z","version":2,"changeset":73281516,"user":"s8evq","uid":3710738,"tags":{"leisure":"picnic_table"}},{"type":"node","id":5158056232,"lat":51.1592067,"lon":3.2567111,"timestamp":"2021-04-17T16:21:52Z","version":5,"changeset":103110072,"user":"L'imaginaire","uid":654234,"tags":{"leisure":"bird_hide","operator":"Natuurpunt Vallei van de Zuidleie","shelter":"no"}},{"type":"node","id":5718776382,"lat":51.1609023,"lon":3.2582509,"timestamp":"2021-10-18T10:27:50Z","version":3,"changeset":112646117,"user":"s8evq","uid":3710738,"tags":{"check_date":"2021-02-26","covered":"no","leisure":"picnic_table"}},{"type":"node","id":5718776383,"lat":51.1609488,"lon":3.2581877,"timestamp":"2021-10-18T10:27:50Z","version":3,"changeset":112646117,"user":"s8evq","uid":3710738,"tags":{"check_date":"2021-02-26","covered":"no","leisure":"picnic_table"}},{"type":"node","id":5745727100,"lat":51.1594639,"lon":3.2604304,"timestamp":"2018-07-07T18:00:29Z","version":1,"changeset":60494261,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"amenity":"bench"}},{"type":"node","id":5745739587,"lat":51.1580397,"lon":3.263101,"timestamp":"2021-02-26T10:07:56Z","version":2,"changeset":100039706,"user":"s8evq","uid":3710738,"tags":{"check_date":"2021-02-26","leisure":"picnic_table"}},{"type":"node","id":5745739588,"lat":51.1580631,"lon":3.2630345,"timestamp":"2021-02-26T10:07:41Z","version":2,"changeset":100039706,"user":"s8evq","uid":3710738,"tags":{"check_date":"2021-02-26","leisure":"picnic_table"}},{"type":"node","id":5961596093,"lat":51.1588103,"lon":3.2633933,"timestamp":"2018-10-06T14:41:12Z","version":1,"changeset":63258667,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"leisure":"picnic_table"}},{"type":"node","id":5964032193,"lat":51.1514821,"lon":3.2723766,"timestamp":"2018-10-07T12:15:53Z","version":1,"changeset":63277533,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"leisure":"picnic_table"}},{"type":"node","id":6034563379,"lat":51.1421689,"lon":3.3022271,"timestamp":"2020-02-11T20:10:26Z","version":2,"changeset":80868434,"user":"s8evq","uid":3710738,"tags":{"leisure":"picnic_table"}},{"type":"node","id":6034564191,"lat":51.1722186,"lon":3.2823584,"timestamp":"2018-11-04T20:27:50Z","version":2,"changeset":64177431,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"leisure":"picnic_table"}},{"type":"node","id":6034565298,"lat":51.1722796,"lon":3.282329,"timestamp":"2018-11-04T20:27:50Z","version":2,"changeset":64177431,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"leisure":"picnic_table"}},{"type":"node","id":6145151111,"lat":51.1690435,"lon":3.3388676,"timestamp":"2018-12-18T13:13:36Z","version":1,"changeset":65580728,"user":"Siel Nollet","uid":3292414,"tags":{"amenity":"bench"}},{"type":"node","id":6145151112,"lat":51.1690023,"lon":3.3388636,"timestamp":"2018-12-18T13:13:36Z","version":1,"changeset":65580728,"user":"Siel Nollet","uid":3292414,"tags":{"amenity":"bench"}},{"type":"node","id":6216549651,"lat":51.1292813,"lon":3.332369,"timestamp":"2019-01-17T16:29:02Z","version":1,"changeset":66400781,"user":"Nilsnn","uid":4652000,"tags":{"amenity":"bench"}},{"type":"node","id":6216549652,"lat":51.1292768,"lon":3.3324259,"timestamp":"2019-01-17T16:29:03Z","version":1,"changeset":66400781,"user":"Nilsnn","uid":4652000,"tags":{"amenity":"bench"}},{"type":"node","id":7204447030,"lat":51.1791769,"lon":3.283116,"timestamp":"2021-01-01T12:18:32Z","version":3,"changeset":96768203,"user":"L'imaginaire","uid":654234,"tags":{"board_type":"nature","information":"board","mapillary":"0BHVgU1XCyTMM9cjvidUqk","name":"De Assebroekse Meersen","tourism":"information"}},{"type":"node","id":7468175778,"lat":51.1344104,"lon":3.3348246,"timestamp":"2020-04-30T19:07:49Z","version":1,"changeset":84433940,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"leisure":"picnic_table"}},{"type":"node","id":7602473480,"lat":51.1503874,"lon":3.2836867,"timestamp":"2020-06-08T10:39:07Z","version":1,"changeset":86349440,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"leisure":"picnic_table"}},{"type":"node","id":7602473482,"lat":51.150244,"lon":3.2842925,"timestamp":"2021-02-26T10:18:19Z","version":4,"changeset":100040859,"user":"s8evq","uid":3710738,"tags":{"board_type":"wildlife","information":"board","name":"Waterbeestjes","operator":"Natuurpunt Vallei van de Zuidleie","tourism":"information"}},{"type":"node","id":7602699080,"lat":51.1367031,"lon":3.3320712,"timestamp":"2020-06-08T12:08:11Z","version":1,"changeset":86353903,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"amenity":"bench","backrest":"yes","material":"metal"}},{"type":"node","id":7680940369,"lat":51.1380074,"lon":3.3369928,"timestamp":"2020-07-03T17:54:31Z","version":1,"changeset":87513827,"user":"L'imaginaire","uid":654234,"tags":{"amenity":"bench"}},{"type":"node","id":7726850522,"lat":51.1418585,"lon":3.3064234,"timestamp":"2020-07-18T15:57:43Z","version":1,"changeset":88179934,"user":"Pieter Vander Vennet","uid":3818858,"tags":{"image:0":"https://i.imgur.com/Bh6UjYy.jpg","information":"board","tourism":"information"}},{"type":"node","id":7727071212,"lat":51.1501173,"lon":3.2845352,"timestamp":"2021-02-26T10:17:39Z","version":2,"changeset":100040859,"user":"s8evq","uid":3710738,"tags":{"board_type":"wildlife","image:0":"https://i.imgur.com/mFEQJWd.jpg","information":"board","name":"Vleermuizen","operator":"Natuurpunt Vallei van de Zuidleie","tourism":"information"}},{"type":"node","id":9122376662,"lat":51.1720505,"lon":3.3308524,"timestamp":"2021-09-25T13:32:42Z","version":1,"changeset":111688164,"user":"TeamP8","uid":718373,"tags":{"amenity":"bench"}},{"type":"node","id":9425818876,"lat":51.1325315,"lon":3.3371616,"timestamp":"2022-01-28T20:13:29Z","version":3,"changeset":116721474,"user":"L'imaginaire","uid":654234,"tags":{"leisure":"picnic_table","mapillary":"101961548889238"}},{"type":"way","id":149408639,"timestamp":"2012-08-15T19:09:59Z","version":4,"changeset":12742790,"user":"tomvdb","uid":437764,"nodes":[1623924235,1623924236,1623924238,1864750831,1623924241,1623924235],"tags":{"amenity":"parking"}},{"type":"way","id":149553206,"timestamp":"2021-01-30T12:11:53Z","version":4,"changeset":98411765,"user":"L'imaginaire","uid":654234,"nodes":[1625199938,1625199951,8377691836,8378081366,8378081429,8378081386,1625199950,6414383775,1625199827,1625199938],"tags":{"amenity":"parking"}},{"type":"way","id":184402308,"timestamp":"2020-03-23T23:54:26Z","version":6,"changeset":82544029,"user":"Pieter Vander Vennet","uid":3818858,"nodes":[1948836195,1948836194,1948836193,1948836189,1948836192,1948836195],"tags":{"building":"yes","leisure":"bird_hide","operator":"Natuurpunt Vallei van de Zuidleie","shelter":"yes","wheelchair":"yes"}},{"type":"way","id":184402309,"timestamp":"2021-12-20T11:33:54Z","version":8,"changeset":115161990,"user":"s8evq","uid":3710738,"nodes":[1948836029,1948836038,1948836032,1948836025,1948836023,1948836029],"tags":{"building":"yes","leisure":"bird_hide","operator":"Natuurpunt Vallei van de Zuidleie","shelter":"yes","source:geometry:date":"2011-11-07","source:geometry:ref":"Gbg/3489204"}},{"type":"way","id":184402331,"timestamp":"2021-02-26T10:03:17Z","version":4,"changeset":100039746,"user":"s8evq","uid":3710738,"nodes":[1948836104,1948836072,1948836068,1948836093,1948836104],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface"}},{"type":"way","id":236979353,"timestamp":"2021-01-25T12:38:22Z","version":4,"changeset":98122705,"user":"JosV","uid":170722,"nodes":[2449323191,7962681624,7962681623,7962681621,7962681622,2449323193,7962681620,7962681619,8360787098,4350143592,6794421028,6794421027,6794421041,7962681614,2123461969,2449323198,7962681615,7962681616,6794421042,2449323191],"tags":{"amenity":"parking"}},{"type":"way","id":251590503,"timestamp":"2019-04-20T22:04:54Z","version":2,"changeset":69412561,"user":"L'imaginaire","uid":654234,"nodes":[2577910543,2577910530,2577910542,2577910520,6418533335,2577910526,2577910545,2577910543],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":313090489,"timestamp":"2014-11-16T14:59:12Z","version":1,"changeset":26823403,"user":"JanFi","uid":672253,"nodes":[3190107423,3190107435,3190107442,3190107439,3190107432,3190107428,3190107424,3190107400,3190107393,3190107377,3190107371,3190107374,3190107408,3190107407,3190107415,3190107416,3190107420,3190107423],"tags":{"amenity":"parking"}},{"type":"way","id":314531418,"timestamp":"2021-05-30T17:02:49Z","version":21,"changeset":105576255,"user":"s8evq","uid":3710738,"nodes":[7468171455,7468171451,7727393212,7727393211,7727393210,7727393208,7727393209,8781449489,7727393207,7727393206,7727393205,7727393204,7727393203,7727393202,7727393201,7727393200,7390697550,7390697534,7727393199,7727393198,7727393197,7390697549,7727393196,7727393195,7727393194,7727393193,7727393192,7727393191,7727393190,7727393189,7727393188,7727393187,7727393186,7727393185,7727339384,7727339383,7727339382,1553169911,1553169836,1493821433,1493821422,3185248088,7727339364,7727339365,7727339366,7727339367,7727339368,7727339369,7727339370,7727339371,7727339372,7727339373,7727339374,7727339375,7727339376,7727339377,3185248049,3185248048,3185248042,3185248040,7727339378,7727339379,7727339380,7727339381,7468171438,7468171442,7468171430,7468171432,7468171446,7468171404,7468171405,7468171422,7468171426,7468171433,7468171423,7468171428,7468171431,7468171429,7468171406,7468171407,7468171444,7468171408,7468171409,7468171410,7468171411,7468171412,7468171413,7190927792,7190927791,7190927793,7190927787,7190927788,7190927789,7190927790,7190927786,7602692242,7190927785,7190873584,7468171450,7190873582,7190873576,7190873578,7190873577,7468171455],"tags":{"access":"yes","dog":"leashed","dogs":"leashed","image":"https://i.imgur.com/cOfwWTj.jpg","image:0":"https://i.imgur.com/RliQdyi.jpg","image:1":"https://i.imgur.com/IeKHahz.jpg","image:2":"https://i.imgur.com/1K0IORH.jpg","image:3":"https://i.imgur.com/jojP09s.jpg","image:4":"https://i.imgur.com/DK6kT51.jpg","image:5":"https://i.imgur.com/RizbGM1.jpg","image:6":"https://i.imgur.com/hyoY6Cl.jpg","image:7":"https://i.imgur.com/xDd7Wrq.jpg","leisure":"nature_reserve","name":"Miseriebocht","operator":"Natuurpunt Beernem","website":"https://www.natuurpunt.be/natuurgebied/miseriebocht","wikidata":"Q97060915"}},{"type":"way","id":366318480,"timestamp":"2015-08-18T13:50:59Z","version":1,"changeset":33415758,"user":"xras3r","uid":323672,"nodes":[3702926557,3702926558,3702926559,3702926560,3702926557],"tags":{"amenity":"parking"}},{"type":"way","id":366318481,"timestamp":"2015-08-18T13:50:59Z","version":1,"changeset":33415758,"user":"xras3r","uid":323672,"nodes":[3702878648,3702926561,3702926562,3702926563,3702926564,3702926565,3702926566,3702926567,3702878648],"tags":{"amenity":"parking"}},{"type":"way","id":366318482,"timestamp":"2021-01-05T09:04:32Z","version":2,"changeset":96964072,"user":"JosV","uid":170722,"nodes":[3702926568,8292789053,8292789054,3702878654,3702926568],"tags":{"amenity":"parking"}},{"type":"way","id":366320440,"timestamp":"2015-08-18T14:02:00Z","version":1,"changeset":33415981,"user":"xras3r","uid":323672,"nodes":[3702956173,3702956174,3702956175,3702956176,3702956173],"tags":{"amenity":"parking","name":"Kleine Beer"}},{"type":"way","id":366321706,"timestamp":"2015-08-18T14:15:30Z","version":1,"changeset":33416303,"user":"xras3r","uid":323672,"nodes":[3702969714,3702969715,3702969716,3702969717,3702969714],"tags":{"amenity":"parking"}},{"type":"way","id":480267681,"timestamp":"2021-01-05T21:32:23Z","version":2,"changeset":97006454,"user":"JosV","uid":170722,"nodes":[4732689641,4732689640,4732689639,4732689638,4732689637,4732689636,4732689635,4732689634,4732689633,4732689632,4732689631,4732689630,4732689629,4732689628,4732689627,4732689626,8294875888,4732689641],"tags":{"amenity":"parking"}},{"type":"way","id":554341620,"timestamp":"2018-01-19T21:31:30Z","version":1,"changeset":55589374,"user":"L'imaginaire","uid":654234,"nodes":[5349884603,5349884602,5349884601,5349884600,5349884603],"tags":{"amenity":"parking"}},{"type":"way","id":554341621,"timestamp":"2018-01-19T21:31:30Z","version":1,"changeset":55589374,"user":"L'imaginaire","uid":654234,"nodes":[5349884607,5349884606,5349884605,5349884604,5349884607],"tags":{"amenity":"parking"}},{"type":"way","id":561902092,"timestamp":"2021-01-17T14:52:46Z","version":6,"changeset":97640804,"user":"Pieter Vander Vennet","uid":3818858,"nodes":[5417516023,5417515520,5417516021,5417516022,5417516023],"tags":{"building":"yes","image":"https://i.imgur.com/WmViSbL.jpg","leisure":"bird_hide","operator":"Natuurpunt Vallei van de Zuidleie","shelter":"yes","wheelchair":"no"}},{"type":"way","id":605915064,"timestamp":"2018-07-07T18:07:31Z","version":1,"changeset":60494380,"user":"Pieter Vander Vennet","uid":3818858,"nodes":[5745739924,5745739925,5745739926,5745739927,5745739924],"tags":{"amenity":"parking","surface":"fine2"}},{"type":"way","id":650285088,"timestamp":"2021-01-29T09:37:56Z","version":2,"changeset":98352073,"user":"JosV","uid":170722,"nodes":[3645188881,6100803131,6100803130,6100803129,6100803124,6100803125,6100803128,6100803127,6100803126,3645188881],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":655944574,"timestamp":"2020-02-23T22:05:54Z","version":2,"changeset":81377451,"user":"L'imaginaire","uid":654234,"nodes":[6145151107,6145151108,6145151109,6145151115,6145151114,6145151110,6145151107],"tags":{"amenity":"parking"}},{"type":"way","id":664171069,"timestamp":"2019-01-17T16:29:08Z","version":1,"changeset":66400781,"user":"Nilsnn","uid":4652000,"nodes":[6216549610,6216549611,6216549612,6216549613,1413470849,1413470848,6216549605,6216549604,6216549610],"tags":{"amenity":"parking"}},{"type":"way","id":664171076,"timestamp":"2021-01-09T21:56:37Z","version":3,"changeset":97230316,"user":"JosV","uid":170722,"nodes":[6216549656,6216549655,8307316294,6216549661,6216549657,6216549658,6216549659,6216549660,6216549656],"tags":{"amenity":"parking","capacity":"50"}},{"type":"way","id":665330334,"timestamp":"2019-01-22T14:20:51Z","version":1,"changeset":66539354,"user":"Nilsnn","uid":4652000,"nodes":[6227395993,6227395991,6227395992,6227395997,6227395993],"tags":{"access":"yes","amenity":"parking","fee":"no","parking":"surface","surface":"asphalt"}},{"type":"way","id":684598363,"timestamp":"2020-03-07T14:21:22Z","version":3,"changeset":81900556,"user":"L'imaginaire","uid":654234,"nodes":[3227068565,6416001161,6414352054,6414352055,7274233390,7274233391,7274233397,7274233395,7274233396,6414352053,3227068568,3227068565],"tags":{"amenity":"parking","fee":"no"}},{"type":"way","id":684599810,"timestamp":"2020-12-31T20:58:28Z","version":3,"changeset":96751036,"user":"JosV","uid":170722,"nodes":[1317838331,8279842668,1384096112,1317838328,6414374315,3227068446,6414374316,6414374317,6414374318,3227068456,6414374319,6414374320,6414374321,1317838317,1317838331],"tags":{"access":"no","amenity":"parking","operator":"Politie"}},{"type":"way","id":761474468,"timestamp":"2021-01-05T21:32:23Z","version":3,"changeset":97006454,"user":"JosV","uid":170722,"nodes":[7114502201,7114502203,7114502200,7114502202,3170562439,3170562437,3170562431,7114502240,7114502211,7114502212,7114502214,7114502215,7114502228,7114502234,7114502235,7114502236,7114502237,7114502238,7114502239,7114502233,7114502232,7114502231,7114502229,7114502230,7114502227,7114502226,7114502225,7114502216,7114502217,7114502224,3170562392,7114502218,3170562394,7114502219,7114502220,7114502221,7114502222,7114502223,3170562395,3170562396,3170562397,3170562402,3170562410,7114502209,7114502208,7114502207,7114502205,7114502206,3170562436,1475188519,1475188516,6627605025,8294886142,7114502201],"tags":{"image":"http://valleivandezuidleie.be/wp-content/uploads/2011/12/2011-03-24_G12_088_1_1.JPG","leisure":"nature_reserve","name":"Merlebeek-Meerberg","natural":"wetland","operator":"Natuurpunt Vallei van de Zuidleie","start_date":"2011","website":"http://valleivandezuidleie.be/info-over-de-vallei-van-de-zuidleie/merlebeek/","wetland":"wet_meadow"}},{"type":"way","id":813859435,"timestamp":"2021-02-26T10:18:26Z","version":3,"changeset":100040879,"user":"s8evq","uid":3710738,"nodes":[7602479690,7459257985,7602479691,7459154784,7459154782,7602479692,5482441357,7602479693,7602479694,7602479695,7602479696,7602479690],"tags":{"access":"yes","image:0":"https://i.imgur.com/nb9nawa.jpg","landuse":"grass","leisure":"nature_reserve","name:signed":"no","natural":"grass","operator":"Natuurpunt Vallei van de Zuidleie"}},{"type":"way","id":826103452,"timestamp":"2020-07-14T09:05:14Z","version":1,"changeset":87965884,"user":"L'imaginaire","uid":654234,"nodes":[7713176912,7713176911,7713176910,7713176909,7713176912],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":893176022,"timestamp":"2021-01-07T23:02:07Z","version":1,"changeset":97133621,"user":"JosV","uid":170722,"nodes":[1927235214,8301349336,8301349335,8301349337,1927235214],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":895943476,"timestamp":"2021-01-16T17:56:50Z","version":1,"changeset":97614669,"user":"JosV","uid":170722,"nodes":[8328251887,8328251886,8328251885,8328251884,8328251887],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":895943477,"timestamp":"2021-01-16T17:56:50Z","version":1,"changeset":97614669,"user":"JosV","uid":170722,"nodes":[8328251891,8328251890,8328251889,8328251888,8328251891],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":895943478,"timestamp":"2021-01-16T17:56:50Z","version":1,"changeset":97614669,"user":"JosV","uid":170722,"nodes":[8328251895,8328251894,8328251893,8328251892,8328251895],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":895943479,"timestamp":"2021-01-16T17:56:50Z","version":1,"changeset":97614669,"user":"JosV","uid":170722,"nodes":[8328251897,8328251896,8328251901,8328251900,8328251897],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":895943480,"timestamp":"2021-01-16T17:56:50Z","version":1,"changeset":97614669,"user":"JosV","uid":170722,"nodes":[8328251898,8328251899,8328251903,8328251902,8328251898],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":895943481,"timestamp":"2021-01-16T17:56:50Z","version":1,"changeset":97614669,"user":"JosV","uid":170722,"nodes":[8328251907,8328251906,8328251905,8328251904,8328251907],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":895943482,"timestamp":"2021-01-16T17:56:50Z","version":1,"changeset":97614669,"user":"JosV","uid":170722,"nodes":[8328251911,8328251910,8328251909,8328251908,8328251911],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":901952767,"timestamp":"2021-01-30T12:19:15Z","version":1,"changeset":98412028,"user":"L'imaginaire","uid":654234,"nodes":[8378097127,8378097126,8378097125,8378097124,8378097127],"tags":{"amenity":"parking","parking":"street_side"}},{"type":"way","id":901952768,"timestamp":"2021-01-30T12:19:15Z","version":1,"changeset":98412028,"user":"L'imaginaire","uid":654234,"nodes":[8378097134,8378097133,8378097132,8378097131,8378097130,8378097129,8378097128,8378097134],"tags":{"amenity":"parking","parking":"street_side"}},{"type":"way","id":947325182,"timestamp":"2021-05-26T15:16:06Z","version":1,"changeset":105366812,"user":"L'imaginaire","uid":654234,"nodes":[8497007549,8768981525,8768981522,8768981524,8768981521,8768981523,8768981520,8768981519,6206789709,8768981533,8497007549],"tags":{"amenity":"parking","parking":"surface"}},{"type":"way","id":966827815,"timestamp":"2021-07-23T20:01:09Z","version":1,"changeset":108511361,"user":"L'imaginaire","uid":654234,"nodes":[8945026757,8945026756,8945026755,8945026754,8945026757],"tags":{"access":"customers","amenity":"parking","parking":"surface"}},{"type":"relation","id":2589413,"timestamp":"2021-03-06T15:13:01Z","version":7,"changeset":100540347,"user":"Pieter Vander Vennet","uid":3818858,"members":[{"type":"way","ref":663050030,"role":"outer"},{"type":"way","ref":184402334,"role":"outer"},{"type":"way","ref":184402332,"role":"outer"},{"type":"way","ref":184402325,"role":"outer"},{"type":"way","ref":184402326,"role":"outer"},{"type":"way","ref":314899865,"role":"outer"},{"type":"way","ref":314956402,"role":"outer"}],"tags":{"access":"yes","image":"https://i.imgur.com/Yu4qHh5.jpg","leisure":"nature_reserve","name":"Warandeputten","operator":"Natuurpunt Vallei van de Zuidleie","type":"multipolygon","wikipedia":"nl:Warandeputten"}},{"type":"relation","id":8782624,"timestamp":"2021-03-08T13:15:15Z","version":14,"changeset":100640534,"user":"M!dgard","uid":763799,"members":[{"type":"way","ref":315041273,"role":"outer"},{"type":"way","ref":631377343,"role":"outer"},{"type":"way","ref":631371237,"role":"outer"},{"type":"way","ref":631371236,"role":"outer"},{"type":"way","ref":631371234,"role":"outer"},{"type":"way","ref":631377344,"role":"outer"},{"type":"way","ref":631371232,"role":"outer"},{"type":"way","ref":631371231,"role":"outer"},{"type":"way","ref":315041263,"role":"outer"},{"type":"way","ref":631371228,"role":"outer"},{"type":"way","ref":631377341,"role":"outer"},{"type":"way","ref":315041261,"role":"outer"},{"type":"way","ref":631371223,"role":"outer"}],"tags":{"access":"yes","image:0":"https://i.imgur.com/VuzX5jW.jpg","image:1":"https://i.imgur.com/tPppmJG.jpg","image:2":"https://i.imgur.com/ecY3RER.jpg","image:3":"https://i.imgur.com/lr4FK6j.jpg","image:5":"https://i.imgur.com/uufEeE6.jpg","leisure":"nature_reserve","name":"Leiemeersen Noord","operator":"Natuurpunt Vallei van de Zuidleie","type":"multipolygon","website":"http://valleivandezuidleie.be/info-over-de-vallei-van-de-zuidleie/leiemeersen-noord/"}},{"type":"relation","id":8890076,"timestamp":"2020-07-18T15:56:50Z","version":6,"changeset":88179905,"user":"Pieter Vander Vennet","uid":3818858,"members":[{"type":"way","ref":640979982,"role":"outer"},{"type":"way","ref":640979978,"role":"outer"}],"tags":{"access":"yes","image:0":"https://i.imgur.com/SAAaKBH.jpg","image:1":"https://i.imgur.com/DGK9iBN.jpg","image:2":"https://i.imgur.com/bte1KJx.jpg","image:3":"https://i.imgur.com/f75Gxnx.jpg","leisure":"nature_reserve","name":"Gevaerts Noord","operator":"Natuurpunt Vallei van de Zuidleie","type":"multipolygon"}},{"type":"relation","id":9118029,"timestamp":"2020-07-11T12:04:16Z","version":4,"changeset":87852045,"user":"Pieter Vander Vennet","uid":3818858,"members":[{"type":"way","ref":606165130,"role":"outer"},{"type":"way","ref":655652319,"role":"outer"},{"type":"way","ref":655652321,"role":"outer"}],"tags":{"access":"no","image:0":"https://i.imgur.com/eBufo0v.jpg","image:1":"https://i.imgur.com/kBej2Nk.jpg","image:2":"https://i.imgur.com/QKoyIRl.jpg","leisure":"nature_reserve","name":"De Leiemeersen","note":"Door de hoge kwetsbaarheid van het gebied zijn De Leiemeersen enkel te bezoeken onder begeleiding van een gids","note:mapping":"NIET VOOR BEGINNENDE MAPPERS! Dit gebied is met relaties als multipolygonen gemapt (zo'n 50 stuks). Als je niet weet hoe dit werkt, vraag hulp.","note_1":"wetland=marsh is het veenmoerasgebied","operator":"Natuurpunt Vallei van de Zuidleie","type":"multipolygon","website":"http://valleivandezuidleie.be/info-over-de-vallei-van-de-zuidleie/leiemeersen/"}},{"type":"node","id":7114502229,"lat":51.1340508,"lon":3.2949303},{"type":"node","id":7114502231,"lat":51.1340428,"lon":3.2959613},{"type":"node","id":7114502232,"lat":51.134096,"lon":3.2971973},{"type":"node","id":1927235214,"lat":51.1267391,"lon":3.3222921},{"type":"node","id":8301349336,"lat":51.1266966,"lon":3.3223356},{"type":"node","id":1413470848,"lat":51.1276558,"lon":3.3278194},{"type":"node","id":1413470849,"lat":51.1276852,"lon":3.3274627},{"type":"node","id":6216549605,"lat":51.1276578,"lon":3.3279376},{"type":"node","id":6216549611,"lat":51.1277354,"lon":3.3273608},{"type":"node","id":6216549612,"lat":51.1277281,"lon":3.3274215},{"type":"node","id":6216549613,"lat":51.1277062,"lon":3.3274249},{"type":"node","id":8301349335,"lat":51.1269096,"lon":3.3228882},{"type":"node","id":8301349337,"lat":51.126955,"lon":3.3228466},{"type":"node","id":8328251884,"lat":51.1278701,"lon":3.3253392},{"type":"node","id":8328251885,"lat":51.127857,"lon":3.3254078},{"type":"node","id":8328251888,"lat":51.1278797,"lon":3.325168},{"type":"node","id":8328251889,"lat":51.1278665,"lon":3.3252369},{"type":"node","id":8328251892,"lat":51.1271569,"lon":3.3248958},{"type":"node","id":8328251893,"lat":51.1272208,"lon":3.3252329},{"type":"node","id":8328251894,"lat":51.1272677,"lon":3.3252111},{"type":"node","id":8328251895,"lat":51.1272033,"lon":3.3248728},{"type":"node","id":8328251896,"lat":51.1271015,"lon":3.3257575},{"type":"node","id":8328251897,"lat":51.1270872,"lon":3.3256877},{"type":"node","id":8328251898,"lat":51.1271271,"lon":3.325744},{"type":"node","id":8328251899,"lat":51.1271128,"lon":3.3256743},{"type":"node","id":8328251900,"lat":51.1270462,"lon":3.3257067},{"type":"node","id":8328251901,"lat":51.1270609,"lon":3.3257756},{"type":"node","id":8328251902,"lat":51.1272095,"lon":3.3257043},{"type":"node","id":8328251903,"lat":51.1271957,"lon":3.3256351},{"type":"node","id":8328251904,"lat":51.1269631,"lon":3.3253915},{"type":"node","id":8328251905,"lat":51.1269756,"lon":3.3254617},{"type":"node","id":8328251906,"lat":51.1271678,"lon":3.3253747},{"type":"node","id":8328251907,"lat":51.1271557,"lon":3.3253045},{"type":"node","id":8328251908,"lat":51.1270115,"lon":3.3255467},{"type":"node","id":8328251909,"lat":51.1270235,"lon":3.3256138},{"type":"node","id":8328251910,"lat":51.1271099,"lon":3.3255749},{"type":"node","id":8328251911,"lat":51.1270975,"lon":3.3255072},{"type":"node","id":2449323191,"lat":51.1340437,"lon":3.3216558},{"type":"node","id":2449323193,"lat":51.134285,"lon":3.3221086},{"type":"node","id":2449323198,"lat":51.1334724,"lon":3.3223472},{"type":"node","id":4350143592,"lat":51.1344661,"lon":3.3226292},{"type":"node","id":4732689626,"lat":51.1301038,"lon":3.3223672},{"type":"node","id":4732689627,"lat":51.1301351,"lon":3.3223533},{"type":"node","id":4732689628,"lat":51.130161,"lon":3.3224805},{"type":"node","id":4732689629,"lat":51.1301379,"lon":3.3224524},{"type":"node","id":4732689630,"lat":51.130151,"lon":3.3225204},{"type":"node","id":4732689631,"lat":51.1301375,"lon":3.3225274},{"type":"node","id":4732689632,"lat":51.1301505,"lon":3.322593},{"type":"node","id":4732689634,"lat":51.1297694,"lon":3.3223954},{"type":"node","id":4732689635,"lat":51.1298034,"lon":3.3223641},{"type":"node","id":4732689636,"lat":51.1297546,"lon":3.3221883},{"type":"node","id":4732689637,"lat":51.1297088,"lon":3.3219708},{"type":"node","id":4732689638,"lat":51.1297683,"lon":3.3219402},{"type":"node","id":4732689639,"lat":51.1297781,"lon":3.3219034},{"type":"node","id":4732689640,"lat":51.1297694,"lon":3.3218478},{"type":"node","id":4732689641,"lat":51.1300088,"lon":3.32173},{"type":"node","id":6794421027,"lat":51.1341852,"lon":3.3223337},{"type":"node","id":6794421042,"lat":51.1336271,"lon":3.3220973},{"type":"node","id":7962681614,"lat":51.1336656,"lon":3.322624},{"type":"node","id":7962681615,"lat":51.1335301,"lon":3.322287},{"type":"node","id":7962681616,"lat":51.1335065,"lon":3.3222317},{"type":"node","id":7962681619,"lat":51.134306,"lon":3.3222136},{"type":"node","id":7962681620,"lat":51.1343186,"lon":3.3221995},{"type":"node","id":7962681621,"lat":51.1341453,"lon":3.321775},{"type":"node","id":7962681622,"lat":51.1341537,"lon":3.321769},{"type":"node","id":7962681623,"lat":51.1341067,"lon":3.3216811},{"type":"node","id":7962681624,"lat":51.1340675,"lon":3.3217193},{"type":"node","id":8294875888,"lat":51.1300197,"lon":3.3219403},{"type":"node","id":8360787098,"lat":51.1344583,"lon":3.3225918},{"type":"node","id":2123461969,"lat":51.1336123,"lon":3.3226786},{"type":"node","id":4732689633,"lat":51.1298776,"lon":3.3227393},{"type":"node","id":6216549604,"lat":51.1280095,"lon":3.328024},{"type":"node","id":6216549610,"lat":51.128134,"lon":3.3274542},{"type":"node","id":6794421028,"lat":51.1343476,"lon":3.3227429},{"type":"node","id":6794421041,"lat":51.1337382,"lon":3.3227794},{"type":"node","id":8328251886,"lat":51.128048,"lon":3.3255015},{"type":"node","id":8328251887,"lat":51.1280616,"lon":3.3254329},{"type":"node","id":8328251890,"lat":51.1280791,"lon":3.3253407},{"type":"node","id":8328251891,"lat":51.1280922,"lon":3.3252721},{"type":"node","id":1623924235,"lat":51.131361,"lon":3.333018},{"type":"node","id":1623924236,"lat":51.1311039,"lon":3.3325764},{"type":"node","id":1623924238,"lat":51.1310489,"lon":3.3326527},{"type":"node","id":1623924241,"lat":51.1314273,"lon":3.3331479},{"type":"node","id":1864750831,"lat":51.1313615,"lon":3.3332222},{"type":"node","id":6216549655,"lat":51.134416,"lon":3.3347284},{"type":"node","id":6216549656,"lat":51.1343187,"lon":3.3349542},{"type":"node","id":6216549657,"lat":51.1334196,"lon":3.335723},{"type":"node","id":6216549658,"lat":51.1334902,"lon":3.3357377},{"type":"node","id":6216549659,"lat":51.133716,"lon":3.335546},{"type":"node","id":6216549660,"lat":51.133883,"lon":3.3353885},{"type":"node","id":6216549661,"lat":51.133662,"lon":3.3355049},{"type":"node","id":8307316294,"lat":51.1338503,"lon":3.3353095},{"type":"node","id":1493821422,"lat":51.1320567,"lon":3.3398517},{"type":"node","id":1493821433,"lat":51.1316132,"lon":3.3408892},{"type":"node","id":1553169836,"lat":51.1311998,"lon":3.3415993},{"type":"node","id":3185248088,"lat":51.1323359,"lon":3.3389757},{"type":"node","id":7727339364,"lat":51.1321819,"lon":3.3388758},{"type":"node","id":7727339365,"lat":51.1319823,"lon":3.339559},{"type":"node","id":7727339366,"lat":51.1316011,"lon":3.3405485},{"type":"node","id":7727339367,"lat":51.1312764,"lon":3.3411848},{"type":"node","id":7727339368,"lat":51.1310889,"lon":3.3414676},{"type":"node","id":7727339369,"lat":51.1304838,"lon":3.3422395},{"type":"node","id":3185248048,"lat":51.1268693,"lon":3.3480331},{"type":"node","id":3185248049,"lat":51.1269831,"lon":3.3475504},{"type":"node","id":7727339376,"lat":51.1274147,"lon":3.3464515},{"type":"node","id":7727339377,"lat":51.1271283,"lon":3.3469817},{"type":"node","id":3185248040,"lat":51.1266778,"lon":3.3491476},{"type":"node","id":3185248042,"lat":51.126712,"lon":3.3489485},{"type":"node","id":7468171404,"lat":51.1277325,"lon":3.3553578},{"type":"node","id":7468171430,"lat":51.1270326,"lon":3.353594},{"type":"node","id":7468171432,"lat":51.1271802,"lon":3.3540454},{"type":"node","id":7468171438,"lat":51.1268064,"lon":3.3526001},{"type":"node","id":7468171442,"lat":51.1268303,"lon":3.3527746},{"type":"node","id":7468171446,"lat":51.1273659,"lon":3.3546333},{"type":"node","id":7727339378,"lat":51.1265656,"lon":3.3505324},{"type":"node","id":7727339379,"lat":51.1266463,"lon":3.350873},{"type":"node","id":7727339380,"lat":51.1266302,"lon":3.3514032},{"type":"node","id":7727339381,"lat":51.1267774,"lon":3.3523929},{"type":"node","id":7727393190,"lat":51.1276264,"lon":3.3489611},{"type":"node","id":7727393191,"lat":51.1274853,"lon":3.3497484},{"type":"node","id":7727393192,"lat":51.127332,"lon":3.350571},{"type":"node","id":7727393193,"lat":51.1273663,"lon":3.3514386},{"type":"node","id":7727393194,"lat":51.1274853,"lon":3.3519206},{"type":"node","id":7727393195,"lat":51.1276889,"lon":3.3531674},{"type":"node","id":1553169911,"lat":51.1313314,"lon":3.3425771},{"type":"node","id":7727339370,"lat":51.1300705,"lon":3.3427304},{"type":"node","id":7727339371,"lat":51.1293083,"lon":3.343643},{"type":"node","id":7727339372,"lat":51.1285642,"lon":3.3445074},{"type":"node","id":7727339373,"lat":51.1285702,"lon":3.3445781},{"type":"node","id":7727339374,"lat":51.1283181,"lon":3.3448801},{"type":"node","id":7727339375,"lat":51.1281023,"lon":3.3451404},{"type":"node","id":7727339382,"lat":51.1311196,"lon":3.3430952},{"type":"node","id":7727339383,"lat":51.1309343,"lon":3.3434996},{"type":"node","id":7727339384,"lat":51.1306234,"lon":3.343745},{"type":"node","id":7727393185,"lat":51.1300873,"lon":3.3443449},{"type":"node","id":7727393186,"lat":51.129401,"lon":3.3453846},{"type":"node","id":7727393187,"lat":51.1290865,"lon":3.345963},{"type":"node","id":7727393188,"lat":51.1285581,"lon":3.3468788},{"type":"node","id":7727393189,"lat":51.1280217,"lon":3.3479457},{"type":"node","id":7390697549,"lat":51.128429,"lon":3.354427},{"type":"node","id":7727393196,"lat":51.1279813,"lon":3.353749},{"type":"node","id":3209560114,"lat":51.1538874,"lon":3.2531858},{"type":"node","id":3209560115,"lat":51.1539649,"lon":3.2531836},{"type":"node","id":3209560116,"lat":51.1541197,"lon":3.2537986},{"type":"node","id":3209560117,"lat":51.1541021,"lon":3.253149},{"type":"node","id":3210389695,"lat":51.1539646,"lon":3.2534427},{"type":"node","id":416917618,"lat":51.1565737,"lon":3.2549365},{"type":"node","id":668981667,"lat":51.1576026,"lon":3.2555383},{"type":"node","id":668981668,"lat":51.1564046,"lon":3.2547045},{"type":"node","id":1815081998,"lat":51.1575578,"lon":3.2555439},{"type":"node","id":1948835662,"lat":51.155957,"lon":3.2562889},{"type":"node","id":1948835742,"lat":51.156182,"lon":3.2540291},{"type":"node","id":1948835950,"lat":51.1591027,"lon":3.2559292},{"type":"node","id":1948836096,"lat":51.1600831,"lon":3.2562989},{"type":"node","id":1948836149,"lat":51.1605378,"lon":3.2568906},{"type":"node","id":2026541837,"lat":51.1543652,"lon":3.2542901},{"type":"node","id":2026541841,"lat":51.1545903,"lon":3.2546809},{"type":"node","id":2026541843,"lat":51.1548384,"lon":3.2550342},{"type":"node","id":2026541846,"lat":51.155086,"lon":3.2553429},{"type":"node","id":2026541851,"lat":51.15565,"lon":3.2542965},{"type":"node","id":3209560118,"lat":51.1542244,"lon":3.2530815},{"type":"node","id":3209560119,"lat":51.1544741,"lon":3.252803},{"type":"node","id":3209560121,"lat":51.1546028,"lon":3.2526667},{"type":"node","id":3209560124,"lat":51.1547447,"lon":3.2525904},{"type":"node","id":3209560126,"lat":51.1550296,"lon":3.2525253},{"type":"node","id":3209560127,"lat":51.1551915,"lon":3.2525297},{"type":"node","id":3209560131,"lat":51.1553436,"lon":3.2525627},{"type":"node","id":3209560132,"lat":51.1554055,"lon":3.2526006},{"type":"node","id":3209560134,"lat":51.155479,"lon":3.2526651},{"type":"node","id":3209560135,"lat":51.155558,"lon":3.2527647},{"type":"node","id":3209560136,"lat":51.1556482,"lon":3.2528805},{"type":"node","id":3209560138,"lat":51.1559652,"lon":3.2534517},{"type":"node","id":3209560139,"lat":51.1560327,"lon":3.2535705},{"type":"node","id":5417515520,"lat":51.1545998,"lon":3.2545767},{"type":"node","id":5417516021,"lat":51.1545476,"lon":3.2544989},{"type":"node","id":5417516022,"lat":51.1545856,"lon":3.2544342},{"type":"node","id":5417516023,"lat":51.1546378,"lon":3.2545119},{"type":"node","id":6206789688,"lat":51.1553578,"lon":3.255668},{"type":"node","id":416917603,"lat":51.1591104,"lon":3.2595563},{"type":"node","id":416917605,"lat":51.1592829,"lon":3.2591123},{"type":"node","id":416917609,"lat":51.1597764,"lon":3.2597849},{"type":"node","id":1554514806,"lat":51.1586314,"lon":3.2636074},{"type":"node","id":1948835842,"lat":51.1570345,"lon":3.2574053},{"type":"node","id":1948835900,"lat":51.1583428,"lon":3.258761},{"type":"node","id":1948835986,"lat":51.1595419,"lon":3.2593891},{"type":"node","id":1948836023,"lat":51.1597284,"lon":3.2585312},{"type":"node","id":1948836025,"lat":51.1597477,"lon":3.2585581},{"type":"node","id":1948836029,"lat":51.1597506,"lon":3.2584887},{"type":"node","id":1948836032,"lat":51.159778,"lon":3.2585905},{"type":"node","id":1948836038,"lat":51.1597992,"lon":3.2585462},{"type":"node","id":1948836068,"lat":51.1598265,"lon":3.2595499},{"type":"node","id":1948836072,"lat":51.1598725,"lon":3.2596329},{"type":"node","id":1948836093,"lat":51.1600505,"lon":3.2592835},{"type":"node","id":1948836104,"lat":51.1601026,"lon":3.2593298},{"type":"node","id":1948836189,"lat":51.1606847,"lon":3.2577063},{"type":"node","id":5745739926,"lat":51.160615,"lon":3.2602336},{"type":"node","id":5747937642,"lat":51.1580603,"lon":3.2636348},{"type":"node","id":5962340003,"lat":51.1587851,"lon":3.2632739},{"type":"node","id":5962414276,"lat":51.158949,"lon":3.2635109},{"type":"node","id":5962415498,"lat":51.1589617,"lon":3.2635523},{"type":"node","id":5962415499,"lat":51.1589623,"lon":3.2635339},{"type":"node","id":5962415500,"lat":51.1589568,"lon":3.2635203},{"type":"node","id":5962415538,"lat":51.1589195,"lon":3.2636407},{"type":"node","id":6206789709,"lat":51.1545829,"lon":3.2585784},{"type":"node","id":8497007481,"lat":51.1588349,"lon":3.2633671},{"type":"node","id":8497007549,"lat":51.1548977,"lon":3.257909},{"type":"node","id":8768981519,"lat":51.1545715,"lon":3.2585859},{"type":"node","id":8768981520,"lat":51.1544691,"lon":3.2584642},{"type":"node","id":8768981521,"lat":51.1543652,"lon":3.2584253},{"type":"node","id":8768981522,"lat":51.1543648,"lon":3.2583401},{"type":"node","id":8768981523,"lat":51.1544439,"lon":3.2585178},{"type":"node","id":8768981524,"lat":51.1543892,"lon":3.258369},{"type":"node","id":8768981525,"lat":51.1547185,"lon":3.2575482},{"type":"node","id":8768981533,"lat":51.1545902,"lon":3.2585725},{"type":"node","id":3162627482,"lat":51.1513402,"lon":3.2701364},{"type":"node","id":3162627509,"lat":51.1517878,"lon":3.2696503},{"type":"node","id":5745963944,"lat":51.1524768,"lon":3.2700312},{"type":"node","id":5745963946,"lat":51.1519527,"lon":3.2698278},{"type":"node","id":5745963947,"lat":51.1513495,"lon":3.2697903},{"type":"node","id":5747937657,"lat":51.1538472,"lon":3.269262},{"type":"node","id":5747937658,"lat":51.1536592,"lon":3.2698471},{"type":"node","id":5747937668,"lat":51.1514068,"lon":3.2699149},{"type":"node","id":5747937669,"lat":51.1514278,"lon":3.26999},{"type":"node","id":5747937670,"lat":51.1514329,"lon":3.2701134},{"type":"node","id":5747937671,"lat":51.1514387,"lon":3.2702207},{"type":"node","id":5747937672,"lat":51.1515532,"lon":3.2702006},{"type":"node","id":5747937673,"lat":51.1515986,"lon":3.2701456},{"type":"node","id":5747937674,"lat":51.151872,"lon":3.2701201},{"type":"node","id":6142725039,"lat":51.1513841,"lon":3.2701799},{"type":"node","id":6142725060,"lat":51.1499168,"lon":3.2700268},{"type":"node","id":6142725061,"lat":51.1497438,"lon":3.2697269},{"type":"node","id":6142725064,"lat":51.1499256,"lon":3.2692437},{"type":"node","id":6142727594,"lat":51.1500369,"lon":3.2694178},{"type":"node","id":6142727597,"lat":51.1513713,"lon":3.2701053},{"type":"node","id":6143075014,"lat":51.1512852,"lon":3.2702041},{"type":"node","id":1554514655,"lat":51.1533288,"lon":3.2766885},{"type":"node","id":1554514811,"lat":51.1537898,"lon":3.2754789},{"type":"node","id":3211247019,"lat":51.1538788,"lon":3.2763248},{"type":"node","id":3211247021,"lat":51.1538471,"lon":3.2764673},{"type":"node","id":5745963922,"lat":51.1499683,"lon":3.2708447},{"type":"node","id":5745963942,"lat":51.1530892,"lon":3.2704581},{"type":"node","id":5745963943,"lat":51.1529125,"lon":3.2703349},{"type":"node","id":5747535101,"lat":51.1533021,"lon":3.2705247},{"type":"node","id":5747937659,"lat":51.1534063,"lon":3.2705828},{"type":"node","id":5747937675,"lat":51.1521092,"lon":3.2702998},{"type":"node","id":5747937676,"lat":51.1524591,"lon":3.2704822},{"type":"node","id":5747937677,"lat":51.1527839,"lon":3.2706727},{"type":"node","id":5747937678,"lat":51.1529841,"lon":3.2707276},{"type":"node","id":5747937679,"lat":51.15326,"lon":3.2708913},{"type":"node","id":5747937680,"lat":51.1535477,"lon":3.2712989},{"type":"node","id":5747937681,"lat":51.1536831,"lon":3.2717402},{"type":"node","id":5747937682,"lat":51.1536839,"lon":3.2721747},{"type":"node","id":5747937683,"lat":51.1536469,"lon":3.2724161},{"type":"node","id":5747937684,"lat":51.1534635,"lon":3.2730652},{"type":"node","id":5747937685,"lat":51.1540625,"lon":3.2735735},{"type":"node","id":5962339921,"lat":51.1535454,"lon":3.2761201},{"type":"node","id":5962496725,"lat":51.1538672,"lon":3.276374},{"type":"node","id":6142725040,"lat":51.1514014,"lon":3.2704388},{"type":"node","id":6142725041,"lat":51.1514255,"lon":3.2722713},{"type":"node","id":6142725042,"lat":51.1514044,"lon":3.2722821},{"type":"node","id":6142725043,"lat":51.1513617,"lon":3.2722639},{"type":"node","id":6142725044,"lat":51.1513141,"lon":3.2722165},{"type":"node","id":6142725045,"lat":51.1512346,"lon":3.2721372},{"type":"node","id":6142725046,"lat":51.1511314,"lon":3.2720304},{"type":"node","id":6142725047,"lat":51.1509926,"lon":3.2718816},{"type":"node","id":6142725048,"lat":51.1508222,"lon":3.2716946},{"type":"node","id":6142725049,"lat":51.1507329,"lon":3.2715909},{"type":"node","id":6142725050,"lat":51.1506561,"lon":3.2714915},{"type":"node","id":6142725051,"lat":51.1506027,"lon":3.2714102},{"type":"node","id":6142725052,"lat":51.1505293,"lon":3.2712712},{"type":"node","id":6142725053,"lat":51.1504912,"lon":3.2711826},{"type":"node","id":6142725054,"lat":51.1504464,"lon":3.2710615},{"type":"node","id":6142725055,"lat":51.1503588,"lon":3.2707712},{"type":"node","id":6142725056,"lat":51.1503432,"lon":3.2707336},{"type":"node","id":6142725057,"lat":51.1503035,"lon":3.2706647},{"type":"node","id":6142725058,"lat":51.1501763,"lon":3.2704663},{"type":"node","id":6142725059,"lat":51.1500465,"lon":3.270256},{"type":"node","id":6142725065,"lat":51.1511856,"lon":3.2703268},{"type":"node","id":6142725066,"lat":51.1510244,"lon":3.2705705},{"type":"node","id":6142725067,"lat":51.1509355,"lon":3.270823},{"type":"node","id":6142725074,"lat":51.149723,"lon":3.271666},{"type":"node","id":6142725076,"lat":51.1498322,"lon":3.2716555},{"type":"node","id":6142725077,"lat":51.1499403,"lon":3.2715209},{"type":"node","id":6142725078,"lat":51.1500262,"lon":3.2714548},{"type":"node","id":6142725079,"lat":51.1501462,"lon":3.2714359},{"type":"node","id":6142725080,"lat":51.1502306,"lon":3.2714572},{"type":"node","id":6142725081,"lat":51.1502676,"lon":3.2714288},{"type":"node","id":6142725084,"lat":51.1496118,"lon":3.2714056},{"type":"node","id":6142727585,"lat":51.1497709,"lon":3.271258},{"type":"node","id":6142727586,"lat":51.1496767,"lon":3.2713056},{"type":"node","id":6142727587,"lat":51.1498468,"lon":3.2711798},{"type":"node","id":6142727588,"lat":51.1500514,"lon":3.2703954},{"type":"node","id":6142727589,"lat":51.1503033,"lon":3.270777},{"type":"node","id":6142727590,"lat":51.1503141,"lon":3.2713705},{"type":"node","id":6142727591,"lat":51.1498992,"lon":3.2710354},{"type":"node","id":6142727592,"lat":51.1499461,"lon":3.270906},{"type":"node","id":6142727595,"lat":51.1505973,"lon":3.2702942},{"type":"node","id":6142727596,"lat":51.1508515,"lon":3.2706917},{"type":"node","id":6142727598,"lat":51.1504337,"lon":3.2712326},{"type":"node","id":6143074993,"lat":51.1501845,"lon":3.2706959},{"type":"node","id":6143075018,"lat":51.1508744,"lon":3.2707275},{"type":"node","id":8638721230,"lat":51.151458,"lon":3.2721756},{"type":"node","id":8638721239,"lat":51.1514715,"lon":3.2719839},{"type":"node","id":1554514618,"lat":51.1581789,"lon":3.2646401},{"type":"node","id":1554514658,"lat":51.1578742,"lon":3.2653982},{"type":"node","id":1554514750,"lat":51.1568056,"lon":3.2677508},{"type":"node","id":1554514755,"lat":51.1573435,"lon":3.2665694},{"type":"node","id":1554514831,"lat":51.1561729,"lon":3.2691965},{"type":"node","id":3211247042,"lat":51.1557516,"lon":3.2701591},{"type":"node","id":3211247054,"lat":51.1570321,"lon":3.2690614},{"type":"node","id":3211247058,"lat":51.1571866,"lon":3.2685962},{"type":"node","id":3211247059,"lat":51.1572111,"lon":3.2673633},{"type":"node","id":3211247060,"lat":51.1572915,"lon":3.2701354},{"type":"node","id":3211247261,"lat":51.157332,"lon":3.2685775},{"type":"node","id":3211247265,"lat":51.1575267,"lon":3.2694937},{"type":"node","id":3211247266,"lat":51.1576636,"lon":3.2677588},{"type":"node","id":3211247291,"lat":51.15873,"lon":3.2640973},{"type":"node","id":3211247328,"lat":51.1594831,"lon":3.2648765},{"type":"node","id":3211247331,"lat":51.1596428,"lon":3.2643669},{"type":"node","id":5747937641,"lat":51.1581621,"lon":3.2637783},{"type":"node","id":5747937643,"lat":51.1576288,"lon":3.2640519},{"type":"node","id":5747937644,"lat":51.1572672,"lon":3.2645347},{"type":"node","id":5747937645,"lat":51.1568533,"lon":3.2650349},{"type":"node","id":5747937646,"lat":51.1564933,"lon":3.2652213},{"type":"node","id":5747937647,"lat":51.1562275,"lon":3.2654708},{"type":"node","id":5747937648,"lat":51.1560046,"lon":3.2656894},{"type":"node","id":5747937649,"lat":51.1556867,"lon":3.2659965},{"type":"node","id":5747937650,"lat":51.1551778,"lon":3.2664082},{"type":"node","id":5747937651,"lat":51.1550608,"lon":3.2664739},{"type":"node","id":5747937652,"lat":51.1547446,"lon":3.2666805},{"type":"node","id":5747937653,"lat":51.1546747,"lon":3.2667583},{"type":"node","id":5747937654,"lat":51.1546066,"lon":3.266895},{"type":"node","id":5747937655,"lat":51.1544363,"lon":3.2672456},{"type":"node","id":5747937656,"lat":51.1543612,"lon":3.2677126},{"type":"node","id":5747937688,"lat":51.1553145,"lon":3.2701637},{"type":"node","id":5747937689,"lat":51.1564724,"lon":3.2675566},{"type":"node","id":5747937690,"lat":51.1580352,"lon":3.2640939},{"type":"node","id":5747937691,"lat":51.1581075,"lon":3.2639222},{"type":"node","id":5962338038,"lat":51.1580663,"lon":3.2649607},{"type":"node","id":5962340009,"lat":51.1585904,"lon":3.2644244},{"type":"node","id":5962340010,"lat":51.1579212,"lon":3.2658517},{"type":"node","id":5962340011,"lat":51.1575197,"lon":3.2676156},{"type":"node","id":5962340012,"lat":51.1573374,"lon":3.2674543},{"type":"node","id":5962340013,"lat":51.1574265,"lon":3.2698457},{"type":"node","id":5962415543,"lat":51.1591427,"lon":3.2638615},{"type":"node","id":5962415564,"lat":51.1563757,"lon":3.269274},{"type":"node","id":5962444841,"lat":51.1584746,"lon":3.2639653},{"type":"node","id":5962444846,"lat":51.1585428,"lon":3.2645259},{"type":"node","id":5962444849,"lat":51.1586783,"lon":3.2642185},{"type":"node","id":5962444850,"lat":51.1586559,"lon":3.2642708},{"type":"node","id":5962496715,"lat":51.1577157,"lon":3.2657479},{"type":"node","id":5962496718,"lat":51.1572172,"lon":3.2685923},{"type":"node","id":5962496719,"lat":51.1571618,"lon":3.2686709},{"type":"node","id":1554514640,"lat":51.1556541,"lon":3.2703864},{"type":"node","id":1554514735,"lat":51.1546949,"lon":3.273022},{"type":"node","id":1554514739,"lat":51.1552715,"lon":3.271391},{"type":"node","id":1554514744,"lat":51.154165,"lon":3.2744194},{"type":"node","id":3211247024,"lat":51.1541505,"lon":3.2756042},{"type":"node","id":3211247029,"lat":51.154764,"lon":3.2739293},{"type":"node","id":3211247032,"lat":51.1550284,"lon":3.2731777},{"type":"node","id":3211247034,"lat":51.1553184,"lon":3.2723493},{"type":"node","id":3211247036,"lat":51.1554324,"lon":3.2715569},{"type":"node","id":3211247037,"lat":51.1555577,"lon":3.2717139},{"type":"node","id":3211247039,"lat":51.1556614,"lon":3.2709968},{"type":"node","id":5747937686,"lat":51.1543123,"lon":3.272868},{"type":"node","id":5747937687,"lat":51.1551484,"lon":3.2706069},{"type":"node","id":5962415565,"lat":51.1558985,"lon":3.2703959},{"type":"node","id":3170562436,"lat":51.138924,"lon":3.2898032},{"type":"node","id":7114502205,"lat":51.1385818,"lon":3.2899019},{"type":"node","id":7114502206,"lat":51.1387244,"lon":3.289738},{"type":"node","id":1475188516,"lat":51.1392568,"lon":3.2899836},{"type":"node","id":1475188519,"lat":51.1391868,"lon":3.2900136},{"type":"node","id":3170562392,"lat":51.1364433,"lon":3.2910119},{"type":"node","id":3170562394,"lat":51.1368907,"lon":3.291708},{"type":"node","id":3170562395,"lat":51.137106,"lon":3.2924864},{"type":"node","id":3170562396,"lat":51.137265,"lon":3.2919875},{"type":"node","id":3170562397,"lat":51.1374825,"lon":3.2913695},{"type":"node","id":3170562402,"lat":51.1378658,"lon":3.2906394},{"type":"node","id":3170562410,"lat":51.1378512,"lon":3.2905949},{"type":"node","id":3170562431,"lat":51.138431,"lon":3.2910415},{"type":"node","id":3170562437,"lat":51.1389596,"lon":3.2905649},{"type":"node","id":3170562439,"lat":51.1391839,"lon":3.2903042},{"type":"node","id":6627605025,"lat":51.1393014,"lon":3.2899729},{"type":"node","id":7114502200,"lat":51.139377,"lon":3.2901873},{"type":"node","id":7114502201,"lat":51.1395801,"lon":3.2901445},{"type":"node","id":7114502202,"lat":51.1393183,"lon":3.290151},{"type":"node","id":7114502203,"lat":51.1395636,"lon":3.2902055},{"type":"node","id":7114502207,"lat":51.13835,"lon":3.2901225},{"type":"node","id":7114502208,"lat":51.138259,"lon":3.2902362},{"type":"node","id":7114502209,"lat":51.1381351,"lon":3.2903372},{"type":"node","id":7114502211,"lat":51.1376987,"lon":3.2921954},{"type":"node","id":7114502212,"lat":51.1373598,"lon":3.2927952},{"type":"node","id":7114502214,"lat":51.1364782,"lon":3.2933157},{"type":"node","id":7114502215,"lat":51.1356558,"lon":3.2938122},{"type":"node","id":7114502216,"lat":51.1364577,"lon":3.2922382},{"type":"node","id":7114502217,"lat":51.1365055,"lon":3.2917901},{"type":"node","id":7114502218,"lat":51.1369977,"lon":3.2911659},{"type":"node","id":7114502219,"lat":51.1367691,"lon":3.2924051},{"type":"node","id":7114502220,"lat":51.1367022,"lon":3.2927526},{"type":"node","id":7114502221,"lat":51.1367354,"lon":3.2929091},{"type":"node","id":7114502222,"lat":51.1367962,"lon":3.2930156},{"type":"node","id":7114502223,"lat":51.1369436,"lon":3.2928838},{"type":"node","id":7114502224,"lat":51.1365124,"lon":3.2914123},{"type":"node","id":7114502225,"lat":51.135804,"lon":3.2926995},{"type":"node","id":7114502226,"lat":51.1354385,"lon":3.2929897},{"type":"node","id":7114502227,"lat":51.135128,"lon":3.2935318},{"type":"node","id":7114502228,"lat":51.1352851,"lon":3.2947114},{"type":"node","id":7114502230,"lat":51.135254,"lon":3.2946241},{"type":"node","id":7114502234,"lat":51.1354035,"lon":3.2959064},{"type":"node","id":7114502235,"lat":51.1362234,"lon":3.2955042},{"type":"node","id":7114502236,"lat":51.1362859,"lon":3.2964578},{"type":"node","id":7114502240,"lat":51.1379417,"lon":3.2917937},{"type":"node","id":8294886142,"lat":51.1394294,"lon":3.290127},{"type":"node","id":7114502233,"lat":51.1354361,"lon":3.2966386},{"type":"node","id":7114502237,"lat":51.1362025,"lon":3.2964851},{"type":"node","id":7114502238,"lat":51.1362303,"lon":3.2969415},{"type":"node","id":7114502239,"lat":51.1355032,"lon":3.297292},{"type":"node","id":1494027348,"lat":51.1419125,"lon":3.3028989},{"type":"node","id":1494027349,"lat":51.1419929,"lon":3.3024731},{"type":"node","id":1951759298,"lat":51.1421456,"lon":3.3024503},{"type":"node","id":6037556099,"lat":51.1420961,"lon":3.3023333},{"type":"node","id":6037556100,"lat":51.142124,"lon":3.302398},{"type":"node","id":6037556101,"lat":51.1421476,"lon":3.3023664},{"type":"node","id":6037556102,"lat":51.1421686,"lon":3.3023966},{"type":"node","id":6037556103,"lat":51.1421392,"lon":3.3024395},{"type":"node","id":6037556104,"lat":51.1419363,"lon":3.3027154},{"type":"node","id":6037556128,"lat":51.1421612,"lon":3.3024776},{"type":"node","id":6037556129,"lat":51.1421598,"lon":3.3025191},{"type":"node","id":1554514647,"lat":51.1510862,"lon":3.2830051},{"type":"node","id":1554514679,"lat":51.1528746,"lon":3.2778124},{"type":"node","id":1554514683,"lat":51.152459,"lon":3.2789175},{"type":"node","id":1554514730,"lat":51.1514294,"lon":3.2817821},{"type":"node","id":1554514747,"lat":51.1515758,"lon":3.2812966},{"type":"node","id":1554514765,"lat":51.1518248,"lon":3.2805268},{"type":"node","id":1554514773,"lat":51.15167,"lon":3.280964},{"type":"node","id":1554514775,"lat":51.1517205,"lon":3.2808218},{"type":"node","id":3211246555,"lat":51.1516922,"lon":3.2825734},{"type":"node","id":3211246995,"lat":51.1531241,"lon":3.2787307},{"type":"node","id":3211246997,"lat":51.1532256,"lon":3.2781298},{"type":"node","id":3211247004,"lat":51.1532551,"lon":3.2780324},{"type":"node","id":3211247008,"lat":51.1532769,"lon":3.2780262},{"type":"node","id":3211247010,"lat":51.1533547,"lon":3.2780182},{"type":"node","id":3211247013,"lat":51.1534072,"lon":3.2778679},{"type":"node","id":5962338069,"lat":51.1531224,"lon":3.2785269},{"type":"node","id":5962338070,"lat":51.1532454,"lon":3.2781435},{"type":"node","id":5962338071,"lat":51.1531839,"lon":3.2785716},{"type":"node","id":9284562682,"lat":51.153154,"lon":3.2784189},{"type":"node","id":1554514649,"lat":51.1502146,"lon":3.285505},{"type":"node","id":1554514661,"lat":51.1499067,"lon":3.2861781},{"type":"node","id":1554514682,"lat":51.150038,"lon":3.2859179},{"type":"node","id":1554514693,"lat":51.1498077,"lon":3.2862946},{"type":"node","id":1554514703,"lat":51.1497368,"lon":3.2863685},{"type":"node","id":1554514726,"lat":51.1498748,"lon":3.2862129},{"type":"node","id":1554514783,"lat":51.1497118,"lon":3.2864368},{"type":"node","id":1554514787,"lat":51.1499524,"lon":3.2860908},{"type":"node","id":1554514789,"lat":51.1506254,"lon":3.2845029},{"type":"node","id":3203029856,"lat":51.1498994,"lon":3.2867119},{"type":"node","id":3211246542,"lat":51.1505988,"lon":3.2851597},{"type":"node","id":5482441357,"lat":51.1504615,"lon":3.2836968},{"type":"node","id":7459154782,"lat":51.1501541,"lon":3.2834044},{"type":"node","id":7459154784,"lat":51.14999,"lon":3.2838049},{"type":"node","id":7459257985,"lat":51.1496077,"lon":3.2846412},{"type":"node","id":7602479690,"lat":51.150018,"lon":3.2848987},{"type":"node","id":7602479691,"lat":51.149806,"lon":3.2842251},{"type":"node","id":7602479692,"lat":51.1504686,"lon":3.2836785},{"type":"node","id":7602479693,"lat":51.1504309,"lon":3.2838118},{"type":"node","id":7602479694,"lat":51.1504255,"lon":3.2838072},{"type":"node","id":7602479695,"lat":51.1503423,"lon":3.2840392},{"type":"node","id":7602479696,"lat":51.1501698,"lon":3.2845196},{"type":"node","id":7727406921,"lat":51.1497539,"lon":3.2864986},{"type":"node","id":8945026754,"lat":51.1518736,"lon":3.2973911},{"type":"node","id":8945026755,"lat":51.1521646,"lon":3.297599},{"type":"node","id":8945026756,"lat":51.1522042,"lon":3.2974333},{"type":"node","id":8945026757,"lat":51.1519287,"lon":3.2972449},{"type":"node","id":416917612,"lat":51.1610842,"lon":3.2579973},{"type":"node","id":1948836192,"lat":51.1607104,"lon":3.2576119},{"type":"node","id":1948836193,"lat":51.1607138,"lon":3.2577265},{"type":"node","id":1948836194,"lat":51.1607261,"lon":3.2576817},{"type":"node","id":1948836195,"lat":51.1607396,"lon":3.2576322},{"type":"node","id":1948836202,"lat":51.1608376,"lon":3.2582648},{"type":"node","id":1948836209,"lat":51.1608764,"lon":3.2583297},{"type":"node","id":1948836218,"lat":51.1609914,"lon":3.2580679},{"type":"node","id":1948836237,"lat":51.1610295,"lon":3.2581432},{"type":"node","id":1948836277,"lat":51.1610699,"lon":3.2580833},{"type":"node","id":5349884600,"lat":51.1623355,"lon":3.2627383},{"type":"node","id":5349884601,"lat":51.1621681,"lon":3.2630327},{"type":"node","id":5349884602,"lat":51.1622043,"lon":3.2630816},{"type":"node","id":5349884603,"lat":51.162375,"lon":3.2627913},{"type":"node","id":5349884604,"lat":51.1622594,"lon":3.2633478},{"type":"node","id":5349884605,"lat":51.1621955,"lon":3.2632528},{"type":"node","id":5349884606,"lat":51.1623824,"lon":3.2629335},{"type":"node","id":5349884607,"lat":51.1624462,"lon":3.2630285},{"type":"node","id":5745739924,"lat":51.1608677,"lon":3.2604028},{"type":"node","id":5745739925,"lat":51.160749,"lon":3.2605301},{"type":"node","id":5745739927,"lat":51.160719,"lon":3.2600865},{"type":"node","id":1494027341,"lat":51.1418334,"lon":3.3035292},{"type":"node","id":1494027359,"lat":51.1413757,"lon":3.3074828},{"type":"node","id":1494027374,"lat":51.14132,"lon":3.3086261},{"type":"node","id":1494027376,"lat":51.1415625,"lon":3.3055864},{"type":"node","id":1494027385,"lat":51.1414514,"lon":3.3065628},{"type":"node","id":1494027386,"lat":51.1416927,"lon":3.3044972},{"type":"node","id":1494027389,"lat":51.1412677,"lon":3.3093509},{"type":"node","id":6037556130,"lat":51.1420599,"lon":3.303249},{"type":"node","id":6037556131,"lat":51.1419859,"lon":3.3038109},{"type":"node","id":6037556132,"lat":51.1418857,"lon":3.3046747},{"type":"node","id":6037556133,"lat":51.1418916,"lon":3.3050562},{"type":"node","id":6037556134,"lat":51.141927,"lon":3.3054665},{"type":"node","id":6037556135,"lat":51.1419362,"lon":3.3056543},{"type":"node","id":6037556136,"lat":51.1419369,"lon":3.3060001},{"type":"node","id":6037556137,"lat":51.1419328,"lon":3.3061768},{"type":"node","id":6037556138,"lat":51.1419139,"lon":3.3062337},{"type":"node","id":6037556139,"lat":51.1419032,"lon":3.3062932},{"type":"node","id":6037556140,"lat":51.1419001,"lon":3.3065944},{"type":"node","id":6037556141,"lat":51.1419262,"lon":3.3066872},{"type":"node","id":6037556142,"lat":51.1419119,"lon":3.3074563},{"type":"node","id":6037556143,"lat":51.1419027,"lon":3.3079359},{"type":"node","id":6037556144,"lat":51.1418924,"lon":3.3090764},{"type":"node","id":6037556145,"lat":51.1418843,"lon":3.3094015},{"type":"node","id":1494027342,"lat":51.1411958,"lon":3.3123073},{"type":"node","id":1494027346,"lat":51.1411509,"lon":3.3144776},{"type":"node","id":1494027353,"lat":51.141193,"lon":3.3127209},{"type":"node","id":1494027361,"lat":51.1411944,"lon":3.3118627},{"type":"node","id":1494027366,"lat":51.1411788,"lon":3.3132011},{"type":"node","id":1494027368,"lat":51.1411457,"lon":3.3148322},{"type":"node","id":1494027372,"lat":51.1412147,"lon":3.3112199},{"type":"node","id":1494027373,"lat":51.1411641,"lon":3.3142758},{"type":"node","id":1494027378,"lat":51.1412256,"lon":3.3114828},{"type":"node","id":1494027382,"lat":51.1412174,"lon":3.3105548},{"type":"node","id":6037556098,"lat":51.1411339,"lon":3.315984},{"type":"node","id":6037556146,"lat":51.1418276,"lon":3.309789},{"type":"node","id":6037556148,"lat":51.1418583,"lon":3.3096011},{"type":"node","id":6037556149,"lat":51.1418039,"lon":3.3098357},{"type":"node","id":6037556150,"lat":51.1417743,"lon":3.3098805},{"type":"node","id":6037556151,"lat":51.1416977,"lon":3.3101207},{"type":"node","id":6037556152,"lat":51.1416834,"lon":3.3102232},{"type":"node","id":6037556153,"lat":51.1416823,"lon":3.3102705},{"type":"node","id":6037556154,"lat":51.1416302,"lon":3.3105557},{"type":"node","id":6037556155,"lat":51.1416042,"lon":3.3107844},{"type":"node","id":6037556156,"lat":51.1415929,"lon":3.3110547},{"type":"node","id":6037556157,"lat":51.1415904,"lon":3.3118741},{"type":"node","id":6037556158,"lat":51.1415817,"lon":3.3145778},{"type":"node","id":6037556159,"lat":51.14157,"lon":3.3146421},{"type":"node","id":6037556160,"lat":51.1415557,"lon":3.3146975},{"type":"node","id":6037556161,"lat":51.1415541,"lon":3.3148416},{"type":"node","id":6037556162,"lat":51.1415551,"lon":3.3149739},{"type":"node","id":6037556163,"lat":51.1415802,"lon":3.3150635},{"type":"node","id":1494027343,"lat":51.1410607,"lon":3.3204128},{"type":"node","id":1494027365,"lat":51.141078,"lon":3.3193848},{"type":"node","id":1494027369,"lat":51.1410588,"lon":3.3212214},{"type":"node","id":1494027380,"lat":51.1410813,"lon":3.317924},{"type":"node","id":6037556105,"lat":51.141131,"lon":3.31628},{"type":"node","id":6037556106,"lat":51.1411581,"lon":3.3165005},{"type":"node","id":6037556107,"lat":51.141174,"lon":3.3167222},{"type":"node","id":6037556108,"lat":51.1411155,"lon":3.3169939},{"type":"node","id":6037556109,"lat":51.1410508,"lon":3.3221866},{"type":"node","id":6037556110,"lat":51.1410676,"lon":3.3223383},{"type":"node","id":6037556164,"lat":51.1415792,"lon":3.3164565},{"type":"node","id":6037556165,"lat":51.141573,"lon":3.3172357},{"type":"node","id":6037556166,"lat":51.1415771,"lon":3.3182023},{"type":"node","id":6037556167,"lat":51.1415495,"lon":3.3182625},{"type":"node","id":6037556168,"lat":51.1415495,"lon":3.3185605},{"type":"node","id":6037556169,"lat":51.1415684,"lon":3.3186069},{"type":"node","id":6037556170,"lat":51.1415633,"lon":3.3207654},{"type":"node","id":6037556171,"lat":51.1415444,"lon":3.3214131},{"type":"node","id":6037556172,"lat":51.1415097,"lon":3.3218544},{"type":"node","id":6037556173,"lat":51.1414642,"lon":3.3225703},{"type":"node","id":1493821404,"lat":51.1410663,"lon":3.3233361},{"type":"node","id":1494027355,"lat":51.1410465,"lon":3.3227899},{"type":"node","id":1801373604,"lat":51.1410713,"lon":3.3237592},{"type":"node","id":1951759314,"lat":51.1411466,"lon":3.3245554},{"type":"node","id":2474247506,"lat":51.1411643,"lon":3.3245589},{"type":"node","id":6037556111,"lat":51.1410551,"lon":3.3241916},{"type":"node","id":6037556112,"lat":51.1410504,"lon":3.3243751},{"type":"node","id":6037556118,"lat":51.1410331,"lon":3.3245183},{"type":"node","id":6037556120,"lat":51.1411823,"lon":3.3245635},{"type":"node","id":6037556174,"lat":51.1414121,"lon":3.3230419},{"type":"node","id":6037556175,"lat":51.1413953,"lon":3.3230745},{"type":"node","id":6037556176,"lat":51.1413682,"lon":3.323164},{"type":"node","id":6037556177,"lat":51.1413426,"lon":3.3233187},{"type":"node","id":6037556178,"lat":51.1413353,"lon":3.3234317},{"type":"node","id":6037556179,"lat":51.1413527,"lon":3.3235128},{"type":"node","id":6037556180,"lat":51.141294,"lon":3.3239374},{"type":"node","id":3702878648,"lat":51.1401344,"lon":3.3337214},{"type":"node","id":3702878654,"lat":51.1395918,"lon":3.3338166},{"type":"node","id":3702926557,"lat":51.1404241,"lon":3.333592},{"type":"node","id":3702926558,"lat":51.1406229,"lon":3.3335608},{"type":"node","id":3702926559,"lat":51.1406259,"lon":3.3336496},{"type":"node","id":3702926560,"lat":51.1404301,"lon":3.333676},{"type":"node","id":3702926561,"lat":51.1403789,"lon":3.3336784},{"type":"node","id":3702926562,"lat":51.1403729,"lon":3.3335752},{"type":"node","id":3702926563,"lat":51.1403021,"lon":3.333592},{"type":"node","id":3702926564,"lat":51.1402991,"lon":3.3335295},{"type":"node","id":3702926565,"lat":51.1402253,"lon":3.3335392},{"type":"node","id":3702926566,"lat":51.1402283,"lon":3.3336112},{"type":"node","id":3702926567,"lat":51.1401304,"lon":3.3336285},{"type":"node","id":3702926568,"lat":51.1400111,"lon":3.3337421},{"type":"node","id":3702956173,"lat":51.1406298,"lon":3.3321023},{"type":"node","id":3702956174,"lat":51.140115,"lon":3.3325162},{"type":"node","id":3702956175,"lat":51.1400702,"lon":3.3323734},{"type":"node","id":3702956176,"lat":51.1405896,"lon":3.3319784},{"type":"node","id":3702969714,"lat":51.1404452,"lon":3.3324432},{"type":"node","id":3702969715,"lat":51.1402175,"lon":3.3326312},{"type":"node","id":3702969716,"lat":51.1401965,"lon":3.3325686},{"type":"node","id":3702969717,"lat":51.1404269,"lon":3.3323835},{"type":"node","id":7713176909,"lat":51.1387744,"lon":3.3335489},{"type":"node","id":7713176910,"lat":51.1389364,"lon":3.3334306},{"type":"node","id":7713176911,"lat":51.1387319,"lon":3.3327211},{"type":"node","id":7713176912,"lat":51.1385501,"lon":3.332864},{"type":"node","id":8292789053,"lat":51.1400165,"lon":3.3338082},{"type":"node","id":8292789054,"lat":51.1396286,"lon":3.333874},{"type":"node","id":8378097124,"lat":51.140324,"lon":3.3355884},{"type":"node","id":8378097125,"lat":51.1403179,"lon":3.3355055},{"type":"node","id":8378097126,"lat":51.1406041,"lon":3.3354515},{"type":"node","id":8378097127,"lat":51.1406102,"lon":3.3355344},{"type":"node","id":8378097131,"lat":51.14074,"lon":3.3354785},{"type":"node","id":8378097132,"lat":51.1407879,"lon":3.3354717},{"type":"node","id":8378097133,"lat":51.1407993,"lon":3.3356206},{"type":"node","id":1317838317,"lat":51.1372361,"lon":3.338639},{"type":"node","id":1317838328,"lat":51.1369619,"lon":3.3386232},{"type":"node","id":1317838331,"lat":51.1371806,"lon":3.3384037},{"type":"node","id":1384096112,"lat":51.1371794,"lon":3.3384971},{"type":"node","id":1625199827,"lat":51.1408446,"lon":3.3375722},{"type":"node","id":1625199950,"lat":51.1407563,"lon":3.3373232},{"type":"node","id":3227068446,"lat":51.1369433,"lon":3.3387663},{"type":"node","id":3227068456,"lat":51.1371252,"lon":3.3388226},{"type":"node","id":3227068565,"lat":51.1371943,"lon":3.3389942},{"type":"node","id":3227068568,"lat":51.1372698,"lon":3.3389467},{"type":"node","id":6227395991,"lat":51.1392741,"lon":3.3367141},{"type":"node","id":6227395992,"lat":51.1392236,"lon":3.3367356},{"type":"node","id":6227395993,"lat":51.139313,"lon":3.3369193},{"type":"node","id":6227395997,"lat":51.1392584,"lon":3.3369405},{"type":"node","id":6414352053,"lat":51.1374056,"lon":3.3395184},{"type":"node","id":6414352054,"lat":51.1371278,"lon":3.3390236},{"type":"node","id":6414352055,"lat":51.1372589,"lon":3.3395769},{"type":"node","id":6414374315,"lat":51.1369166,"lon":3.338648},{"type":"node","id":6414374316,"lat":51.1369683,"lon":3.3388767},{"type":"node","id":6414374317,"lat":51.1370053,"lon":3.3388543},{"type":"node","id":6414374318,"lat":51.1371169,"lon":3.3387872},{"type":"node","id":6414374319,"lat":51.1371271,"lon":3.3388309},{"type":"node","id":6414374320,"lat":51.137238,"lon":3.3387628},{"type":"node","id":6414374321,"lat":51.1372074,"lon":3.338651},{"type":"node","id":6414383775,"lat":51.1407766,"lon":3.3373855},{"type":"node","id":6416001161,"lat":51.1371631,"lon":3.3390024},{"type":"node","id":7274233390,"lat":51.1372936,"lon":3.3395562},{"type":"node","id":7274233391,"lat":51.137309,"lon":3.3396231},{"type":"node","id":7274233395,"lat":51.1374325,"lon":3.3396124},{"type":"node","id":7274233396,"lat":51.137422,"lon":3.3395803},{"type":"node","id":7274233397,"lat":51.1373776,"lon":3.3396587},{"type":"node","id":8279842668,"lat":51.1371603,"lon":3.3384139},{"type":"node","id":8377691836,"lat":51.1409346,"lon":3.337164},{"type":"node","id":8378081366,"lat":51.140887,"lon":3.3372065},{"type":"node","id":8378081386,"lat":51.1407701,"lon":3.3373106},{"type":"node","id":8378081429,"lat":51.1408204,"lon":3.3372657},{"type":"node","id":8378097128,"lat":51.1407837,"lon":3.3359331},{"type":"node","id":8378097129,"lat":51.1407736,"lon":3.3358962},{"type":"node","id":8378097130,"lat":51.1407627,"lon":3.3358224},{"type":"node","id":8378097134,"lat":51.1408355,"lon":3.3359157},{"type":"node","id":1625199938,"lat":51.1411535,"lon":3.3372917},{"type":"node","id":1625199951,"lat":51.1410675,"lon":3.3370397},{"type":"node","id":6100803125,"lat":51.1672329,"lon":3.3331872},{"type":"node","id":6100803128,"lat":51.1672258,"lon":3.3333568},{"type":"node","id":2577910530,"lat":51.1685713,"lon":3.3356917},{"type":"node","id":2577910542,"lat":51.1681925,"lon":3.3356582},{"type":"node","id":2577910543,"lat":51.1685972,"lon":3.3356499},{"type":"node","id":3645188881,"lat":51.1679055,"lon":3.3337545},{"type":"node","id":6100803124,"lat":51.1673065,"lon":3.3331116},{"type":"node","id":6100803126,"lat":51.1672788,"lon":3.3336938},{"type":"node","id":6100803127,"lat":51.1672758,"lon":3.3333629},{"type":"node","id":6100803129,"lat":51.1675567,"lon":3.3331312},{"type":"node","id":6100803130,"lat":51.1675525,"lon":3.3333096},{"type":"node","id":6100803131,"lat":51.1679171,"lon":3.3333454},{"type":"node","id":2577910520,"lat":51.1681983,"lon":3.3360484},{"type":"node","id":2577910526,"lat":51.1687824,"lon":3.3362878},{"type":"node","id":2577910545,"lat":51.16885,"lon":3.3360431},{"type":"node","id":6145151107,"lat":51.1694008,"lon":3.3386946},{"type":"node","id":6145151108,"lat":51.1688319,"lon":3.3385737},{"type":"node","id":6145151109,"lat":51.1688258,"lon":3.3386467},{"type":"node","id":6145151110,"lat":51.1693942,"lon":3.3387681},{"type":"node","id":6145151114,"lat":51.1691188,"lon":3.3387104},{"type":"node","id":6145151115,"lat":51.1688569,"lon":3.3386537},{"type":"node","id":6418533335,"lat":51.1685948,"lon":3.3361624},{"type":"node","id":3190107371,"lat":51.1741471,"lon":3.3384365},{"type":"node","id":3190107374,"lat":51.1741746,"lon":3.3388275},{"type":"node","id":3190107377,"lat":51.1741968,"lon":3.3384276},{"type":"node","id":3190107393,"lat":51.1743618,"lon":3.3383982},{"type":"node","id":3190107400,"lat":51.1744043,"lon":3.3384036},{"type":"node","id":3190107407,"lat":51.1744809,"lon":3.3386827},{"type":"node","id":3190107408,"lat":51.1744875,"lon":3.3387716},{"type":"node","id":3190107415,"lat":51.1746495,"lon":3.3386505},{"type":"node","id":3190107416,"lat":51.1746548,"lon":3.3387211},{"type":"node","id":3190107420,"lat":51.1747424,"lon":3.3387044},{"type":"node","id":3190107423,"lat":51.1747681,"lon":3.3390477},{"type":"node","id":3190107424,"lat":51.1747706,"lon":3.3384763},{"type":"node","id":3190107428,"lat":51.1747993,"lon":3.3384858},{"type":"node","id":3190107432,"lat":51.1748198,"lon":3.3387594},{"type":"node","id":3190107435,"lat":51.1750772,"lon":3.3389888},{"type":"node","id":3190107439,"lat":51.1752356,"lon":3.3387751},{"type":"node","id":3190107442,"lat":51.1752492,"lon":3.338956},{"type":"node","id":7390697534,"lat":51.1297479,"lon":3.3578326},{"type":"node","id":7390697550,"lat":51.1297706,"lon":3.3588263},{"type":"node","id":7468171405,"lat":51.1279967,"lon":3.3559306},{"type":"node","id":7468171406,"lat":51.1288847,"lon":3.3598888},{"type":"node","id":7468171407,"lat":51.1288383,"lon":3.3606949},{"type":"node","id":7468171408,"lat":51.128796,"lon":3.3619912},{"type":"node","id":7468171422,"lat":51.1285744,"lon":3.3574498},{"type":"node","id":7468171423,"lat":51.1288319,"lon":3.3586353},{"type":"node","id":7468171426,"lat":51.1287158,"lon":3.3579031},{"type":"node","id":7468171428,"lat":51.1288787,"lon":3.3588438},{"type":"node","id":7468171429,"lat":51.1288942,"lon":3.3595607},{"type":"node","id":7468171431,"lat":51.1288954,"lon":3.3592459},{"type":"node","id":7468171433,"lat":51.1287831,"lon":3.3582062},{"type":"node","id":7468171444,"lat":51.1287924,"lon":3.361646},{"type":"node","id":7727393197,"lat":51.1288566,"lon":3.3555067},{"type":"node","id":7727393198,"lat":51.1292196,"lon":3.356551},{"type":"node","id":7727393199,"lat":51.129399,"lon":3.3566378},{"type":"node","id":7190873584,"lat":51.1287267,"lon":3.3682604},{"type":"node","id":7190927785,"lat":51.1287057,"lon":3.3681343},{"type":"node","id":7190927786,"lat":51.1287121,"lon":3.3673045},{"type":"node","id":7190927787,"lat":51.1286419,"lon":3.3641562},{"type":"node","id":7190927788,"lat":51.1286407,"lon":3.3644331},{"type":"node","id":7190927789,"lat":51.128655,"lon":3.3650286},{"type":"node","id":7190927790,"lat":51.128688,"lon":3.3661227},{"type":"node","id":7190927791,"lat":51.1286681,"lon":3.3635132},{"type":"node","id":7190927792,"lat":51.1286863,"lon":3.3631709},{"type":"node","id":7190927793,"lat":51.1286419,"lon":3.3639077},{"type":"node","id":7468171409,"lat":51.1288502,"lon":3.3621534},{"type":"node","id":7468171410,"lat":51.1288454,"lon":3.3623212},{"type":"node","id":7468171411,"lat":51.1287924,"lon":3.36282},{"type":"node","id":7468171412,"lat":51.1287335,"lon":3.363023},{"type":"node","id":7468171413,"lat":51.1286942,"lon":3.363003},{"type":"node","id":7602692242,"lat":51.1287128,"lon":3.3675239},{"type":"node","id":7727393200,"lat":51.129492,"lon":3.3624712},{"type":"node","id":7727393201,"lat":51.1294385,"lon":3.3629631},{"type":"node","id":7727393202,"lat":51.1293629,"lon":3.3638402},{"type":"node","id":7727393203,"lat":51.1293586,"lon":3.3662748},{"type":"node","id":7727393204,"lat":51.1292824,"lon":3.3662748},{"type":"node","id":7727393205,"lat":51.1292881,"lon":3.3667997},{"type":"node","id":7727393206,"lat":51.1293315,"lon":3.3682391},{"type":"node","id":7190873576,"lat":51.1287907,"lon":3.36923},{"type":"node","id":7190873577,"lat":51.1289144,"lon":3.369348},{"type":"node","id":7190873578,"lat":51.1288472,"lon":3.3692931},{"type":"node","id":7190873582,"lat":51.1287752,"lon":3.3691898},{"type":"node","id":7468171450,"lat":51.1287442,"lon":3.3685677},{"type":"node","id":7468171451,"lat":51.1290764,"lon":3.3693851},{"type":"node","id":7468171455,"lat":51.1289835,"lon":3.3693823},{"type":"node","id":7727393207,"lat":51.1293768,"lon":3.368773},{"type":"node","id":7727393208,"lat":51.1293116,"lon":3.3692219},{"type":"node","id":7727393209,"lat":51.1293718,"lon":3.368916},{"type":"node","id":7727393210,"lat":51.1292845,"lon":3.3692843},{"type":"node","id":7727393211,"lat":51.1292517,"lon":3.3693264},{"type":"node","id":7727393212,"lat":51.1291932,"lon":3.3693491},{"type":"node","id":8781449489,"lat":51.1293725,"lon":3.3688971},{"type":"way","id":640979978,"nodes":[6037556099,6037556100,6037556101,6037556102,6037556103,1951759298,6037556128,6037556129,6037556130,6037556131,6037556132,6037556133,6037556134,6037556135,6037556136,6037556137,6037556138,6037556139,6037556140,6037556141,6037556142,6037556143,6037556144,6037556145,6037556148,6037556146,6037556149,6037556150,6037556151,6037556152,6037556153,6037556154,6037556155,6037556156,6037556157,6037556158,6037556159,6037556160,6037556161,6037556162,6037556163,6037556164,6037556165,6037556166,6037556167,6037556168,6037556169,6037556170,6037556171,6037556172,6037556173,6037556174,6037556175,6037556176,6037556177,6037556178,6037556179,6037556180,6037556120,2474247506,1951759314,6037556118]},{"type":"way","id":640979982,"nodes":[6037556099,1494027349,6037556104,1494027348,1494027341,1494027386,1494027376,1494027385,1494027359,1494027374,1494027389,1494027382,1494027372,1494027378,1494027361,1494027342,1494027353,1494027366,1494027373,1494027346,1494027368,6037556098,6037556105,6037556106,6037556107,6037556108,1494027380,1494027365,1494027343,1494027369,6037556109,6037556110,1494027355,1493821404,1801373604,6037556111,6037556112,6037556118]},{"type":"way","id":184402325,"nodes":[1948835900,416917603,416917605,1948835986,416917609,1948836072,1948836068,1948836093,1948836104,1948836209,1948836202,1948836218,1948836237,1948836277,416917612,1948836149,1948836096,1948835950]},{"type":"way","id":184402326,"nodes":[1948835900,1948835842,1948835662]},{"type":"way","id":314899865,"nodes":[2026541851,2026541846,2026541843,2026541841,2026541837,3209560116,3210389695,3209560114,3209560115,3209560117,3209560118,3209560119,3209560121,3209560124,3209560126,3209560127,3209560131,3209560132,3209560134,3209560135,3209560136,3209560138]},{"type":"way","id":315041273,"nodes":[1554514739,1554514640,3211247042,1554514831,1554514750,1554514755,5962496715,1554514658,5962338038,1554514618,5962444841,1554514806,5962340003,8497007481,5962414276,5962415500,5962415499,5962415498,5962415538,5962415543,3211247331,3211247328,3211247291,5962444849,5962444850,5962340009,5962444846,5962340010,3211247059,5962340012,5962340011,3211247266,3211247261,5962496718,3211247058,5962496719,3211247054,3211247265,5962340013,3211247060,5962415564,5962415565]},{"type":"way","id":606165130,"nodes":[5747937641,5747937642,5747937643,5747937644,5747937645,5747937646,5747937647,5747937648,5747937649,5747937650,5747937651,5747937652,5747937653,5747937654,5747937655,5747937656,5747937657,5747937658,5747937659,5747535101,5745963942,5745963943,5745963944,5745963946,3162627509,5745963947,5747937668,5747937669,5747937670,5747937671,5747937672,5747937673,5747937674,5747937675,5747937676,5747937677,5747937678,5747937679,5747937680,5747937681,5747937682,5747937683,5747937684,5747937685,5747937686,5747937687,5747937688,5747937689,5747937690,5747937691,5747937641]},{"type":"way","id":184402332,"nodes":[668981668,416917618,1815081998,668981667,1948835950]},{"type":"way","id":184402334,"nodes":[6206789688,1948835742,668981668]},{"type":"way","id":314956402,"nodes":[2026541851,3209560139,3209560138]},{"type":"way","id":663050030,"nodes":[1948835662,6206789688]},{"type":"way","id":631371232,"nodes":[3211247019,5962496725]},{"type":"way","id":631377344,"nodes":[5962496725,3211247021]},{"type":"way","id":655652321,"nodes":[6142727588,6143074993,6142727589,6142727598,6142727590,6142725081,6142725080,6142725079,6142725078,6142725077,6142725076,6142725074,6142725084,6142727586,6142727585,6142727587,6142727591,6142727592,5745963922,6142727588]},{"type":"way","id":631371231,"nodes":[3211247019,3211247024]},{"type":"way","id":631371234,"nodes":[3211247013,3211247021]},{"type":"way","id":631377343,"nodes":[1554514739,1554514735,1554514744,1554514811,5962339921,1554514655,1554514679,1554514683,1554514765,1554514775,1554514773,1554514747,1554514730,1554514647,1554514789,1554514649,1554514682,1554514787,1554514661,1554514726,1554514693,1554514703,1554514783]},{"type":"way","id":655652319,"nodes":[6142725039,6142725040,8638721239,8638721230,6142725041,6142725042,6142725043,6142725044,6142725045,6142725046,6142725047,6142725048,6142725049,6142725050,6142725051,6142725052,6142725053,6142725054,6142725055,6142725056,6142725057,6142725058,6142725059,6142725060,6142725061,6142725064,6142727594,6142727595,6142727596,6143075018,6142725067,6142725066,6142725065,6143075014,3162627482,6142727597,6142725039]},{"type":"way","id":315041261,"nodes":[3211247039,3211247036]},{"type":"way","id":315041263,"nodes":[3211247032,3211247029,3211247024]},{"type":"way","id":631371223,"nodes":[5962415565,3211247039]},{"type":"way","id":631371228,"nodes":[3211247034,3211247032]},{"type":"way","id":631377341,"nodes":[3211247036,3211247037,3211247034]},{"type":"way","id":631371236,"nodes":[3211247013,3211247010,3211247008,3211247004,3211246997,5962338070,9284562682,5962338069,5962338071,3211246995]},{"type":"way","id":631371237,"nodes":[3211246995,3211246555,3211246542,3203029856,7727406921,1554514783]}]} + ) + + + + } + + + +} \ No newline at end of file diff --git a/test/CreateNoteImportLayer.spec.ts b/test/CreateNoteImportLayer.spec.ts index 4a35df7f21..8eed041595 100644 --- a/test/CreateNoteImportLayer.spec.ts +++ b/test/CreateNoteImportLayer.spec.ts @@ -1,10 +1,11 @@ import T from "./TestHelper"; import CreateNoteImportLayer from "../Models/ThemeConfig/Conversion/CreateNoteImportLayer"; import * as bookcases from "../assets/layers/public_bookcase/public_bookcase.json" -import {DesugaringContext, PrepareLayer} from "../Models/ThemeConfig/Conversion/LegacyJsonConvert"; +import {DesugaringContext} from "../Models/ThemeConfig/Conversion/Conversion"; import {LayerConfigJson} from "../Models/ThemeConfig/Json/LayerConfigJson"; import {TagRenderingConfigJson} from "../Models/ThemeConfig/Json/TagRenderingConfigJson"; -import LayerConfig from "../Models/ThemeConfig/LayerConfig"; +import {PrepareLayer} from "../Models/ThemeConfig/Conversion/PrepareLayer"; +import {Utils} from "../Utils"; export default class CreateNoteImportLayerSpec extends T { @@ -16,12 +17,16 @@ export default class CreateNoteImportLayerSpec extends T { tagRenderings: new Map() } - const layerPrepare = new PrepareLayer() - const layer = new LayerConfig(layerPrepare.convertStrict(desugaringState, bookcases, "ImportLayerGeneratorTest:Parse bookcases"), "ImportLayerGeneratorTest: init bookcases-layer") + const layerPrepare = new PrepareLayer(desugaringState) + const layer = layerPrepare.convertStrict(bookcases, "ImportLayerGeneratorTest:Parse bookcases") const generator = new CreateNoteImportLayer() - const generatedLayer = generator.convertStrict(desugaringState, layer, "ImportLayerGeneratorTest: convert") - // fs.writeFileSync("bookcases-import-layer.generated.json", JSON.stringify(generatedLayer, null, " "), "utf8") -console.log(JSON.stringify(generatedLayer, null, " ")) + const generatedLayer: LayerConfigJson = generator.convertStrict(layer, "ImportLayerGeneratorTest: convert") + T.equals("_tags~(^|.*;)amenity=public_bookcase($|;.*)", generatedLayer.isShown.mappings[1].if["and"][1].or[0].and[0]) + T.isTrue(generatedLayer.minzoom <= layer.minzoom, "Zoomlevel is to high") + let renderings = Utils.NoNull(Utils.NoNull(generatedLayer.tagRenderings + .map(tr => (tr).render)) + .map(render => render["en"])) + T.isTrue(renderings.some(r => r.indexOf("import_button") > 0), "no import button found") }] ]); } diff --git a/test/GeoOperations.spec.ts b/test/GeoOperations.spec.ts index b7e3c2f6fe..5eb64fa0ec 100644 --- a/test/GeoOperations.spec.ts +++ b/test/GeoOperations.spec.ts @@ -355,7 +355,7 @@ export default class GeoOperationsSpec extends T { Assert.notEqual(p0, null) const p1 = turf.polygon(polyHouse.geometry.coordinates) Assert.notEqual(p1, null) - + const overlaps = GeoOperations.calculateOverlap(polyGrb, [polyHouse]) Assert.equal(overlaps.length, 0) const overlapsRev = GeoOperations.calculateOverlap(polyHouse, [polyGrb]) @@ -364,50 +364,52 @@ export default class GeoOperationsSpec extends T { }], ["Overnode removal test", () => { - const feature = { "geometry": { - "type": "Polygon", + const feature = { + "geometry": { + "type": "Polygon", "coordinates": [ - [ [ - 4.477944199999975, - 51.02783550000022 - ], - [ - 4.477987899999996, - 51.027818800000034 - ], - [ - 4.478004500000021, - 51.02783399999988 - ], - [ - 4.478025499999962, - 51.02782489999994 - ], - [ - 4.478079099999993, - 51.027873899999896 - ], - [ - 4.47801040000006, - 51.027903799999955 - ], - [ - 4.477964799999972, - 51.02785709999982 - ], - [ - 4.477964699999964, - 51.02785690000006 - ], - [ - 4.477944199999975, - 51.02783550000022 + [ + 4.477944199999975, + 51.02783550000022 + ], + [ + 4.477987899999996, + 51.027818800000034 + ], + [ + 4.478004500000021, + 51.02783399999988 + ], + [ + 4.478025499999962, + 51.02782489999994 + ], + [ + 4.478079099999993, + 51.027873899999896 + ], + [ + 4.47801040000006, + 51.027903799999955 + ], + [ + 4.477964799999972, + 51.02785709999982 + ], + [ + 4.477964699999964, + 51.02785690000006 + ], + [ + 4.477944199999975, + 51.02783550000022 + ] ] ] - ] - }} - + } + } + const copy = GeoOperations.removeOvernoding(feature) Assert.equal(copy.geometry.coordinates[0].length, 7) T.listIdentical([ diff --git a/test/ImageAttribution.spec.ts b/test/ImageAttribution.spec.ts index e898120175..10883105a4 100644 --- a/test/ImageAttribution.spec.ts +++ b/test/ImageAttribution.spec.ts @@ -1,44 +1,45 @@ import {equal} from "assert"; import T from "./TestHelper"; import {Translation} from "../UI/i18n/Translation"; -import * as bike_repair_station from "../assets/layers/bike_repair_station/bike_repair_station.json" -import LayerConfig from "../Models/ThemeConfig/LayerConfig"; +import * as cyclofix from "../assets/generated/themes/cyclofix.json" +import {ExtractImages} from "../Models/ThemeConfig/Conversion/FixImages"; export default class ImageAttributionSpec extends T { constructor() { super([ - [ - "Should find all the images", - () => { - const pumps: LayerConfig = new LayerConfig(bike_repair_station) - const images = pumps.ExtractImages(); - const expectedValues = ['./assets/layers/bike_repair_station/repair_station.svg', - './assets/layers/bike_repair_station/repair_station_pump.svg', - './assets/layers/bike_repair_station/broken_pump_2.svg', - './assets/layers/bike_repair_station/pump.svg', - './assets/themes/cyclofix/fietsambassade_gent_logo_small.svg', - './assets/layers/bike_repair_station/pump_example_manual.jpg', - './assets/layers/bike_repair_station/pump_example.png', - './assets/layers/bike_repair_station/pump_example_round.jpg', - './assets/layers/bike_repair_station/repair_station_example.jpg'] - for (const expected of expectedValues) { - T.isTrue(images.has(expected), expected + " not found") - } + [ + "Should find all the images", + () => { + const images = new Set(new ExtractImages(true).convertStrict( cyclofix, "test")) + const expectedValues = [ + './assets/layers/bike_repair_station/repair_station.svg', + './assets/layers/bike_repair_station/repair_station_pump.svg', + './assets/layers/bike_repair_station/broken_pump.svg', + './assets/layers/bike_repair_station/pump.svg', + './assets/themes/cyclofix/fietsambassade_gent_logo_small.svg', + './assets/layers/bike_repair_station/pump_example_manual.jpg', + './assets/layers/bike_repair_station/pump_example.png', + './assets/layers/bike_repair_station/pump_example_round.jpg', + './assets/layers/bike_repair_station/repair_station_example_2.jpg', + 'close'] + for (const expected of expectedValues) { + T.isTrue(images.has(expected), expected + " not found") } - ], - [ - "Test image discovery regex", - () => { - const tr = new Translation({en: "XYZ XYZ XYZ "}) - const images = new Set(tr.ExtractImages(false)); - equal(3, images.size) - T.isTrue(images.has("a.svg"), "a.svg not found") - T.isTrue(images.has("b.svg"), "b.svg not found") - T.isTrue(images.has("some image.svg"), "some image.svg not found") + } + ], + [ + "Test image discovery regex", + () => { + const tr = new Translation({en: "XYZ XYZ XYZ "}) + const images = new Set(tr.ExtractImages(false)); + equal(3, images.size) + T.isTrue(images.has("a.svg"), "a.svg not found") + T.isTrue(images.has("b.svg"), "b.svg not found") + T.isTrue(images.has("some image.svg"), "some image.svg not found") - } - ] + } + ] - ]); + ]); } } \ No newline at end of file diff --git a/test/LegacyThemeLoader.spec.ts b/test/LegacyThemeLoader.spec.ts index f29e9c6e1e..aff639d317 100644 --- a/test/LegacyThemeLoader.spec.ts +++ b/test/LegacyThemeLoader.spec.ts @@ -1,8 +1,11 @@ import T from "./TestHelper"; import {FixLegacyTheme} from "../Models/ThemeConfig/Conversion/LegacyJsonConvert"; import LayoutConfig from "../Models/ThemeConfig/LayoutConfig"; -import {LayerConfigJson} from "../Models/ThemeConfig/Json/LayerConfigJson"; import {TagRenderingConfigJson} from "../Models/ThemeConfig/Json/TagRenderingConfigJson"; +import {AddMiniMap} from "../Models/ThemeConfig/Conversion/PrepareTheme"; +import {DetectShadowedMappings} from "../Models/ThemeConfig/Conversion/Validation"; +import * as Assert from "assert"; +import {FixImages} from "../Models/ThemeConfig/Conversion/FixImages"; export default class LegacyThemeLoaderSpec extends T { @@ -141,19 +144,312 @@ export default class LegacyThemeLoaderSpec extends T { ] } + private static readonly verkeerde_borden ={ + "id": "https://raw.githubusercontent.com/seppesantens/MapComplete-Themes/main/VerkeerdeBordenDatabank/VerkeerdeBordenDatabank.json", + "title": { + "nl": "VerkeerdeBordenDatabank", + "en": "Erratic Signs Database" + }, + "maintainer": "Seppe Santens", + "icon": "https://upload.wikimedia.org/wikipedia/commons/b/bc/Belgian_traffic_sign_A51.svg", + "description": { + "nl": "Een kaart om verkeerde of ontbrekende verkeersborden te tonen en te editeren.", + "en": "A map to show and edit incorrect or missing traffic signs." + }, + "version": "2021-09-16", + "startLat": 51.08881, + "startLon": 3.447282, + "startZoom": 15, + "clustering": { + "maxZoom": 8 + }, + "layers": [ + { + "id": "trafficsign", + "name": { + "nl": "verkeersbord", + "en": "traffic sign" + }, + "source": { + "osmTags": { + "and": [ + "traffic_sign~*", + "traffic_sign:issue~*" + ] + } + }, + "minzoom": 10, + "title": { + "render": { + "nl": "verkeersbord", + "en": "traffic sign" + } + }, + "tagRenderings": [ + "images", + { + "render": { + "nl": "ID verkeersbord: {traffic_sign}", + "en": "traffic sign ID: {traffic_sign}" + }, + "question": { + "nl": "Wat is het ID voor dit verkeersbord?", + "en": "What is ID for this traffic sign?" + }, + "freeform": { + "key": "traffic_sign" + }, + "id": "trafficsign-traffic_sign" + }, + { + "render": { + "nl": "Probleem bij dit verkeersbord: {traffic_sign:issue}", + "en": "Issue with this traffic sign: {traffic_sign:issue}" + }, + "question": { + "nl": "Wat is het probleem met dit verkeersbord?", + "en": "What is the issue with this traffic sign?" + }, + "freeform": { + "key": "traffic_sign:issue" + }, + "id": "trafficsign-traffic_sign:issue" + }, + { + "question": { + "nl": "Wanneer werd dit verkeersbord laatst gesurveyed?", + "en": "When was this traffic sign last surveyed?" + }, + "render": { + "nl": "Dit verkeersbord werd laatst gesurveyed op {survey:date}", + "en": "This traffic sign was last surveyed on {survey:date}" + }, + "freeform": { + "key": "survey:date", + "type": "date" + }, + "mappings": [ + { + "if": "survey:date:={_now:date}", + "then": "Vandaag gesurveyed!" + } + ], + "id": "trafficsign-survey:date" + } + ], + "mapRendering": [ + { + "icon": "./TS_bolt.svg", + iconBadges: [{ + if: "id=yes", + then:{ + mappings: [ + { + if: "id=yes", + then: "./Something.svg" + } + ] + } + }], + "location": [ + "point", + "centroid" + ] + } + ] + }, + { + "id": "notrafficsign", + "name": { + "nl": "geen verkeersbord", + "en": "no traffic sign" + }, + "source": { + "osmTags": { + "and": [ + { + "or": [ + "no:traffic_sign~*", + "not:traffic_sign~*" + ] + }, + "traffic_sign:issue~*" + ] + } + }, + "minzoom": 10, + "title": { + "render": { + "nl": "ontbrekend verkeersbord", + "en": "missing traffic sign" + } + }, + "tagRenderings": [ + "images", + { + "render": { + "nl": "ID ontbrekend verkeersbord: {no:traffic_sign}", + "en": "missing traffic sign ID: {no:traffic_sign}" + }, + "question": { + "nl": "Wat is het ID voor het ontbrekende verkeersbord?", + "en": "What is ID for the missing traffic sign?" + }, + "freeform": { + "key": "no:traffic_sign" + }, + "id": "notrafficsign-no:traffic_sign" + }, + { + "render": { + "nl": "Probleem bij deze situatie: {traffic_sign:issue}", + "en": "Issue with this situation: {traffic_sign:issue}" + }, + "question": { + "nl": "Wat is er mis met deze situatie?", + "en": "What is the issue with this situation?" + }, + "freeform": { + "key": "traffic_sign:issue" + }, + "id": "notrafficsign-traffic_sign:issue" + }, + { + "question": { + "nl": "Wanneer werd deze situatie laatst gesurveyed?", + "en": "When was this situation last surveyed?" + }, + "render": { + "nl": "Deze situatie werd laatst gesurveyed op {survey:date}", + "en": "This situation was last surveyed on {survey:date}" + }, + "freeform": { + "key": "survey:date", + "type": "date" + }, + "mappings": [ + { + "if": "survey:date:={_now:date}", + "then": "Vandaag gesurveyed!" + } + ], + "id": "notrafficsign-survey:date" + } + ], + "mapRendering": [ + { + "icon": "./TS_questionmark.svg", + "location": [ + "point", + "centroid" + ] + } + ] + } + ], + "defaultBackgroundId": "Stamen.TonerLite" + } + + + constructor() { super([ ["Walking_node_theme", () => { const config = LegacyThemeLoaderSpec.walking_node_theme - const fixed = new FixLegacyTheme().convert({tagRenderings: new Map(), sharedLayers: new Map()}, + const fixed = new FixLegacyTheme().convert( // @ts-ignore config, "While testing") T.isTrue(fixed.errors.length === 0, "Could not fix the legacy theme") const theme = new LayoutConfig(fixed.result) - }] + }], + ["Detect minimaps", () => { + function shouldHave(config: TagRenderingConfigJson) { + T.equals(AddMiniMap.hasMinimap(config), true, "Did _not_ dected a minimap, even though there is one in " + JSON.stringify(config)) + } + + function shouldNot(config: TagRenderingConfigJson) { + T.equals(AddMiniMap.hasMinimap(config), false, "Did erronously dected a minimap, even though there is none in " + JSON.stringify(config)) + } + + shouldHave({ + render: "{minimap()}" + }); + shouldHave({ + render: {en: "{minimap()}"} + }); + shouldHave({ + render: {en: "{minimap()}", nl: "{minimap()}"} + }); + shouldHave({ + render: {en: "{minimap()}", nl: "No map for the dutch!"} + }); + + shouldHave({ + render: "{minimap()}" + }) + shouldHave({ + render: "{minimap(18,featurelist)}" + }) + shouldHave({ + mappings: [ + { + if: "xyz=abc", + then: "{minimap(18,featurelist)}" + } + ] + }) + shouldNot({ + render: "Some random value {key}" + }) + shouldNot({ + render: "Some random value {minimap}" + }) + + }], + ["Shadowed mappings are detected", + () => { + const r = new DetectShadowedMappings().convert({ + mappings: [ + { + if: {or: ["key=value", "x=y"]}, + then: "Case A" + }, + { + if: "key=value", + then: "Shadowed" + } + ] + }, "test"); + T.isTrue(r.errors.length > 0, "Failing case is not detected") + + const r0 = new DetectShadowedMappings().convert( { + mappings: [ + { + if: {or: ["key=value", "x=y"]}, + then: "Case A" + }, + { + if: {and: ["key=value", "x=y"]}, + then: "Shadowed" + } + ] + }, "test"); + T.isTrue(r0.errors.length > 0, "Failing case is not detected") + } + ], + ["Images are rewritten", () => { + const fixed = new FixImages(new Set()).convertStrict(LegacyThemeLoaderSpec.verkeerde_borden, "test") + const fixedValue = fixed.layers[0]["mapRendering"][0].icon + Assert.equal("https://raw.githubusercontent.com/seppesantens/MapComplete-Themes/main/VerkeerdeBordenDatabank/TS_bolt.svg", + fixedValue) + + const fixedMapping = fixed.layers[0]["mapRendering"][0].iconBadges[0].then.mappings[0].then + Assert.equal("https://raw.githubusercontent.com/seppesantens/MapComplete-Themes/main/VerkeerdeBordenDatabank/Something.svg", + fixedMapping) + } ] ] ); } diff --git a/test/OsmConnection.spec.ts b/test/OsmConnection.spec.ts index d21d44e643..1b81162131 100644 --- a/test/OsmConnection.spec.ts +++ b/test/OsmConnection.spec.ts @@ -2,8 +2,6 @@ import T from "./TestHelper"; import UserDetails, {OsmConnection} from "../Logic/Osm/OsmConnection"; import {UIEventSource} from "../Logic/UIEventSource"; import ScriptUtils from "../scripts/ScriptUtils"; -import {ElementStorage} from "../Logic/ElementStorage"; -import {Changes} from "../Logic/Osm/Changes"; export default class OsmConnectionSpec extends T { @@ -19,9 +17,6 @@ export default class OsmConnectionSpec extends T { () => { const osmConn = new OsmConnection({ osmConfiguration: "osm-test", - layoutName: "Unit test", - allElements: new ElementStorage(), - changes: new Changes(), oauth_token: new UIEventSource(OsmConnectionSpec._osm_token) } ); diff --git a/test/OsmObject.spec.ts b/test/OsmObject.spec.ts index 03d35e473a..1e0cd3707b 100644 --- a/test/OsmObject.spec.ts +++ b/test/OsmObject.spec.ts @@ -3,7 +3,7 @@ import {OsmObject} from "../Logic/Osm/OsmObject"; export default class OsmObjectSpec extends T { constructor() { - super( [ + super([ [ "Download referencing ways", () => { diff --git a/test/RelationSplitHandler.spec.ts b/test/RelationSplitHandler.spec.ts index 0920a915bd..7f42577a2d 100644 --- a/test/RelationSplitHandler.spec.ts +++ b/test/RelationSplitHandler.spec.ts @@ -548,7 +548,7 @@ export default class RelationSplitHandlerSpec extends T { ) - super( [ + super([ ["split 295132739", async () => { // Lets mimick a split action of https://www.openstreetmap.org/way/295132739 diff --git a/test/ReplaceGeometry.spec.ts b/test/ReplaceGeometry.spec.ts index b33442cc77..96b49d9450 100644 --- a/test/ReplaceGeometry.spec.ts +++ b/test/ReplaceGeometry.spec.ts @@ -8,13 +8,13 @@ import {BBox} from "../Logic/BBox"; import Minimap from "../UI/Base/Minimap"; export default class ReplaceGeometrySpec extends T { - + private static readonly grbStripped = { "id": "grb", "title": { "nl": "GRB import helper" }, - "description":"Smaller version of the GRB theme", + "description": "Smaller version of the GRB theme", "language": [ "nl", "en" @@ -24,15 +24,15 @@ export default class ReplaceGeometrySpec extends T { "startLat": 51.0249, "startLon": 4.026489, "startZoom": 9, - "clustering":false, + "clustering": false, "overrideAll": { "minzoom": 19 }, "layers": [ { "id": "type_node", - source:{ - osmTags:"type=node" + source: { + osmTags: "type=node" }, mapRendering: null, "override": { @@ -320,12 +320,10 @@ export default class ReplaceGeometrySpec extends T { } ] } - - - - + + constructor() { - super( [ + super([ ["House replacement with connected node", async () => { Minimap.createMiniMap = () => undefined; @@ -389,20 +387,496 @@ export default class ReplaceGeometrySpec extends T { const wayId = "way/160909312" Utils.injectJsonDownloadForTests( - "https://www.openstreetmap.org/api/0.6/map.json?bbox=3.2166673243045807,51.21467321525788,3.217007964849472,51.21482442824023" , - {"version":"0.6","generator":"CGImap 0.8.6 (1549677 spike-06.openstreetmap.org)","copyright":"OpenStreetMap and contributors","attribution":"http://www.openstreetmap.org/copyright","license":"http://opendatacommons.org/licenses/odbl/1-0/","bounds":{"minlat":51.2146732,"minlon":3.2166673,"maxlat":51.2148244,"maxlon":3.217008},"elements":[{"type":"node","id":1612385157,"lat":51.2148016,"lon":3.2168453,"timestamp":"2018-04-30T12:26:00Z","version":3,"changeset":58553478,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":1728816256,"lat":51.2147111,"lon":3.2170233,"timestamp":"2017-07-18T22:52:44Z","version":2,"changeset":50391526,"user":"catweazle67","uid":1976209},{"type":"node","id":1728816287,"lat":51.2146408,"lon":3.2167601,"timestamp":"2021-10-29T16:24:43Z","version":3,"changeset":113131915,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":1728823481,"lat":51.2146968,"lon":3.2167242,"timestamp":"2021-11-02T23:37:11Z","version":5,"changeset":113305401,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":1728823499,"lat":51.2147127,"lon":3.2170302,"timestamp":"2017-07-18T22:52:45Z","version":2,"changeset":50391526,"user":"catweazle67","uid":1976209},{"type":"node","id":1728823501,"lat":51.2148696,"lon":3.2168941,"timestamp":"2017-07-18T22:52:45Z","version":2,"changeset":50391526,"user":"catweazle67","uid":1976209},{"type":"node","id":1728823514,"lat":51.2147863,"lon":3.2168551,"timestamp":"2021-11-02T23:37:11Z","version":5,"changeset":113305401,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":1728823522,"lat":51.2148489,"lon":3.2169012,"timestamp":"2017-07-18T22:52:45Z","version":2,"changeset":50391526,"user":"catweazle67","uid":1976209},{"type":"node","id":1728823523,"lat":51.2147578,"lon":3.2169995,"timestamp":"2017-07-18T22:52:45Z","version":2,"changeset":50391526,"user":"catweazle67","uid":1976209},{"type":"node","id":1728823543,"lat":51.2148075,"lon":3.2166445,"timestamp":"2017-07-18T22:52:46Z","version":3,"changeset":50391526,"user":"catweazle67","uid":1976209},{"type":"node","id":1728823544,"lat":51.2148553,"lon":3.2169315,"timestamp":"2017-07-18T22:52:46Z","version":2,"changeset":50391526,"user":"catweazle67","uid":1976209},{"type":"node","id":1728823549,"lat":51.2147401,"lon":3.2168877,"timestamp":"2021-11-02T23:37:11Z","version":5,"changeset":113305401,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":4978288376,"lat":51.2147306,"lon":3.2168928,"timestamp":"2017-07-18T22:52:21Z","version":1,"changeset":50391526,"user":"catweazle67","uid":1976209},{"type":"node","id":4978288381,"lat":51.2147638,"lon":3.2168856,"timestamp":"2021-11-02T23:37:11Z","version":4,"changeset":113305401,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":4978288382,"lat":51.2148189,"lon":3.216912,"timestamp":"2017-07-18T22:52:21Z","version":1,"changeset":50391526,"user":"catweazle67","uid":1976209},{"type":"node","id":4978288385,"lat":51.2148835,"lon":3.2170623,"timestamp":"2017-07-18T22:52:21Z","version":1,"changeset":50391526,"user":"catweazle67","uid":1976209},{"type":"node","id":4978288387,"lat":51.2148904,"lon":3.2171037,"timestamp":"2017-07-18T22:52:21Z","version":1,"changeset":50391526,"user":"catweazle67","uid":1976209},{"type":"node","id":4978289383,"lat":51.2147678,"lon":3.2169969,"timestamp":"2021-11-02T23:37:11Z","version":4,"changeset":113305401,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":4978289384,"lat":51.2147684,"lon":3.2168674,"timestamp":"2021-11-02T23:37:11Z","version":4,"changeset":113305401,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":4978289386,"lat":51.2147716,"lon":3.2168811,"timestamp":"2021-11-02T23:37:11Z","version":4,"changeset":113305401,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":4978289388,"lat":51.2148115,"lon":3.216966,"timestamp":"2021-11-02T23:38:13Z","version":7,"changeset":113306325,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":4978289391,"lat":51.2148019,"lon":3.2169194,"timestamp":"2017-07-18T22:52:21Z","version":1,"changeset":50391526,"user":"catweazle67","uid":1976209},{"type":"node","id":9219974337,"lat":51.2148449,"lon":3.2171278,"timestamp":"2021-11-02T23:40:52Z","version":1,"changeset":113305401,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":9219979643,"lat":51.2147405,"lon":3.216693,"timestamp":"2021-11-02T23:37:11Z","version":1,"changeset":113305401,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":9219979646,"lat":51.2148043,"lon":3.2169312,"timestamp":"2021-11-02T23:38:13Z","version":2,"changeset":113306325,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":9219979647,"lat":51.2147792,"lon":3.2169466,"timestamp":"2021-11-02T23:37:11Z","version":1,"changeset":113305401,"user":"Pieter Vander Vennet","uid":3818858},{"type":"way","id":160909311,"timestamp":"2021-12-23T12:03:37Z","version":6,"changeset":115295690,"user":"s8evq","uid":3710738,"nodes":[1728823481,1728823549,4978288376,1728823523,1728823499,1728816256,1728816287,1728823481],"tags":{"addr:city":"Brugge","addr:country":"BE","addr:housenumber":"106","addr:postcode":"8000","addr:street":"Ezelstraat","building":"house","source:geometry:date":"2015-07-09","source:geometry:ref":"Gbg/2391617"}},{"type":"way","id":160909312,"timestamp":"2021-11-02T23:38:13Z","version":4,"changeset":113306325,"user":"Pieter Vander Vennet","uid":3818858,"nodes":[9219979643,1728823481,1728823549,4978289383,4978289388,9219979646,9219979647,4978288381,4978289386,4978289384,1728823514,9219979643],"tags":{"addr:city":"Brugge","addr:country":"BE","addr:housenumber":"108","addr:postcode":"8000","addr:street":"Ezelstraat","building":"house","source:geometry:date":"2018-10-02","source:geometry:ref":"Gbg/5926383"}},{"type":"way","id":160909315,"timestamp":"2021-12-23T12:03:37Z","version":8,"changeset":115295690,"user":"s8evq","uid":3710738,"nodes":[1728823543,1728823501,1728823522,4978288382,1612385157,1728823514,9219979643,1728823543],"tags":{"addr:city":"Brugge","addr:country":"BE","addr:housenumber":"110","addr:postcode":"8000","addr:street":"Ezelstraat","building":"house","name":"La Style","shop":"hairdresser","source:geometry:date":"2015-07-09","source:geometry:ref":"Gbg/5260837"}},{"type":"way","id":508533816,"timestamp":"2021-12-23T12:03:37Z","version":7,"changeset":115295690,"user":"s8evq","uid":3710738,"nodes":[4978288387,4978288385,1728823544,1728823522,4978288382,4978289391,9219979646,4978289388,9219974337,4978288387],"tags":{"building":"yes","source:geometry:date":"2015-07-09","source:geometry:ref":"Gbg/5260790"}}]} + "https://www.openstreetmap.org/api/0.6/map.json?bbox=3.2166673243045807,51.21467321525788,3.217007964849472,51.21482442824023", + { + "version": "0.6", + "generator": "CGImap 0.8.6 (1549677 spike-06.openstreetmap.org)", + "copyright": "OpenStreetMap and contributors", + "attribution": "http://www.openstreetmap.org/copyright", + "license": "http://opendatacommons.org/licenses/odbl/1-0/", + "bounds": {"minlat": 51.2146732, "minlon": 3.2166673, "maxlat": 51.2148244, "maxlon": 3.217008}, + "elements": [{ + "type": "node", + "id": 1612385157, + "lat": 51.2148016, + "lon": 3.2168453, + "timestamp": "2018-04-30T12:26:00Z", + "version": 3, + "changeset": 58553478, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 1728816256, + "lat": 51.2147111, + "lon": 3.2170233, + "timestamp": "2017-07-18T22:52:44Z", + "version": 2, + "changeset": 50391526, + "user": "catweazle67", + "uid": 1976209 + }, { + "type": "node", + "id": 1728816287, + "lat": 51.2146408, + "lon": 3.2167601, + "timestamp": "2021-10-29T16:24:43Z", + "version": 3, + "changeset": 113131915, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 1728823481, + "lat": 51.2146968, + "lon": 3.2167242, + "timestamp": "2021-11-02T23:37:11Z", + "version": 5, + "changeset": 113305401, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 1728823499, + "lat": 51.2147127, + "lon": 3.2170302, + "timestamp": "2017-07-18T22:52:45Z", + "version": 2, + "changeset": 50391526, + "user": "catweazle67", + "uid": 1976209 + }, { + "type": "node", + "id": 1728823501, + "lat": 51.2148696, + "lon": 3.2168941, + "timestamp": "2017-07-18T22:52:45Z", + "version": 2, + "changeset": 50391526, + "user": "catweazle67", + "uid": 1976209 + }, { + "type": "node", + "id": 1728823514, + "lat": 51.2147863, + "lon": 3.2168551, + "timestamp": "2021-11-02T23:37:11Z", + "version": 5, + "changeset": 113305401, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 1728823522, + "lat": 51.2148489, + "lon": 3.2169012, + "timestamp": "2017-07-18T22:52:45Z", + "version": 2, + "changeset": 50391526, + "user": "catweazle67", + "uid": 1976209 + }, { + "type": "node", + "id": 1728823523, + "lat": 51.2147578, + "lon": 3.2169995, + "timestamp": "2017-07-18T22:52:45Z", + "version": 2, + "changeset": 50391526, + "user": "catweazle67", + "uid": 1976209 + }, { + "type": "node", + "id": 1728823543, + "lat": 51.2148075, + "lon": 3.2166445, + "timestamp": "2017-07-18T22:52:46Z", + "version": 3, + "changeset": 50391526, + "user": "catweazle67", + "uid": 1976209 + }, { + "type": "node", + "id": 1728823544, + "lat": 51.2148553, + "lon": 3.2169315, + "timestamp": "2017-07-18T22:52:46Z", + "version": 2, + "changeset": 50391526, + "user": "catweazle67", + "uid": 1976209 + }, { + "type": "node", + "id": 1728823549, + "lat": 51.2147401, + "lon": 3.2168877, + "timestamp": "2021-11-02T23:37:11Z", + "version": 5, + "changeset": 113305401, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 4978288376, + "lat": 51.2147306, + "lon": 3.2168928, + "timestamp": "2017-07-18T22:52:21Z", + "version": 1, + "changeset": 50391526, + "user": "catweazle67", + "uid": 1976209 + }, { + "type": "node", + "id": 4978288381, + "lat": 51.2147638, + "lon": 3.2168856, + "timestamp": "2021-11-02T23:37:11Z", + "version": 4, + "changeset": 113305401, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 4978288382, + "lat": 51.2148189, + "lon": 3.216912, + "timestamp": "2017-07-18T22:52:21Z", + "version": 1, + "changeset": 50391526, + "user": "catweazle67", + "uid": 1976209 + }, { + "type": "node", + "id": 4978288385, + "lat": 51.2148835, + "lon": 3.2170623, + "timestamp": "2017-07-18T22:52:21Z", + "version": 1, + "changeset": 50391526, + "user": "catweazle67", + "uid": 1976209 + }, { + "type": "node", + "id": 4978288387, + "lat": 51.2148904, + "lon": 3.2171037, + "timestamp": "2017-07-18T22:52:21Z", + "version": 1, + "changeset": 50391526, + "user": "catweazle67", + "uid": 1976209 + }, { + "type": "node", + "id": 4978289383, + "lat": 51.2147678, + "lon": 3.2169969, + "timestamp": "2021-11-02T23:37:11Z", + "version": 4, + "changeset": 113305401, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 4978289384, + "lat": 51.2147684, + "lon": 3.2168674, + "timestamp": "2021-11-02T23:37:11Z", + "version": 4, + "changeset": 113305401, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 4978289386, + "lat": 51.2147716, + "lon": 3.2168811, + "timestamp": "2021-11-02T23:37:11Z", + "version": 4, + "changeset": 113305401, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 4978289388, + "lat": 51.2148115, + "lon": 3.216966, + "timestamp": "2021-11-02T23:38:13Z", + "version": 7, + "changeset": 113306325, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 4978289391, + "lat": 51.2148019, + "lon": 3.2169194, + "timestamp": "2017-07-18T22:52:21Z", + "version": 1, + "changeset": 50391526, + "user": "catweazle67", + "uid": 1976209 + }, { + "type": "node", + "id": 9219974337, + "lat": 51.2148449, + "lon": 3.2171278, + "timestamp": "2021-11-02T23:40:52Z", + "version": 1, + "changeset": 113305401, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 9219979643, + "lat": 51.2147405, + "lon": 3.216693, + "timestamp": "2021-11-02T23:37:11Z", + "version": 1, + "changeset": 113305401, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 9219979646, + "lat": 51.2148043, + "lon": 3.2169312, + "timestamp": "2021-11-02T23:38:13Z", + "version": 2, + "changeset": 113306325, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 9219979647, + "lat": 51.2147792, + "lon": 3.2169466, + "timestamp": "2021-11-02T23:37:11Z", + "version": 1, + "changeset": 113305401, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "way", + "id": 160909311, + "timestamp": "2021-12-23T12:03:37Z", + "version": 6, + "changeset": 115295690, + "user": "s8evq", + "uid": 3710738, + "nodes": [1728823481, 1728823549, 4978288376, 1728823523, 1728823499, 1728816256, 1728816287, 1728823481], + "tags": { + "addr:city": "Brugge", + "addr:country": "BE", + "addr:housenumber": "106", + "addr:postcode": "8000", + "addr:street": "Ezelstraat", + "building": "house", + "source:geometry:date": "2015-07-09", + "source:geometry:ref": "Gbg/2391617" + } + }, { + "type": "way", + "id": 160909312, + "timestamp": "2021-11-02T23:38:13Z", + "version": 4, + "changeset": 113306325, + "user": "Pieter Vander Vennet", + "uid": 3818858, + "nodes": [9219979643, 1728823481, 1728823549, 4978289383, 4978289388, 9219979646, 9219979647, 4978288381, 4978289386, 4978289384, 1728823514, 9219979643], + "tags": { + "addr:city": "Brugge", + "addr:country": "BE", + "addr:housenumber": "108", + "addr:postcode": "8000", + "addr:street": "Ezelstraat", + "building": "house", + "source:geometry:date": "2018-10-02", + "source:geometry:ref": "Gbg/5926383" + } + }, { + "type": "way", + "id": 160909315, + "timestamp": "2021-12-23T12:03:37Z", + "version": 8, + "changeset": 115295690, + "user": "s8evq", + "uid": 3710738, + "nodes": [1728823543, 1728823501, 1728823522, 4978288382, 1612385157, 1728823514, 9219979643, 1728823543], + "tags": { + "addr:city": "Brugge", + "addr:country": "BE", + "addr:housenumber": "110", + "addr:postcode": "8000", + "addr:street": "Ezelstraat", + "building": "house", + "name": "La Style", + "shop": "hairdresser", + "source:geometry:date": "2015-07-09", + "source:geometry:ref": "Gbg/5260837" + } + }, { + "type": "way", + "id": 508533816, + "timestamp": "2021-12-23T12:03:37Z", + "version": 7, + "changeset": 115295690, + "user": "s8evq", + "uid": 3710738, + "nodes": [4978288387, 4978288385, 1728823544, 1728823522, 4978288382, 4978289391, 9219979646, 4978289388, 9219974337, 4978288387], + "tags": { + "building": "yes", + "source:geometry:date": "2015-07-09", + "source:geometry:ref": "Gbg/5260790" + } + }] + } ) Utils.injectJsonDownloadForTests( - "https://www.openstreetmap.org/api/0.6/way/160909312/full" , - {"version":"0.6","generator":"CGImap 0.8.6 (2407324 spike-06.openstreetmap.org)","copyright":"OpenStreetMap and contributors","attribution":"http://www.openstreetmap.org/copyright","license":"http://opendatacommons.org/licenses/odbl/1-0/","elements":[{"type":"node","id":1728823481,"lat":51.2146968,"lon":3.2167242,"timestamp":"2021-11-02T23:37:11Z","version":5,"changeset":113305401,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":1728823514,"lat":51.2147863,"lon":3.2168551,"timestamp":"2021-11-02T23:37:11Z","version":5,"changeset":113305401,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":1728823549,"lat":51.2147401,"lon":3.2168877,"timestamp":"2021-11-02T23:37:11Z","version":5,"changeset":113305401,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":4978288381,"lat":51.2147638,"lon":3.2168856,"timestamp":"2021-11-02T23:37:11Z","version":4,"changeset":113305401,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":4978289383,"lat":51.2147678,"lon":3.2169969,"timestamp":"2021-11-02T23:37:11Z","version":4,"changeset":113305401,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":4978289384,"lat":51.2147684,"lon":3.2168674,"timestamp":"2021-11-02T23:37:11Z","version":4,"changeset":113305401,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":4978289386,"lat":51.2147716,"lon":3.2168811,"timestamp":"2021-11-02T23:37:11Z","version":4,"changeset":113305401,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":4978289388,"lat":51.2148115,"lon":3.216966,"timestamp":"2021-11-02T23:38:13Z","version":7,"changeset":113306325,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":9219979643,"lat":51.2147405,"lon":3.216693,"timestamp":"2021-11-02T23:37:11Z","version":1,"changeset":113305401,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":9219979646,"lat":51.2148043,"lon":3.2169312,"timestamp":"2021-11-02T23:38:13Z","version":2,"changeset":113306325,"user":"Pieter Vander Vennet","uid":3818858},{"type":"node","id":9219979647,"lat":51.2147792,"lon":3.2169466,"timestamp":"2021-11-02T23:37:11Z","version":1,"changeset":113305401,"user":"Pieter Vander Vennet","uid":3818858},{"type":"way","id":160909312,"timestamp":"2021-11-02T23:38:13Z","version":4,"changeset":113306325,"user":"Pieter Vander Vennet","uid":3818858,"nodes":[9219979643,1728823481,1728823549,4978289383,4978289388,9219979646,9219979647,4978288381,4978289386,4978289384,1728823514,9219979643],"tags":{"addr:city":"Brugge","addr:country":"BE","addr:housenumber":"108","addr:postcode":"8000","addr:street":"Ezelstraat","building":"house","source:geometry:date":"2018-10-02","source:geometry:ref":"Gbg/5926383"}}]} + "https://www.openstreetmap.org/api/0.6/way/160909312/full", + { + "version": "0.6", + "generator": "CGImap 0.8.6 (2407324 spike-06.openstreetmap.org)", + "copyright": "OpenStreetMap and contributors", + "attribution": "http://www.openstreetmap.org/copyright", + "license": "http://opendatacommons.org/licenses/odbl/1-0/", + "elements": [{ + "type": "node", + "id": 1728823481, + "lat": 51.2146968, + "lon": 3.2167242, + "timestamp": "2021-11-02T23:37:11Z", + "version": 5, + "changeset": 113305401, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 1728823514, + "lat": 51.2147863, + "lon": 3.2168551, + "timestamp": "2021-11-02T23:37:11Z", + "version": 5, + "changeset": 113305401, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 1728823549, + "lat": 51.2147401, + "lon": 3.2168877, + "timestamp": "2021-11-02T23:37:11Z", + "version": 5, + "changeset": 113305401, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 4978288381, + "lat": 51.2147638, + "lon": 3.2168856, + "timestamp": "2021-11-02T23:37:11Z", + "version": 4, + "changeset": 113305401, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 4978289383, + "lat": 51.2147678, + "lon": 3.2169969, + "timestamp": "2021-11-02T23:37:11Z", + "version": 4, + "changeset": 113305401, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 4978289384, + "lat": 51.2147684, + "lon": 3.2168674, + "timestamp": "2021-11-02T23:37:11Z", + "version": 4, + "changeset": 113305401, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 4978289386, + "lat": 51.2147716, + "lon": 3.2168811, + "timestamp": "2021-11-02T23:37:11Z", + "version": 4, + "changeset": 113305401, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 4978289388, + "lat": 51.2148115, + "lon": 3.216966, + "timestamp": "2021-11-02T23:38:13Z", + "version": 7, + "changeset": 113306325, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 9219979643, + "lat": 51.2147405, + "lon": 3.216693, + "timestamp": "2021-11-02T23:37:11Z", + "version": 1, + "changeset": 113305401, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 9219979646, + "lat": 51.2148043, + "lon": 3.2169312, + "timestamp": "2021-11-02T23:38:13Z", + "version": 2, + "changeset": 113306325, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "node", + "id": 9219979647, + "lat": 51.2147792, + "lon": 3.2169466, + "timestamp": "2021-11-02T23:37:11Z", + "version": 1, + "changeset": 113305401, + "user": "Pieter Vander Vennet", + "uid": 3818858 + }, { + "type": "way", + "id": 160909312, + "timestamp": "2021-11-02T23:38:13Z", + "version": 4, + "changeset": 113306325, + "user": "Pieter Vander Vennet", + "uid": 3818858, + "nodes": [9219979643, 1728823481, 1728823549, 4978289383, 4978289388, 9219979646, 9219979647, 4978288381, 4978289386, 4978289384, 1728823514, 9219979643], + "tags": { + "addr:city": "Brugge", + "addr:country": "BE", + "addr:housenumber": "108", + "addr:postcode": "8000", + "addr:street": "Ezelstraat", + "building": "house", + "source:geometry:date": "2018-10-02", + "source:geometry:ref": "Gbg/5926383" + } + }] + } ) - Utils.injectJsonDownloadForTests("https://raw.githubusercontent.com/pietervdvn/MapComplete-data/main/latlon2country/0.0.0.json","be") + Utils.injectJsonDownloadForTests("https://raw.githubusercontent.com/pietervdvn/MapComplete-data/main/latlon2country/0.0.0.json", "be") + + const layout = new LayoutConfig(ReplaceGeometrySpec.grbStripped) + - const layout = new LayoutConfig( ReplaceGeometrySpec.grbStripped) - - - const state = new State(layout) State.state = state; const bbox = new BBox( @@ -440,18 +914,18 @@ export default class ReplaceGeometrySpec extends T { 1728823514, undefined], closestIds.closestIds - ) ; - - T.equals( 1 , closestIds.reprojectedNodes.size, "Expected only a single reprojected node"); + ); + + T.equals(1, closestIds.reprojectedNodes.size, "Expected only a single reprojected node"); const reproj = closestIds.reprojectedNodes.get(1728823549) T.equals(1, reproj.projectAfterIndex) - T.equals( 3.2168880864669203, reproj.newLon); - T.equals( 51.214739524104694, reproj.newLat); + T.equals(3.2168880864669203, reproj.newLon); + T.equals(51.214739524104694, reproj.newLat); T.equals(0, closestIds.detachedNodes.size) - const changes = await action.Perform(state.changes) - T.listIdentical([[3.216690793633461,51.21474084112525],[3.2167256623506546,51.214696737309964],[3.2168880864669203,51.214739524104694],[3.2169999182224274,51.214768983537674],[3.2169650495052338,51.21480720678671],[3.2169368863105774,51.21480090625335],[3.2169489562511444,51.21478074454077],[3.216886594891548,51.214765203214625],[3.2168812304735184,51.21477192378873],[3.2168644666671753,51.214768983537674],[3.2168537378311157,51.21478746511261],[3.216690793633461,51.21474084112525]], - changes[11].changes["coordinates"]) - + const changes = await action.Perform(state.changes) + T.listIdentical([[3.216690793633461, 51.21474084112525], [3.2167256623506546, 51.214696737309964], [3.2168880864669203, 51.214739524104694], [3.2169999182224274, 51.214768983537674], [3.2169650495052338, 51.21480720678671], [3.2169368863105774, 51.21480090625335], [3.2169489562511444, 51.21478074454077], [3.216886594891548, 51.214765203214625], [3.2168812304735184, 51.21477192378873], [3.2168644666671753, 51.214768983537674], [3.2168537378311157, 51.21478746511261], [3.216690793633461, 51.21474084112525]], + changes[11].changes["coordinates"]) + }], ]); } diff --git a/test/Tag.spec.ts b/test/Tag.spec.ts index 47994bfca2..0428115d8b 100644 --- a/test/Tag.spec.ts +++ b/test/Tag.spec.ts @@ -13,7 +13,7 @@ import TagRenderingConfig from "../Models/ThemeConfig/TagRenderingConfig"; export default class TagSpec extends T { constructor() { - super( [ + super([ ["Tag replacement works in translation", () => { const tr = new Translation({ "en": "Test {key} abc" @@ -112,6 +112,12 @@ export default class TagSpec extends T { equal(compare.matchesProperties({"key": "5"}), true); equal(compare.matchesProperties({"key": "4.2"}), false); + const importMatch = TagUtils.Tag("tags~(^|.*;)amenity=public_bookcase($|;.*)") + equal(importMatch.matchesProperties({"tags": "amenity=public_bookcase;name=test"}), true) + equal(importMatch.matchesProperties({"tags": "amenity=public_bookcase"}), true) + equal(importMatch.matchesProperties({"tags": "name=test;amenity=public_bookcase"}), true) + equal(importMatch.matchesProperties({"tags": "amenity=bench"}), false) + })], ["Is equivalent test", (() => { @@ -517,13 +523,13 @@ export default class TagSpec extends T { T.isTrue(filter.matchesProperties(properties), "Lazy value not matched") } ], - ["test date comparison",() => { - - const filter = TagUtils.Tag("date_created<2022-01-07") - T.isFalse(filter.matchesProperties({"date_created":"2022-01-08"}), "Date comparison: expected a match") - T.isTrue(filter.matchesProperties({"date_created":"2022-01-01"}), "Date comparison: didn't expect a match") + ["test date comparison", () => { - }]]); + const filter = TagUtils.Tag("date_created<2022-01-07") + T.isFalse(filter.matchesProperties({"date_created": "2022-01-08"}), "Date comparison: expected a match") + T.isTrue(filter.matchesProperties({"date_created": "2022-01-01"}), "Date comparison: didn't expect a match") + + }]]); } } diff --git a/test/TestAll.ts b/test/TestAll.ts index 65050367eb..de92118643 100644 --- a/test/TestAll.ts +++ b/test/TestAll.ts @@ -17,12 +17,14 @@ import ReplaceGeometrySpec from "./ReplaceGeometry.spec"; import LegacyThemeLoaderSpec from "./LegacyThemeLoader.spec"; import T from "./TestHelper"; import CreateNoteImportLayerSpec from "./CreateNoteImportLayer.spec"; +import ValidatedTextFieldTranslationsSpec from "./ValidatedTextFieldTranslations.spec"; +import CreateCacheSpec from "./CreateCache.spec"; +import CodeQualitySpec from "./CodeQuality.spec"; async function main() { - ScriptUtils.fixUtils() - const allTests : T[] = [ + const allTests: T[] = [ new OsmObjectSpec(), new TagSpec(), new ImageAttributionSpec(), @@ -38,12 +40,17 @@ async function main() { new ActorsSpec(), new ReplaceGeometrySpec(), new LegacyThemeLoaderSpec(), - new CreateNoteImportLayerSpec() + new CreateNoteImportLayerSpec(), + new ValidatedTextFieldTranslationsSpec(), + new CreateCacheSpec(), + new CodeQualitySpec() ] + ScriptUtils.fixUtils(); + const realDownloadFunc = Utils.externalDownloadFunction; Utils.externalDownloadFunction = async (url) => { console.error("Fetching ", url, "blocked in tests, use Utils.injectJsonDownloadForTests") - const data = await ScriptUtils.DownloadJSON(url) + const data = await realDownloadFunc(url) console.log("\n\n ----------- \nBLOCKED DATA\n Utils.injectJsonDownloadForTests(\n" + " ", JSON.stringify(url), ", \n", " ", JSON.stringify(data), "\n )\n------------------\n\n") @@ -58,9 +65,9 @@ async function main() { let testsToRun = allTests if (args.length > 0) { args = args.map(a => a.toLowerCase()).map(a => { - if(!a.endsWith("spec")){ + if (!a.endsWith("spec")) { return a + "spec" - }else{ + } else { return a; } }) @@ -76,7 +83,7 @@ async function main() { for (let i = 0; i < testsToRun.length; i++) { const test = testsToRun[i]; console.log(" Running test", i, "/", testsToRun.length, test.name) - + allFailures.push(...(await test.Run() ?? [])) console.log("OK!") } diff --git a/test/TestHelper.ts b/test/TestHelper.ts index 9da668f32b..c29d68a9ac 100644 --- a/test/TestHelper.ts +++ b/test/TestHelper.ts @@ -45,9 +45,9 @@ export default class T { throw `ListIdentical failed: expected a list of length ${expected.length} but got a list of length ${actual.length}` } for (let i = 0; i < expected.length; i++) { - if(expected[i] !== undefined && expected[i]["length"] !== undefined ){ - T.listIdentical( expected[i], actual[i]) - }else if (expected[i] !== actual[i]) { + if (expected[i] !== undefined && expected[i]["length"] !== undefined) { + T.listIdentical(expected[i], actual[i]) + } else if (expected[i] !== actual[i]) { throw `ListIdentical failed at index ${i}: expected ${expected[i]} but got ${actual[i]}` } } diff --git a/test/Theme.spec.ts b/test/Theme.spec.ts index 39f0dfa47e..e331af3a00 100644 --- a/test/Theme.spec.ts +++ b/test/Theme.spec.ts @@ -3,53 +3,52 @@ import * as assert from "assert"; import {LayoutConfigJson} from "../Models/ThemeConfig/Json/LayoutConfigJson"; import LayoutConfig from "../Models/ThemeConfig/LayoutConfig"; import * as bookcaseLayer from "../assets/generated/layers/public_bookcase.json" -import {PrepareTheme} from "../Models/ThemeConfig/Conversion/LegacyJsonConvert"; import {TagRenderingConfigJson} from "../Models/ThemeConfig/Json/TagRenderingConfigJson"; import {LayerConfigJson} from "../Models/ThemeConfig/Json/LayerConfigJson"; import Constants from "../Models/Constants"; +import {PrepareTheme} from "../Models/ThemeConfig/Conversion/PrepareTheme"; export default class ThemeSpec extends T { constructor() { - super( [ - ["Nested overrides work", () => { + super([ + ["Nested overrides work", () => { - let themeConfigJson: LayoutConfigJson = { - description: "Descr", - icon: "", - language: ["en"], - layers: [ - { - builtin: "public_bookcase", - override: { - source: { - geoJson: "xyz" - } + let themeConfigJson: LayoutConfigJson = { + description: "Descr", + icon: "", + layers: [ + { + builtin: "public_bookcase", + override: { + source: { + geoJson: "xyz" } } - ], - maintainer: "", - startLat: 0, - startLon: 0, - startZoom: 0, - title: { - en: "Title" - }, - version: "", - id: "test" - } - // TOtal cheat: disable the default layers: - Constants.added_by_default.splice(0, Constants.added_by_default.length) - const sharedLayers = new Map() - sharedLayers.set("public_bookcase", bookcaseLayer["default"]) - themeConfigJson = new PrepareTheme().convertStrict({ - tagRenderings: new Map(), - sharedLayers: sharedLayers - }, themeConfigJson, "test") - const themeConfig = new LayoutConfig(themeConfigJson); - assert.equal("xyz", themeConfig.layers[0].source.geojsonSource) + } + ], + maintainer: "", + startLat: 0, + startLon: 0, + startZoom: 0, + title: { + en: "Title" + }, + version: "", + id: "test" + } + // TOtal cheat: disable the default layers: + Constants.added_by_default.splice(0, Constants.added_by_default.length) + const sharedLayers = new Map() + sharedLayers.set("public_bookcase", bookcaseLayer["default"]) + themeConfigJson = new PrepareTheme({ + tagRenderings: new Map(), + sharedLayers: sharedLayers + }).convertStrict( themeConfigJson, "test") + const themeConfig = new LayoutConfig(themeConfigJson); + assert.equal("xyz", themeConfig.layers[0].source.geojsonSource) - }] - ]); + }] + ]); } } diff --git a/test/TileFreshnessCalculator.spec.ts b/test/TileFreshnessCalculator.spec.ts index b431788bb3..009ba2b90c 100644 --- a/test/TileFreshnessCalculator.spec.ts +++ b/test/TileFreshnessCalculator.spec.ts @@ -6,7 +6,7 @@ import {equal} from "assert"; export default class TileFreshnessCalculatorSpec extends T { constructor() { - super( [ + super([ [ "TileFresnessTests", () => { diff --git a/test/Units.spec.ts b/test/Units.spec.ts index c93d57f84e..a0851fd8b2 100644 --- a/test/Units.spec.ts +++ b/test/Units.spec.ts @@ -6,7 +6,7 @@ import {Denomination} from "../Models/Denomination"; export default class UnitsSpec extends T { constructor() { - super( [ + super([ ["Simple canonicalize", () => { const unit = new Denomination({ diff --git a/test/Utils.spec.ts b/test/Utils.spec.ts index 99559a534f..0d0d7ebf4d 100644 --- a/test/Utils.spec.ts +++ b/test/Utils.spec.ts @@ -39,7 +39,7 @@ export default class UtilsSpec extends T { } constructor() { - super( [ + super([ ["Sort object keys", () => { const o = { x: 'x', diff --git a/test/ValidatedTextFieldTranslations.spec.ts b/test/ValidatedTextFieldTranslations.spec.ts new file mode 100644 index 0000000000..1bb2827492 --- /dev/null +++ b/test/ValidatedTextFieldTranslations.spec.ts @@ -0,0 +1,27 @@ +import T from "./TestHelper"; +import ValidatedTextField from "../UI/Input/ValidatedTextField"; +import Translations from "../UI/i18n/Translations"; + +export default class ValidatedTextFieldTranslationsSpec extends T { + constructor() { + super([ + ["Test all", () => { + const ts = Translations.t.validation; + console.log("Hello world!") + const allErrors = Array.from(ValidatedTextField.allTypes.keys()).map(key => { + const errors = [] + const t = ts[key] + if (t === undefined) { + errors.push("No tranlations at all for " + key) + } + return errors; + }) + const errs = [].concat(...allErrors) + if (errs.length > 0) { + errs.forEach(e => console.log(e)) + // throw errs.join("\n") + } + }] + ]); + } +} \ No newline at end of file diff --git a/test/Wikidata.spec.test.ts b/test/Wikidata.spec.test.ts index 47acd1a754..903da0ad7a 100644 --- a/test/Wikidata.spec.test.ts +++ b/test/Wikidata.spec.test.ts @@ -7255,533 +7255,73 @@ export default class WikidataSpecTest extends T { } constructor() { - super( [ - ["Download Lion", async () => { + super([ + ["Download Lion", async () => { + + Utils.injectJsonDownloadForTests( + "https://www.wikidata.org/wiki/Special:EntityData/Q140.json", + WikidataSpecTest.Q140 + ) + + + const wikidata = await Wikidata.LoadWikidataEntryAsync("Q140") + T.equals(2, wikidata.claims.get("P18").size) + + + }], + ["download wikidata", + async () => { Utils.injectJsonDownloadForTests( - "https://www.wikidata.org/wiki/Special:EntityData/Q140.json", - WikidataSpecTest.Q140 - ) - - - const wikidata = await Wikidata.LoadWikidataEntryAsync("Q140") - T.equals(2, wikidata.claims.get("P18").size) - - - }], - ["download wikidata", - async () => { - - Utils.injectJsonDownloadForTests( - "https://www.wikidata.org/wiki/Special:EntityData/Q14517013.json", - { - "entities": { - "Q14517013": { - "pageid": 16187848, - "ns": 0, - "title": "Q14517013", - "lastrevid": 1408823680, - "modified": "2021-04-26T07:35:01Z", - "type": "item", - "id": "Q14517013", - "labels": { - "nl": {"language": "nl", "value": "Vredesmolen"}, - "en": {"language": "en", "value": "Peace Mill"} - }, - "descriptions": {"nl": {"language": "nl", "value": "molen in West-Vlaanderen"}}, - "aliases": {}, - "claims": { - "P625": [{ - "mainsnak": { - "snaktype": "value", - "property": "P625", - "hash": "d86538f14e8cca00bbf30fb029829aacbc6903a0", - "datavalue": { - "value": { - "latitude": 50.99444, - "longitude": 2.92528, - "altitude": null, - "precision": 0.0001, - "globe": "http://www.wikidata.org/entity/Q2" - }, "type": "globecoordinate" - }, - "datatype": "globe-coordinate" - }, - "type": "statement", - "id": "Q14517013$DBFBFD69-F54D-4C92-A7F4-A44F876E5776", - "rank": "normal", - "references": [{ - "hash": "732ec1c90a6f0694c7db9a71bf09fe7f2b674172", - "snaks": { - "P143": [{ - "snaktype": "value", - "property": "P143", - "hash": "9123b0de1cc9c3954366ba797d598e4e1ea4146f", - "datavalue": { - "value": { - "entity-type": "item", - "numeric-id": 10000, - "id": "Q10000" - }, "type": "wikibase-entityid" - }, - "datatype": "wikibase-item" - }] - }, - "snaks-order": ["P143"] - }] - }], - "P17": [{ - "mainsnak": { - "snaktype": "value", - "property": "P17", - "hash": "c2859f311753176d6bdfa7da54ceeeac7acb52c8", - "datavalue": { - "value": { - "entity-type": "item", - "numeric-id": 31, - "id": "Q31" - }, "type": "wikibase-entityid" - }, - "datatype": "wikibase-item" - }, - "type": "statement", - "id": "Q14517013$C12E4DA5-44E1-41ED-BF3D-C84381246429", - "rank": "normal" - }], - "P18": [{ - "mainsnak": { - "snaktype": "value", - "property": "P18", - "hash": "af765166ecaa7d01ea800812b5b356886b8849a0", - "datavalue": { - "value": "Klerken Vredesmolen R01.jpg", - "type": "string" - }, - "datatype": "commonsMedia" - }, - "type": "statement", - "id": "Q14517013$5291801E-11BE-4CE7-8F42-D0D6A120F390", - "rank": "normal" - }], - "P2867": [{ - "mainsnak": { - "snaktype": "value", - "property": "P2867", - "hash": "b1c627972ba2cc71e3567d2fb56cb5f90dd64007", - "datavalue": {"value": "893", "type": "string"}, - "datatype": "external-id" - }, - "type": "statement", - "id": "Q14517013$2aff9dcd-4d24-cd92-b5af-f6268425695f", - "rank": "normal" - }], - "P31": [{ - "mainsnak": { - "snaktype": "value", - "property": "P31", - "hash": "9b48263bb51c506553aac2281ae331353b5c9002", - "datavalue": { - "value": { - "entity-type": "item", - "numeric-id": 38720, - "id": "Q38720" - }, "type": "wikibase-entityid" - }, - "datatype": "wikibase-item" - }, - "type": "statement", - "id": "Q14517013$46dd9d89-4999-eee6-20a4-c4f6650b1d9c", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P31", - "hash": "a1d6f3409c57de0361c68263c9397a99dabe19ea", - "datavalue": { - "value": { - "entity-type": "item", - "numeric-id": 3851468, - "id": "Q3851468" - }, "type": "wikibase-entityid" - }, - "datatype": "wikibase-item" - }, - "type": "statement", - "id": "Q14517013$C83A8B1F-7798-493A-86C9-EC0EFEE356B3", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P31", - "hash": "ee5ba9185bdf9f0eb80b52e1cdc70c5883fac95a", - "datavalue": { - "value": { - "entity-type": "item", - "numeric-id": 623605, - "id": "Q623605" - }, "type": "wikibase-entityid" - }, - "datatype": "wikibase-item" - }, - "type": "statement", - "id": "Q14517013$CF74DC2E-6814-4755-9BAD-6EE9FEF637DD", - "rank": "normal" - }], - "P2671": [{ - "mainsnak": { - "snaktype": "value", - "property": "P2671", - "hash": "83fb38a3c6407f7d0d7bb051d1c31cea8ae26975", - "datavalue": {"value": "/g/121cb15z", "type": "string"}, - "datatype": "external-id" - }, - "type": "statement", - "id": "Q14517013$E6FFEF32-0131-42FD-9C66-1A406B68059A", - "rank": "normal" - }] - }, - "sitelinks": { - "commonswiki": { - "site": "commonswiki", - "title": "Category:Vredesmolen, Klerken", - "badges": [], - "url": "https://commons.wikimedia.org/wiki/Category:Vredesmolen,_Klerken" - }, - "nlwiki": { - "site": "nlwiki", - "title": "Vredesmolen", - "badges": [], - "url": "https://nl.wikipedia.org/wiki/Vredesmolen" - } - } - } - } - } - ) - - - const wdata = await Wikidata.LoadWikidataEntryAsync(14517013) - T.isTrue(wdata.wikisites.has("nl"), "dutch for wikisite not found") - equal("Vredesmolen", wdata.wikisites.get("nl")) - } - - ], - ["Download Prince", async () => { - - Utils.injectJsonDownloadForTests( - "https://www.wikidata.org/wiki/Special:EntityData/Q2747456.json", + "https://www.wikidata.org/wiki/Special:EntityData/Q14517013.json", { "entities": { - "Q2747456": { - "pageid": 2638026, + "Q14517013": { + "pageid": 16187848, "ns": 0, - "title": "Q2747456", - "lastrevid": 1507566187, - "modified": "2021-10-03T20:26:12Z", + "title": "Q14517013", + "lastrevid": 1408823680, + "modified": "2021-04-26T07:35:01Z", "type": "item", - "id": "Q2747456", + "id": "Q14517013", "labels": { - "nl": {"language": "nl", "value": "prins"}, - "am": {"language": "am", "value": "\u120d\u12d1\u120d"}, - "ar": {"language": "ar", "value": "\u0623\u0645\u064a\u0631"}, - "be": {"language": "be", "value": "\u043f\u0440\u044b\u043d\u0446"}, - "bg": {"language": "bg", "value": "\u043f\u0440\u0438\u043d\u0446"}, - "ca": {"language": "ca", "value": "pr\u00edncep"}, - "cs": {"language": "cs", "value": "princ"}, - "cy": {"language": "cy", "value": "tywysog"}, - "da": {"language": "da", "value": "prins"}, - "de": {"language": "de", "value": "Prinz"}, - "en": {"language": "en", "value": "prince"}, - "eo": {"language": "eo", "value": "princo"}, - "es": {"language": "es", "value": "pr\u00edncipe"}, - "fa": {"language": "fa", "value": "\u0634\u0627\u0647\u0632\u0627\u062f\u0647"}, - "fi": {"language": "fi", "value": "prinssi"}, - "fr": {"language": "fr", "value": "prince"}, - "he": {"language": "he", "value": "\u05e0\u05e1\u05d9\u05da"}, - "hr": {"language": "hr", "value": "princ"}, - "id": {"language": "id", "value": "pangeran"}, - "it": {"language": "it", "value": "principe"}, - "ja": {"language": "ja", "value": "\u30d7\u30ea\u30f3\u30b9"}, - "ka": { - "language": "ka", - "value": "\u10e3\u10e4\u10da\u10d8\u10e1\u10ec\u10e3\u10da\u10d8" - }, - "lv": {"language": "lv", "value": "princis"}, - "ms": {"language": "ms", "value": "putera"}, - "ne": { - "language": "ne", - "value": "\u0930\u093e\u091c\u0915\u0941\u092e\u093e\u0930" - }, - "nn": {"language": "nn", "value": "prins"}, - "pt": {"language": "pt", "value": "pr\u00edncipe"}, - "ro": {"language": "ro", "value": "prin\u021b"}, - "ru": {"language": "ru", "value": "\u043f\u0440\u0438\u043d\u0446"}, - "scn": {"language": "scn", "value": "pr\u00ecncipi"}, - "sk": {"language": "sk", "value": "princ"}, - "sl": {"language": "sl", "value": "princ"}, - "sv": {"language": "sv", "value": "prins"}, - "tr": {"language": "tr", "value": "prens"}, - "uk": {"language": "uk", "value": "\u043f\u0440\u0438\u043d\u0446"}, - "vec": {"language": "vec", "value": "principe"}, - "vi": {"language": "vi", "value": "v\u01b0\u01a1ng"}, - "ko": {"language": "ko", "value": "\uc655\uc790"}, - "th": {"language": "th", "value": "\u0e40\u0e08\u0e49\u0e32"}, - "la": {"language": "la", "value": "princeps"}, - "gl": {"language": "gl", "value": "pr\u00edncipe"}, - "nb": {"language": "nb", "value": "prins"}, - "el": { - "language": "el", - "value": "\u03c0\u03c1\u03af\u03b3\u03ba\u03b9\u03c0\u03b1\u03c2" - }, - "is": {"language": "is", "value": "prins"}, - "pl": {"language": "pl", "value": "ksi\u0105\u017c\u0119 (princeps)"}, - "nan": {"language": "nan", "value": "th\u00e2u-l\u00e2ng"}, - "be-tarask": { - "language": "be-tarask", - "value": "\u043f\u0440\u044b\u043d\u0446" - }, - "ur": {"language": "ur", "value": "\u0634\u06c1\u0632\u0627\u062f\u06c1"}, - "sco": {"language": "sco", "value": "prince"}, - "zh": {"language": "zh", "value": "\u738b\u7235"}, - "sr": {"language": "sr", "value": "\u043f\u0440\u0438\u043d\u0446"}, - "sh": {"language": "sh", "value": "princ"}, - "hy": { - "language": "hy", - "value": "\u0561\u0580\u0584\u0561\u0575\u0561\u0566\u0576" - }, - "et": {"language": "et", "value": "prints"}, - "bxr": { - "language": "bxr", - "value": "\u0445\u0430\u043d \u0445\u04af\u0431\u04af\u04af\u043d" - }, - "fy": {"language": "fy", "value": "prins"}, - "diq": {"language": "diq", "value": "prens"}, - "ba": {"language": "ba", "value": "\u043f\u0440\u0438\u043d\u0446"}, - "eu": {"language": "eu", "value": "printze"}, - "gd": {"language": "gd", "value": "prionnsa"}, - "gu": {"language": "gu", "value": "\u0a95\u0ac1\u0a82\u0ab5\u0ab0"}, - "lb": {"language": "lb", "value": "Pr\u00ebnz"}, - "ga": {"language": "ga", "value": "prionsa"}, - "hu": {"language": "hu", "value": "herceg"}, - "su": {"language": "su", "value": "pang\u00e9ran"}, - "ast": {"language": "ast", "value": "pr\u00edncipe"}, - "rmy": {"language": "rmy", "value": "rayon"}, - "yue": {"language": "yue", "value": "\u89aa\u738b"}, - "jv": {"language": "jv", "value": "pang\u00e9ran"}, - "zh-hant": {"language": "zh-hant", "value": "\u738b\u7235"}, - "se": {"language": "se", "value": "prinsa"}, - "smj": {"language": "smj", "value": "prinssa"}, - "smn": {"language": "smn", "value": "prinss\u00e2"}, - "sms": {"language": "sms", "value": "prinss"}, - "az": {"language": "az", "value": "Prens"}, - "wuu": {"language": "wuu", "value": "\u738b\u7235"}, - "yi": {"language": "yi", "value": "\u05e4\u05e8\u05d9\u05e0\u05e5"} - }, - "descriptions": { - "fr": {"language": "fr", "value": "titre de noblesse"}, - "es": {"language": "es", "value": "t\u00edtulo nobiliario"}, - "en": { - "language": "en", - "value": "son of a prince, king, queen, emperor or empress, or other high-ranking person (such as a grand duke)" - }, - "el": { - "language": "el", - "value": "\u03c4\u03af\u03c4\u03bb\u03bf\u03c2 \u03b5\u03c5\u03b3\u03b5\u03bd\u03b5\u03af\u03b1\u03c2" - }, - "de": { - "language": "de", - "value": "Adels-Titel, m\u00e4nnliches Mitglied der K\u00f6nigsfamilie" - }, - "pl": {"language": "pl", "value": "tytu\u0142 szlachecki"}, - "ca": {"language": "ca", "value": "t\u00edtol de noblesa"}, - "vi": { - "language": "vi", - "value": "con trai c\u1ee7a ho\u00e0ng t\u1eed, vua, ho\u00e0ng h\u1eadu, ho\u00e0ng \u0111\u1ebf, ho\u00e0ng h\u1eadu ho\u1eb7c nh\u1eefng ng\u01b0\u1eddi c\u00f3 \u0111\u1ecba v\u1ecb cao kh\u00e1c" - }, - "da": {"language": "da", "value": "kongelig titel"}, - "eu": {"language": "eu", "value": "noblezia titulu"}, - "hu": {"language": "hu", "value": "nemesi c\u00edm"}, - "zh": {"language": "zh", "value": "\u8cb4\u65cf\u982d\u929c"}, - "ar": { - "language": "ar", - "value": "\u0644\u0642\u0628 \u0646\u0628\u064a\u0644" - }, - "ast": {"language": "ast", "value": "t\u00edtulu de nobleza"}, - "ru": {"language": "ru", "value": "\u0442\u0438\u0442\u0443\u043b"}, - "be-tarask": { - "language": "be-tarask", - "value": "\u0448\u043b\u044f\u0445\u0435\u0446\u043a\u0456 \u0442\u044b\u0442\u0443\u043b" - }, - "zh-hant": {"language": "zh-hant", "value": "\u8cb4\u65cf\u982d\u929c"}, - "it": { - "language": "it", - "value": "figlio di un principe, re, regina, imperatore o imperatrice o altra persona di alto rango (come un granduca)" - }, - "nl": { - "language": "nl", - "value": "zoon van een prins(es), koning(in), keizer(in) of andere persoon met een adellijke rang (zoals een groothertog)" - }, - "ro": { - "language": "ro", - "value": "titlu nobiliar acordat \u00een general membrilor unei familii imperiale, regale, princiare etc." - }, - "lb": {"language": "lb", "value": "Adelstitel"}, - "id": { - "language": "id", - "value": "putra seorang pangeran, raja, ratu, kaisar atau permaisuri, atau orang berpangkat tinggi lainnya (seperti adipati agung)" - }, - "he": { - "language": "he", - "value": "\u05ea\u05d5\u05d0\u05e8 \u05d0\u05e6\u05d5\u05dc\u05d4" - }, - "fi": { - "language": "fi", - "value": "ylh\u00e4isaatelisarvo, monesti monarkin poika" - }, - "cs": { - "language": "cs", - "value": "titul potomka prince/princezny, kn\u00ed\u017eete/kn\u011b\u017eny, (velko)v\u00e9vody/v\u00e9vodkyn\u011b, kr\u00e1le/kr\u00e1lovny \u010di c\u00edsa\u0159e/c\u00edsa\u0159ovny" - }, - "uk": { - "language": "uk", - "value": "\u0434\u0438\u0442\u0438\u043d\u0430 \u043f\u0440\u0438\u043d\u0446\u0430(-\u0435\u0441\u0438), \u043a\u043e\u0440\u043e\u043b\u044f (\u043a\u043e\u0440\u043e\u043b\u0435\u0432\u0438), \u0456\u043d\u043c\u0435\u0440\u0430\u0442\u043e\u0440\u0430(-\u043a\u0438) \u0447\u0438 \u0456\u043d\u0448\u043e\u0457 \u0437\u043d\u0430\u0442\u043d\u043e\u0457 \u043e\u0441\u043e\u0431\u0438" - } - }, - "aliases": { - "es": [{"language": "es", "value": "princesa"}, { - "language": "es", - "value": "principe" - }], - "ru": [{ - "language": "ru", - "value": "\u043f\u0440\u0438\u043d\u0446\u0435\u0441\u0441\u0430" - }, {"language": "ru", "value": "\u0446\u0430\u0440\u0435\u0432\u0438\u0447"}], - "ca": [{"language": "ca", "value": "princesa"}], - "ba": [{ - "language": "ba", - "value": "\u043f\u0440\u0438\u043d\u0446\u0435\u0441\u0441\u0430" - }], - "gu": [{ - "language": "gu", - "value": "\u0aae\u0ab9\u0abe\u0ab0\u0abe\u0a9c \u0a95\u0ac1\u0a82\u0ab5\u0ab0" - }, {"language": "gu", "value": "\u0aae. \u0a95\u0ac1."}, { - "language": "gu", - "value": "\u0a8f\u0aae. \u0a95\u0ac7." - }], - "he": [{"language": "he", "value": "\u05e0\u05e1\u05d9\u05db\u05d4"}], - "de": [{"language": "de", "value": "Prinzessin"}], - "ast": [{"language": "ast", "value": "princesa"}], - "be-tarask": [{ - "language": "be-tarask", - "value": "\u043f\u0440\u044b\u043d\u0446\u044d\u0441\u0430" - }], - "nl": [{"language": "nl", "value": "prinsje"}], - "it": [{"language": "it", "value": "principessa"}], - "se": [{"language": "se", "value": "gonagasb\u00e1rdni"}], - "pl": [{"language": "pl", "value": "ksi\u0105\u017c\u0119"}], - "vi": [{"language": "vi", "value": "v\u01b0\u01a1ng t\u01b0\u1edbc"}], - "cs": [{"language": "cs", "value": "princezna"}] + "nl": {"language": "nl", "value": "Vredesmolen"}, + "en": {"language": "en", "value": "Peace Mill"} }, + "descriptions": {"nl": {"language": "nl", "value": "molen in West-Vlaanderen"}}, + "aliases": {}, "claims": { - "P31": [{ + "P625": [{ "mainsnak": { "snaktype": "value", - "property": "P31", - "hash": "a456372c8e6a681381eca31ab0662159db12ab1e", + "property": "P625", + "hash": "d86538f14e8cca00bbf30fb029829aacbc6903a0", "datavalue": { "value": { - "entity-type": "item", - "numeric-id": 355567, - "id": "Q355567" - }, "type": "wikibase-entityid" + "latitude": 50.99444, + "longitude": 2.92528, + "altitude": null, + "precision": 0.0001, + "globe": "http://www.wikidata.org/entity/Q2" + }, "type": "globecoordinate" }, - "datatype": "wikibase-item" + "datatype": "globe-coordinate" }, "type": "statement", - "id": "q2747456$ff8e76c2-47b8-d2b7-a192-9af298c36c8e", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P31", - "hash": "0ec7ed0637d631867884c8c0553e2de4b90b63ca", - "datavalue": { - "value": { - "entity-type": "item", - "numeric-id": 3320743, - "id": "Q3320743" - }, "type": "wikibase-entityid" - }, - "datatype": "wikibase-item" - }, - "type": "statement", - "id": "Q2747456$7b3a375d-48d8-18db-12db-9be699a1c34f", - "rank": "normal" - }], - "P910": [{ - "mainsnak": { - "snaktype": "value", - "property": "P910", - "hash": "ee5be4ad914a3f79dc30c6a6ac320404d7b6bf65", - "datavalue": { - "value": { - "entity-type": "item", - "numeric-id": 7214172, - "id": "Q7214172" - }, "type": "wikibase-entityid" - }, - "datatype": "wikibase-item" - }, - "type": "statement", - "id": "Q2747456$92971E9D-FA6B-4CFA-88C9-91EF27DDE2DC", - "rank": "normal" - }], - "P508": [{ - "mainsnak": { - "snaktype": "value", - "property": "P508", - "hash": "36109efdac97e7f035d386101fb85a397380f9ee", - "datavalue": {"value": "8468", "type": "string"}, - "datatype": "external-id" - }, - "type": "statement", - "id": "Q2747456$cdaad4c5-4ec8-54b2-3dac-4db04f994fda", - "rank": "normal" - }], - "P1001": [{ - "mainsnak": { - "snaktype": "somevalue", - "property": "P1001", - "hash": "be44552ae528f03d39720570854717fa0ebedcef", - "datatype": "wikibase-item" - }, - "type": "statement", - "id": "Q2747456$5eea869d-4f5d-99ee-90bb-471cccbf4b84", - "rank": "normal" - }], - "P373": [{ - "mainsnak": { - "snaktype": "value", - "property": "P373", - "hash": "e766c6be546f129979614c185bb172cd237a626a", - "datavalue": {"value": "Princes", "type": "string"}, - "datatype": "string" - }, - "type": "statement", - "id": "Q2747456$D4EEC77F-1F89-46DA-BD9E-FA15F29B686A", + "id": "Q14517013$DBFBFD69-F54D-4C92-A7F4-A44F876E5776", "rank": "normal", "references": [{ - "hash": "fa278ebfc458360e5aed63d5058cca83c46134f1", + "hash": "732ec1c90a6f0694c7db9a71bf09fe7f2b674172", "snaks": { "P143": [{ "snaktype": "value", "property": "P143", - "hash": "e4f6d9441d0600513c4533c672b5ab472dc73694", + "hash": "9123b0de1cc9c3954366ba797d598e4e1ea4146f", "datavalue": { "value": { "entity-type": "item", - "numeric-id": 328, - "id": "Q328" + "numeric-id": 10000, + "id": "Q10000" }, "type": "wikibase-entityid" }, "datatype": "wikibase-item" @@ -7790,305 +7330,785 @@ export default class WikidataSpecTest extends T { "snaks-order": ["P143"] }] }], - "P2521": [{ + "P17": [{ "mainsnak": { "snaktype": "value", - "property": "P2521", - "hash": "3ac9f3b0f1b60d0fbeac8ce587b3f74470a2ea00", - "datavalue": { - "value": {"text": "princesse", "language": "fr"}, - "type": "monolingualtext" - }, - "datatype": "monolingualtext" - }, - "type": "statement", - "id": "Q2747456$9c9a7d8e-4fea-87b1-0d41-7efd98922665", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P2521", - "hash": "8eef33f2c1e8a583fd498d380838e5f72cc06491", - "datavalue": { - "value": {"text": "princess", "language": "en"}, - "type": "monolingualtext" - }, - "datatype": "monolingualtext" - }, - "type": "statement", - "id": "Q2747456$e0281f91-4b2c-053b-9900-57d12d7d4211", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P2521", - "hash": "1a86a592d40223b73b7f0686672650d48c997806", - "datavalue": { - "value": {"text": "princino", "language": "eo"}, - "type": "monolingualtext" - }, - "datatype": "monolingualtext" - }, - "type": "statement", - "id": "Q2747456$1cb248ea-490c-b5f7-b011-06845ccac2b4", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P2521", - "hash": "abbaf9a41f548f9a7c58e38f91db34cb370c876a", - "datavalue": { - "value": {"text": "prinses", "language": "nl"}, - "type": "monolingualtext" - }, - "datatype": "monolingualtext" - }, - "type": "statement", - "id": "Q2747456$1d636ed1-4f4d-0851-ca7f-66c847e7c4be", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P2521", - "hash": "37efe8398a055d9ace75c625cdc286b9aadb5ab0", - "datavalue": { - "value": {"text": "princesa", "language": "ca"}, - "type": "monolingualtext" - }, - "datatype": "monolingualtext" - }, - "type": "statement", - "id": "Q2747456$316855ff-4047-0ffb-76fb-90057b0840ef", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P2521", - "hash": "7810d8cabaaaeb41fad675cd9c3bfb39ab41d00f", - "datavalue": { - "value": { - "text": "\u043f\u0440\u0438\u043d\u0446\u0435\u0441\u0441\u0430", - "language": "ru" - }, "type": "monolingualtext" - }, - "datatype": "monolingualtext" - }, - "type": "statement", - "id": "Q2747456$fa60cb7b-460d-c8ff-b99c-c2bf515b12a0", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P2521", - "hash": "e18f093988121762e3b247104eb626501d14ad2e", - "datavalue": { - "value": { - "text": "\u05e0\u05e1\u05d9\u05db\u05d4", - "language": "he" - }, "type": "monolingualtext" - }, - "datatype": "monolingualtext" - }, - "type": "statement", - "id": "Q2747456$03851c85-4db0-ff39-7608-1dc63852b6c8", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P2521", - "hash": "3f8c2d8b4e28c17d49cc1bff30990657e0ab485a", - "datavalue": { - "value": { - "text": "n\u1eef v\u01b0\u01a1ng", - "language": "vi" - }, "type": "monolingualtext" - }, - "datatype": "monolingualtext" - }, - "type": "statement", - "id": "Q2747456$6115764d-4391-6997-ecb2-7768f18b2b45", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P2521", - "hash": "106d96fa708baf606b060bdc8c6b545f477eee32", - "datavalue": { - "value": {"text": "Prinzessin", "language": "de"}, - "type": "monolingualtext" - }, - "datatype": "monolingualtext" - }, - "type": "statement", - "id": "Q2747456$6f2c129e-413c-dead-3404-146368643ab8", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P2521", - "hash": "69a2a841f26ab197dca7c5a6e2dd595b67e4188c", - "datavalue": { - "value": { - "text": "\u03c0\u03c1\u03b9\u03b3\u03ba\u03af\u03c0\u03b9\u03c3\u03c3\u03b1", - "language": "el" - }, "type": "monolingualtext" - }, - "datatype": "monolingualtext" - }, - "type": "statement", - "id": "Q2747456$9b901d48-4e41-ba93-344e-299c69a27ac6", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P2521", - "hash": "560ecce28fcadaf0e2b8a584519fe94ffbf25ec1", - "datavalue": { - "value": {"text": "princesa", "language": "ast"}, - "type": "monolingualtext" - }, - "datatype": "monolingualtext" - }, - "type": "statement", - "id": "Q2747456$520756e7-476d-a435-bc1c-0a56fa7851a1", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P2521", - "hash": "44f2eb3f4fee6f4b4b3b992407bda0f6caed2536", - "datavalue": { - "value": {"text": "tywysoges", "language": "cy"}, - "type": "monolingualtext" - }, - "datatype": "monolingualtext" - }, - "type": "statement", - "id": "Q2747456$698beb10-4e2c-b535-a89b-e29210f2be75", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P2521", - "hash": "006e13a77c798832882c84070fe8f76cdc48611c", - "datavalue": { - "value": { - "text": "\u0623\u0645\u064a\u0631\u0629", - "language": "ar" - }, "type": "monolingualtext" - }, - "datatype": "monolingualtext" - }, - "type": "statement", - "id": "Q2747456$b75e51e5-48e5-1f4c-d99c-d83dde03e91d", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P2521", - "hash": "25eb24e42c0a566023ceb354777cb1ec14492ef1", - "datavalue": { - "value": { - "text": "\u043f\u0440\u044b\u043d\u0446\u044d\u0441\u0430", - "language": "be-tarask" - }, "type": "monolingualtext" - }, - "datatype": "monolingualtext" - }, - "type": "statement", - "id": "Q2747456$075f0038-475e-e4ba-9801-52aac2067799", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P2521", - "hash": "e72b1dd598ce40db3f7e9b195a3e9345b4ae4ba5", - "datavalue": { - "value": {"text": "princezna", "language": "cs"}, - "type": "monolingualtext" - }, - "datatype": "monolingualtext" - }, - "type": "statement", - "id": "Q2747456$1085cbb9-4cd4-8a2f-a4c7-6f29fafea206", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P2521", - "hash": "70d88bc577587e2732cf37a66dfd0920b175211a", - "datavalue": { - "value": {"text": "prinsesse", "language": "da"}, - "type": "monolingualtext" - }, - "datatype": "monolingualtext" - }, - "type": "statement", - "id": "Q2747456$33d2e452-4ca2-8dea-4f98-242c53ef1811", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P2521", - "hash": "eebf786f7c2b0963b9db4c2876bb24c6afc4ce1c", - "datavalue": { - "value": {"text": "principessa", "language": "it"}, - "type": "monolingualtext" - }, - "datatype": "monolingualtext" - }, - "type": "statement", - "id": "Q2747456$3098804a-4758-d07f-8443-24ebe96c56ec", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P2521", - "hash": "649307549f96bfe54f16e9130f014bf018cc46c4", - "datavalue": { - "value": { - "text": "\u043f\u0440\u0438\u043d\u0446\u0435\u0441\u0430", - "language": "uk" - }, "type": "monolingualtext" - }, - "datatype": "monolingualtext" - }, - "type": "statement", - "id": "Q2747456$ff433d7c-4e07-f7c0-14af-3b3f31f8ae9a", - "rank": "normal" - }], - "P3827": [{ - "mainsnak": { - "snaktype": "value", - "property": "P3827", - "hash": "22ee9c46325acd0a1ca54f27bff5d75331211f8a", - "datavalue": {"value": "princes", "type": "string"}, - "datatype": "external-id" - }, - "type": "statement", - "id": "Q2747456$6C64B5EA-8B74-4BF6-BB90-81C28320200A", - "rank": "normal" - }], - "P1343": [{ - "mainsnak": { - "snaktype": "value", - "property": "P1343", - "hash": "eda63bed5c3d7a3460033092338ab321a2374c7f", + "property": "P17", + "hash": "c2859f311753176d6bdfa7da54ceeeac7acb52c8", "datavalue": { "value": { "entity-type": "item", - "numeric-id": 2041543, - "id": "Q2041543" + "numeric-id": 31, + "id": "Q31" }, "type": "wikibase-entityid" }, "datatype": "wikibase-item" }, "type": "statement", - "qualifiers": { - "P805": [{ + "id": "Q14517013$C12E4DA5-44E1-41ED-BF3D-C84381246429", + "rank": "normal" + }], + "P18": [{ + "mainsnak": { + "snaktype": "value", + "property": "P18", + "hash": "af765166ecaa7d01ea800812b5b356886b8849a0", + "datavalue": { + "value": "Klerken Vredesmolen R01.jpg", + "type": "string" + }, + "datatype": "commonsMedia" + }, + "type": "statement", + "id": "Q14517013$5291801E-11BE-4CE7-8F42-D0D6A120F390", + "rank": "normal" + }], + "P2867": [{ + "mainsnak": { + "snaktype": "value", + "property": "P2867", + "hash": "b1c627972ba2cc71e3567d2fb56cb5f90dd64007", + "datavalue": {"value": "893", "type": "string"}, + "datatype": "external-id" + }, + "type": "statement", + "id": "Q14517013$2aff9dcd-4d24-cd92-b5af-f6268425695f", + "rank": "normal" + }], + "P31": [{ + "mainsnak": { + "snaktype": "value", + "property": "P31", + "hash": "9b48263bb51c506553aac2281ae331353b5c9002", + "datavalue": { + "value": { + "entity-type": "item", + "numeric-id": 38720, + "id": "Q38720" + }, "type": "wikibase-entityid" + }, + "datatype": "wikibase-item" + }, + "type": "statement", + "id": "Q14517013$46dd9d89-4999-eee6-20a4-c4f6650b1d9c", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P31", + "hash": "a1d6f3409c57de0361c68263c9397a99dabe19ea", + "datavalue": { + "value": { + "entity-type": "item", + "numeric-id": 3851468, + "id": "Q3851468" + }, "type": "wikibase-entityid" + }, + "datatype": "wikibase-item" + }, + "type": "statement", + "id": "Q14517013$C83A8B1F-7798-493A-86C9-EC0EFEE356B3", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P31", + "hash": "ee5ba9185bdf9f0eb80b52e1cdc70c5883fac95a", + "datavalue": { + "value": { + "entity-type": "item", + "numeric-id": 623605, + "id": "Q623605" + }, "type": "wikibase-entityid" + }, + "datatype": "wikibase-item" + }, + "type": "statement", + "id": "Q14517013$CF74DC2E-6814-4755-9BAD-6EE9FEF637DD", + "rank": "normal" + }], + "P2671": [{ + "mainsnak": { + "snaktype": "value", + "property": "P2671", + "hash": "83fb38a3c6407f7d0d7bb051d1c31cea8ae26975", + "datavalue": {"value": "/g/121cb15z", "type": "string"}, + "datatype": "external-id" + }, + "type": "statement", + "id": "Q14517013$E6FFEF32-0131-42FD-9C66-1A406B68059A", + "rank": "normal" + }] + }, + "sitelinks": { + "commonswiki": { + "site": "commonswiki", + "title": "Category:Vredesmolen, Klerken", + "badges": [], + "url": "https://commons.wikimedia.org/wiki/Category:Vredesmolen,_Klerken" + }, + "nlwiki": { + "site": "nlwiki", + "title": "Vredesmolen", + "badges": [], + "url": "https://nl.wikipedia.org/wiki/Vredesmolen" + } + } + } + } + } + ) + + + const wdata = await Wikidata.LoadWikidataEntryAsync(14517013) + T.isTrue(wdata.wikisites.has("nl"), "dutch for wikisite not found") + equal("Vredesmolen", wdata.wikisites.get("nl")) + } + + ], + ["Download Prince", async () => { + + Utils.injectJsonDownloadForTests( + "https://www.wikidata.org/wiki/Special:EntityData/Q2747456.json", + { + "entities": { + "Q2747456": { + "pageid": 2638026, + "ns": 0, + "title": "Q2747456", + "lastrevid": 1507566187, + "modified": "2021-10-03T20:26:12Z", + "type": "item", + "id": "Q2747456", + "labels": { + "nl": {"language": "nl", "value": "prins"}, + "am": {"language": "am", "value": "\u120d\u12d1\u120d"}, + "ar": {"language": "ar", "value": "\u0623\u0645\u064a\u0631"}, + "be": {"language": "be", "value": "\u043f\u0440\u044b\u043d\u0446"}, + "bg": {"language": "bg", "value": "\u043f\u0440\u0438\u043d\u0446"}, + "ca": {"language": "ca", "value": "pr\u00edncep"}, + "cs": {"language": "cs", "value": "princ"}, + "cy": {"language": "cy", "value": "tywysog"}, + "da": {"language": "da", "value": "prins"}, + "de": {"language": "de", "value": "Prinz"}, + "en": {"language": "en", "value": "prince"}, + "eo": {"language": "eo", "value": "princo"}, + "es": {"language": "es", "value": "pr\u00edncipe"}, + "fa": {"language": "fa", "value": "\u0634\u0627\u0647\u0632\u0627\u062f\u0647"}, + "fi": {"language": "fi", "value": "prinssi"}, + "fr": {"language": "fr", "value": "prince"}, + "he": {"language": "he", "value": "\u05e0\u05e1\u05d9\u05da"}, + "hr": {"language": "hr", "value": "princ"}, + "id": {"language": "id", "value": "pangeran"}, + "it": {"language": "it", "value": "principe"}, + "ja": {"language": "ja", "value": "\u30d7\u30ea\u30f3\u30b9"}, + "ka": { + "language": "ka", + "value": "\u10e3\u10e4\u10da\u10d8\u10e1\u10ec\u10e3\u10da\u10d8" + }, + "lv": {"language": "lv", "value": "princis"}, + "ms": {"language": "ms", "value": "putera"}, + "ne": { + "language": "ne", + "value": "\u0930\u093e\u091c\u0915\u0941\u092e\u093e\u0930" + }, + "nn": {"language": "nn", "value": "prins"}, + "pt": {"language": "pt", "value": "pr\u00edncipe"}, + "ro": {"language": "ro", "value": "prin\u021b"}, + "ru": {"language": "ru", "value": "\u043f\u0440\u0438\u043d\u0446"}, + "scn": {"language": "scn", "value": "pr\u00ecncipi"}, + "sk": {"language": "sk", "value": "princ"}, + "sl": {"language": "sl", "value": "princ"}, + "sv": {"language": "sv", "value": "prins"}, + "tr": {"language": "tr", "value": "prens"}, + "uk": {"language": "uk", "value": "\u043f\u0440\u0438\u043d\u0446"}, + "vec": {"language": "vec", "value": "principe"}, + "vi": {"language": "vi", "value": "v\u01b0\u01a1ng"}, + "ko": {"language": "ko", "value": "\uc655\uc790"}, + "th": {"language": "th", "value": "\u0e40\u0e08\u0e49\u0e32"}, + "la": {"language": "la", "value": "princeps"}, + "gl": {"language": "gl", "value": "pr\u00edncipe"}, + "nb": {"language": "nb", "value": "prins"}, + "el": { + "language": "el", + "value": "\u03c0\u03c1\u03af\u03b3\u03ba\u03b9\u03c0\u03b1\u03c2" + }, + "is": {"language": "is", "value": "prins"}, + "pl": {"language": "pl", "value": "ksi\u0105\u017c\u0119 (princeps)"}, + "nan": {"language": "nan", "value": "th\u00e2u-l\u00e2ng"}, + "be-tarask": { + "language": "be-tarask", + "value": "\u043f\u0440\u044b\u043d\u0446" + }, + "ur": {"language": "ur", "value": "\u0634\u06c1\u0632\u0627\u062f\u06c1"}, + "sco": {"language": "sco", "value": "prince"}, + "zh": {"language": "zh", "value": "\u738b\u7235"}, + "sr": {"language": "sr", "value": "\u043f\u0440\u0438\u043d\u0446"}, + "sh": {"language": "sh", "value": "princ"}, + "hy": { + "language": "hy", + "value": "\u0561\u0580\u0584\u0561\u0575\u0561\u0566\u0576" + }, + "et": {"language": "et", "value": "prints"}, + "bxr": { + "language": "bxr", + "value": "\u0445\u0430\u043d \u0445\u04af\u0431\u04af\u04af\u043d" + }, + "fy": {"language": "fy", "value": "prins"}, + "diq": {"language": "diq", "value": "prens"}, + "ba": {"language": "ba", "value": "\u043f\u0440\u0438\u043d\u0446"}, + "eu": {"language": "eu", "value": "printze"}, + "gd": {"language": "gd", "value": "prionnsa"}, + "gu": {"language": "gu", "value": "\u0a95\u0ac1\u0a82\u0ab5\u0ab0"}, + "lb": {"language": "lb", "value": "Pr\u00ebnz"}, + "ga": {"language": "ga", "value": "prionsa"}, + "hu": {"language": "hu", "value": "herceg"}, + "su": {"language": "su", "value": "pang\u00e9ran"}, + "ast": {"language": "ast", "value": "pr\u00edncipe"}, + "rmy": {"language": "rmy", "value": "rayon"}, + "yue": {"language": "yue", "value": "\u89aa\u738b"}, + "jv": {"language": "jv", "value": "pang\u00e9ran"}, + "zh-hant": {"language": "zh-hant", "value": "\u738b\u7235"}, + "se": {"language": "se", "value": "prinsa"}, + "smj": {"language": "smj", "value": "prinssa"}, + "smn": {"language": "smn", "value": "prinss\u00e2"}, + "sms": {"language": "sms", "value": "prinss"}, + "az": {"language": "az", "value": "Prens"}, + "wuu": {"language": "wuu", "value": "\u738b\u7235"}, + "yi": {"language": "yi", "value": "\u05e4\u05e8\u05d9\u05e0\u05e5"} + }, + "descriptions": { + "fr": {"language": "fr", "value": "titre de noblesse"}, + "es": {"language": "es", "value": "t\u00edtulo nobiliario"}, + "en": { + "language": "en", + "value": "son of a prince, king, queen, emperor or empress, or other high-ranking person (such as a grand duke)" + }, + "el": { + "language": "el", + "value": "\u03c4\u03af\u03c4\u03bb\u03bf\u03c2 \u03b5\u03c5\u03b3\u03b5\u03bd\u03b5\u03af\u03b1\u03c2" + }, + "de": { + "language": "de", + "value": "Adels-Titel, m\u00e4nnliches Mitglied der K\u00f6nigsfamilie" + }, + "pl": {"language": "pl", "value": "tytu\u0142 szlachecki"}, + "ca": {"language": "ca", "value": "t\u00edtol de noblesa"}, + "vi": { + "language": "vi", + "value": "con trai c\u1ee7a ho\u00e0ng t\u1eed, vua, ho\u00e0ng h\u1eadu, ho\u00e0ng \u0111\u1ebf, ho\u00e0ng h\u1eadu ho\u1eb7c nh\u1eefng ng\u01b0\u1eddi c\u00f3 \u0111\u1ecba v\u1ecb cao kh\u00e1c" + }, + "da": {"language": "da", "value": "kongelig titel"}, + "eu": {"language": "eu", "value": "noblezia titulu"}, + "hu": {"language": "hu", "value": "nemesi c\u00edm"}, + "zh": {"language": "zh", "value": "\u8cb4\u65cf\u982d\u929c"}, + "ar": { + "language": "ar", + "value": "\u0644\u0642\u0628 \u0646\u0628\u064a\u0644" + }, + "ast": {"language": "ast", "value": "t\u00edtulu de nobleza"}, + "ru": {"language": "ru", "value": "\u0442\u0438\u0442\u0443\u043b"}, + "be-tarask": { + "language": "be-tarask", + "value": "\u0448\u043b\u044f\u0445\u0435\u0446\u043a\u0456 \u0442\u044b\u0442\u0443\u043b" + }, + "zh-hant": {"language": "zh-hant", "value": "\u8cb4\u65cf\u982d\u929c"}, + "it": { + "language": "it", + "value": "figlio di un principe, re, regina, imperatore o imperatrice o altra persona di alto rango (come un granduca)" + }, + "nl": { + "language": "nl", + "value": "zoon van een prins(es), koning(in), keizer(in) of andere persoon met een adellijke rang (zoals een groothertog)" + }, + "ro": { + "language": "ro", + "value": "titlu nobiliar acordat \u00een general membrilor unei familii imperiale, regale, princiare etc." + }, + "lb": {"language": "lb", "value": "Adelstitel"}, + "id": { + "language": "id", + "value": "putra seorang pangeran, raja, ratu, kaisar atau permaisuri, atau orang berpangkat tinggi lainnya (seperti adipati agung)" + }, + "he": { + "language": "he", + "value": "\u05ea\u05d5\u05d0\u05e8 \u05d0\u05e6\u05d5\u05dc\u05d4" + }, + "fi": { + "language": "fi", + "value": "ylh\u00e4isaatelisarvo, monesti monarkin poika" + }, + "cs": { + "language": "cs", + "value": "titul potomka prince/princezny, kn\u00ed\u017eete/kn\u011b\u017eny, (velko)v\u00e9vody/v\u00e9vodkyn\u011b, kr\u00e1le/kr\u00e1lovny \u010di c\u00edsa\u0159e/c\u00edsa\u0159ovny" + }, + "uk": { + "language": "uk", + "value": "\u0434\u0438\u0442\u0438\u043d\u0430 \u043f\u0440\u0438\u043d\u0446\u0430(-\u0435\u0441\u0438), \u043a\u043e\u0440\u043e\u043b\u044f (\u043a\u043e\u0440\u043e\u043b\u0435\u0432\u0438), \u0456\u043d\u043c\u0435\u0440\u0430\u0442\u043e\u0440\u0430(-\u043a\u0438) \u0447\u0438 \u0456\u043d\u0448\u043e\u0457 \u0437\u043d\u0430\u0442\u043d\u043e\u0457 \u043e\u0441\u043e\u0431\u0438" + } + }, + "aliases": { + "es": [{"language": "es", "value": "princesa"}, { + "language": "es", + "value": "principe" + }], + "ru": [{ + "language": "ru", + "value": "\u043f\u0440\u0438\u043d\u0446\u0435\u0441\u0441\u0430" + }, {"language": "ru", "value": "\u0446\u0430\u0440\u0435\u0432\u0438\u0447"}], + "ca": [{"language": "ca", "value": "princesa"}], + "ba": [{ + "language": "ba", + "value": "\u043f\u0440\u0438\u043d\u0446\u0435\u0441\u0441\u0430" + }], + "gu": [{ + "language": "gu", + "value": "\u0aae\u0ab9\u0abe\u0ab0\u0abe\u0a9c \u0a95\u0ac1\u0a82\u0ab5\u0ab0" + }, {"language": "gu", "value": "\u0aae. \u0a95\u0ac1."}, { + "language": "gu", + "value": "\u0a8f\u0aae. \u0a95\u0ac7." + }], + "he": [{"language": "he", "value": "\u05e0\u05e1\u05d9\u05db\u05d4"}], + "de": [{"language": "de", "value": "Prinzessin"}], + "ast": [{"language": "ast", "value": "princesa"}], + "be-tarask": [{ + "language": "be-tarask", + "value": "\u043f\u0440\u044b\u043d\u0446\u044d\u0441\u0430" + }], + "nl": [{"language": "nl", "value": "prinsje"}], + "it": [{"language": "it", "value": "principessa"}], + "se": [{"language": "se", "value": "gonagasb\u00e1rdni"}], + "pl": [{"language": "pl", "value": "ksi\u0105\u017c\u0119"}], + "vi": [{"language": "vi", "value": "v\u01b0\u01a1ng t\u01b0\u1edbc"}], + "cs": [{"language": "cs", "value": "princezna"}] + }, + "claims": { + "P31": [{ + "mainsnak": { + "snaktype": "value", + "property": "P31", + "hash": "a456372c8e6a681381eca31ab0662159db12ab1e", + "datavalue": { + "value": { + "entity-type": "item", + "numeric-id": 355567, + "id": "Q355567" + }, "type": "wikibase-entityid" + }, + "datatype": "wikibase-item" + }, + "type": "statement", + "id": "q2747456$ff8e76c2-47b8-d2b7-a192-9af298c36c8e", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P31", + "hash": "0ec7ed0637d631867884c8c0553e2de4b90b63ca", + "datavalue": { + "value": { + "entity-type": "item", + "numeric-id": 3320743, + "id": "Q3320743" + }, "type": "wikibase-entityid" + }, + "datatype": "wikibase-item" + }, + "type": "statement", + "id": "Q2747456$7b3a375d-48d8-18db-12db-9be699a1c34f", + "rank": "normal" + }], + "P910": [{ + "mainsnak": { + "snaktype": "value", + "property": "P910", + "hash": "ee5be4ad914a3f79dc30c6a6ac320404d7b6bf65", + "datavalue": { + "value": { + "entity-type": "item", + "numeric-id": 7214172, + "id": "Q7214172" + }, "type": "wikibase-entityid" + }, + "datatype": "wikibase-item" + }, + "type": "statement", + "id": "Q2747456$92971E9D-FA6B-4CFA-88C9-91EF27DDE2DC", + "rank": "normal" + }], + "P508": [{ + "mainsnak": { + "snaktype": "value", + "property": "P508", + "hash": "36109efdac97e7f035d386101fb85a397380f9ee", + "datavalue": {"value": "8468", "type": "string"}, + "datatype": "external-id" + }, + "type": "statement", + "id": "Q2747456$cdaad4c5-4ec8-54b2-3dac-4db04f994fda", + "rank": "normal" + }], + "P1001": [{ + "mainsnak": { + "snaktype": "somevalue", + "property": "P1001", + "hash": "be44552ae528f03d39720570854717fa0ebedcef", + "datatype": "wikibase-item" + }, + "type": "statement", + "id": "Q2747456$5eea869d-4f5d-99ee-90bb-471cccbf4b84", + "rank": "normal" + }], + "P373": [{ + "mainsnak": { + "snaktype": "value", + "property": "P373", + "hash": "e766c6be546f129979614c185bb172cd237a626a", + "datavalue": {"value": "Princes", "type": "string"}, + "datatype": "string" + }, + "type": "statement", + "id": "Q2747456$D4EEC77F-1F89-46DA-BD9E-FA15F29B686A", + "rank": "normal", + "references": [{ + "hash": "fa278ebfc458360e5aed63d5058cca83c46134f1", + "snaks": { + "P143": [{ "snaktype": "value", - "property": "P805", - "hash": "a83263a5d43ce3636971eac0d25071e09746ed50", + "property": "P143", + "hash": "e4f6d9441d0600513c4533c672b5ab472dc73694", + "datavalue": { + "value": { + "entity-type": "item", + "numeric-id": 328, + "id": "Q328" + }, "type": "wikibase-entityid" + }, + "datatype": "wikibase-item" + }] + }, + "snaks-order": ["P143"] + }] + }], + "P2521": [{ + "mainsnak": { + "snaktype": "value", + "property": "P2521", + "hash": "3ac9f3b0f1b60d0fbeac8ce587b3f74470a2ea00", + "datavalue": { + "value": {"text": "princesse", "language": "fr"}, + "type": "monolingualtext" + }, + "datatype": "monolingualtext" + }, + "type": "statement", + "id": "Q2747456$9c9a7d8e-4fea-87b1-0d41-7efd98922665", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P2521", + "hash": "8eef33f2c1e8a583fd498d380838e5f72cc06491", + "datavalue": { + "value": {"text": "princess", "language": "en"}, + "type": "monolingualtext" + }, + "datatype": "monolingualtext" + }, + "type": "statement", + "id": "Q2747456$e0281f91-4b2c-053b-9900-57d12d7d4211", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P2521", + "hash": "1a86a592d40223b73b7f0686672650d48c997806", + "datavalue": { + "value": {"text": "princino", "language": "eo"}, + "type": "monolingualtext" + }, + "datatype": "monolingualtext" + }, + "type": "statement", + "id": "Q2747456$1cb248ea-490c-b5f7-b011-06845ccac2b4", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P2521", + "hash": "abbaf9a41f548f9a7c58e38f91db34cb370c876a", + "datavalue": { + "value": {"text": "prinses", "language": "nl"}, + "type": "monolingualtext" + }, + "datatype": "monolingualtext" + }, + "type": "statement", + "id": "Q2747456$1d636ed1-4f4d-0851-ca7f-66c847e7c4be", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P2521", + "hash": "37efe8398a055d9ace75c625cdc286b9aadb5ab0", + "datavalue": { + "value": {"text": "princesa", "language": "ca"}, + "type": "monolingualtext" + }, + "datatype": "monolingualtext" + }, + "type": "statement", + "id": "Q2747456$316855ff-4047-0ffb-76fb-90057b0840ef", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P2521", + "hash": "7810d8cabaaaeb41fad675cd9c3bfb39ab41d00f", + "datavalue": { + "value": { + "text": "\u043f\u0440\u0438\u043d\u0446\u0435\u0441\u0441\u0430", + "language": "ru" + }, "type": "monolingualtext" + }, + "datatype": "monolingualtext" + }, + "type": "statement", + "id": "Q2747456$fa60cb7b-460d-c8ff-b99c-c2bf515b12a0", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P2521", + "hash": "e18f093988121762e3b247104eb626501d14ad2e", + "datavalue": { + "value": { + "text": "\u05e0\u05e1\u05d9\u05db\u05d4", + "language": "he" + }, "type": "monolingualtext" + }, + "datatype": "monolingualtext" + }, + "type": "statement", + "id": "Q2747456$03851c85-4db0-ff39-7608-1dc63852b6c8", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P2521", + "hash": "3f8c2d8b4e28c17d49cc1bff30990657e0ab485a", + "datavalue": { + "value": { + "text": "n\u1eef v\u01b0\u01a1ng", + "language": "vi" + }, "type": "monolingualtext" + }, + "datatype": "monolingualtext" + }, + "type": "statement", + "id": "Q2747456$6115764d-4391-6997-ecb2-7768f18b2b45", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P2521", + "hash": "106d96fa708baf606b060bdc8c6b545f477eee32", + "datavalue": { + "value": {"text": "Prinzessin", "language": "de"}, + "type": "monolingualtext" + }, + "datatype": "monolingualtext" + }, + "type": "statement", + "id": "Q2747456$6f2c129e-413c-dead-3404-146368643ab8", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P2521", + "hash": "69a2a841f26ab197dca7c5a6e2dd595b67e4188c", + "datavalue": { + "value": { + "text": "\u03c0\u03c1\u03b9\u03b3\u03ba\u03af\u03c0\u03b9\u03c3\u03c3\u03b1", + "language": "el" + }, "type": "monolingualtext" + }, + "datatype": "monolingualtext" + }, + "type": "statement", + "id": "Q2747456$9b901d48-4e41-ba93-344e-299c69a27ac6", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P2521", + "hash": "560ecce28fcadaf0e2b8a584519fe94ffbf25ec1", + "datavalue": { + "value": {"text": "princesa", "language": "ast"}, + "type": "monolingualtext" + }, + "datatype": "monolingualtext" + }, + "type": "statement", + "id": "Q2747456$520756e7-476d-a435-bc1c-0a56fa7851a1", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P2521", + "hash": "44f2eb3f4fee6f4b4b3b992407bda0f6caed2536", + "datavalue": { + "value": {"text": "tywysoges", "language": "cy"}, + "type": "monolingualtext" + }, + "datatype": "monolingualtext" + }, + "type": "statement", + "id": "Q2747456$698beb10-4e2c-b535-a89b-e29210f2be75", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P2521", + "hash": "006e13a77c798832882c84070fe8f76cdc48611c", + "datavalue": { + "value": { + "text": "\u0623\u0645\u064a\u0631\u0629", + "language": "ar" + }, "type": "monolingualtext" + }, + "datatype": "monolingualtext" + }, + "type": "statement", + "id": "Q2747456$b75e51e5-48e5-1f4c-d99c-d83dde03e91d", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P2521", + "hash": "25eb24e42c0a566023ceb354777cb1ec14492ef1", + "datavalue": { + "value": { + "text": "\u043f\u0440\u044b\u043d\u0446\u044d\u0441\u0430", + "language": "be-tarask" + }, "type": "monolingualtext" + }, + "datatype": "monolingualtext" + }, + "type": "statement", + "id": "Q2747456$075f0038-475e-e4ba-9801-52aac2067799", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P2521", + "hash": "e72b1dd598ce40db3f7e9b195a3e9345b4ae4ba5", + "datavalue": { + "value": {"text": "princezna", "language": "cs"}, + "type": "monolingualtext" + }, + "datatype": "monolingualtext" + }, + "type": "statement", + "id": "Q2747456$1085cbb9-4cd4-8a2f-a4c7-6f29fafea206", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P2521", + "hash": "70d88bc577587e2732cf37a66dfd0920b175211a", + "datavalue": { + "value": {"text": "prinsesse", "language": "da"}, + "type": "monolingualtext" + }, + "datatype": "monolingualtext" + }, + "type": "statement", + "id": "Q2747456$33d2e452-4ca2-8dea-4f98-242c53ef1811", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P2521", + "hash": "eebf786f7c2b0963b9db4c2876bb24c6afc4ce1c", + "datavalue": { + "value": {"text": "principessa", "language": "it"}, + "type": "monolingualtext" + }, + "datatype": "monolingualtext" + }, + "type": "statement", + "id": "Q2747456$3098804a-4758-d07f-8443-24ebe96c56ec", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P2521", + "hash": "649307549f96bfe54f16e9130f014bf018cc46c4", + "datavalue": { + "value": { + "text": "\u043f\u0440\u0438\u043d\u0446\u0435\u0441\u0430", + "language": "uk" + }, "type": "monolingualtext" + }, + "datatype": "monolingualtext" + }, + "type": "statement", + "id": "Q2747456$ff433d7c-4e07-f7c0-14af-3b3f31f8ae9a", + "rank": "normal" + }], + "P3827": [{ + "mainsnak": { + "snaktype": "value", + "property": "P3827", + "hash": "22ee9c46325acd0a1ca54f27bff5d75331211f8a", + "datavalue": {"value": "princes", "type": "string"}, + "datatype": "external-id" + }, + "type": "statement", + "id": "Q2747456$6C64B5EA-8B74-4BF6-BB90-81C28320200A", + "rank": "normal" + }], + "P1343": [{ + "mainsnak": { + "snaktype": "value", + "property": "P1343", + "hash": "eda63bed5c3d7a3460033092338ab321a2374c7f", + "datavalue": { + "value": { + "entity-type": "item", + "numeric-id": 2041543, + "id": "Q2041543" + }, "type": "wikibase-entityid" + }, + "datatype": "wikibase-item" + }, + "type": "statement", + "qualifiers": { + "P805": [{ + "snaktype": "value", + "property": "P805", + "hash": "a83263a5d43ce3636971eac0d25071e09746ed50", + "datavalue": { + "value": { + "entity-type": "item", + "numeric-id": 23858844, + "id": "Q23858844" + }, "type": "wikibase-entityid" + }, + "datatype": "wikibase-item" + }] + }, + "qualifiers-order": ["P805"], + "id": "Q2747456$BC72E96E-6B05-4437-97F4-2BC0AC5DFA6D", + "rank": "normal", + "references": [{ + "hash": "c454383fe86a434f02006970b5c8b8f3f9b6714d", + "snaks": { + "P3452": [{ + "snaktype": "value", + "property": "P3452", + "hash": "482b5f23c034bd9eb5565e3869de4856bd9d5311", "datavalue": { "value": { "entity-type": "item", @@ -8099,58 +8119,236 @@ export default class WikidataSpecTest extends T { "datatype": "wikibase-item" }] }, - "qualifiers-order": ["P805"], - "id": "Q2747456$BC72E96E-6B05-4437-97F4-2BC0AC5DFA6D", - "rank": "normal", - "references": [{ - "hash": "c454383fe86a434f02006970b5c8b8f3f9b6714d", - "snaks": { - "P3452": [{ - "snaktype": "value", - "property": "P3452", - "hash": "482b5f23c034bd9eb5565e3869de4856bd9d5311", - "datavalue": { - "value": { - "entity-type": "item", - "numeric-id": 23858844, - "id": "Q23858844" - }, "type": "wikibase-entityid" - }, - "datatype": "wikibase-item" - }] - }, - "snaks-order": ["P3452"] - }] - }, { - "mainsnak": { + "snaks-order": ["P3452"] + }] + }, { + "mainsnak": { + "snaktype": "value", + "property": "P1343", + "hash": "d5011798f92464584d8ccfc5f19f18f3659668bb", + "datavalue": { + "value": { + "entity-type": "item", + "numeric-id": 106727050, + "id": "Q106727050" + }, "type": "wikibase-entityid" + }, + "datatype": "wikibase-item" + }, + "type": "statement", + "qualifiers": { + "P1810": [{ "snaktype": "value", - "property": "P1343", - "hash": "d5011798f92464584d8ccfc5f19f18f3659668bb", + "property": "P1810", + "hash": "03c80cb894e30b3c675b60c14a8c96334cbb474c", + "datavalue": {"value": "Princes", "type": "string"}, + "datatype": "string" + }], + "P585": [{ + "snaktype": "value", + "property": "P585", + "hash": "ffb837135313cad3b2545c4b9ce5ee416deda3e2", "datavalue": { "value": { - "entity-type": "item", - "numeric-id": 106727050, - "id": "Q106727050" - }, "type": "wikibase-entityid" + "time": "+2021-05-07T00:00:00Z", + "timezone": 0, + "before": 0, + "after": 0, + "precision": 11, + "calendarmodel": "http://www.wikidata.org/entity/Q1985727" + }, "type": "time" }, - "datatype": "wikibase-item" + "datatype": "time" + }] + }, + "qualifiers-order": ["P1810", "P585"], + "id": "Q2747456$D6FEFF9B-75B5-4D37-B4CE-4DB70C6254C9", + "rank": "normal" + }], + "P1889": [{ + "mainsnak": { + "snaktype": "value", + "property": "P1889", + "hash": "6999c7ae15eaea290cccb76ffdd06bc0677d0238", + "datavalue": { + "value": { + "entity-type": "item", + "numeric-id": 18244, + "id": "Q18244" + }, "type": "wikibase-entityid" }, - "type": "statement", - "qualifiers": { - "P1810": [{ + "datatype": "wikibase-item" + }, + "type": "statement", + "id": "Q2747456$F24DA145-D17F-4574-AA66-6985CB25F420", + "rank": "normal" + }], + "P460": [{ + "mainsnak": { + "snaktype": "value", + "property": "P460", + "hash": "6615255f4b0abf58e9bbf71279496fb1a0b511fa", + "datavalue": { + "value": { + "entity-type": "item", + "numeric-id": 863048, + "id": "Q863048" + }, "type": "wikibase-entityid" + }, + "datatype": "wikibase-item" + }, + "type": "statement", + "id": "Q2747456$838f53a3-4fd7-a6b9-48bd-ee70d9e91dc1", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P460", + "hash": "5f65f50d44d2a5b28655dc0b966f518e2106d3e1", + "datavalue": { + "value": { + "entity-type": "item", + "numeric-id": 147925, + "id": "Q147925" + }, "type": "wikibase-entityid" + }, + "datatype": "wikibase-item" + }, + "type": "statement", + "id": "Q2747456$4c67b4d9-4a6f-dfe4-65c1-3aa104506737", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P460", + "hash": "2a1ef20476a8fa0d78b0bdfcdb34c88a72e4424f", + "datavalue": { + "value": { + "entity-type": "item", + "numeric-id": 11572959, + "id": "Q11572959" + }, "type": "wikibase-entityid" + }, + "datatype": "wikibase-item" + }, + "type": "statement", + "id": "Q2747456$14b54a7e-4c22-fae3-81b2-1bd50ebca9e3", + "rank": "normal" + }], + "P2924": [{ + "mainsnak": { + "snaktype": "value", + "property": "P2924", + "hash": "5fd70a45453598d8cbd3f35682444dffb93ef183", + "datavalue": {"value": "3167678", "type": "string"}, + "datatype": "external-id" + }, + "type": "statement", + "id": "Q2747456$D2F12FF3-B07F-408D-BAD1-87F8666ADBA6", + "rank": "normal" + }], + "P1417": [{ + "mainsnak": { + "snaktype": "value", + "property": "P1417", + "hash": "b55bafafbccecce645f2a5f3ccfe4f1a93d5c797", + "datavalue": {"value": "topic/prince-title", "type": "string"}, + "datatype": "external-id" + }, + "type": "statement", + "id": "Q2747456$3825CF57-55DE-4718-90B4-79DED5864AC4", + "rank": "normal" + }], + "P4212": [{ + "mainsnak": { + "snaktype": "value", + "property": "P4212", + "hash": "18175f20026e3c7967427cbf8230be7b80ba428b", + "datavalue": {"value": "pcrtSqFZmJvcTu", "type": "string"}, + "datatype": "external-id" + }, + "type": "statement", + "id": "Q2747456$9791794A-44F1-4FC2-BA56-BA56D2B3578A", + "rank": "normal" + }], + "P279": [{ + "mainsnak": { + "snaktype": "value", + "property": "P279", + "hash": "05fb47e9bcde5c8dc864b788fbcab6eece27147b", + "datavalue": { + "value": { + "entity-type": "item", + "numeric-id": 2478141, + "id": "Q2478141" + }, "type": "wikibase-entityid" + }, + "datatype": "wikibase-item" + }, + "type": "statement", + "id": "Q2747456$d68be51e-4bef-c388-920f-c76313d767a4", + "rank": "normal" + }], + "P6573": [{ + "mainsnak": { + "snaktype": "value", + "property": "P6573", + "hash": "a3dd889f664f66353f3bdc1217a652bf779f0882", + "datavalue": {"value": "Prinz", "type": "string"}, + "datatype": "external-id" + }, + "type": "statement", + "id": "Q2747456$6DCF9C3D-9898-4C78-A58F-FDC8400CCCA1", + "rank": "normal" + }], + "P3321": [{ + "mainsnak": { + "snaktype": "value", + "property": "P3321", + "hash": "83853e4f2ae83443c17c417de86f13d7adf2c6de", + "datavalue": { + "value": { + "text": "\u0623\u0645\u064a\u0631", + "language": "ar" + }, "type": "monolingualtext" + }, + "datatype": "monolingualtext" + }, + "type": "statement", + "id": "Q2747456$e5768817-48a9-44bc-637e-2137393ea3ff", + "rank": "normal" + }], + "P244": [{ + "mainsnak": { + "snaktype": "value", + "property": "P244", + "hash": "3484a6a7868e031d3d479ecf0dd02abd5ad5df67", + "datavalue": {"value": "sh85106721", "type": "string"}, + "datatype": "external-id" + }, + "type": "statement", + "id": "Q2747456$2BEAAB19-60A8-4B69-85B2-80E522D88798", + "rank": "normal", + "references": [{ + "hash": "ac5d47e9fbcc281bc0d27a205ae02e22ad24ce31", + "snaks": { + "P854": [{ "snaktype": "value", - "property": "P1810", - "hash": "03c80cb894e30b3c675b60c14a8c96334cbb474c", - "datavalue": {"value": "Princes", "type": "string"}, - "datatype": "string" + "property": "P854", + "hash": "b560dc6b281a39d061e189d2eb299a426a06f1a2", + "datavalue": { + "value": "https://github.com/JohnMarkOckerbloom/ftl/blob/master/data/wikimap", + "type": "string" + }, + "datatype": "url" }], - "P585": [{ + "P813": [{ "snaktype": "value", - "property": "P585", - "hash": "ffb837135313cad3b2545c4b9ce5ee416deda3e2", + "property": "P813", + "hash": "0dcf4f64e93fdcc654e2c7534285881fe48b9f3d", "datavalue": { "value": { - "time": "+2021-05-07T00:00:00Z", + "time": "+2019-04-03T00:00:00Z", "timezone": 0, "before": 0, "after": 0, @@ -8161,1022 +8359,824 @@ export default class WikidataSpecTest extends T { "datatype": "time" }] }, - "qualifiers-order": ["P1810", "P585"], - "id": "Q2747456$D6FEFF9B-75B5-4D37-B4CE-4DB70C6254C9", - "rank": "normal" - }], - "P1889": [{ - "mainsnak": { + "snaks-order": ["P854", "P813"] + }] + }], + "P7033": [{ + "mainsnak": { + "snaktype": "value", + "property": "P7033", + "hash": "bbeb07d3dd6a36a1b4ff44294353090777d3f68f", + "datavalue": {"value": "scot/9663", "type": "string"}, + "datatype": "external-id" + }, + "type": "statement", + "id": "Q2747456$7D6E3549-7ABD-43B0-BCF2-572F271FBE61", + "rank": "normal" + }], + "P6404": [{ + "mainsnak": { + "snaktype": "value", + "property": "P6404", + "hash": "b73a884b2dbc4d181d68748eb0a1369a60b6779a", + "datavalue": {"value": "principe", "type": "string"}, + "datatype": "external-id" + }, + "type": "statement", + "qualifiers": { + "P1810": [{ "snaktype": "value", - "property": "P1889", - "hash": "6999c7ae15eaea290cccb76ffdd06bc0677d0238", - "datavalue": { - "value": { - "entity-type": "item", - "numeric-id": 18244, - "id": "Q18244" - }, "type": "wikibase-entityid" - }, - "datatype": "wikibase-item" - }, - "type": "statement", - "id": "Q2747456$F24DA145-D17F-4574-AA66-6985CB25F420", - "rank": "normal" - }], - "P460": [{ - "mainsnak": { - "snaktype": "value", - "property": "P460", - "hash": "6615255f4b0abf58e9bbf71279496fb1a0b511fa", - "datavalue": { - "value": { - "entity-type": "item", - "numeric-id": 863048, - "id": "Q863048" - }, "type": "wikibase-entityid" - }, - "datatype": "wikibase-item" - }, - "type": "statement", - "id": "Q2747456$838f53a3-4fd7-a6b9-48bd-ee70d9e91dc1", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P460", - "hash": "5f65f50d44d2a5b28655dc0b966f518e2106d3e1", - "datavalue": { - "value": { - "entity-type": "item", - "numeric-id": 147925, - "id": "Q147925" - }, "type": "wikibase-entityid" - }, - "datatype": "wikibase-item" - }, - "type": "statement", - "id": "Q2747456$4c67b4d9-4a6f-dfe4-65c1-3aa104506737", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P460", - "hash": "2a1ef20476a8fa0d78b0bdfcdb34c88a72e4424f", - "datavalue": { - "value": { - "entity-type": "item", - "numeric-id": 11572959, - "id": "Q11572959" - }, "type": "wikibase-entityid" - }, - "datatype": "wikibase-item" - }, - "type": "statement", - "id": "Q2747456$14b54a7e-4c22-fae3-81b2-1bd50ebca9e3", - "rank": "normal" - }], - "P2924": [{ - "mainsnak": { - "snaktype": "value", - "property": "P2924", - "hash": "5fd70a45453598d8cbd3f35682444dffb93ef183", - "datavalue": {"value": "3167678", "type": "string"}, - "datatype": "external-id" - }, - "type": "statement", - "id": "Q2747456$D2F12FF3-B07F-408D-BAD1-87F8666ADBA6", - "rank": "normal" - }], - "P1417": [{ - "mainsnak": { - "snaktype": "value", - "property": "P1417", - "hash": "b55bafafbccecce645f2a5f3ccfe4f1a93d5c797", - "datavalue": {"value": "topic/prince-title", "type": "string"}, - "datatype": "external-id" - }, - "type": "statement", - "id": "Q2747456$3825CF57-55DE-4718-90B4-79DED5864AC4", - "rank": "normal" - }], - "P4212": [{ - "mainsnak": { - "snaktype": "value", - "property": "P4212", - "hash": "18175f20026e3c7967427cbf8230be7b80ba428b", - "datavalue": {"value": "pcrtSqFZmJvcTu", "type": "string"}, - "datatype": "external-id" - }, - "type": "statement", - "id": "Q2747456$9791794A-44F1-4FC2-BA56-BA56D2B3578A", - "rank": "normal" - }], - "P279": [{ - "mainsnak": { - "snaktype": "value", - "property": "P279", - "hash": "05fb47e9bcde5c8dc864b788fbcab6eece27147b", - "datavalue": { - "value": { - "entity-type": "item", - "numeric-id": 2478141, - "id": "Q2478141" - }, "type": "wikibase-entityid" - }, - "datatype": "wikibase-item" - }, - "type": "statement", - "id": "Q2747456$d68be51e-4bef-c388-920f-c76313d767a4", - "rank": "normal" - }], - "P6573": [{ - "mainsnak": { - "snaktype": "value", - "property": "P6573", - "hash": "a3dd889f664f66353f3bdc1217a652bf779f0882", - "datavalue": {"value": "Prinz", "type": "string"}, - "datatype": "external-id" - }, - "type": "statement", - "id": "Q2747456$6DCF9C3D-9898-4C78-A58F-FDC8400CCCA1", - "rank": "normal" - }], - "P3321": [{ - "mainsnak": { - "snaktype": "value", - "property": "P3321", - "hash": "83853e4f2ae83443c17c417de86f13d7adf2c6de", - "datavalue": { - "value": { - "text": "\u0623\u0645\u064a\u0631", - "language": "ar" - }, "type": "monolingualtext" - }, - "datatype": "monolingualtext" - }, - "type": "statement", - "id": "Q2747456$e5768817-48a9-44bc-637e-2137393ea3ff", - "rank": "normal" - }], - "P244": [{ - "mainsnak": { - "snaktype": "value", - "property": "P244", - "hash": "3484a6a7868e031d3d479ecf0dd02abd5ad5df67", - "datavalue": {"value": "sh85106721", "type": "string"}, - "datatype": "external-id" - }, - "type": "statement", - "id": "Q2747456$2BEAAB19-60A8-4B69-85B2-80E522D88798", - "rank": "normal", - "references": [{ - "hash": "ac5d47e9fbcc281bc0d27a205ae02e22ad24ce31", - "snaks": { - "P854": [{ - "snaktype": "value", - "property": "P854", - "hash": "b560dc6b281a39d061e189d2eb299a426a06f1a2", - "datavalue": { - "value": "https://github.com/JohnMarkOckerbloom/ftl/blob/master/data/wikimap", - "type": "string" - }, - "datatype": "url" - }], - "P813": [{ - "snaktype": "value", - "property": "P813", - "hash": "0dcf4f64e93fdcc654e2c7534285881fe48b9f3d", - "datavalue": { - "value": { - "time": "+2019-04-03T00:00:00Z", - "timezone": 0, - "before": 0, - "after": 0, - "precision": 11, - "calendarmodel": "http://www.wikidata.org/entity/Q1985727" - }, "type": "time" - }, - "datatype": "time" - }] - }, - "snaks-order": ["P854", "P813"] - }] - }], - "P7033": [{ - "mainsnak": { - "snaktype": "value", - "property": "P7033", - "hash": "bbeb07d3dd6a36a1b4ff44294353090777d3f68f", - "datavalue": {"value": "scot/9663", "type": "string"}, - "datatype": "external-id" - }, - "type": "statement", - "id": "Q2747456$7D6E3549-7ABD-43B0-BCF2-572F271FBE61", - "rank": "normal" - }], - "P6404": [{ - "mainsnak": { - "snaktype": "value", - "property": "P6404", - "hash": "b73a884b2dbc4d181d68748eb0a1369a60b6779a", + "property": "P1810", + "hash": "aa57b954447e129789c598d135f12a17358aecac", "datavalue": {"value": "principe", "type": "string"}, - "datatype": "external-id" - }, - "type": "statement", - "qualifiers": { - "P1810": [{ + "datatype": "string" + }], + "P577": [{ + "snaktype": "value", + "property": "P577", + "hash": "d2a40d22655021267a9386d3086e000722b5a2d3", + "datavalue": { + "value": { + "time": "+2011-01-01T00:00:00Z", + "timezone": 0, + "before": 0, + "after": 0, + "precision": 9, + "calendarmodel": "http://www.wikidata.org/entity/Q1985727" + }, "type": "time" + }, + "datatype": "time" + }] + }, + "qualifiers-order": ["P1810", "P577"], + "id": "Q2747456$B0237EEF-F865-48E1-B40C-6078B365CA08", + "rank": "normal" + }], + "P1245": [{ + "mainsnak": { + "snaktype": "value", + "property": "P1245", + "hash": "96bd0f2ac61d64e0c7f70fc77dbc936887d30178", + "datavalue": {"value": "5814", "type": "string"}, + "datatype": "external-id" + }, + "type": "statement", + "id": "Q2747456$CA27EF8B-8DE0-4B3D-98F2-2ED0857103E3", + "rank": "normal" + }], + "P487": [{ + "mainsnak": { + "snaktype": "value", + "property": "P487", + "hash": "14725f4cf317ce7d4b1a0e750232b59d06b5072c", + "datavalue": {"value": "\ud83e\udd34", "type": "string"}, + "datatype": "string" + }, + "type": "statement", + "id": "Q2747456$1df4cace-4275-e6a6-0c5a-edd013874f47", + "rank": "normal" + }], + "P8408": [{ + "mainsnak": { + "snaktype": "value", + "property": "P8408", + "hash": "1959b085f955100ebf2128c228f5a48c527b3066", + "datavalue": {"value": "Prince", "type": "string"}, + "datatype": "external-id" + }, + "type": "statement", + "id": "Q2747456$DE4D8776-C78F-4ECC-A2AB-FF4C3C605B3D", + "rank": "normal", + "references": [{ + "hash": "9a681f9dd95c90224547c404e11295f4f7dcf54e", + "snaks": { + "P248": [{ "snaktype": "value", - "property": "P1810", - "hash": "aa57b954447e129789c598d135f12a17358aecac", - "datavalue": {"value": "principe", "type": "string"}, - "datatype": "string" - }], - "P577": [{ - "snaktype": "value", - "property": "P577", - "hash": "d2a40d22655021267a9386d3086e000722b5a2d3", + "property": "P248", + "hash": "9d5780dddffa8746637a9929a936ab6b0f601e24", "datavalue": { "value": { - "time": "+2011-01-01T00:00:00Z", + "entity-type": "item", + "numeric-id": 64139102, + "id": "Q64139102" + }, "type": "wikibase-entityid" + }, + "datatype": "wikibase-item" + }], + "P813": [{ + "snaktype": "value", + "property": "P813", + "hash": "622a5a27fa5b25e7e7984974e9db494cf8460990", + "datavalue": { + "value": { + "time": "+2020-07-09T00:00:00Z", "timezone": 0, "before": 0, "after": 0, - "precision": 9, + "precision": 11, "calendarmodel": "http://www.wikidata.org/entity/Q1985727" }, "type": "time" }, "datatype": "time" }] }, - "qualifiers-order": ["P1810", "P577"], - "id": "Q2747456$B0237EEF-F865-48E1-B40C-6078B365CA08", - "rank": "normal" - }], - "P1245": [{ - "mainsnak": { - "snaktype": "value", - "property": "P1245", - "hash": "96bd0f2ac61d64e0c7f70fc77dbc936887d30178", - "datavalue": {"value": "5814", "type": "string"}, - "datatype": "external-id" - }, - "type": "statement", - "id": "Q2747456$CA27EF8B-8DE0-4B3D-98F2-2ED0857103E3", - "rank": "normal" - }], - "P487": [{ - "mainsnak": { - "snaktype": "value", - "property": "P487", - "hash": "14725f4cf317ce7d4b1a0e750232b59d06b5072c", - "datavalue": {"value": "\ud83e\udd34", "type": "string"}, - "datatype": "string" - }, - "type": "statement", - "id": "Q2747456$1df4cace-4275-e6a6-0c5a-edd013874f47", - "rank": "normal" - }], - "P8408": [{ - "mainsnak": { - "snaktype": "value", - "property": "P8408", - "hash": "1959b085f955100ebf2128c228f5a48c527b3066", - "datavalue": {"value": "Prince", "type": "string"}, - "datatype": "external-id" - }, - "type": "statement", - "id": "Q2747456$DE4D8776-C78F-4ECC-A2AB-FF4C3C605B3D", - "rank": "normal", - "references": [{ - "hash": "9a681f9dd95c90224547c404e11295f4f7dcf54e", - "snaks": { - "P248": [{ - "snaktype": "value", - "property": "P248", - "hash": "9d5780dddffa8746637a9929a936ab6b0f601e24", - "datavalue": { - "value": { - "entity-type": "item", - "numeric-id": 64139102, - "id": "Q64139102" - }, "type": "wikibase-entityid" - }, - "datatype": "wikibase-item" - }], - "P813": [{ - "snaktype": "value", - "property": "P813", - "hash": "622a5a27fa5b25e7e7984974e9db494cf8460990", - "datavalue": { - "value": { - "time": "+2020-07-09T00:00:00Z", - "timezone": 0, - "before": 0, - "after": 0, - "precision": 11, - "calendarmodel": "http://www.wikidata.org/entity/Q1985727" - }, "type": "time" - }, - "datatype": "time" - }] - }, - "snaks-order": ["P248", "P813"] - }] - }], - "P646": [{ - "mainsnak": { - "snaktype": "value", - "property": "P646", - "hash": "e2a702b2c25f7f56f203253d626302e897f59a8e", - "datavalue": {"value": "/m/0dl76", "type": "string"}, - "datatype": "external-id" - }, - "type": "statement", - "id": "Q2747456$C85A80F8-BBE5-4036-B390-FE2D440662CE", - "rank": "normal" - }], - "P9486": [{ - "mainsnak": { - "snaktype": "value", - "property": "P9486", - "hash": "8112e14818e95883f0df779234ffa2b5bd7544ef", - "datavalue": {"value": "2114", "type": "string"}, - "datatype": "external-id" - }, - "type": "statement", - "id": "Q2747456$03DF860D-8766-4A8E-BA39-CA20E7748101", - "rank": "normal" - }], - "P268": [{ - "mainsnak": { - "snaktype": "value", - "property": "P268", - "hash": "6c26a220e139d739b090f743a20ceec3b2b13d36", - "datavalue": {"value": "11934545s", "type": "string"}, - "datatype": "external-id" - }, - "type": "statement", - "qualifiers": { - "P1810": [{ - "snaktype": "value", - "property": "P1810", - "hash": "03c80cb894e30b3c675b60c14a8c96334cbb474c", - "datavalue": {"value": "Princes", "type": "string"}, - "datatype": "string" - }] - }, - "qualifiers-order": ["P1810"], - "id": "Q2747456$58ba630c-6458-4a5a-8913-a294e6124d7b", - "rank": "normal", - "references": [{ - "hash": "7c27b83b9977dcc1e39904c165117c33f6d4d258", - "snaks": { - "P248": [{ - "snaktype": "value", - "property": "P248", - "hash": "3b090a7bae73c288393b2c8b9846cc7ed9a58f91", - "datavalue": { - "value": { - "entity-type": "item", - "numeric-id": 16583225, - "id": "Q16583225" - }, "type": "wikibase-entityid" - }, - "datatype": "wikibase-item" - }], - "P854": [{ - "snaktype": "value", - "property": "P854", - "hash": "42ed86952731f89f4c99b0a5091aa580a24bf41f", - "datavalue": { - "value": "https://thes.bncf.firenze.sbn.it/termine.php?id=8468", - "type": "string" - }, - "datatype": "url" - }], - "P813": [{ - "snaktype": "value", - "property": "P813", - "hash": "fa626481f5288f46170160e657d94c0b692e3140", - "datavalue": { - "value": { - "time": "+2021-06-13T00:00:00Z", - "timezone": 0, - "before": 0, - "after": 0, - "precision": 11, - "calendarmodel": "http://www.wikidata.org/entity/Q1985727" - }, "type": "time" - }, - "datatype": "time" - }] - }, - "snaks-order": ["P248", "P854", "P813"] - }] - }], - "P950": [{ - "mainsnak": { - "snaktype": "value", - "property": "P950", - "hash": "cffc5e803a428e4e1c294de58122f1d3ed126bcd", - "datavalue": {"value": "XX542448", "type": "string"}, - "datatype": "external-id" - }, - "type": "statement", - "qualifiers": { - "P1810": [{ - "snaktype": "value", - "property": "P1810", - "hash": "c1ce0e3e614f65130d263d0a08d806a912624221", - "datavalue": {"value": "Pr\u00edncipes", "type": "string"}, - "datatype": "string" - }] - }, - "qualifiers-order": ["P1810"], - "id": "Q2747456$c8094f9b-d4b1-4050-9be0-252f7a070d8b", - "rank": "normal", - "references": [{ - "hash": "7c27b83b9977dcc1e39904c165117c33f6d4d258", - "snaks": { - "P248": [{ - "snaktype": "value", - "property": "P248", - "hash": "3b090a7bae73c288393b2c8b9846cc7ed9a58f91", - "datavalue": { - "value": { - "entity-type": "item", - "numeric-id": 16583225, - "id": "Q16583225" - }, "type": "wikibase-entityid" - }, - "datatype": "wikibase-item" - }], - "P854": [{ - "snaktype": "value", - "property": "P854", - "hash": "42ed86952731f89f4c99b0a5091aa580a24bf41f", - "datavalue": { - "value": "https://thes.bncf.firenze.sbn.it/termine.php?id=8468", - "type": "string" - }, - "datatype": "url" - }], - "P813": [{ - "snaktype": "value", - "property": "P813", - "hash": "fa626481f5288f46170160e657d94c0b692e3140", - "datavalue": { - "value": { - "time": "+2021-06-13T00:00:00Z", - "timezone": 0, - "before": 0, - "after": 0, - "precision": 11, - "calendarmodel": "http://www.wikidata.org/entity/Q1985727" - }, "type": "time" - }, - "datatype": "time" - }] - }, - "snaks-order": ["P248", "P854", "P813"] - }] - }], - "P527": [{ - "mainsnak": { - "snaktype": "value", - "property": "P527", - "hash": "1f078eae805dfe58ac01a303b2a5474a99df8a48", - "datavalue": { - "value": { - "entity-type": "item", - "numeric-id": 28495701, - "id": "Q28495701" - }, "type": "wikibase-entityid" - }, - "datatype": "wikibase-item" - }, - "type": "statement", - "id": "Q2747456$6a3b7447-4721-18a4-578e-97af51eeb4a5", - "rank": "normal" - }, { - "mainsnak": { - "snaktype": "value", - "property": "P527", - "hash": "168b349e75ce98b28c0f65998a2fe2d2f1e0f7f5", - "datavalue": { - "value": { - "entity-type": "item", - "numeric-id": 3403409, - "id": "Q3403409" - }, "type": "wikibase-entityid" - }, - "datatype": "wikibase-item" - }, - "type": "statement", - "id": "Q2747456$d2253d2b-4584-2367-122e-557303f41540", - "rank": "normal" + "snaks-order": ["P248", "P813"] }] + }], + "P646": [{ + "mainsnak": { + "snaktype": "value", + "property": "P646", + "hash": "e2a702b2c25f7f56f203253d626302e897f59a8e", + "datavalue": {"value": "/m/0dl76", "type": "string"}, + "datatype": "external-id" + }, + "type": "statement", + "id": "Q2747456$C85A80F8-BBE5-4036-B390-FE2D440662CE", + "rank": "normal" + }], + "P9486": [{ + "mainsnak": { + "snaktype": "value", + "property": "P9486", + "hash": "8112e14818e95883f0df779234ffa2b5bd7544ef", + "datavalue": {"value": "2114", "type": "string"}, + "datatype": "external-id" + }, + "type": "statement", + "id": "Q2747456$03DF860D-8766-4A8E-BA39-CA20E7748101", + "rank": "normal" + }], + "P268": [{ + "mainsnak": { + "snaktype": "value", + "property": "P268", + "hash": "6c26a220e139d739b090f743a20ceec3b2b13d36", + "datavalue": {"value": "11934545s", "type": "string"}, + "datatype": "external-id" + }, + "type": "statement", + "qualifiers": { + "P1810": [{ + "snaktype": "value", + "property": "P1810", + "hash": "03c80cb894e30b3c675b60c14a8c96334cbb474c", + "datavalue": {"value": "Princes", "type": "string"}, + "datatype": "string" + }] + }, + "qualifiers-order": ["P1810"], + "id": "Q2747456$58ba630c-6458-4a5a-8913-a294e6124d7b", + "rank": "normal", + "references": [{ + "hash": "7c27b83b9977dcc1e39904c165117c33f6d4d258", + "snaks": { + "P248": [{ + "snaktype": "value", + "property": "P248", + "hash": "3b090a7bae73c288393b2c8b9846cc7ed9a58f91", + "datavalue": { + "value": { + "entity-type": "item", + "numeric-id": 16583225, + "id": "Q16583225" + }, "type": "wikibase-entityid" + }, + "datatype": "wikibase-item" + }], + "P854": [{ + "snaktype": "value", + "property": "P854", + "hash": "42ed86952731f89f4c99b0a5091aa580a24bf41f", + "datavalue": { + "value": "https://thes.bncf.firenze.sbn.it/termine.php?id=8468", + "type": "string" + }, + "datatype": "url" + }], + "P813": [{ + "snaktype": "value", + "property": "P813", + "hash": "fa626481f5288f46170160e657d94c0b692e3140", + "datavalue": { + "value": { + "time": "+2021-06-13T00:00:00Z", + "timezone": 0, + "before": 0, + "after": 0, + "precision": 11, + "calendarmodel": "http://www.wikidata.org/entity/Q1985727" + }, "type": "time" + }, + "datatype": "time" + }] + }, + "snaks-order": ["P248", "P854", "P813"] + }] + }], + "P950": [{ + "mainsnak": { + "snaktype": "value", + "property": "P950", + "hash": "cffc5e803a428e4e1c294de58122f1d3ed126bcd", + "datavalue": {"value": "XX542448", "type": "string"}, + "datatype": "external-id" + }, + "type": "statement", + "qualifiers": { + "P1810": [{ + "snaktype": "value", + "property": "P1810", + "hash": "c1ce0e3e614f65130d263d0a08d806a912624221", + "datavalue": {"value": "Pr\u00edncipes", "type": "string"}, + "datatype": "string" + }] + }, + "qualifiers-order": ["P1810"], + "id": "Q2747456$c8094f9b-d4b1-4050-9be0-252f7a070d8b", + "rank": "normal", + "references": [{ + "hash": "7c27b83b9977dcc1e39904c165117c33f6d4d258", + "snaks": { + "P248": [{ + "snaktype": "value", + "property": "P248", + "hash": "3b090a7bae73c288393b2c8b9846cc7ed9a58f91", + "datavalue": { + "value": { + "entity-type": "item", + "numeric-id": 16583225, + "id": "Q16583225" + }, "type": "wikibase-entityid" + }, + "datatype": "wikibase-item" + }], + "P854": [{ + "snaktype": "value", + "property": "P854", + "hash": "42ed86952731f89f4c99b0a5091aa580a24bf41f", + "datavalue": { + "value": "https://thes.bncf.firenze.sbn.it/termine.php?id=8468", + "type": "string" + }, + "datatype": "url" + }], + "P813": [{ + "snaktype": "value", + "property": "P813", + "hash": "fa626481f5288f46170160e657d94c0b692e3140", + "datavalue": { + "value": { + "time": "+2021-06-13T00:00:00Z", + "timezone": 0, + "before": 0, + "after": 0, + "precision": 11, + "calendarmodel": "http://www.wikidata.org/entity/Q1985727" + }, "type": "time" + }, + "datatype": "time" + }] + }, + "snaks-order": ["P248", "P854", "P813"] + }] + }], + "P527": [{ + "mainsnak": { + "snaktype": "value", + "property": "P527", + "hash": "1f078eae805dfe58ac01a303b2a5474a99df8a48", + "datavalue": { + "value": { + "entity-type": "item", + "numeric-id": 28495701, + "id": "Q28495701" + }, "type": "wikibase-entityid" + }, + "datatype": "wikibase-item" + }, + "type": "statement", + "id": "Q2747456$6a3b7447-4721-18a4-578e-97af51eeb4a5", + "rank": "normal" + }, { + "mainsnak": { + "snaktype": "value", + "property": "P527", + "hash": "168b349e75ce98b28c0f65998a2fe2d2f1e0f7f5", + "datavalue": { + "value": { + "entity-type": "item", + "numeric-id": 3403409, + "id": "Q3403409" + }, "type": "wikibase-entityid" + }, + "datatype": "wikibase-item" + }, + "type": "statement", + "id": "Q2747456$d2253d2b-4584-2367-122e-557303f41540", + "rank": "normal" + }] + }, + "sitelinks": { + "amwiki": { + "site": "amwiki", + "title": "\u120d\u12d1\u120d", + "badges": [], + "url": "https://am.wikipedia.org/wiki/%E1%88%8D%E1%8B%91%E1%88%8D" }, - "sitelinks": { - "amwiki": { - "site": "amwiki", - "title": "\u120d\u12d1\u120d", - "badges": [], - "url": "https://am.wikipedia.org/wiki/%E1%88%8D%E1%8B%91%E1%88%8D" - }, - "arwiki": { - "site": "arwiki", - "title": "\u0623\u0645\u064a\u0631 (\u0644\u0642\u0628)", - "badges": [], - "url": "https://ar.wikipedia.org/wiki/%D8%A3%D9%85%D9%8A%D8%B1_(%D9%84%D9%82%D8%A8)" - }, - "astwiki": { - "site": "astwiki", - "title": "Pr\u00edncipe", - "badges": [], - "url": "https://ast.wikipedia.org/wiki/Pr%C3%ADncipe" - }, - "azwiki": { - "site": "azwiki", - "title": "Prens", - "badges": [], - "url": "https://az.wikipedia.org/wiki/Prens" - }, - "be_x_oldwiki": { - "site": "be_x_oldwiki", - "title": "\u041f\u0440\u044b\u043d\u0446", - "badges": [], - "url": "https://be-tarask.wikipedia.org/wiki/%D0%9F%D1%80%D1%8B%D0%BD%D1%86" - }, - "bewiki": { - "site": "bewiki", - "title": "\u041f\u0440\u044b\u043d\u0446", - "badges": [], - "url": "https://be.wikipedia.org/wiki/%D0%9F%D1%80%D1%8B%D0%BD%D1%86" - }, - "bgwiki": { - "site": "bgwiki", - "title": "\u041f\u0440\u0438\u043d\u0446", - "badges": [], - "url": "https://bg.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%BD%D1%86" - }, - "bxrwiki": { - "site": "bxrwiki", - "title": "\u0425\u0430\u043d \u0445\u04af\u0431\u04af\u04af\u043d", - "badges": [], - "url": "https://bxr.wikipedia.org/wiki/%D0%A5%D0%B0%D0%BD_%D1%85%D2%AF%D0%B1%D2%AF%D2%AF%D0%BD" - }, - "cawiki": { - "site": "cawiki", - "title": "Pr\u00edncep", - "badges": [], - "url": "https://ca.wikipedia.org/wiki/Pr%C3%ADncep" - }, - "cswiki": { - "site": "cswiki", - "title": "Princ", - "badges": [], - "url": "https://cs.wikipedia.org/wiki/Princ" - }, - "cywiki": { - "site": "cywiki", - "title": "Tywysog", - "badges": [], - "url": "https://cy.wikipedia.org/wiki/Tywysog" - }, - "dawiki": { - "site": "dawiki", - "title": "Prins", - "badges": [], - "url": "https://da.wikipedia.org/wiki/Prins" - }, - "dewiki": { - "site": "dewiki", - "title": "Prinz", - "badges": [], - "url": "https://de.wikipedia.org/wiki/Prinz" - }, - "dewikiquote": { - "site": "dewikiquote", - "title": "Prinz", - "badges": [], - "url": "https://de.wikiquote.org/wiki/Prinz" - }, - "diqwiki": { - "site": "diqwiki", - "title": "Prens", - "badges": [], - "url": "https://diq.wikipedia.org/wiki/Prens" - }, - "elwiki": { - "site": "elwiki", - "title": "\u03a0\u03c1\u03af\u03b3\u03ba\u03b9\u03c0\u03b1\u03c2", - "badges": [], - "url": "https://el.wikipedia.org/wiki/%CE%A0%CF%81%CE%AF%CE%B3%CE%BA%CE%B9%CF%80%CE%B1%CF%82" - }, - "enwiki": { - "site": "enwiki", - "title": "Prince", - "badges": [], - "url": "https://en.wikipedia.org/wiki/Prince" - }, - "enwikiquote": { - "site": "enwikiquote", - "title": "Prince", - "badges": [], - "url": "https://en.wikiquote.org/wiki/Prince" - }, - "eowiki": { - "site": "eowiki", - "title": "Princo", - "badges": [], - "url": "https://eo.wikipedia.org/wiki/Princo" - }, - "eswiki": { - "site": "eswiki", - "title": "Pr\u00edncipe", - "badges": [], - "url": "https://es.wikipedia.org/wiki/Pr%C3%ADncipe" - }, - "etwiki": { - "site": "etwiki", - "title": "Prints (j\u00e4reltulija)", - "badges": [], - "url": "https://et.wikipedia.org/wiki/Prints_(j%C3%A4reltulija)" - }, - "etwikiquote": { - "site": "etwikiquote", - "title": "Prints", - "badges": [], - "url": "https://et.wikiquote.org/wiki/Prints" - }, - "euwiki": { - "site": "euwiki", - "title": "Printze", - "badges": [], - "url": "https://eu.wikipedia.org/wiki/Printze" - }, - "fawiki": { - "site": "fawiki", - "title": "\u0634\u0627\u0647\u0632\u0627\u062f\u0647", - "badges": [], - "url": "https://fa.wikipedia.org/wiki/%D8%B4%D8%A7%D9%87%D8%B2%D8%A7%D8%AF%D9%87" - }, - "fiwiki": { - "site": "fiwiki", - "title": "Prinssi", - "badges": [], - "url": "https://fi.wikipedia.org/wiki/Prinssi" - }, - "frwiki": { - "site": "frwiki", - "title": "Prince (dignit\u00e9)", - "badges": [], - "url": "https://fr.wikipedia.org/wiki/Prince_(dignit%C3%A9)" - }, - "fywiki": { - "site": "fywiki", - "title": "Prins", - "badges": [], - "url": "https://fy.wikipedia.org/wiki/Prins" - }, - "gawiki": { - "site": "gawiki", - "title": "Prionsa", - "badges": [], - "url": "https://ga.wikipedia.org/wiki/Prionsa" - }, - "glwiki": { - "site": "glwiki", - "title": "Pr\u00edncipe", - "badges": [], - "url": "https://gl.wikipedia.org/wiki/Pr%C3%ADncipe" - }, - "hewiki": { - "site": "hewiki", - "title": "\u05e0\u05e1\u05d9\u05da", - "badges": [], - "url": "https://he.wikipedia.org/wiki/%D7%A0%D7%A1%D7%99%D7%9A" - }, - "hewikiquote": { - "site": "hewikiquote", - "title": "\u05e0\u05e1\u05d9\u05da", - "badges": [], - "url": "https://he.wikiquote.org/wiki/%D7%A0%D7%A1%D7%99%D7%9A" - }, - "hrwiki": { - "site": "hrwiki", - "title": "Princ", - "badges": [], - "url": "https://hr.wikipedia.org/wiki/Princ" - }, - "idwiki": { - "site": "idwiki", - "title": "Pangeran", - "badges": [], - "url": "https://id.wikipedia.org/wiki/Pangeran" - }, - "iswiki": { - "site": "iswiki", - "title": "Prins", - "badges": [], - "url": "https://is.wikipedia.org/wiki/Prins" - }, - "itwiki": { - "site": "itwiki", - "title": "Principe", - "badges": [], - "url": "https://it.wikipedia.org/wiki/Principe" - }, - "itwikiquote": { - "site": "itwikiquote", - "title": "Principe", - "badges": [], - "url": "https://it.wikiquote.org/wiki/Principe" - }, - "jawiki": { - "site": "jawiki", - "title": "\u30d7\u30ea\u30f3\u30b9", - "badges": [], - "url": "https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AA%E3%83%B3%E3%82%B9" - }, - "jvwiki": { - "site": "jvwiki", - "title": "Pang\u00e9ran", - "badges": [], - "url": "https://jv.wikipedia.org/wiki/Pang%C3%A9ran" - }, - "kawiki": { - "site": "kawiki", - "title": "\u10e3\u10e4\u10da\u10d8\u10e1\u10ec\u10e3\u10da\u10d8", - "badges": [], - "url": "https://ka.wikipedia.org/wiki/%E1%83%A3%E1%83%A4%E1%83%9A%E1%83%98%E1%83%A1%E1%83%AC%E1%83%A3%E1%83%9A%E1%83%98" - }, - "kowiki": { - "site": "kowiki", - "title": "\ud504\ub9b0\uc2a4", - "badges": [], - "url": "https://ko.wikipedia.org/wiki/%ED%94%84%EB%A6%B0%EC%8A%A4" - }, - "lawiki": { - "site": "lawiki", - "title": "Princeps", - "badges": [], - "url": "https://la.wikipedia.org/wiki/Princeps" - }, - "lawikiquote": { - "site": "lawikiquote", - "title": "Princeps", - "badges": [], - "url": "https://la.wikiquote.org/wiki/Princeps" - }, - "lvwiki": { - "site": "lvwiki", - "title": "Princis", - "badges": [], - "url": "https://lv.wikipedia.org/wiki/Princis" - }, - "mswiki": { - "site": "mswiki", - "title": "Putera", - "badges": [], - "url": "https://ms.wikipedia.org/wiki/Putera" - }, - "newiki": { - "site": "newiki", - "title": "\u0930\u093e\u091c\u0915\u0941\u092e\u093e\u0930", - "badges": [], - "url": "https://ne.wikipedia.org/wiki/%E0%A4%B0%E0%A4%BE%E0%A4%9C%E0%A4%95%E0%A5%81%E0%A4%AE%E0%A4%BE%E0%A4%B0" - }, - "nlwiki": { - "site": "nlwiki", - "title": "Prins", - "badges": [], - "url": "https://nl.wikipedia.org/wiki/Prins" - }, - "nnwiki": { - "site": "nnwiki", - "title": "Prins", - "badges": [], - "url": "https://nn.wikipedia.org/wiki/Prins" - }, - "nowiki": { - "site": "nowiki", - "title": "Prins", - "badges": [], - "url": "https://no.wikipedia.org/wiki/Prins" - }, - "plwiki": { - "site": "plwiki", - "title": "Ksi\u0105\u017c\u0119", - "badges": [], - "url": "https://pl.wikipedia.org/wiki/Ksi%C4%85%C5%BC%C4%99" - }, - "plwikiquote": { - "site": "plwikiquote", - "title": "Ksi\u0105\u017c\u0119", - "badges": [], - "url": "https://pl.wikiquote.org/wiki/Ksi%C4%85%C5%BC%C4%99" - }, - "ptwiki": { - "site": "ptwiki", - "title": "Pr\u00edncipe", - "badges": [], - "url": "https://pt.wikipedia.org/wiki/Pr%C3%ADncipe" - }, - "ptwikiquote": { - "site": "ptwikiquote", - "title": "Pr\u00edncipe", - "badges": [], - "url": "https://pt.wikiquote.org/wiki/Pr%C3%ADncipe" - }, - "rmywiki": { - "site": "rmywiki", - "title": "Rayon", - "badges": [], - "url": "https://rmy.wikipedia.org/wiki/Rayon" - }, - "rowiki": { - "site": "rowiki", - "title": "Prin\u021b", - "badges": [], - "url": "https://ro.wikipedia.org/wiki/Prin%C8%9B" - }, - "ruwiki": { - "site": "ruwiki", - "title": "\u041f\u0440\u0438\u043d\u0446", - "badges": [], - "url": "https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%BD%D1%86" - }, - "scnwiki": { - "site": "scnwiki", - "title": "Pr\u00ecncipi", - "badges": [], - "url": "https://scn.wikipedia.org/wiki/Pr%C3%ACncipi" - }, - "scowiki": { - "site": "scowiki", - "title": "Prince", - "badges": [], - "url": "https://sco.wikipedia.org/wiki/Prince" - }, - "shwiki": { - "site": "shwiki", - "title": "Princ", - "badges": [], - "url": "https://sh.wikipedia.org/wiki/Princ" - }, - "simplewiki": { - "site": "simplewiki", - "title": "Prince", - "badges": [], - "url": "https://simple.wikipedia.org/wiki/Prince" - }, - "skwiki": { - "site": "skwiki", - "title": "Princ", - "badges": [], - "url": "https://sk.wikipedia.org/wiki/Princ" - }, - "slwiki": { - "site": "slwiki", - "title": "Princ", - "badges": [], - "url": "https://sl.wikipedia.org/wiki/Princ" - }, - "srwiki": { - "site": "srwiki", - "title": "Princ", - "badges": [], - "url": "https://sr.wikipedia.org/wiki/Princ" - }, - "suwiki": { - "site": "suwiki", - "title": "Pang\u00e9ran", - "badges": [], - "url": "https://su.wikipedia.org/wiki/Pang%C3%A9ran" - }, - "svwiki": { - "site": "svwiki", - "title": "Prins", - "badges": [], - "url": "https://sv.wikipedia.org/wiki/Prins" - }, - "thwiki": { - "site": "thwiki", - "title": "\u0e40\u0e08\u0e49\u0e32", - "badges": [], - "url": "https://th.wikipedia.org/wiki/%E0%B9%80%E0%B8%88%E0%B9%89%E0%B8%B2" - }, - "trwiki": { - "site": "trwiki", - "title": "Prens", - "badges": [], - "url": "https://tr.wikipedia.org/wiki/Prens" - }, - "ukwiki": { - "site": "ukwiki", - "title": "\u041f\u0440\u0438\u043d\u0446", - "badges": [], - "url": "https://uk.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%BD%D1%86" - }, - "urwiki": { - "site": "urwiki", - "title": "\u0634\u06c1\u0632\u0627\u062f\u06c1", - "badges": [], - "url": "https://ur.wikipedia.org/wiki/%D8%B4%DB%81%D8%B2%D8%A7%D8%AF%DB%81" - }, - "vecwiki": { - "site": "vecwiki", - "title": "Principe", - "badges": [], - "url": "https://vec.wikipedia.org/wiki/Principe" - }, - "viwiki": { - "site": "viwiki", - "title": "V\u01b0\u01a1ng t\u01b0\u1edbc", - "badges": [], - "url": "https://vi.wikipedia.org/wiki/V%C6%B0%C6%A1ng_t%C6%B0%E1%BB%9Bc" - }, - "wuuwiki": { - "site": "wuuwiki", - "title": "\u738b\u7235", - "badges": [], - "url": "https://wuu.wikipedia.org/wiki/%E7%8E%8B%E7%88%B5" - }, - "zh_min_nanwiki": { - "site": "zh_min_nanwiki", - "title": "Prince", - "badges": [], - "url": "https://zh-min-nan.wikipedia.org/wiki/Prince" - }, - "zh_yuewiki": { - "site": "zh_yuewiki", - "title": "\u89aa\u738b", - "badges": [], - "url": "https://zh-yue.wikipedia.org/wiki/%E8%A6%AA%E7%8E%8B" - }, - "zhwiki": { - "site": "zhwiki", - "title": "\u738b\u7235", - "badges": [], - "url": "https://zh.wikipedia.org/wiki/%E7%8E%8B%E7%88%B5" - } + "arwiki": { + "site": "arwiki", + "title": "\u0623\u0645\u064a\u0631 (\u0644\u0642\u0628)", + "badges": [], + "url": "https://ar.wikipedia.org/wiki/%D8%A3%D9%85%D9%8A%D8%B1_(%D9%84%D9%82%D8%A8)" + }, + "astwiki": { + "site": "astwiki", + "title": "Pr\u00edncipe", + "badges": [], + "url": "https://ast.wikipedia.org/wiki/Pr%C3%ADncipe" + }, + "azwiki": { + "site": "azwiki", + "title": "Prens", + "badges": [], + "url": "https://az.wikipedia.org/wiki/Prens" + }, + "be_x_oldwiki": { + "site": "be_x_oldwiki", + "title": "\u041f\u0440\u044b\u043d\u0446", + "badges": [], + "url": "https://be-tarask.wikipedia.org/wiki/%D0%9F%D1%80%D1%8B%D0%BD%D1%86" + }, + "bewiki": { + "site": "bewiki", + "title": "\u041f\u0440\u044b\u043d\u0446", + "badges": [], + "url": "https://be.wikipedia.org/wiki/%D0%9F%D1%80%D1%8B%D0%BD%D1%86" + }, + "bgwiki": { + "site": "bgwiki", + "title": "\u041f\u0440\u0438\u043d\u0446", + "badges": [], + "url": "https://bg.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%BD%D1%86" + }, + "bxrwiki": { + "site": "bxrwiki", + "title": "\u0425\u0430\u043d \u0445\u04af\u0431\u04af\u04af\u043d", + "badges": [], + "url": "https://bxr.wikipedia.org/wiki/%D0%A5%D0%B0%D0%BD_%D1%85%D2%AF%D0%B1%D2%AF%D2%AF%D0%BD" + }, + "cawiki": { + "site": "cawiki", + "title": "Pr\u00edncep", + "badges": [], + "url": "https://ca.wikipedia.org/wiki/Pr%C3%ADncep" + }, + "cswiki": { + "site": "cswiki", + "title": "Princ", + "badges": [], + "url": "https://cs.wikipedia.org/wiki/Princ" + }, + "cywiki": { + "site": "cywiki", + "title": "Tywysog", + "badges": [], + "url": "https://cy.wikipedia.org/wiki/Tywysog" + }, + "dawiki": { + "site": "dawiki", + "title": "Prins", + "badges": [], + "url": "https://da.wikipedia.org/wiki/Prins" + }, + "dewiki": { + "site": "dewiki", + "title": "Prinz", + "badges": [], + "url": "https://de.wikipedia.org/wiki/Prinz" + }, + "dewikiquote": { + "site": "dewikiquote", + "title": "Prinz", + "badges": [], + "url": "https://de.wikiquote.org/wiki/Prinz" + }, + "diqwiki": { + "site": "diqwiki", + "title": "Prens", + "badges": [], + "url": "https://diq.wikipedia.org/wiki/Prens" + }, + "elwiki": { + "site": "elwiki", + "title": "\u03a0\u03c1\u03af\u03b3\u03ba\u03b9\u03c0\u03b1\u03c2", + "badges": [], + "url": "https://el.wikipedia.org/wiki/%CE%A0%CF%81%CE%AF%CE%B3%CE%BA%CE%B9%CF%80%CE%B1%CF%82" + }, + "enwiki": { + "site": "enwiki", + "title": "Prince", + "badges": [], + "url": "https://en.wikipedia.org/wiki/Prince" + }, + "enwikiquote": { + "site": "enwikiquote", + "title": "Prince", + "badges": [], + "url": "https://en.wikiquote.org/wiki/Prince" + }, + "eowiki": { + "site": "eowiki", + "title": "Princo", + "badges": [], + "url": "https://eo.wikipedia.org/wiki/Princo" + }, + "eswiki": { + "site": "eswiki", + "title": "Pr\u00edncipe", + "badges": [], + "url": "https://es.wikipedia.org/wiki/Pr%C3%ADncipe" + }, + "etwiki": { + "site": "etwiki", + "title": "Prints (j\u00e4reltulija)", + "badges": [], + "url": "https://et.wikipedia.org/wiki/Prints_(j%C3%A4reltulija)" + }, + "etwikiquote": { + "site": "etwikiquote", + "title": "Prints", + "badges": [], + "url": "https://et.wikiquote.org/wiki/Prints" + }, + "euwiki": { + "site": "euwiki", + "title": "Printze", + "badges": [], + "url": "https://eu.wikipedia.org/wiki/Printze" + }, + "fawiki": { + "site": "fawiki", + "title": "\u0634\u0627\u0647\u0632\u0627\u062f\u0647", + "badges": [], + "url": "https://fa.wikipedia.org/wiki/%D8%B4%D8%A7%D9%87%D8%B2%D8%A7%D8%AF%D9%87" + }, + "fiwiki": { + "site": "fiwiki", + "title": "Prinssi", + "badges": [], + "url": "https://fi.wikipedia.org/wiki/Prinssi" + }, + "frwiki": { + "site": "frwiki", + "title": "Prince (dignit\u00e9)", + "badges": [], + "url": "https://fr.wikipedia.org/wiki/Prince_(dignit%C3%A9)" + }, + "fywiki": { + "site": "fywiki", + "title": "Prins", + "badges": [], + "url": "https://fy.wikipedia.org/wiki/Prins" + }, + "gawiki": { + "site": "gawiki", + "title": "Prionsa", + "badges": [], + "url": "https://ga.wikipedia.org/wiki/Prionsa" + }, + "glwiki": { + "site": "glwiki", + "title": "Pr\u00edncipe", + "badges": [], + "url": "https://gl.wikipedia.org/wiki/Pr%C3%ADncipe" + }, + "hewiki": { + "site": "hewiki", + "title": "\u05e0\u05e1\u05d9\u05da", + "badges": [], + "url": "https://he.wikipedia.org/wiki/%D7%A0%D7%A1%D7%99%D7%9A" + }, + "hewikiquote": { + "site": "hewikiquote", + "title": "\u05e0\u05e1\u05d9\u05da", + "badges": [], + "url": "https://he.wikiquote.org/wiki/%D7%A0%D7%A1%D7%99%D7%9A" + }, + "hrwiki": { + "site": "hrwiki", + "title": "Princ", + "badges": [], + "url": "https://hr.wikipedia.org/wiki/Princ" + }, + "idwiki": { + "site": "idwiki", + "title": "Pangeran", + "badges": [], + "url": "https://id.wikipedia.org/wiki/Pangeran" + }, + "iswiki": { + "site": "iswiki", + "title": "Prins", + "badges": [], + "url": "https://is.wikipedia.org/wiki/Prins" + }, + "itwiki": { + "site": "itwiki", + "title": "Principe", + "badges": [], + "url": "https://it.wikipedia.org/wiki/Principe" + }, + "itwikiquote": { + "site": "itwikiquote", + "title": "Principe", + "badges": [], + "url": "https://it.wikiquote.org/wiki/Principe" + }, + "jawiki": { + "site": "jawiki", + "title": "\u30d7\u30ea\u30f3\u30b9", + "badges": [], + "url": "https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AA%E3%83%B3%E3%82%B9" + }, + "jvwiki": { + "site": "jvwiki", + "title": "Pang\u00e9ran", + "badges": [], + "url": "https://jv.wikipedia.org/wiki/Pang%C3%A9ran" + }, + "kawiki": { + "site": "kawiki", + "title": "\u10e3\u10e4\u10da\u10d8\u10e1\u10ec\u10e3\u10da\u10d8", + "badges": [], + "url": "https://ka.wikipedia.org/wiki/%E1%83%A3%E1%83%A4%E1%83%9A%E1%83%98%E1%83%A1%E1%83%AC%E1%83%A3%E1%83%9A%E1%83%98" + }, + "kowiki": { + "site": "kowiki", + "title": "\ud504\ub9b0\uc2a4", + "badges": [], + "url": "https://ko.wikipedia.org/wiki/%ED%94%84%EB%A6%B0%EC%8A%A4" + }, + "lawiki": { + "site": "lawiki", + "title": "Princeps", + "badges": [], + "url": "https://la.wikipedia.org/wiki/Princeps" + }, + "lawikiquote": { + "site": "lawikiquote", + "title": "Princeps", + "badges": [], + "url": "https://la.wikiquote.org/wiki/Princeps" + }, + "lvwiki": { + "site": "lvwiki", + "title": "Princis", + "badges": [], + "url": "https://lv.wikipedia.org/wiki/Princis" + }, + "mswiki": { + "site": "mswiki", + "title": "Putera", + "badges": [], + "url": "https://ms.wikipedia.org/wiki/Putera" + }, + "newiki": { + "site": "newiki", + "title": "\u0930\u093e\u091c\u0915\u0941\u092e\u093e\u0930", + "badges": [], + "url": "https://ne.wikipedia.org/wiki/%E0%A4%B0%E0%A4%BE%E0%A4%9C%E0%A4%95%E0%A5%81%E0%A4%AE%E0%A4%BE%E0%A4%B0" + }, + "nlwiki": { + "site": "nlwiki", + "title": "Prins", + "badges": [], + "url": "https://nl.wikipedia.org/wiki/Prins" + }, + "nnwiki": { + "site": "nnwiki", + "title": "Prins", + "badges": [], + "url": "https://nn.wikipedia.org/wiki/Prins" + }, + "nowiki": { + "site": "nowiki", + "title": "Prins", + "badges": [], + "url": "https://no.wikipedia.org/wiki/Prins" + }, + "plwiki": { + "site": "plwiki", + "title": "Ksi\u0105\u017c\u0119", + "badges": [], + "url": "https://pl.wikipedia.org/wiki/Ksi%C4%85%C5%BC%C4%99" + }, + "plwikiquote": { + "site": "plwikiquote", + "title": "Ksi\u0105\u017c\u0119", + "badges": [], + "url": "https://pl.wikiquote.org/wiki/Ksi%C4%85%C5%BC%C4%99" + }, + "ptwiki": { + "site": "ptwiki", + "title": "Pr\u00edncipe", + "badges": [], + "url": "https://pt.wikipedia.org/wiki/Pr%C3%ADncipe" + }, + "ptwikiquote": { + "site": "ptwikiquote", + "title": "Pr\u00edncipe", + "badges": [], + "url": "https://pt.wikiquote.org/wiki/Pr%C3%ADncipe" + }, + "rmywiki": { + "site": "rmywiki", + "title": "Rayon", + "badges": [], + "url": "https://rmy.wikipedia.org/wiki/Rayon" + }, + "rowiki": { + "site": "rowiki", + "title": "Prin\u021b", + "badges": [], + "url": "https://ro.wikipedia.org/wiki/Prin%C8%9B" + }, + "ruwiki": { + "site": "ruwiki", + "title": "\u041f\u0440\u0438\u043d\u0446", + "badges": [], + "url": "https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%BD%D1%86" + }, + "scnwiki": { + "site": "scnwiki", + "title": "Pr\u00ecncipi", + "badges": [], + "url": "https://scn.wikipedia.org/wiki/Pr%C3%ACncipi" + }, + "scowiki": { + "site": "scowiki", + "title": "Prince", + "badges": [], + "url": "https://sco.wikipedia.org/wiki/Prince" + }, + "shwiki": { + "site": "shwiki", + "title": "Princ", + "badges": [], + "url": "https://sh.wikipedia.org/wiki/Princ" + }, + "simplewiki": { + "site": "simplewiki", + "title": "Prince", + "badges": [], + "url": "https://simple.wikipedia.org/wiki/Prince" + }, + "skwiki": { + "site": "skwiki", + "title": "Princ", + "badges": [], + "url": "https://sk.wikipedia.org/wiki/Princ" + }, + "slwiki": { + "site": "slwiki", + "title": "Princ", + "badges": [], + "url": "https://sl.wikipedia.org/wiki/Princ" + }, + "srwiki": { + "site": "srwiki", + "title": "Princ", + "badges": [], + "url": "https://sr.wikipedia.org/wiki/Princ" + }, + "suwiki": { + "site": "suwiki", + "title": "Pang\u00e9ran", + "badges": [], + "url": "https://su.wikipedia.org/wiki/Pang%C3%A9ran" + }, + "svwiki": { + "site": "svwiki", + "title": "Prins", + "badges": [], + "url": "https://sv.wikipedia.org/wiki/Prins" + }, + "thwiki": { + "site": "thwiki", + "title": "\u0e40\u0e08\u0e49\u0e32", + "badges": [], + "url": "https://th.wikipedia.org/wiki/%E0%B9%80%E0%B8%88%E0%B9%89%E0%B8%B2" + }, + "trwiki": { + "site": "trwiki", + "title": "Prens", + "badges": [], + "url": "https://tr.wikipedia.org/wiki/Prens" + }, + "ukwiki": { + "site": "ukwiki", + "title": "\u041f\u0440\u0438\u043d\u0446", + "badges": [], + "url": "https://uk.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%BD%D1%86" + }, + "urwiki": { + "site": "urwiki", + "title": "\u0634\u06c1\u0632\u0627\u062f\u06c1", + "badges": [], + "url": "https://ur.wikipedia.org/wiki/%D8%B4%DB%81%D8%B2%D8%A7%D8%AF%DB%81" + }, + "vecwiki": { + "site": "vecwiki", + "title": "Principe", + "badges": [], + "url": "https://vec.wikipedia.org/wiki/Principe" + }, + "viwiki": { + "site": "viwiki", + "title": "V\u01b0\u01a1ng t\u01b0\u1edbc", + "badges": [], + "url": "https://vi.wikipedia.org/wiki/V%C6%B0%C6%A1ng_t%C6%B0%E1%BB%9Bc" + }, + "wuuwiki": { + "site": "wuuwiki", + "title": "\u738b\u7235", + "badges": [], + "url": "https://wuu.wikipedia.org/wiki/%E7%8E%8B%E7%88%B5" + }, + "zh_min_nanwiki": { + "site": "zh_min_nanwiki", + "title": "Prince", + "badges": [], + "url": "https://zh-min-nan.wikipedia.org/wiki/Prince" + }, + "zh_yuewiki": { + "site": "zh_yuewiki", + "title": "\u89aa\u738b", + "badges": [], + "url": "https://zh-yue.wikipedia.org/wiki/%E8%A6%AA%E7%8E%8B" + }, + "zhwiki": { + "site": "zhwiki", + "title": "\u738b\u7235", + "badges": [], + "url": "https://zh.wikipedia.org/wiki/%E7%8E%8B%E7%88%B5" } } } } - ) + } + ) - const wikidata = await Wikidata.LoadWikidataEntryAsync("2747456") - }], - ["Extract key from a lexeme", () => { - Utils.injectJsonDownloadForTests( - "https://www.wikidata.org/wiki/Special:EntityData/L614072.json", - { - "entities": { - "L614072": { - "pageid": 104085278, - "ns": 146, - "title": "Lexeme:L614072", - "lastrevid": 1509989280, - "modified": "2021-10-09T18:43:52Z", - "type": "lexeme", - "id": "L614072", - "lemmas": {"nl": {"language": "nl", "value": "Groen"}}, - "lexicalCategory": "Q34698", - "language": "Q7411", - "claims": {}, - "forms": [], - "senses": [{ - "id": "L614072-S1", - "glosses": {"nl": {"language": "nl", "value": "Nieuw"}}, - "claims": {} - }, { - "id": "L614072-S2", - "glosses": {"nl": {"language": "nl", "value": "Jong"}}, - "claims": {} - }, { - "id": "L614072-S3", - "glosses": {"nl": {"language": "nl", "value": "Pril"}}, - "claims": {} - }] - } + const wikidata = await Wikidata.LoadWikidataEntryAsync("2747456") + }], + ["Extract key from a lexeme", () => { + Utils.injectJsonDownloadForTests( + "https://www.wikidata.org/wiki/Special:EntityData/L614072.json", + { + "entities": { + "L614072": { + "pageid": 104085278, + "ns": 146, + "title": "Lexeme:L614072", + "lastrevid": 1509989280, + "modified": "2021-10-09T18:43:52Z", + "type": "lexeme", + "id": "L614072", + "lemmas": {"nl": {"language": "nl", "value": "Groen"}}, + "lexicalCategory": "Q34698", + "language": "Q7411", + "claims": {}, + "forms": [], + "senses": [{ + "id": "L614072-S1", + "glosses": {"nl": {"language": "nl", "value": "Nieuw"}}, + "claims": {} + }, { + "id": "L614072-S2", + "glosses": {"nl": {"language": "nl", "value": "Jong"}}, + "claims": {} + }, { + "id": "L614072-S3", + "glosses": {"nl": {"language": "nl", "value": "Pril"}}, + "claims": {} + }] } } - ) + } + ) - const key = Wikidata.ExtractKey("https://www.wikidata.org/wiki/Lexeme:L614072") - T.equals("L614072", key) + const key = Wikidata.ExtractKey("https://www.wikidata.org/wiki/Lexeme:L614072") + T.equals("L614072", key) - }], - ["Download a lexeme", async () => { + }], + ["Download a lexeme", async () => { - const response = await Wikidata.LoadWikidataEntryAsync("https://www.wikidata.org/wiki/Lexeme:L614072") - T.isTrue(response !== undefined, "Response is undefined") + const response = await Wikidata.LoadWikidataEntryAsync("https://www.wikidata.org/wiki/Lexeme:L614072") + T.isTrue(response !== undefined, "Response is undefined") - }] + }] - ]); + ]); } } \ No newline at end of file diff --git a/theme.html b/theme.html index 68e3f9fc4b..d032d0174d 100644 --- a/theme.html +++ b/theme.html @@ -18,7 +18,6 @@ MapComplete - @@ -36,16 +35,8 @@ - - - - + @@ -71,12 +62,28 @@
- Loading MapComplete, hang on... +
+
+
+ +

Loading MapComplete, hang on...

+
+

Powered by OpenStreetMap

+
+ + MapComplete is an easy to use map viewer and map editor + +
+
+
+ Below
+ +