Merge develop

This commit is contained in:
Pieter Vander Vennet 2023-03-15 14:29:53 +01:00
commit e67d740769
719 changed files with 30508 additions and 15682 deletions

4
.gitignore vendored
View file

@ -6,7 +6,7 @@ scratch
assets/editor-layer-index.json assets/editor-layer-index.json
assets/generated/* assets/generated/*
assets/generated/images/* assets/generated/images/*
/*.webmanifest public/*.webmanifest
/*.html /*.html
!/index.html !/index.html
!/customGenerator.html !/customGenerator.html
@ -36,3 +36,5 @@ service-worker.js
# Built Visual Studio Code Extensions # Built Visual Studio Code Extensions
*.vsix *.vsix
public/*.webmanifest
public/assets/generated/

1
.nvmrc Normal file
View file

@ -0,0 +1 @@
nodejs 16.9.1

View file

@ -1,4 +1,6 @@
{ {
"semi": false, "semi": false,
"printWidth": 100 "printWidth": 100,
"plugins": ["prettier-plugin-svelte"],
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
} }

View file

@ -2,6 +2,8 @@
"recommendations": [ "recommendations": [
"esbenp.prettier-vscode", "esbenp.prettier-vscode",
"eamodio.gitlens", "eamodio.gitlens",
"GitHub.vscode-pull-request-github" "GitHub.vscode-pull-request-github",
"svelte.svelte-vscode",
"bradlc.vscode-tailwindcss"
] ]
} }

18
.vscode/settings.json vendored
View file

@ -1,21 +1,21 @@
{ {
"json.schemas": [ "json.schemas": [
{ {
"fileMatch": [ "fileMatch": ["/assets/layers/*/*.json", "!/assets/layers/*/license_info.json"],
"/assets/layers/*/*.json",
"!/assets/layers/*/license_info.json"
],
"url": "./Docs/Schemas/LayerConfigJson.schema.json" "url": "./Docs/Schemas/LayerConfigJson.schema.json"
}, },
{ {
"fileMatch": [ "fileMatch": ["/assets/themes/*/*.json", "!/assets/themes/*/license_info.json"],
"/assets/themes/*/*.json",
"!/assets/themes/*/license_info.json"
],
"url": "./Docs/Schemas/LayoutConfigJson.schema.json" "url": "./Docs/Schemas/LayoutConfigJson.schema.json"
} }
], ],
"editor.tabSize": 2, "editor.tabSize": 2,
"files.autoSave": "onFocusChange", "files.autoSave": "onFocusChange",
"search.useIgnoreFiles": true "search.useIgnoreFiles": true,
"css.lint.unknownAtRules": "ignore",
"scss.lint.unknownAtRules": "ignore",
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[svelte]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
} }

View file

@ -1,290 +1,52 @@
import * as known_themes from "../assets/generated/known_layers_and_themes.json" import known_themes from "../assets/generated/known_themes.json"
import LayoutConfig from "../Models/ThemeConfig/LayoutConfig" import LayoutConfig from "../Models/ThemeConfig/LayoutConfig"
import LayerConfig from "../Models/ThemeConfig/LayerConfig"
import BaseUIElement from "../UI/BaseUIElement"
import Combine from "../UI/Base/Combine"
import Title from "../UI/Base/Title"
import List from "../UI/Base/List"
import DependencyCalculator from "../Models/ThemeConfig/DependencyCalculator"
import Constants from "../Models/Constants"
import { Utils } from "../Utils"
import Link from "../UI/Base/Link"
import { LayoutConfigJson } from "../Models/ThemeConfig/Json/LayoutConfigJson" import { LayoutConfigJson } from "../Models/ThemeConfig/Json/LayoutConfigJson"
import { LayerConfigJson } from "../Models/ThemeConfig/Json/LayerConfigJson"
export class AllKnownLayouts {
public static allKnownLayouts: Map<string, LayoutConfig> = AllKnownLayouts.AllLayouts()
public static layoutsList: LayoutConfig[] = AllKnownLayouts.GenerateOrderedList(
AllKnownLayouts.allKnownLayouts
)
// Must be below the list...
private static sharedLayers: Map<string, LayerConfig> = AllKnownLayouts.getSharedLayers()
public static AllPublicLayers(options?: {
includeInlineLayers: true | boolean
}): LayerConfig[] {
const allLayers: LayerConfig[] = []
const seendIds = new Set<string>()
AllKnownLayouts.sharedLayers.forEach((layer, key) => {
seendIds.add(key)
allLayers.push(layer)
})
if (options?.includeInlineLayers ?? true) {
const publicLayouts = AllKnownLayouts.layoutsList.filter((l) => !l.hideFromOverview)
for (const layout of publicLayouts) {
if (layout.hideFromOverview) {
continue
}
for (const layer of layout.layers) {
if (seendIds.has(layer.id)) {
continue
}
seendIds.add(layer.id)
allLayers.push(layer)
}
}
}
return allLayers
}
/** /**
* Returns all themes which use the given layer, reverse sorted by minzoom. This sort maximizes the chances that the layer is prominently featured on the first theme * Somewhat of a dictionary, which lazily parses needed themes
*/ */
public static themesUsingLayer(id: string, publicOnly = true): LayoutConfig[] { export class AllKnownLayoutsLazy {
const themes = AllKnownLayouts.layoutsList private readonly dict: Map<string, { data: LayoutConfig } | { func: () => LayoutConfig }> =
.filter((l) => !(publicOnly && l.hideFromOverview) && l.id !== "personal") new Map()
.map((theme) => ({ constructor() {
theme,
minzoom: theme.layers.find((layer) => layer.id === id)?.minzoom,
}))
.filter((obj) => obj.minzoom !== undefined)
themes.sort((th0, th1) => th1.minzoom - th0.minzoom)
return themes.map((th) => th.theme)
}
/**
* Generates documentation for the layers.
* Inline layers are included (if the theme is public)
* @param callback
* @constructor
*/
public static GenOverviewsForSingleLayer(
callback: (layer: LayerConfig, element: BaseUIElement, inlineSource: string) => void
): void {
const allLayers: LayerConfig[] = Array.from(AllKnownLayouts.sharedLayers.values()).filter(
(layer) => Constants.priviliged_layers.indexOf(layer.id) < 0
)
const builtinLayerIds: Set<string> = new Set<string>()
allLayers.forEach((l) => builtinLayerIds.add(l.id))
const inlineLayers = new Map<string, string>()
for (const layout of Array.from(AllKnownLayouts.allKnownLayouts.values())) {
if (layout.hideFromOverview) {
continue
}
for (const layer of layout.layers) {
if (Constants.priviliged_layers.indexOf(layer.id) >= 0) {
continue
}
if (builtinLayerIds.has(layer.id)) {
continue
}
if (layer.source.geojsonSource !== undefined) {
// Not an OSM-source
continue
}
allLayers.push(layer)
builtinLayerIds.add(layer.id)
inlineLayers.set(layer.id, layout.id)
}
}
const themesPerLayer = new Map<string, string[]>()
for (const layout of Array.from(AllKnownLayouts.allKnownLayouts.values())) {
if (layout.hideFromOverview) {
continue
}
for (const layer of layout.layers) {
if (!builtinLayerIds.has(layer.id)) {
// This is an inline layer
continue
}
if (!themesPerLayer.has(layer.id)) {
themesPerLayer.set(layer.id, [])
}
themesPerLayer.get(layer.id).push(layout.id)
}
}
// Determine the cross-dependencies
const layerIsNeededBy: Map<string, string[]> = new Map<string, string[]>()
for (const layer of allLayers) {
for (const dep of DependencyCalculator.getLayerDependencies(layer)) {
const dependency = dep.neededLayer
if (!layerIsNeededBy.has(dependency)) {
layerIsNeededBy.set(dependency, [])
}
layerIsNeededBy.get(dependency).push(layer.id)
}
}
allLayers.forEach((layer) => {
const element = layer.GenerateDocumentation(
themesPerLayer.get(layer.id),
layerIsNeededBy,
DependencyCalculator.getLayerDependencies(layer)
)
callback(layer, element, inlineLayers.get(layer.id))
})
}
/**
* Generates the documentation for the layers overview page
* @constructor
*/
public static GenLayerOverviewText(): BaseUIElement {
for (const id of Constants.priviliged_layers) {
if (!AllKnownLayouts.sharedLayers.has(id)) {
throw "Priviliged layer definition not found: " + id
}
}
const allLayers: LayerConfig[] = Array.from(AllKnownLayouts.sharedLayers.values()).filter(
(layer) => Constants.priviliged_layers.indexOf(layer.id) < 0
)
const builtinLayerIds: Set<string> = new Set<string>()
allLayers.forEach((l) => builtinLayerIds.add(l.id))
const themesPerLayer = new Map<string, string[]>()
for (const layout of Array.from(AllKnownLayouts.allKnownLayouts.values())) {
for (const layer of layout.layers) {
if (!builtinLayerIds.has(layer.id)) {
continue
}
if (!themesPerLayer.has(layer.id)) {
themesPerLayer.set(layer.id, [])
}
themesPerLayer.get(layer.id).push(layout.id)
}
}
// Determine the cross-dependencies
const layerIsNeededBy: Map<string, string[]> = new Map<string, string[]>()
for (const layer of allLayers) {
for (const dep of DependencyCalculator.getLayerDependencies(layer)) {
const dependency = dep.neededLayer
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.",
new Title("Priviliged layers", 1),
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
)
),
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")
)
),
])
}
public static GenerateDocumentationForTheme(theme: LayoutConfig): BaseUIElement {
return new Combine([
new Title(new Combine([theme.title, "(", theme.id + ")"]), 2),
theme.description,
"This theme contains the following layers:",
new List(
theme.layers
.filter((l) => !l.id.startsWith("note_import_"))
.map((l) => new Link(l.id, "../Layers/" + l.id + ".md"))
),
"Available languages:",
new List(theme.language.filter((ln) => ln !== "_context")),
]).SetClass("flex flex-col")
}
public static getSharedLayers(): Map<string, LayerConfig> {
const sharedLayers = new Map<string, LayerConfig>()
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 getSharedLayersConfigs(): Map<string, LayerConfigJson> {
const sharedLayers = new Map<string, LayerConfigJson>()
for (const layer of known_themes["layers"]) {
// @ts-ignore
sharedLayers.set(layer.id, layer)
}
return sharedLayers
}
private static GenerateOrderedList(allKnownLayouts: Map<string, LayoutConfig>): LayoutConfig[] {
const list = []
allKnownLayouts.forEach((layout) => {
list.push(layout)
})
return list
}
private static AllLayouts(): Map<string, LayoutConfig> {
const dict: Map<string, LayoutConfig> = new Map()
for (const layoutConfigJson of known_themes["themes"]) { for (const layoutConfigJson of known_themes["themes"]) {
this.dict.set(layoutConfigJson.id, {
func: () => {
const layout = new LayoutConfig(<LayoutConfigJson>layoutConfigJson, true) const layout = new LayoutConfig(<LayoutConfigJson>layoutConfigJson, true)
dict.set(layout.id, layout)
for (let i = 0; i < layout.layers.length; i++) { for (let i = 0; i < layout.layers.length; i++) {
let layer = layout.layers[i] let layer = layout.layers[i]
if (typeof layer === "string") { if (typeof layer === "string") {
layer = AllKnownLayouts.sharedLayers.get(layer) throw "Layer " + layer + " was not expanded in " + layout.id
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 layout
},
})
} }
} }
return dict
public get(key: string): LayoutConfig {
const thunk = this.dict.get(key)
if (thunk === undefined) {
return undefined
}
if (thunk["data"]) {
return thunk["data"]
}
const layout = thunk["func"]()
this.dict.set(key, { data: layout })
return layout
}
public keys() {
return this.dict.keys()
}
public values() {
return Array.from(this.keys()).map((k) => this.get(k))
} }
} }
export class AllKnownLayouts {
public static allKnownLayouts: AllKnownLayoutsLazy = new AllKnownLayoutsLazy()
}

View file

@ -0,0 +1,69 @@
import LayerConfig from "../Models/ThemeConfig/LayerConfig"
import { Utils } from "../Utils"
import known_themes from "../assets/generated/known_layers.json"
import { LayerConfigJson } from "../Models/ThemeConfig/Json/LayerConfigJson"
import { ALL } from "dns"
import { AllKnownLayouts } from "./AllKnownLayouts"
export class AllSharedLayers {
public static sharedLayers: Map<string, LayerConfig> = AllSharedLayers.getSharedLayers()
public static getSharedLayersConfigs(): Map<string, LayerConfigJson> {
const sharedLayers = new Map<string, LayerConfigJson>()
for (const layer of known_themes.layers) {
// @ts-ignore
sharedLayers.set(layer.id, layer)
}
return sharedLayers
}
private static getSharedLayers(): Map<string, LayerConfig> {
const sharedLayers = new Map<string, LayerConfig>()
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 AllPublicLayers(options?: {
includeInlineLayers: true | boolean
}): LayerConfig[] {
const allLayers: LayerConfig[] = []
const seendIds = new Set<string>()
AllSharedLayers.sharedLayers.forEach((layer, key) => {
seendIds.add(key)
allLayers.push(layer)
})
if (options?.includeInlineLayers ?? true) {
const publicLayouts = Array.from(AllKnownLayouts.allKnownLayouts.values()).filter(
(l) => !l.hideFromOverview
)
for (const layout of publicLayouts) {
if (layout.hideFromOverview) {
continue
}
for (const layer of layout.layers) {
if (seendIds.has(layer.id)) {
continue
}
seendIds.add(layer.id)
allLayers.push(layer)
}
}
}
return allLayers
}
}

View file

@ -1,5 +1,4 @@
import * as questions from "../assets/tagRenderings/questions.json" import questions from "../assets/tagRenderings/questions.json"
import * as icons from "../assets/tagRenderings/icons.json"
import { Utils } from "../Utils" import { Utils } from "../Utils"
import TagRenderingConfig from "../Models/ThemeConfig/TagRenderingConfig" import TagRenderingConfig from "../Models/ThemeConfig/TagRenderingConfig"
import { TagRenderingConfigJson } from "../Models/ThemeConfig/Json/TagRenderingConfigJson" import { TagRenderingConfigJson } from "../Models/ThemeConfig/Json/TagRenderingConfigJson"
@ -14,11 +13,9 @@ export default class SharedTagRenderings {
SharedTagRenderings.generatedSharedFields() SharedTagRenderings.generatedSharedFields()
public static SharedTagRenderingJson: Map<string, TagRenderingConfigJson> = public static SharedTagRenderingJson: Map<string, TagRenderingConfigJson> =
SharedTagRenderings.generatedSharedFieldsJsons() SharedTagRenderings.generatedSharedFieldsJsons()
public static SharedIcons: Map<string, TagRenderingConfig> =
SharedTagRenderings.generatedSharedFields(true)
private static generatedSharedFields(iconsOnly = false): Map<string, TagRenderingConfig> { private static generatedSharedFields(): Map<string, TagRenderingConfig> {
const configJsons = SharedTagRenderings.generatedSharedFieldsJsons(iconsOnly) const configJsons = SharedTagRenderings.generatedSharedFieldsJsons()
const d = new Map<string, TagRenderingConfig>() const d = new Map<string, TagRenderingConfig>()
for (const key of Array.from(configJsons.keys())) { for (const key of Array.from(configJsons.keys())) {
try { try {
@ -31,7 +28,7 @@ export default class SharedTagRenderings {
console.error( console.error(
"BUG: could not parse", "BUG: could not parse",
key, key,
" from questions.json or icons.json - this error happened during the build step of the SharedTagRenderings", " from questions.json - this error happened during the build step of the SharedTagRenderings",
e e
) )
} }
@ -40,25 +37,15 @@ export default class SharedTagRenderings {
return d return d
} }
private static generatedSharedFieldsJsons( private static generatedSharedFieldsJsons(): Map<string, TagRenderingConfigJson> {
iconsOnly = false
): Map<string, TagRenderingConfigJson> {
const dict = new Map<string, TagRenderingConfigJson>() const dict = new Map<string, TagRenderingConfigJson>()
if (!iconsOnly) {
for (const key in questions) { for (const key in questions) {
if (key === "id") { if (key === "id") {
continue continue
} }
dict.set(key, <TagRenderingConfigJson>questions[key]) dict.set(key, <TagRenderingConfigJson>questions[key])
} }
}
for (const key in icons) {
if (key === "id") {
continue
}
dict.set(key, <TagRenderingConfigJson>icons[key])
}
dict.forEach((value, key) => { dict.forEach((value, key) => {
if (key === "id") { if (key === "id") {

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
Index of builtin TagRendering Index of builtin TagRendering
=============================== ===============================
@ -48,13 +48,13 @@
+ [questions](#questions) + [questions](#questions)
+ [export_as_gpx](#export_as_gpx) + [export_as_gpx](#export_as_gpx)
+ [export_as_geojson](#export_as_geojson) + [export_as_geojson](#export_as_geojson)
+ [{upload_to_osm()}](#{upload_to_osm()})
+ [minimap](#minimap) + [minimap](#minimap)
+ [payment-options-split](#payment-options-split)
+ [denominations-coins](#denominations-coins)
+ [denominations-notes](#denominations-notes)
+ [id_presets.shop_types](#id_presetsshop_types) + [id_presets.shop_types](#id_presetsshop_types)
+ [school.capacity](#schoolcapacity) + [school.capacity](#schoolcapacity)
+ [school.gender](#schoolgender) + [school.gender](#schoolgender)
+ [payment-options-split](#payment-options-split)
+ [denominations-coins](#denominations-coins)
+ [toilet.toilets-type](#toilettoilets-type) + [toilet.toilets-type](#toilettoilets-type)
+ [toilet.toilets-changing-table](#toilettoilets-changing-table) + [toilet.toilets-changing-table](#toilettoilets-changing-table)
+ [toilet.toilet-changing_table:location](#toilettoilet-changing_table:location) + [toilet.toilet-changing_table:location](#toilettoilet-changing_table:location)
@ -101,6 +101,7 @@
- climbing_area - climbing_area
- climbing_gym - climbing_gym
- climbing_route - climbing_route
- clock
- crossings - crossings
- defibrillator - defibrillator
- dentist - dentist
@ -112,6 +113,7 @@
- extinguisher - extinguisher
- fire_station - fire_station
- fitness_centre - fitness_centre
- fitness_station
- food - food
- ghost_bike - ghost_bike
- governments - governments
@ -128,6 +130,7 @@
- parcel_lockers - parcel_lockers
- parking - parking
- parking_spaces - parking_spaces
- parking_ticket_machine
- pharmacy - pharmacy
- physiotherapist - physiotherapist
- picnic_table - picnic_table
@ -156,6 +159,7 @@
- viewpoint - viewpoint
- village_green - village_green
- waste_basket - waste_basket
- waste_disposal
- windturbine - windturbine
@ -739,17 +743,6 @@
- gps_track
### {upload_to_osm()}
- gps_track - gps_track
@ -766,6 +759,43 @@
### payment-options-split
- parking_ticket_machine
- ticket_machine
- toilet
### denominations-coins
- parking_ticket_machine
- ticket_machine
### denominations-notes
- parking_ticket_machine
- ticket_machine
### id_presets.shop_types ### id_presets.shop_types
@ -799,29 +829,6 @@
### payment-options-split
- ticket_machine
- toilet
### denominations-coins
- ticket_machine
### toilet.toilets-type ### toilet.toilets-type

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
Special and other useful layers Special and other useful layers
================================= =================================
@ -27,7 +27,7 @@
+ [Privacy notice](#privacy-notice) + [Privacy notice](#privacy-notice)
+ [export_as_gpx](#export_as_gpx) + [export_as_gpx](#export_as_gpx)
+ [export_as_geojson](#export_as_geojson) + [export_as_geojson](#export_as_geojson)
+ [uploadtoosm](#uploadtoosm) + [upload_to_osm](#upload_to_osm)
+ [minimap](#minimap) + [minimap](#minimap)
+ [delete](#delete) + [delete](#delete)
1. [type_node](#type_node) 1. [type_node](#type_node)
@ -349,7 +349,7 @@ This tagrendering has no question and is thus read-only
### uploadtoosm ### upload_to_osm
@ -946,6 +946,7 @@ The following layers are included in MapComplete:
- [climbing_gym](./Layers/climbing_gym.md) - [climbing_gym](./Layers/climbing_gym.md)
- [climbing_opportunity](./Layers/climbing_opportunity.md) - [climbing_opportunity](./Layers/climbing_opportunity.md)
- [climbing_route](./Layers/climbing_route.md) - [climbing_route](./Layers/climbing_route.md)
- [clock](./Layers/clock.md)
- [cluster_style](./Layers/cluster_style.md) - [cluster_style](./Layers/cluster_style.md)
- [conflation](./Layers/conflation.md) - [conflation](./Layers/conflation.md)
- [crab_address](./Layers/crab_address.md) - [crab_address](./Layers/crab_address.md)
@ -978,6 +979,7 @@ The following layers are included in MapComplete:
- [hospital](./Layers/hospital.md) - [hospital](./Layers/hospital.md)
- [hotel](./Layers/hotel.md) - [hotel](./Layers/hotel.md)
- [hydrant](./Layers/hydrant.md) - [hydrant](./Layers/hydrant.md)
- [icons](./Layers/icons.md)
- [id_presets](./Layers/id_presets.md) - [id_presets](./Layers/id_presets.md)
- [import_candidate](./Layers/import_candidate.md) - [import_candidate](./Layers/import_candidate.md)
- [indoors](./Layers/indoors.md) - [indoors](./Layers/indoors.md)
@ -998,6 +1000,7 @@ The following layers are included in MapComplete:
- [parcel_lockers](./Layers/parcel_lockers.md) - [parcel_lockers](./Layers/parcel_lockers.md)
- [parking](./Layers/parking.md) - [parking](./Layers/parking.md)
- [parking_spaces](./Layers/parking_spaces.md) - [parking_spaces](./Layers/parking_spaces.md)
- [parking_ticket_machine](./Layers/parking_ticket_machine.md)
- [pedestrian_path](./Layers/pedestrian_path.md) - [pedestrian_path](./Layers/pedestrian_path.md)
- [pharmacy](./Layers/pharmacy.md) - [pharmacy](./Layers/pharmacy.md)
- [physiotherapist](./Layers/physiotherapist.md) - [physiotherapist](./Layers/physiotherapist.md)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
Builtin questions Builtin questions
=================== ===================
@ -20,7 +20,6 @@ The following items can be easily reused in your layers
+ [minimap](#minimap) + [minimap](#minimap)
+ [phone](#phone) + [phone](#phone)
+ [osmlink](#osmlink) + [osmlink](#osmlink)
+ [wikipedialink](#wikipedialink)
+ [email](#email) + [email](#email)
+ [website](#website) + [website](#website)
+ [wheelchair-access](#wheelchair-access) + [wheelchair-access](#wheelchair-access)
@ -34,6 +33,7 @@ The following items can be easily reused in your layers
+ [payment-options-split](#payment-options-split) + [payment-options-split](#payment-options-split)
+ [payment-options-advanced](#payment-options-advanced) + [payment-options-advanced](#payment-options-advanced)
+ [denominations-coins](#denominations-coins) + [denominations-coins](#denominations-coins)
+ [denominations-notes](#denominations-notes)
+ [last_edit](#last_edit) + [last_edit](#last_edit)
+ [all_tags](#all_tags) + [all_tags](#all_tags)
+ [multilevels](#multilevels) + [multilevels](#multilevels)
@ -43,13 +43,6 @@ The following items can be easily reused in your layers
+ [internet](#internet) + [internet](#internet)
+ [internet-fee](#internet-fee) + [internet-fee](#internet-fee)
+ [internet-ssid](#internet-ssid) + [internet-ssid](#internet-ssid)
+ [default](#default)
+ [defaults](#defaults)
+ [isOpen](#isopen)
+ [phonelink](#phonelink)
+ [emaillink](#emaillink)
+ [smokingicon](#smokingicon)
+ [sharelink](#sharelink)
@ -158,29 +151,13 @@ What is the phone number of {title()}?
<a href='https://openstreetmap.org/{id}' target='_blank'><img alt='on osm' textmode='🗺️' src='./assets/svg/osm-logo-us.svg'/></a> <a href='https://openstreetmap.org/{id}' target='_blank'><img src='./assets/svg/osm-logo-us.svg'/></a>
*Read-only tagrendering* *Read-only tagrendering*
- - <span class='alert'>Uploading...</alert>
- <a href='{_backend}/{id}' target='_blank'><img src='./assets/svg/osm-logo-us.svg'/></a>
### wikipedialink
<a href='https://wikipedia.org/wiki/{wikipedia}' target='_blank'><img src='./assets/svg/wikipedia.svg' textmode='📖' alt='Wikipedia'/></a>
*Read-only tagrendering*
- <a href='https://www.wikidata.org/wiki/{wikidata}' target='_blank'><img src='./assets/svg/wikidata.svg' alt='WD'/></a>
@ -253,7 +230,7 @@ Are dogs allowed in this business?
{description} {description}
Is there still something relevant you couldn't give in the previous questions? Add it here.<br/><span style='font-size: small'>Don't repeat already stated facts</span> Is there still something relevant you couldn't give in the previous questions? Add it here.
@ -382,6 +359,25 @@ What coins can you use to pay here?
### denominations-notes
what notes can you use to pay here?
- 5 euro notes are accepted
- 10 euro notes are accepted
- 20 euro notes are accepted
- 50 euro notes are accepted
- 100 euro notes are accepted
- 200 euro notes are accepted
- 500 euro notes are accepted
### last_edit ### last_edit
@ -514,80 +510,4 @@ What is the network name for the wireless internet access?
- Telekom - Telekom
### 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
<a href='tel:{phone}'><img textmode='📞' alt='phone' src='./assets/tagRenderings/phone.svg'/></a>
*Read-only tagrendering*
### emaillink
<a href='mailto:{email}'><img textmode='✉️' alt='email' src='./assets/tagRenderings/send_email.svg'/></a>
*Read-only tagrendering*
### smokingicon
*Read-only tagrendering*
- <img textmode='🚭️' alt='no-smoking' src='./assets/tagRenderings/no_smoking.svg'/>
- <img textmode='🚬️' alt='smoking-allowed' src='./assets/tagRenderings/smoking.svg'/>
### 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) 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)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
Metatags Metatags
========== ==========
@ -23,6 +23,7 @@
+ [sidewalk:left, sidewalk:right, generic_key:left:property, generic_key:right:property](#sidewalkleft,-sidewalk:right,-generic_key:left:property,-generic_key:right:property) + [sidewalk:left, sidewalk:right, generic_key:left:property, generic_key:right:property](#sidewalkleft,-sidewalk:right,-generic_key:left:property,-generic_key:right:property)
+ [_geometry:type](#_geometrytype) + [_geometry:type](#_geometrytype)
+ [_level](#_level) + [_level](#_level)
+ [_referencing_ways](#_referencing_ways)
+ [distanceTo](#distanceto) + [distanceTo](#distanceto)
+ [overlapWith](#overlapwith) + [overlapWith](#overlapwith)
+ [enclosingFeatures](#enclosingfeatures) + [enclosingFeatures](#enclosingfeatures)
@ -191,6 +192,16 @@ Extract the 'level'-tag into a normalized, ';'-separated value
### _referencing_ways
_referencing_ways contains - for a node - which ways use this this node as point in their geometry.
This is a lazy metatag and is only calculated when needed
Calculating tags with Javascript Calculating tags with Javascript
---------------------------------- ----------------------------------

View file

@ -24,26 +24,27 @@ the switch ;) ). If you are using Visual Studio Code you can use
a [WSL Remote](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl) window, or use the a [WSL Remote](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl) window, or use the
Devcontainer (see more details later). Devcontainer (see more details later).
You need at least 3Gb available to run MapComplete. You need at least 3Gb RAM available to run MapComplete, but you'll preferably have 8GB of free RAM available.
To develop and build MapComplete, you To develop and build MapComplete, you
0. Make a fork and clone the repository. (We recommend a shallow clone with `git clone --filter=blob:none <repo>`) 0. Make a fork and clone the repository. (We recommend a shallow clone with `git clone --filter=blob:none <repo>`)
1. Install `python3` if you do not have it already 1. Install `python3` if you do not have it already - On linux: `sudo apt install python3`
- On linux: `sudo apt install python3` 2. Install `nvm` to easily install node:
- On windows: find the latest download on the [Python Releases for Windows page](https://www.python.org/downloads/windows/) - `wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash`
2. Install the nodejs version specified in [/.tool-versions](/.tool-versions) - Restart your terminal
- On linux: install npm first `sudo apt install npm`, then install `n` using npm: ` npm install -g n`, which can - Run `nvm install` and `nvm use` to install and use the correct version of node. (_Note: nvm might complain that the relevant version is not yet installed. It'll have it installed only for the current user account but not system-wide - which is fine)
then install node with `n install <node-version>`. You can [use asdf to manage your runtime versions](https://asdf-vm.com/). 4. Run `npm run init` (including **run**, not ~~`npm init`~~)which …
- Windows: install nodeJS: https://nodejs.org/en/download/ - runs `npm ci` for you
3. Run `npm run init` which …
- runs `npm install`
- generates some additional dependencies and files - generates some additional dependencies and files
4. Run `npm run start` to host a local testversion at http://localhost:1234/index.html - does various housekeeping and setup. This can take a few minutes the first time as some pngs need to be created
5. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename` 5. Run `npm run start` to host a local testversion at http://localhost:1234/
6. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename`
or `userlayout=true#<layout configuration>` as [Query parameter](URL_Parameters.md). Note that the shorter URLs ( or `userlayout=true#<layout configuration>` as [Query parameter](URL_Parameters.md). Note that the shorter URLs (
e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version. e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version.
The previous instructions were tested on 2023-03-09 on a Ubuntu 22.04 machine
Development using Windows Development using Windows
------------------------ ------------------------

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
Hotkeys Hotkeys
========= =========

View file

@ -0,0 +1,136 @@
# Integrating MapRoulette
[MapRoulette](https://www.maproulette.org/) is a website which has challenges. A challenge is a collection of _microtasks_, i.e. mapping
tasks which can be solved in a few minutes.
A perfect example of this is to setup such a challenge to e.g. import new points. [Important: always follow the import guidelines if you want to import data.](https://wiki.openstreetmap.org/wiki/Import/Guidelines)
(Another approach to set up a guided import is to create a map note for every point with the [import helper](https://mapcomplete.osm.be/import_helper). This however litters the map notes and will upset mappers if used with to much points. However, this flow is easier to setup as no changes to theme files are needed, nor is a maproulette-account needed)
## The API
**Most of the heavy lifting is done in [layer `maproulette-challenge`](./Docs/Layers/maproulette_challenge.md). Extend this layer with your needs.**
The API is shortly discussed here for future reference only.
There is an API-endpoint at `https://maproulette.org/api/v2/tasks/box/{x_min}/{y_min}/{x_max}/{y_max}` which can be used
to query _all_ tasks in a bbox and returns this as geojson. Hint:
use [the maproulette theme in debug mode](https://mapcomplete.osm.be/maproulette?debug=true) to inspect all properties.
To view the overview a single challenge, visit `https://maproulette.org/browse/challenges/<challenge-id>` with your
browser.
The API endpoint for a single challenge is `https://maproulette.org/api/v2/challenge/view/<challenge-id>` which returns a
geojson.
## Displaying MapRoulette data in MapComplete
As you'll probably want to link MapComplete to your challenge, reuse [maproulette_challenge](Docs/Layers/maproulette_challenge.md).
It has a basic framework already to load the tags.
Of course, interacting with the tasks is the next step.
### Detecting nearby features
You can use [`calculatedTags`](./Docs/CalculatedTags.md) to add a small piece of code to e.g. detect nearby entities.
The following example is to match hotels:
```
"calculatedTags": [
"_closest_osm_hotel=feat.closest('hotel')?.properties?.id",
"_closest_osm_hotel_distance=feat.distanceTo(feat.properties._closest_osm_hotel)",
"_has_closeby_feature=Number(feat.properties._closest_osm_hotel_distance) < 50 ? 'yes' : 'no'"
],
```
This can be used to decide if tags should be applied on an existing object or a new point should be created.
### Creating a new point based on a maproulette challenge (Guided import)
**Requirement**: the MapRoulette task should have `tags` added.
One can add `import`-button in the featureInfoBox ([documentation here](./Docs/SpecialRenderings.md#importbutton)).
Note that the import button has support for MapRoulette and is able to close the task if the property containing the maproulette-id is given:
```json
{
"id": "import-button",
"render": {
"special": {
"type": "import_button",
"targetLayer": "<the layer in which the point should appear afterwards>",
"tags": "tags", -- should stay 'tags'
"maproulette_id": "mr_taskId", -- important to get the task closed
"text": {
"en": "Import this point" -- or a nice message
},
"icon": "./assets/svg/addSmall.svg", -- optional, feel free to change
"location_picker": "photo", -- optional, background layer to pinpoint the hotel
}
}
}
```
### Applying tags to already existing features
For this, [the `tag_apply`-button can be used](./Docs/SpecialRenderings.md#tagapply).
The following example uses the calculated tags `_has_closeby_feature` and `_closest_osm_hotel`. These were added by a small extra script using `calculatedTagss`.
```json
{
"id": "tag-apply-button",
"condition": "_has_closeby_feature=yes", -- don't show if no feature to add to
"render": {
"special": {
"type": "tag_apply",
"tags_to_apply": "$tags", -- note the '$', property containing the tags
"id_of_object_to_apply_this_one": "_closest_osm_hotel" -- id of the feature to add those tags to
"message": {
"en": "Add all the suggested tags"
},
"image": "./assets/svg/addSmall.svg"
}
}
}
```
### Changing the status of the task
The easiest way is to reuse a tagrendering from the [Maproulette-layer](./Docs/Layers/maproulette.md) (_not_ the `maproulette-challenge`-layer!), such as [`maproulette.mark_fixed`](./Docs/Layers/maproulette.md#markfixed),[`maproulette.mark_duplicate`](./Docs/Layers/maproulette.md#markduplicate),[`maproulette.mark_too_hard`](./Docs/Layers/maproulette.md#marktoohard).
In the background, these use the special visualisation [`maproulette_set_status`](./Docs/SpecialRenderings.md#maproulettesetstatus) - which allows to apply different status codes or different messages/icons.
## Creating a maproulette challenge
A challenge can be created on https://maproulette.org/admin/projects
This can be done with a geojson-file (or by other means).
MapRoulette works as a geojson-store with status fields added. As such, you have a bit of freedom in creating the data, but an **id** field is mandatory. A **name** tag is recommended
To setup a guided import, add a `tags`-field with tags formatted in such a way that they are compatible with the [import-button](./Docs/SpecialRenderings.md#specifying-which-tags-to-copy-or-add)
(The following example is not tested and might be wrong.)
```
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {"type": "Point", "coordinates": [1.234, 5.678]},
"properties": {
"id": ...
"tags": "foo=bar;name=xyz",
}
}
]
}
```

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
address address
========= =========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
all_streets all_streets
============= =============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
ambulancestation ambulancestation
================== ==================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
artwork artwork
========= =========
@ -378,7 +378,7 @@ This tagrendering has labels `bench-questions`
The question is *Does this bench have an inscription?<div class='subtle text-lg'>E.g. on a mounted plaque, in the backrest, ...</div>* The question is *Does this bench have an inscription?*
This rendering asks information about the property [inscription](https://wiki.openstreetmap.org/wiki/Key:inscription) This rendering asks information about the property [inscription](https://wiki.openstreetmap.org/wiki/Key:inscription)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
atm atm
===== =====

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bank bank
====== ======

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
banks_with_atm banks_with_atm
================ ================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
barrier barrier
========= =========
@ -100,6 +100,8 @@ The question is *Can a bicycle go past this barrier?*
- *A cyclist can not go past this.* corresponds with `bicycle=no` - *A cyclist can not go past this.* corresponds with `bicycle=no`
This tagrendering is only visible in the popup if the following condition is met: `_referencing_ways~.+`
### barrier_type ### barrier_type
@ -171,6 +173,8 @@ This is rendered with `Maximum width: {maxwidth:physical} m`
This tagrendering is only visible in the popup if the following condition is met: `cycle_barrier!=double&cycle_barrier!=triple&_referencing_ways~.+`
### Space between barrier (cyclebarrier) ### Space between barrier (cyclebarrier)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bench bench
======= =======
@ -225,7 +225,7 @@ This tagrendering has labels `bench-questions`
The question is *Does this bench have an inscription?<div class='subtle text-lg'>E.g. on a mounted plaque, in the backrest, ...</div>* The question is *Does this bench have an inscription?*
This rendering asks information about the property [inscription](https://wiki.openstreetmap.org/wiki/Key:inscription) This rendering asks information about the property [inscription](https://wiki.openstreetmap.org/wiki/Key:inscription)
@ -248,7 +248,7 @@ This tagrendering has labels `bench-questions`
The question is *Does this bench have an artistic element?<div class='subtle text-lg'>E.g. it has an integrated painting, statue or other non-trivial, creative work</div>* The question is *Does this bench have an artistic element?*

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bench_at_pt bench_at_pt
============= =============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bicycle_library bicycle_library
================= =================
@ -214,7 +214,7 @@ The question is *Who can loan bicycles here?*
The question is *Is there still something relevant you couldn't give in the previous questions? Add it here.<br/><span style='font-size: small'>Don't repeat already stated facts</span>* The question is *Is there still something relevant you couldn't give in the previous questions? Add it here.*
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)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bicycle_rental bicycle_rental
================ ================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bicycle_rental_non_docking bicycle_rental_non_docking
============================ ============================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bicycle_tube_vending_machine bicycle_tube_vending_machine
============================== ==============================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bike_cafe bike_cafe
=========== ===========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bike_cleaning bike_cleaning
=============== ===============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bike_parking bike_parking
============== ==============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bike_repair_station bike_repair_station
===================== =====================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bike_shop bike_shop
=========== ===========
@ -40,10 +40,10 @@ Elements must have the all of following tags to be shown on this layer:
- <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle' target='_blank'>bicycle</a>|<a href='https://wiki.openstreetmap.org/wiki/Key:amenity' target='_blank'>amenity</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dbicycle_rental' target='_blank'>bicycle_rental</a>|<a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsports' target='_blank'>sports</a>&service:bicycle:retail!=no&service:bicycle:repair!=no&<a href='https://wiki.openstreetmap.org/wiki/Key:sport' target='_blank'>sport</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:sport%3Dbicycle' target='_blank'>bicycle</a>|<a href='https://wiki.openstreetmap.org/wiki/Key:sport' target='_blank'>sport</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:sport%3Dcycling' target='_blank'>cycling</a>| - <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle' target='_blank'>bicycle</a>|<a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsports' target='_blank'>sports</a>&service:bicycle:retail!=no&service:bicycle:repair!=no&<a href='https://wiki.openstreetmap.org/wiki/Key:sport' target='_blank'>sport</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:sport%3Dbicycle' target='_blank'>bicycle</a>|<a href='https://wiki.openstreetmap.org/wiki/Key:sport' target='_blank'>sport</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:sport%3Dcycling' target='_blank'>cycling</a>|
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22shop%22%3D%22bicycle%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22amenity%22%3D%22bicycle_rental%22%5D%5B!%22network%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22shop%22%3D%22sports%22%5D%5B%22sport%22%3D%22bicycle%22%5D%5B%22service%3Abicycle%3Aretail%22!%3D%22no%22%5D%5B%22service%3Abicycle%3Arepair%22!%3D%22no%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22shop%22%3D%22sports%22%5D%5B%22sport%22%3D%22cycling%22%5D%5B%22service%3Abicycle%3Aretail%22!%3D%22no%22%5D%5B%22service%3Abicycle%3Arepair%22!%3D%22no%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22shop%22%3D%22sports%22%5D%5B!%22sport%22%5D%5B%22service%3Abicycle%3Aretail%22!%3D%22no%22%5D%5B%22service%3Abicycle%3Arepair%22!%3D%22no%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) [Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22shop%22%3D%22bicycle%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22shop%22%3D%22sports%22%5D%5B%22sport%22%3D%22bicycle%22%5D%5B%22service%3Abicycle%3Aretail%22!%3D%22no%22%5D%5B%22service%3Abicycle%3Arepair%22!%3D%22no%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22shop%22%3D%22sports%22%5D%5B%22sport%22%3D%22cycling%22%5D%5B%22service%3Abicycle%3Aretail%22!%3D%22no%22%5D%5B%22service%3Abicycle%3Arepair%22!%3D%22no%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22shop%22%3D%22sports%22%5D%5B!%22sport%22%5D%5B%22service%3Abicycle%3Aretail%22!%3D%22no%22%5D%5B%22service%3Abicycle%3Arepair%22!%3D%22no%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
@ -518,7 +518,7 @@ This is rendered with `Using the cleaning service costs {service:bicycle:cleani
The question is *Is there still something relevant you couldn't give in the previous questions? Add it here.<br/><span style='font-size: small'>Don't repeat already stated facts</span>* The question is *Is there still something relevant you couldn't give in the previous questions? Add it here.*
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)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
bike_themed_object bike_themed_object
==================== ====================
@ -85,7 +85,7 @@ This tagrendering has no question and is thus read-only
The question is *Is there still something relevant you couldn't give in the previous questions? Add it here.<br/><span style='font-size: small'>Don't repeat already stated facts</span>* The question is *Is there still something relevant you couldn't give in the previous questions? Add it here.*
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)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
binocular binocular
=========== ===========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
birdhide birdhide
========== ==========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
cafe_pub cafe_pub
========== ==========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
car_rental car_rental
============ ============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
caravansites caravansites
============== ==============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
charging_station charging_station
================== ==================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
charging_station_ebikes charging_station_ebikes
========================= =========================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
climbing climbing
========== ==========
@ -184,7 +184,7 @@ The question is *Is sport climbing possible here on fixed anchors?*
The question is *Is traditional climbing possible here (using own gear e.g. chocks)?* The question is *Is traditional climbing possible here?*

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
climbing_area climbing_area
=============== ===============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
climbing_club climbing_club
=============== ===============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
climbing_gym climbing_gym
============== ==============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
climbing_opportunity climbing_opportunity
====================== ======================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
climbing_route climbing_route
================ ================
@ -153,7 +153,7 @@ This is rendered with `This route has {climbing:bolts} bolts <div class='subtle
The question is *Is there still something relevant you couldn't give in the previous questions? Add it here.<br/><span style='font-size: small'>Don't repeat already stated facts</span>* The question is *Is there still something relevant you couldn't give in the previous questions? Add it here.*
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)

232
Docs/Layers/clock.md Normal file
View file

@ -0,0 +1,232 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
clock
=======
<img src='https://mapcomplete.osm.be/./assets/layers/clock/clock.svg' height="100px">
Layer with public clocks
- This layer is shown at zoomlevel **13** and higher
- This layer will automatically load [walls_and_buildings](./walls_and_buildings.md) into the layout as it depends on it: a preset snaps to this layer (presets[1])
#### Themes using this layer
- [clock](https://mapcomplete.osm.be/clock)
- [personal](https://mapcomplete.osm.be/personal)
Basic tags for this layer
---------------------------
Elements must have the all of following tags to be shown on this layer:
- <a href='https://wiki.openstreetmap.org/wiki/Key:amenity' target='_blank'>amenity</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dclock' target='_blank'>clock</a>
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22amenity%22%3D%22clock%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
Supported attributes
----------------------
Warning:
this quick overview is incomplete
attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/support#values) [support](https://wiki.openstreetmap.org/wiki/Key:support) | Multiple choice | [pole](https://wiki.openstreetmap.org/wiki/Tag:support%3Dpole) [wall_mounted](https://wiki.openstreetmap.org/wiki/Tag:support%3Dwall_mounted) [billboard](https://wiki.openstreetmap.org/wiki/Tag:support%3Dbillboard) [ground](https://wiki.openstreetmap.org/wiki/Tag:support%3Dground)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/display#values) [display](https://wiki.openstreetmap.org/wiki/Key:display) | Multiple choice | [analog](https://wiki.openstreetmap.org/wiki/Tag:display%3Danalog) [digital](https://wiki.openstreetmap.org/wiki/Tag:display%3Ddigital) [sundial](https://wiki.openstreetmap.org/wiki/Tag:display%3Dsundial) [unorthodox](https://wiki.openstreetmap.org/wiki/Tag:display%3Dunorthodox)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/visibility#values) [visibility](https://wiki.openstreetmap.org/wiki/Key:visibility) | Multiple choice | [house](https://wiki.openstreetmap.org/wiki/Tag:visibility%3Dhouse) [street](https://wiki.openstreetmap.org/wiki/Tag:visibility%3Dstreet) [area](https://wiki.openstreetmap.org/wiki/Tag:visibility%3Darea)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/date#values) [date](https://wiki.openstreetmap.org/wiki/Key:date) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:date%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:date%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/thermometer#values) [thermometer](https://wiki.openstreetmap.org/wiki/Key:thermometer) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:thermometer%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:thermometer%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/barometer#values) [barometer](https://wiki.openstreetmap.org/wiki/Key:barometer) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:barometer%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:barometer%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/hygrometer#values) [hygrometer](https://wiki.openstreetmap.org/wiki/Key:hygrometer) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:hygrometer%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:hygrometer%3Dno)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/faces#values) [faces](https://wiki.openstreetmap.org/wiki/Key:faces) | [pnat](../SpecialInputElements.md#pnat) | [1](https://wiki.openstreetmap.org/wiki/Tag:faces%3D1) [2](https://wiki.openstreetmap.org/wiki/Tag:faces%3D2) [4](https://wiki.openstreetmap.org/wiki/Tag:faces%3D4)
### images
This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata`
This tagrendering has no question and is thus read-only
### support
The question is *In what way is the clock mounted?*
- *This clock is mounted on a pole* corresponds with `support=pole`
- *This clock is mounted on a wall* corresponds with `support=wall_mounted`
- *This clock is part of a billboard* corresponds with `support=billboard`
- *This clock is on the ground* corresponds with `support=ground`
### display
The question is *How does this clock display the time?*
- *This clock displays the time with hands* corresponds with `display=analog`
- *This clock displays the time with digits* corresponds with `display=digital`
- *This clock displays the time with a sundial* corresponds with `display=sundial`
- *This clock displays the time in a non-standard way, e.g using binary, water or something else* corresponds with `display=unorthodox`
### visibility
The question is *How visible is this clock?*
- *This clock is visible from about 5 meters away (small wall-mounted clock)* corresponds with `visibility=house`
- *This clock is visible from about 20 meters away (medium size billboard clock)* corresponds with `visibility=street`
- *This clock is visible from more than 20 meters away (church clock)* corresponds with `visibility=area`
### date
The question is *Does this clock also display the date?*
- *This clock also displays the date* corresponds with `date=yes`
- *This clock does not display the date* corresponds with `date=no`
- *This clock does probably not display the date* corresponds with ``
- This option cannot be chosen as answer
### thermometer
The question is *Does this clock also display the temperature?*
- *This clock also displays the temperature* corresponds with `thermometer=yes`
- *This clock does not display the temperature* corresponds with `thermometer=no`
- *This clock does probably not display the temperature* corresponds with ``
- This option cannot be chosen as answer
### barometer
The question is *Does this clock also display the air pressure?*
- *This clock also displays the air pressure* corresponds with `barometer=yes`
- *This clock does not display the air pressure* corresponds with `barometer=no`
- *This clock does probably not display the air pressure* corresponds with ``
- This option cannot be chosen as answer
### hygrometer
The question is *Does this clock also display the humidity?*
- *This clock also displays the humidity* corresponds with `hygrometer=yes`
- *This clock does not display the humidity* corresponds with `hygrometer=no`
- *This clock does probably not display the humidity* corresponds with ``
- This option cannot be chosen as answer
### faces
The question is *How many faces does this clock have?*
This rendering asks information about the property [faces](https://wiki.openstreetmap.org/wiki/Key:faces)
This is rendered with `This clock has {faces} faces`
- *This clock has one face* corresponds with `faces=1`
- *This clock has two faces* corresponds with `faces=2`
- *This clock has four faces* corresponds with `faces=4`
This document is autogenerated from [assets/layers/clock/clock.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/clock/clock.json)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
cluster_style cluster_style
=============== ===============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
crab_address crab_address
============== ==============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
crossings crossings
=========== ===========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
cultural_places_without_etymology cultural_places_without_etymology
=================================== ===================================
@ -106,7 +106,7 @@ This tagrendering is only visible in the popup if the following condition is met
The question is *What is this object named after?<br/><span class='subtle'>This might be written on the street name sign</span>* The question is *What is this object named after?*
This rendering asks information about the property [name:etymology](https://wiki.openstreetmap.org/wiki/Key:name:etymology) This rendering asks information about the property [name:etymology](https://wiki.openstreetmap.org/wiki/Key:name:etymology)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
cycleways_and_roads cycleways_and_roads
===================== =====================
@ -287,7 +287,7 @@ This tagrendering is only visible in the popup if the following condition is met
The question is *What is the carriage width of this road (in meters)?<br/><span class='subtle'>This is measured curb to curb and thus includes the width of parallell parking lanes</span>* The question is *What is the carriage width of this road (in meters)?*
This rendering asks information about the property [width:carriageway](https://wiki.openstreetmap.org/wiki/Key:width:carriageway) This rendering asks information about the property [width:carriageway](https://wiki.openstreetmap.org/wiki/Key:width:carriageway)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
defibrillator defibrillator
=============== ===============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
dentist dentist
========= =========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
doctors doctors
========= =========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
dogfoodb dogfoodb
========== ==========
@ -503,7 +503,7 @@ This tagrendering is only visible in the popup if the following condition is met
The question is *If you bring your own container (such as a cooking pot and small pots), is it used to package your order?<br/>* The question is *If you bring your own container (such as a cooking pot and small pots), is it used to package your order?*

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
dogpark dogpark
========= =========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
dogshop dogshop
========= =========
@ -418,7 +418,7 @@ The question is *What paper formats does this shop offer?*
- Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:service:print:A0' target='_blank'>service:print:A0</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:print:A0%3Dno' target='_blank'>no</a> - Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:service:print:A0' target='_blank'>service:print:A0</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:print:A0%3Dno' target='_blank'>no</a>
This tagrendering is only visible in the popup if the following condition is met: `shop~^(.*copyshop.*)$|shop~^(.*stationary.*)$|service:print=yes` This tagrendering is only visible in the popup if the following condition is met: `shop~^(.*copyshop.*)$|shop~^(.*stationery.*)$|service:print=yes`

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
drinking_water drinking_water
================ ================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
dumpstations dumpstations
============== ==============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
education_institutions_without_etymology education_institutions_without_etymology
========================================== ==========================================
@ -106,7 +106,7 @@ This tagrendering is only visible in the popup if the following condition is met
The question is *What is this object named after?<br/><span class='subtle'>This might be written on the street name sign</span>* The question is *What is this object named after?*
This rendering asks information about the property [name:etymology](https://wiki.openstreetmap.org/wiki/Key:name:etymology) This rendering asks information about the property [name:etymology](https://wiki.openstreetmap.org/wiki/Key:name:etymology)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
elevator elevator
========== ==========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
entrance entrance
========== ==========
@ -140,7 +140,7 @@ The question is *What type of entrance is this?*
The question is *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>* The question is *What is the type of this door?*

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
etymology etymology
=========== ===========
@ -106,7 +106,7 @@ This tagrendering is only visible in the popup if the following condition is met
The question is *What is this object named after?<br/><span class='subtle'>This might be written on the street name sign</span>* The question is *What is this object named after?*
This rendering asks information about the property [name:etymology](https://wiki.openstreetmap.org/wiki/Key:name:etymology) This rendering asks information about the property [name:etymology](https://wiki.openstreetmap.org/wiki/Key:name:etymology)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
extinguisher extinguisher
============== ==============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
facadegardens facadegardens
=============== ===============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
fietsstraat fietsstraat
============= =============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
filters filters
========= =========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
fire_station fire_station
============== ==============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
fitness_centre fitness_centre
================ ================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
fitness_station fitness_station
================= =================
@ -68,6 +68,18 @@ attribute | type | values which are supported by this layer
### images
This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata`
This tagrendering has no question and is thus read-only
### name ### name

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
food food
====== ======
@ -506,7 +506,7 @@ This tagrendering is only visible in the popup if the following condition is met
The question is *If you bring your own container (such as a cooking pot and small pots), is it used to package your order?<br/>* The question is *If you bring your own container (such as a cooking pot and small pots), is it used to package your order?*

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
friture friture
========= =========
@ -503,7 +503,7 @@ This tagrendering is only visible in the popup if the following condition is met
The question is *If you bring your own container (such as a cooking pot and small pots), is it used to package your order?<br/>* The question is *If you bring your own container (such as a cooking pot and small pots), is it used to package your order?*

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
ghost_bike ghost_bike
============ ============
@ -94,7 +94,7 @@ This tagrendering has no question and is thus read-only
The question is *Whom is remembered by this ghost bike?<span class='question-subtext'><br/>Please respect privacy - only fill out the name if it is widely published or marked on the cycle. Opt to leave out the family name.</span>* The question is *Whom is remembered by this ghost bike?*
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)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
governments governments
============= =============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
grass_in_parks grass_in_parks
================ ================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
hackerspace hackerspace
============= =============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
health_and_social_places_without_etymology health_and_social_places_without_etymology
============================================ ============================================
@ -106,7 +106,7 @@ This tagrendering is only visible in the popup if the following condition is met
The question is *What is this object named after?<br/><span class='subtle'>This might be written on the street name sign</span>* The question is *What is this object named after?*
This rendering asks information about the property [name:etymology](https://wiki.openstreetmap.org/wiki/Key:name:etymology) This rendering asks information about the property [name:etymology](https://wiki.openstreetmap.org/wiki/Key:name:etymology)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
hospital hospital
========== ==========
@ -41,10 +41,10 @@ Elements must have the all of following tags to be shown on this layer:
- <a href='https://wiki.openstreetmap.org/wiki/Key:amenity' target='_blank'>amenity</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dhospital' target='_blank'>hospital</a> - <a href='https://wiki.openstreetmap.org/wiki/Key:amenity' target='_blank'>amenity</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dhospital' target='_blank'>hospital</a>|<a href='https://wiki.openstreetmap.org/wiki/Key:amenity' target='_blank'>amenity</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dclinic' target='_blank'>clinic</a>
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22amenity%22%3D%22hospital%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) [Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22amenity%22%3D%22hospital%22%5D(%7B%7Bbbox%7D%7D)%3B%0A%20%20%20%20nwr%5B%22amenity%22%3D%22clinic%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
@ -62,6 +62,7 @@ this quick overview is incomplete
attribute | type | values which are supported by this layer attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------ ----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) | [<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/name#values) [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/amenity#values) [amenity](https://wiki.openstreetmap.org/wiki/Key:amenity) | Multiple choice | [clinic](https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dclinic) [hospital](https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dhospital)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | [<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) | [<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/email#values) [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) | [<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/website#values) [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) |
@ -83,6 +84,22 @@ This is rendered with `This hospital is called {name}`
### inpatient
The question is *Does this facility admit inpatients?*
- *This is a clinic - patients can not stay overnight* corresponds with `amenity=clinic`
- *This is a hospital - patients can be admitted here for multiple days* corresponds with `amenity=hospital`
### phone ### phone

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
hotel hotel
======= =======

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
hydrant hydrant
========= =========
@ -64,6 +64,7 @@ attribute | type | values which are supported by this layer
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/fire_hydrant:type#values) [fire_hydrant:type](https://wiki.openstreetmap.org/wiki/Key:fire_hydrant:type) | [string](../SpecialInputElements.md#string) | [pillar](https://wiki.openstreetmap.org/wiki/Tag:fire_hydrant:type%3Dpillar) [pipe](https://wiki.openstreetmap.org/wiki/Tag:fire_hydrant:type%3Dpipe) [wall](https://wiki.openstreetmap.org/wiki/Tag:fire_hydrant:type%3Dwall) [underground](https://wiki.openstreetmap.org/wiki/Tag:fire_hydrant:type%3Dunderground) [<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/fire_hydrant:type#values) [fire_hydrant:type](https://wiki.openstreetmap.org/wiki/Key:fire_hydrant:type) | [string](../SpecialInputElements.md#string) | [pillar](https://wiki.openstreetmap.org/wiki/Tag:fire_hydrant:type%3Dpillar) [pipe](https://wiki.openstreetmap.org/wiki/Tag:fire_hydrant:type%3Dpipe) [wall](https://wiki.openstreetmap.org/wiki/Tag:fire_hydrant:type%3Dwall) [underground](https://wiki.openstreetmap.org/wiki/Tag:fire_hydrant:type%3Dunderground)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/emergency#values) [emergency](https://wiki.openstreetmap.org/wiki/Key:emergency) | Multiple choice | [fire_hydrant](https://wiki.openstreetmap.org/wiki/Tag:emergency%3Dfire_hydrant) [](https://wiki.openstreetmap.org/wiki/Tag:emergency%3D) [](https://wiki.openstreetmap.org/wiki/Tag:emergency%3D) [<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/emergency#values) [emergency](https://wiki.openstreetmap.org/wiki/Key:emergency) | Multiple choice | [fire_hydrant](https://wiki.openstreetmap.org/wiki/Tag:emergency%3Dfire_hydrant) [](https://wiki.openstreetmap.org/wiki/Tag:emergency%3D) [](https://wiki.openstreetmap.org/wiki/Tag:emergency%3D)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/fire_hydrant:diameter#values) [fire_hydrant:diameter](https://wiki.openstreetmap.org/wiki/Key:fire_hydrant:diameter) | [int](../SpecialInputElements.md#int) | [<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/fire_hydrant:diameter#values) [fire_hydrant:diameter](https://wiki.openstreetmap.org/wiki/Key:fire_hydrant:diameter) | [int](../SpecialInputElements.md#int) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/couplings#values) [couplings](https://wiki.openstreetmap.org/wiki/Key:couplings) | [int](../SpecialInputElements.md#int) |
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/couplings:type#values) [couplings:type](https://wiki.openstreetmap.org/wiki/Key:couplings:type) | [string](../SpecialInputElements.md#string) | [Storz](https://wiki.openstreetmap.org/wiki/Tag:couplings:type%3DStorz) [UNI](https://wiki.openstreetmap.org/wiki/Tag:couplings:type%3DUNI) [Barcelona](https://wiki.openstreetmap.org/wiki/Tag:couplings:type%3DBarcelona) [<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/couplings:type#values) [couplings:type](https://wiki.openstreetmap.org/wiki/Key:couplings:type) | [string](../SpecialInputElements.md#string) | [Storz](https://wiki.openstreetmap.org/wiki/Tag:couplings:type%3DStorz) [UNI](https://wiki.openstreetmap.org/wiki/Tag:couplings:type%3DUNI) [Barcelona](https://wiki.openstreetmap.org/wiki/Tag:couplings:type%3DBarcelona)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/couplings:diameters#values) [couplings:diameters](https://wiki.openstreetmap.org/wiki/Key:couplings:diameters) | [string](../SpecialInputElements.md#string) | [<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/couplings:diameters#values) [couplings:diameters](https://wiki.openstreetmap.org/wiki/Key:couplings:diameters) | [string](../SpecialInputElements.md#string) |
@ -84,8 +85,6 @@ This is rendered with `The hydrant color is {colour}`
- *The hydrant color is unknown.* corresponds with ``
- This option cannot be chosen as answer
- *The hydrant color is yellow.* corresponds with `colour=yellow` - *The hydrant color is yellow.* corresponds with `colour=yellow`
- *The hydrant color is red.* corresponds with `colour=red` - *The hydrant color is red.* corresponds with `colour=red`
@ -106,8 +105,6 @@ This is rendered with ` Hydrant type: {fire_hydrant:type}`
- *The hydrant type is unknown.* corresponds with ``
- This option cannot be chosen as answer
- *Pillar type.* corresponds with `fire_hydrant:type=pillar` - *Pillar type.* corresponds with `fire_hydrant:type=pillar`
- *Pipe type.* corresponds with `fire_hydrant:type=pipe` - *Pipe type.* corresponds with `fire_hydrant:type=pipe`
- *Wall type.* corresponds with `fire_hydrant:type=wall` - *Wall type.* corresponds with `fire_hydrant:type=wall`
@ -147,6 +144,20 @@ This is rendered with `Pipe diameter: {canonical(fire_hydrant:diameter)}`
### hydrant-number-of-couplings
The question is *How many couplings does this fire hydrant have?*
This rendering asks information about the property [couplings](https://wiki.openstreetmap.org/wiki/Key:couplings)
This is rendered with `Number of couplings: {couplings}`
### hydrant-couplings ### hydrant-couplings

176
Docs/Layers/icons.md Normal file
View file

@ -0,0 +1,176 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
icons
=======
A layer acting as library for icon-tagrenderings, especially to show as badge next to a POI
- This layer is shown at zoomlevel **0** and higher
- Elements don't have a title set and cannot be toggled nor will they show up in the dashboard. 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`
Basic tags for this layer
---------------------------
Elements must have the all of following tags to be shown on this layer:
- id~.+
[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B(%20%20%20%20nwr%5B%22id%22%5D(%7B%7Bbbox%7D%7D)%3B%0A)%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
Supported attributes
----------------------
Warning:
this quick overview is incomplete
attribute | type | values which are supported by this layer
----------- | ------ | ------------------------------------------
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/wikipedia#values) [wikipedia](https://wiki.openstreetmap.org/wiki/Key:wikipedia) | Multiple choice | [](https://wiki.openstreetmap.org/wiki/Tag:wikipedia%3D)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/_isOpen#values) [_isOpen](https://wiki.openstreetmap.org/wiki/Key:_isOpen) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:_isOpen%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:_isOpen%3Dno) [](https://wiki.openstreetmap.org/wiki/Tag:_isOpen%3D) [parse_error](https://wiki.openstreetmap.org/wiki/Tag:_isOpen%3Dparse_error)
[<img src='https://mapcomplete.osm.be/assets/svg/statistics.svg' height='18px'>](https://taginfo.openstreetmap.org/keys/smoking#values) [smoking](https://wiki.openstreetmap.org/wiki/Key:smoking) | Multiple choice | [no](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dno) [yes](https://wiki.openstreetmap.org/wiki/Tag:smoking%3Dyes)
### wikipedialink
This tagrendering has no question and is thus read-only
- *<a href='https://www.wikidata.org/wiki/{wikidata}' target='_blank'><img src='./assets/svg/wikidata.svg' alt='WD'/></a>* corresponds with ``
This tagrendering is only visible in the popup if the following condition is met: `wikipedia~.+|wikidata~.+`
This tagrendering has labels `defaults`
### isOpen
This tagrendering has no question and is thus read-only
- *clock:#0f0;ring:#0f0* corresponds with `_isOpen=yes`
- *circle:#f00;clock:#fff* corresponds with `_isOpen=no`
- *clock:#ff0;ring:#ff0* corresponds with `opening_hours~.+`
- *circle:#f0f;clock:#fff* corresponds with `_isOpen=parse_error&opening_hours~.+`
This tagrendering has labels `defaults`
### phonelink
This tagrendering has no question and is thus read-only
This tagrendering is only visible in the popup if the following condition is met: `phone~.+`
This tagrendering has labels `defaults`
### emaillink
This tagrendering has no question and is thus read-only
This tagrendering is only visible in the popup if the following condition is met: `email~.+`
This tagrendering has labels `defaults`
### smokingicon
This tagrendering has no question and is thus read-only
- *<img textmode='🚭️' alt='no-smoking' src='./assets/tagRenderings/no_smoking.svg'/>* corresponds with `smoking=no`
- *<img textmode='🚬️' alt='smoking-allowed' src='./assets/tagRenderings/smoking.svg'/>* corresponds with `smoking=yes`
This tagrendering has labels `defaults`
### sharelink
This tagrendering has no question and is thus read-only
This tagrendering has labels `defaults`
### osmlink
This tagrendering has no question and is thus read-only
- ** corresponds with `id~^(.*\/-.*)$`
- *<a href='{_backend}/{id}' target='_blank'><img src='./assets/svg/osm-logo-us.svg'/></a>* corresponds with `_backend~.+`
This tagrendering is only visible in the popup if the following condition is met: `id~^((node|way|relation)\/[0-9]*)$`
This tagrendering has labels `defaults`
This document is autogenerated from [assets/layers/icons/icons.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/icons/icons.json)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
id_presets id_presets
============ ============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
indoors indoors
========= =========

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
information_board information_board
=================== ===================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
kerbs kerbs
======= =======

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
kindergarten_childcare kindergarten_childcare
======================== ========================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
lit_streets lit_streets
============= =============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
map map
===== =====

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
maproulette maproulette
============= =============
@ -76,7 +76,7 @@ This tagrendering has no question and is thus read-only
### blurb ### mark_fixed
@ -84,7 +84,25 @@ This tagrendering has no question and is thus read-only
This tagrendering is only visible in the popup if the following condition is met: `blurb~.+`
### mark_duplicate
This tagrendering has no question and is thus read-only
### mark_too_hard
This tagrendering has no question and is thus read-only

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
maproulette_challenge maproulette_challenge
======================= =======================
@ -7,7 +7,7 @@
<img src='https://mapcomplete.osm.be/./assets/layers/maproulette/logomark.svg' height="100px"> <img src='https://mapcomplete.osm.be/./assets/layers/maproulette/logomark.svg' height="100px">
Layer showing tasks of a MapRoulette challenge Layer showing tasks of a single MapRoulette challenge. This layer is intended to be reused and extended in themes; refer to the documentation on how to do this.
@ -99,18 +99,6 @@ This tagrendering has no question and is thus read-only
### blurb
This tagrendering has no question and is thus read-only
This tagrendering is only visible in the popup if the following condition is met: `blurb~.+`
#### Filters #### Filters

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
maxspeed maxspeed
========== ==========

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
named_streets named_streets
=============== ===============

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
nature_reserve nature_reserve
================ ================
@ -195,7 +195,7 @@ This is rendered with `<a href='{website}' rel='nofollow noopener noreferrer' t
The question is *Whom is the curator of this nature reserve?<br/><span class='subtle'>Respect privacy - only fill out a name if this is widely published* The question is *Whom is the curator of this nature reserve?*
This rendering asks information about the property [curator](https://wiki.openstreetmap.org/wiki/Key:curator) This rendering asks information about the property [curator](https://wiki.openstreetmap.org/wiki/Key:curator)
@ -209,7 +209,7 @@ This is rendered with `{curator} is the curator of this nature reserve`
The question is *What email adress can one send to with questions and problems with this nature reserve?<br/><span class='subtle'>Respect privacy - only fill out a personal email address if this is widely published* The question is *What email adress can one send to with questions and problems with this nature reserve?*
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)
@ -223,7 +223,7 @@ This is rendered with `<a href='mailto:{email}' target='_blank'>{email}</a>`
The question is *What phone number can one call to with questions and problems with this nature reserve?<br/><span class='subtle'>Respect privacy - only fill out a personal phone number address if this is widely published* The question is *What phone number can one call to with questions and problems with this nature reserve?*
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)

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
observation_tower observation_tower
=================== ===================

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
osm_community_index osm_community_index
===================== =====================
@ -15,7 +15,7 @@ A layer showing the OpenStreetMap Communities
- This layer is shown at zoomlevel **0** and higher - This layer is shown at zoomlevel **0** and higher
- <img src='../warning.svg' height='1rem'/> This layer is loaded from an external source, namely `https://raw.githubusercontent.com/osmlab/osm-community-index/main/dist/completeFeatureCollection.json` - <img src='../warning.svg' height='1rem'/> This layer is loaded from an external source, namely `https://raw.githubusercontent.com/pietervdvn/MapComplete-data/main/community_index/tile_{z}_{x}_{y}.geojson`

View file

@ -1,4 +1,4 @@
[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
parcel_lockers parcel_lockers
================ ================

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