Merge develop
|
@ -6,12 +6,13 @@ import {And} from "../../Logic/Tags/And";
|
|||
import {Tag} from "../../Logic/Tags/Tag";
|
||||
import {TagsFilter} from "../../Logic/Tags/TagsFilter";
|
||||
import SubstitutingTag from "../../Logic/Tags/SubstitutingTag";
|
||||
import ComparingTag from "../../Logic/Tags/ComparingTag";
|
||||
|
||||
export class FromJSON {
|
||||
|
||||
public static SimpleTag(json: string, context?: string): Tag {
|
||||
const tag = Utils.SplitFirst(json, "=");
|
||||
if(tag.length !== 2){
|
||||
if (tag.length !== 2) {
|
||||
throw `Invalid tag: no (or too much) '=' found (in ${context ?? "unkown context"})`
|
||||
}
|
||||
return new Tag(tag[0], tag[1]);
|
||||
|
@ -26,6 +27,15 @@ export class FromJSON {
|
|||
}
|
||||
}
|
||||
|
||||
private static comparators
|
||||
: [string, (a: number, b: number) => boolean][]
|
||||
= [
|
||||
["<=", (a, b) => a <= b],
|
||||
[">=", (a, b) => a >= b],
|
||||
["<", (a, b) => a < b],
|
||||
[">", (a, b) => a > b],
|
||||
]
|
||||
|
||||
private static TagUnsafe(json: AndOrTagConfigJson | string, context: string = ""): TagsFilter {
|
||||
|
||||
if (json === undefined) {
|
||||
|
@ -33,6 +43,27 @@ export class FromJSON {
|
|||
}
|
||||
if (typeof (json) == "string") {
|
||||
const tag = json as string;
|
||||
|
||||
for (const [operator, comparator] of FromJSON.comparators) {
|
||||
if (tag.indexOf(operator) >= 0) {
|
||||
const split = Utils.SplitFirst(tag, operator);
|
||||
|
||||
const val = Number(split[1].trim())
|
||||
if (isNaN(val)) {
|
||||
throw `Error: not a valid value for a comparison: ${split[1]}, make sure it is a number and nothing more (at ${context})`
|
||||
}
|
||||
|
||||
const f = (value: string | undefined) => {
|
||||
const b = Number(value?.replace(/[^\d.]/g,''))
|
||||
if (isNaN(b)) {
|
||||
return false;
|
||||
}
|
||||
return comparator(b, val)
|
||||
}
|
||||
return new ComparingTag(split[0], f, operator + val)
|
||||
}
|
||||
}
|
||||
|
||||
if (tag.indexOf("!~") >= 0) {
|
||||
const split = Utils.SplitFirst(tag, "!~");
|
||||
if (split[1] === "*") {
|
||||
|
@ -54,11 +85,11 @@ export class FromJSON {
|
|||
new RegExp("^" + split[1] + "$")
|
||||
);
|
||||
}
|
||||
if(tag.indexOf(":=") >= 0){
|
||||
if (tag.indexOf(":=") >= 0) {
|
||||
const split = Utils.SplitFirst(tag, ":=");
|
||||
return new SubstitutingTag(split[0], split[1]);
|
||||
}
|
||||
|
||||
|
||||
if (tag.indexOf("!=") >= 0) {
|
||||
const split = Utils.SplitFirst(tag, "!=");
|
||||
if (split[1] === "*") {
|
||||
|
|
|
@ -55,7 +55,7 @@ export interface LayerConfigJson {
|
|||
* Note that both geojson-options might set a flag 'isOsmCache' indicating that the data originally comes from OSM too
|
||||
*
|
||||
*
|
||||
* NOTE: the previous format was 'overpassTags: AndOrTagCOnfigJson | string', which is interpreted as a shorthand for source: {osmTags: "key=value"}
|
||||
* NOTE: the previous format was 'overpassTags: AndOrTagConfigJson | string', which is interpreted as a shorthand for source: {osmTags: "key=value"}
|
||||
* While still supported, this is considered deprecated
|
||||
*/
|
||||
source: { osmTags: AndOrTagConfigJson | string } |
|
||||
|
@ -82,7 +82,7 @@ export interface LayerConfigJson {
|
|||
doNotDownload?: boolean;
|
||||
|
||||
/**
|
||||
* This tagrendering should either be 'yes' or 'no'. If 'no' is returned, then the feature will be hidden from view.
|
||||
* This tag rendering should either be 'yes' or 'no'. If 'no' is returned, then the feature will be hidden from view.
|
||||
* This is useful to hide certain features from view. Important: hiding features does not work dynamically, but is only calculated when the data is first renders.
|
||||
* This implies that it is not possible to hide a feature after a tagging change
|
||||
*
|
||||
|
@ -98,8 +98,8 @@ export interface LayerConfigJson {
|
|||
minzoom?: number;
|
||||
|
||||
/**
|
||||
* If zoomed out below this zoomlevel, the data will be hidden.
|
||||
* Default: minzoom
|
||||
* The zoom level at which point the data is hidden again
|
||||
* Default: 100 (thus: always visible
|
||||
*/
|
||||
minzoomVisible?: number;
|
||||
|
||||
|
@ -121,9 +121,9 @@ export interface LayerConfigJson {
|
|||
* Note that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.
|
||||
*
|
||||
* The result of the icon is rendered as follows:
|
||||
* the resulting string is interpreted as a _list_ of items, seperated by ";". The bottommost layer is the first layer.
|
||||
* the resulting string is interpreted as a _list_ of items, separated by ";". The bottommost layer is the first layer.
|
||||
* As a result, on could use a generic pin, then overlay it with a specific icon.
|
||||
* To make things even more practical, one can use all svgs from the folder "assets/svg" and _substitute the color_ in it.
|
||||
* To make things even more practical, one can use all SVG's from the folder "assets/svg" and _substitute the color_ in it.
|
||||
* E.g. to draw a red pin, use "pin:#f00", to have a green circle with your icon on top, use `circle:#0f0;<path to my icon.svg>`
|
||||
*
|
||||
*/
|
||||
|
@ -221,7 +221,7 @@ export interface LayerConfigJson {
|
|||
|
||||
/**
|
||||
* If set, the user will prompted to confirm the location before actually adding the data.
|
||||
* THis will be with a 'drag crosshair'-method.
|
||||
* This will be with a 'drag crosshair'-method.
|
||||
*
|
||||
* If 'preferredBackgroundCategory' is set, the element will attempt to pick a background layer of that category.
|
||||
*/
|
||||
|
@ -236,7 +236,7 @@ export interface LayerConfigJson {
|
|||
*
|
||||
* Refer to the class `TagRenderingConfigJson` to see the possibilities.
|
||||
*
|
||||
* Note that we can also use a string here - where the string refers to a tagrenering defined in `assets/questions/questions.json`,
|
||||
* Note that we can also use a string here - where the string refers to a tag rendering defined in `assets/questions/questions.json`,
|
||||
* where a few very general questions are defined e.g. website, phone number, ...
|
||||
*
|
||||
* A special value is 'questions', which indicates the location of the questions box. If not specified, it'll be appended to the bottom of the featureInfobox.
|
||||
|
|
|
@ -95,7 +95,7 @@ export default class LayoutConfig {
|
|||
}
|
||||
);
|
||||
this.defaultBackgroundId = json.defaultBackgroundId;
|
||||
this.layers = LayoutConfig.ExtractLayers(json, this.units, official);
|
||||
this.layers = LayoutConfig.ExtractLayers(json, this.units, official, context);
|
||||
|
||||
// ALl the layers are constructed, let them share tags in now!
|
||||
const roaming: { r, source: LayerConfig }[] = []
|
||||
|
@ -160,12 +160,12 @@ export default class LayoutConfig {
|
|||
|
||||
}
|
||||
|
||||
private static ExtractLayers(json: LayoutConfigJson, units: Unit[], official: boolean): LayerConfig[] {
|
||||
private static ExtractLayers(json: LayoutConfigJson, units: Unit[], official: boolean, context: string): LayerConfig[] {
|
||||
const result: LayerConfig[] = []
|
||||
|
||||
json.layers.forEach((layer, i) => {
|
||||
if (typeof layer === "string") {
|
||||
if (AllKnownLayers.sharedLayersJson[layer] !== undefined) {
|
||||
if (AllKnownLayers.sharedLayersJson.get(layer) !== undefined) {
|
||||
if (json.overrideAll !== undefined) {
|
||||
let lyr = JSON.parse(JSON.stringify(AllKnownLayers.sharedLayersJson[layer]));
|
||||
const newLayer = new LayerConfig(Utils.Merge(json.overrideAll, lyr), units, `${json.id}+overrideAll.layers[${i}]`, official)
|
||||
|
@ -176,7 +176,8 @@ export default class LayoutConfig {
|
|||
return
|
||||
}
|
||||
} else {
|
||||
throw "Unknown fixed layer " + layer;
|
||||
console.log("Layer ", layer," not kown, try one of", Array.from(AllKnownLayers.sharedLayers.keys()).join(", "))
|
||||
throw `Unknown builtin layer ${layer} at ${context}.layers[${i}]`;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -195,9 +196,9 @@ export default class LayoutConfig {
|
|||
names = [names]
|
||||
}
|
||||
names.forEach(name => {
|
||||
const shared = AllKnownLayers.sharedLayersJson[name];
|
||||
const shared = AllKnownLayers.sharedLayersJson.get(name);
|
||||
if (shared === undefined) {
|
||||
throw "Unknown fixed layer " + name;
|
||||
throw `Unknown shared/builtin layer ${name} at ${context}.layers[${i}]. Available layers are ${Array.from(AllKnownLayers.sharedLayersJson.keys()).join(", ")}`;
|
||||
}
|
||||
// @ts-ignore
|
||||
let newLayer: LayerConfigJson = Utils.Merge(layer.override, JSON.parse(JSON.stringify(shared))); // We make a deep copy of the shared layer, in order to protect it from changes
|
||||
|
|
|
@ -141,6 +141,7 @@ Some advanced functions are available on **feat** as well:
|
|||
- overlapWith
|
||||
- closest
|
||||
- memberships
|
||||
- score
|
||||
|
||||
### distanceTo
|
||||
|
||||
|
@ -168,4 +169,12 @@ Some advanced functions are available on **feat** as well:
|
|||
For example: `_part_of_walking_routes=feat.memberships().map(r => r.relation.tags.name).join(';')`
|
||||
|
||||
|
||||
|
||||
### score
|
||||
|
||||
Given the path of an aspected routing json file, will calculate the score. This score is wrapped in a UIEventSource, so for further calculations, use `.map(score => ...)`
|
||||
|
||||
For example: `_comfort_score=feat.score('https://raw.githubusercontent.com/pietervdvn/AspectedRouting/master/Examples/bicycle/aspects/bicycle.comfort.json')`
|
||||
|
||||
0. path
|
||||
Generated from SimpleMetaTagger, ExtraFunction
|
|
@ -14,6 +14,14 @@ A string, but allows input of longer strings more comfortably (a text area)
|
|||
|
||||
A date
|
||||
|
||||
## direction
|
||||
|
||||
A geographical direction, in degrees. 0° is north, 90° is east, ... Will return a value between 0 (incl) and 360 (excl)
|
||||
|
||||
## length
|
||||
|
||||
A geographical length in meters (rounded at two points). Will give an extra minimap with a measurement tool. Arguments: [ zoomlevel, preferredBackgroundMapType (comma seperated) ], e.g. `["21", "map,photo"]
|
||||
|
||||
## wikidata
|
||||
|
||||
A wikidata identifier, e.g. Q42
|
||||
|
@ -30,10 +38,6 @@ A positive number or zero
|
|||
|
||||
A strict positive number
|
||||
|
||||
## direction
|
||||
|
||||
A geographical direction, in degrees. 0° is north, 90° is east, ... Will return a value between 0 (incl) and 360 (excl)
|
||||
|
||||
## float
|
||||
|
||||
A decimal
|
||||
|
|
111
Docs/TagInfo/mapcomplete_artwork.json
Normal file
|
@ -0,0 +1,111 @@
|
|||
{
|
||||
"data_format": 1,
|
||||
"project": {
|
||||
"name": "MapComplete Open Artwork Map",
|
||||
"description": "Welcome to Open Artwork Map, a map of statues, busts, grafittis and other artwork all over the world",
|
||||
"project_url": "https://mapcomplete.osm.be/artwork",
|
||||
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
|
||||
"icon_url": "https://mapcomplete.osm.be/assets/themes/artwork/artwork.svg",
|
||||
"contact_name": "Pieter Vander Vennet, MapComplete",
|
||||
"contact_email": "pietervdvn@posteo.net"
|
||||
},
|
||||
"tags": [
|
||||
{
|
||||
"key": "tourism",
|
||||
"description": "The MapComplete theme Open Artwork Map has a layer Artworks showing features with this tag",
|
||||
"value": "artwork"
|
||||
},
|
||||
{
|
||||
"key": "image",
|
||||
"description": "The layer 'Artworks allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
|
||||
},
|
||||
{
|
||||
"key": "mapillary",
|
||||
"description": "The layer 'Artworks allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
|
||||
},
|
||||
{
|
||||
"key": "wikidata",
|
||||
"description": "The layer 'Artworks allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
|
||||
},
|
||||
{
|
||||
"key": "wikipedia",
|
||||
"description": "The layer 'Artworks allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
|
||||
},
|
||||
{
|
||||
"key": "artwork_type",
|
||||
"description": "Layer 'Artworks' shows and asks freeform values for key 'artwork_type' (in the MapComplete.osm.be theme 'Open Artwork Map')"
|
||||
},
|
||||
{
|
||||
"key": "artwork_type",
|
||||
"description": "Layer 'Artworks' shows artwork_type=architecture with a fixed text, namely 'Architecture' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
|
||||
"value": "architecture"
|
||||
},
|
||||
{
|
||||
"key": "artwork_type",
|
||||
"description": "Layer 'Artworks' shows artwork_type=mural with a fixed text, namely 'Mural' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
|
||||
"value": "mural"
|
||||
},
|
||||
{
|
||||
"key": "artwork_type",
|
||||
"description": "Layer 'Artworks' shows artwork_type=painting with a fixed text, namely 'Painting' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
|
||||
"value": "painting"
|
||||
},
|
||||
{
|
||||
"key": "artwork_type",
|
||||
"description": "Layer 'Artworks' shows artwork_type=sculpture with a fixed text, namely 'Sculpture' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
|
||||
"value": "sculpture"
|
||||
},
|
||||
{
|
||||
"key": "artwork_type",
|
||||
"description": "Layer 'Artworks' shows artwork_type=statue with a fixed text, namely 'Statue' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
|
||||
"value": "statue"
|
||||
},
|
||||
{
|
||||
"key": "artwork_type",
|
||||
"description": "Layer 'Artworks' shows artwork_type=bust with a fixed text, namely 'Bust' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
|
||||
"value": "bust"
|
||||
},
|
||||
{
|
||||
"key": "artwork_type",
|
||||
"description": "Layer 'Artworks' shows artwork_type=stone with a fixed text, namely 'Stone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
|
||||
"value": "stone"
|
||||
},
|
||||
{
|
||||
"key": "artwork_type",
|
||||
"description": "Layer 'Artworks' shows artwork_type=installation with a fixed text, namely 'Installation' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
|
||||
"value": "installation"
|
||||
},
|
||||
{
|
||||
"key": "artwork_type",
|
||||
"description": "Layer 'Artworks' shows artwork_type=graffiti with a fixed text, namely 'Graffiti' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
|
||||
"value": "graffiti"
|
||||
},
|
||||
{
|
||||
"key": "artwork_type",
|
||||
"description": "Layer 'Artworks' shows artwork_type=relief with a fixed text, namely 'Relief' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
|
||||
"value": "relief"
|
||||
},
|
||||
{
|
||||
"key": "artwork_type",
|
||||
"description": "Layer 'Artworks' shows artwork_type=azulejo with a fixed text, namely 'Azulejo (Spanish decorative tilework)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
|
||||
"value": "azulejo"
|
||||
},
|
||||
{
|
||||
"key": "artwork_type",
|
||||
"description": "Layer 'Artworks' shows artwork_type=tilework with a fixed text, namely 'Tilework' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Open Artwork Map')",
|
||||
"value": "tilework"
|
||||
},
|
||||
{
|
||||
"key": "artist_name",
|
||||
"description": "Layer 'Artworks' shows and asks freeform values for key 'artist_name' (in the MapComplete.osm.be theme 'Open Artwork Map')"
|
||||
},
|
||||
{
|
||||
"key": "website",
|
||||
"description": "Layer 'Artworks' shows and asks freeform values for key 'website' (in the MapComplete.osm.be theme 'Open Artwork Map')"
|
||||
},
|
||||
{
|
||||
"key": "wikidata",
|
||||
"description": "Layer 'Artworks' shows and asks freeform values for key 'wikidata' (in the MapComplete.osm.be theme 'Open Artwork Map')"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -5,7 +5,7 @@
|
|||
"description": "A bicycle library is a place where bicycles can be lent, often for a small yearly fee",
|
||||
"project_url": "https://mapcomplete.osm.be/bicyclelib",
|
||||
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
|
||||
"icon_url": "https://mapcomplete.osm.be/assets/themes/bicycle_library/logo.svg",
|
||||
"icon_url": "https://mapcomplete.osm.be/assets/themes/bicyclelib/logo.svg",
|
||||
"contact_name": "Pieter Vander Vennet, MapComplete",
|
||||
"contact_email": "pietervdvn@posteo.net"
|
||||
},
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"description": "Find sites to spend the night with your camper",
|
||||
"project_url": "https://mapcomplete.osm.be/campersite",
|
||||
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
|
||||
"icon_url": "https://mapcomplete.osm.be/assets/themes/campersites/caravan.svg",
|
||||
"icon_url": "https://mapcomplete.osm.be/assets/themes/campersite/caravan.svg",
|
||||
"contact_name": "Pieter Vander Vennet, joost schouppe",
|
||||
"contact_email": "pietervdvn@posteo.net"
|
||||
},
|
||||
|
|
707
Docs/TagInfo/mapcomplete_cycle_infra.json
Normal file
|
@ -0,0 +1,707 @@
|
|||
{
|
||||
"data_format": 1,
|
||||
"project": {
|
||||
"name": "MapComplete Bicycle infrastructure",
|
||||
"description": "A map where you can view and edit things related to the bicycle infrastructure.",
|
||||
"project_url": "https://mapcomplete.osm.be/cycle_infra",
|
||||
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
|
||||
"icon_url": "https://mapcomplete.osm.be/assets/themes/cycle_infra/cycle-infra.svg",
|
||||
"contact_name": "Pieter Vander Vennet, ",
|
||||
"contact_email": "pietervdvn@posteo.net"
|
||||
},
|
||||
"tags": [
|
||||
{
|
||||
"key": "highway",
|
||||
"description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways showing features with this tag",
|
||||
"value": "cycleway"
|
||||
},
|
||||
{
|
||||
"key": "cycleway",
|
||||
"description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways showing features with this tag",
|
||||
"value": "lane"
|
||||
},
|
||||
{
|
||||
"key": "cycleway",
|
||||
"description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways showing features with this tag",
|
||||
"value": "shared_lane"
|
||||
},
|
||||
{
|
||||
"key": "cycleway",
|
||||
"description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways showing features with this tag",
|
||||
"value": "track"
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet",
|
||||
"description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways showing features with this tag",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "highway",
|
||||
"description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways showing features with this tag",
|
||||
"value": "path"
|
||||
},
|
||||
{
|
||||
"key": "bicycle",
|
||||
"description": "The MapComplete theme Bicycle infrastructure has a layer Cycleways showing features with this tag",
|
||||
"value": "designated"
|
||||
},
|
||||
{
|
||||
"key": "cycleway",
|
||||
"description": "Layer 'Cycleways' shows cycleway=shared_lane with a fixed text, namely 'There is a shared lane' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "shared_lane"
|
||||
},
|
||||
{
|
||||
"key": "cycleway",
|
||||
"description": "Layer 'Cycleways' shows cycleway=lane with a fixed text, namely 'There is a lane next to the road (seperated with paint)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "lane"
|
||||
},
|
||||
{
|
||||
"key": "cycleway",
|
||||
"description": "Layer 'Cycleways' shows cycleway=track with a fixed text, namely 'There is a track, but no cycleway drawn seperately from this road on the map.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "track"
|
||||
},
|
||||
{
|
||||
"key": "cycleway",
|
||||
"description": "Layer 'Cycleways' shows cycleway=seperate with a fixed text, namely 'There is a seperately drawn cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "seperate"
|
||||
},
|
||||
{
|
||||
"key": "cycleway",
|
||||
"description": "Layer 'Cycleways' shows cycleway=no with a fixed text, namely 'There is no cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "no"
|
||||
},
|
||||
{
|
||||
"key": "cycleway",
|
||||
"description": "Layer 'Cycleways' shows cycleway=no with a fixed text, namely 'There is no cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "no"
|
||||
},
|
||||
{
|
||||
"key": "lit",
|
||||
"description": "Layer 'Cycleways' shows lit=yes with a fixed text, namely 'This street is lit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "lit",
|
||||
"description": "Layer 'Cycleways' shows lit=no with a fixed text, namely 'This road is not lit' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "no"
|
||||
},
|
||||
{
|
||||
"key": "lit",
|
||||
"description": "Layer 'Cycleways' shows lit=sunset-sunrise with a fixed text, namely 'This road is lit at night' (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "sunset-sunrise"
|
||||
},
|
||||
{
|
||||
"key": "lit",
|
||||
"description": "Layer 'Cycleways' shows lit=24/7 with a fixed text, namely 'This road is lit 24/7' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "24/7"
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet",
|
||||
"description": "Layer 'Cycleways' shows cyclestreet=yes with a fixed text, namely 'This is a cyclestreet, and a 30km/h zone.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet",
|
||||
"description": "Layer 'Cycleways' shows cyclestreet=yes with a fixed text, namely 'This is a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet",
|
||||
"description": "Layer 'Cycleways' shows cyclestreet= with a fixed text, namely 'This is not a cyclestreet.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure') Picking this answer will delete the key cyclestreet.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "maxspeed",
|
||||
"description": "Layer 'Cycleways' shows and asks freeform values for key 'maxspeed' (in the MapComplete.osm.be theme 'Bicycle infrastructure')"
|
||||
},
|
||||
{
|
||||
"key": "maxspeed",
|
||||
"description": "Layer 'Cycleways' shows maxspeed=20 with a fixed text, namely 'The maximum speed is 20 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "20"
|
||||
},
|
||||
{
|
||||
"key": "maxspeed",
|
||||
"description": "Layer 'Cycleways' shows maxspeed=30 with a fixed text, namely 'The maximum speed is 30 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "30"
|
||||
},
|
||||
{
|
||||
"key": "maxspeed",
|
||||
"description": "Layer 'Cycleways' shows maxspeed=50 with a fixed text, namely 'The maximum speed is 50 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "50"
|
||||
},
|
||||
{
|
||||
"key": "maxspeed",
|
||||
"description": "Layer 'Cycleways' shows maxspeed=70 with a fixed text, namely 'The maximum speed is 70 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "70"
|
||||
},
|
||||
{
|
||||
"key": "maxspeed",
|
||||
"description": "Layer 'Cycleways' shows maxspeed=90 with a fixed text, namely 'The maximum speed is 90 km/h' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "90"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:surface",
|
||||
"description": "Layer 'Cycleways' shows and asks freeform values for key 'cycleway:surface' (in the MapComplete.osm.be theme 'Bicycle infrastructure')"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:surface",
|
||||
"description": "Layer 'Cycleways' shows cycleway:surface=wood with a fixed text, namely 'This cycleway is made of wood' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "wood"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:surface",
|
||||
"description": "Layer 'Cycleways' shows cycleway:surface=concrete with a fixed text, namely 'This cycleway is made of concrete' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "concrete"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:surface",
|
||||
"description": "Layer 'Cycleways' shows cycleway:surface=cobblestone with a fixed text, namely 'This cycleway is made of cobblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "cobblestone"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:surface",
|
||||
"description": "Layer 'Cycleways' shows cycleway:surface=asphalt with a fixed text, namely 'This cycleway is made of asphalt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "asphalt"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:surface",
|
||||
"description": "Layer 'Cycleways' shows cycleway:surface=paved with a fixed text, namely 'This cycleway is paved' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "paved"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:smoothness",
|
||||
"description": "Layer 'Cycleways' shows cycleway:smoothness=excellent with a fixed text, namely 'Usable for thin rollers: rollerblade, skateboard' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "excellent"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:smoothness",
|
||||
"description": "Layer 'Cycleways' shows cycleway:smoothness=good with a fixed text, namely 'Usable for thin wheels: racing bike' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "good"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:smoothness",
|
||||
"description": "Layer 'Cycleways' shows cycleway:smoothness=intermediate with a fixed text, namely 'Usable for normal wheels: city bike, wheelchair, scooter' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "intermediate"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:smoothness",
|
||||
"description": "Layer 'Cycleways' shows cycleway:smoothness=bad with a fixed text, namely 'Usable for robust wheels: trekking bike, car, rickshaw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "bad"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:smoothness",
|
||||
"description": "Layer 'Cycleways' shows cycleway:smoothness=very_bad with a fixed text, namely 'Usable for vehicles with high clearance: light duty off-road vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "very_bad"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:smoothness",
|
||||
"description": "Layer 'Cycleways' shows cycleway:smoothness=horrible with a fixed text, namely 'Usable for off-road vehicles: heavy duty off-road vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "horrible"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:smoothness",
|
||||
"description": "Layer 'Cycleways' shows cycleway:smoothness=very_horrible with a fixed text, namely 'Usable for specialized off-road vehicles: tractor, ATV' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "very_horrible"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:smoothness",
|
||||
"description": "Layer 'Cycleways' shows cycleway:smoothness=impassable with a fixed text, namely 'Impassable / No wheeled vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "impassable"
|
||||
},
|
||||
{
|
||||
"key": "surface",
|
||||
"description": "Layer 'Cycleways' shows and asks freeform values for key 'surface' (in the MapComplete.osm.be theme 'Bicycle infrastructure')"
|
||||
},
|
||||
{
|
||||
"key": "surface",
|
||||
"description": "Layer 'Cycleways' shows surface=wood with a fixed text, namely 'This street is made of wood' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "wood"
|
||||
},
|
||||
{
|
||||
"key": "surface",
|
||||
"description": "Layer 'Cycleways' shows surface=concrete with a fixed text, namely 'This street is made of concrete' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "concrete"
|
||||
},
|
||||
{
|
||||
"key": "surface",
|
||||
"description": "Layer 'Cycleways' shows surface=cobblestone with a fixed text, namely 'This street is made of cobblestone' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "cobblestone"
|
||||
},
|
||||
{
|
||||
"key": "surface",
|
||||
"description": "Layer 'Cycleways' shows surface=asphalt with a fixed text, namely 'This street is made of asphalt' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "asphalt"
|
||||
},
|
||||
{
|
||||
"key": "surface",
|
||||
"description": "Layer 'Cycleways' shows surface=paved with a fixed text, namely 'This street is paved' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "paved"
|
||||
},
|
||||
{
|
||||
"key": "smoothness",
|
||||
"description": "Layer 'Cycleways' shows smoothness=excellent with a fixed text, namely 'Usable for thin rollers: rollerblade, skateboard' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "excellent"
|
||||
},
|
||||
{
|
||||
"key": "smoothness",
|
||||
"description": "Layer 'Cycleways' shows smoothness=good with a fixed text, namely 'Usable for thin wheels: racing bike' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "good"
|
||||
},
|
||||
{
|
||||
"key": "smoothness",
|
||||
"description": "Layer 'Cycleways' shows smoothness=intermediate with a fixed text, namely 'Usable for normal wheels: city bike, wheelchair, scooter' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "intermediate"
|
||||
},
|
||||
{
|
||||
"key": "smoothness",
|
||||
"description": "Layer 'Cycleways' shows smoothness=bad with a fixed text, namely 'Usable for robust wheels: trekking bike, car, rickshaw' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "bad"
|
||||
},
|
||||
{
|
||||
"key": "smoothness",
|
||||
"description": "Layer 'Cycleways' shows smoothness=very_bad with a fixed text, namely 'Usable for vehicles with high clearance: light duty off-road vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "very_bad"
|
||||
},
|
||||
{
|
||||
"key": "smoothness",
|
||||
"description": "Layer 'Cycleways' shows smoothness=horrible with a fixed text, namely 'Usable for off-road vehicles: heavy duty off-road vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "horrible"
|
||||
},
|
||||
{
|
||||
"key": "smoothness",
|
||||
"description": "Layer 'Cycleways' shows smoothness=very_horrible with a fixed text, namely 'Usable for specialized off-road vehicles: tractor, ATV' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "very_horrible"
|
||||
},
|
||||
{
|
||||
"key": "smoothness",
|
||||
"description": "Layer 'Cycleways' shows smoothness=impassable with a fixed text, namely 'Impassable / No wheeled vehicle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "impassable"
|
||||
},
|
||||
{
|
||||
"key": "width:carriageway",
|
||||
"description": "Layer 'Cycleways' shows and asks freeform values for key 'width:carriageway' (in the MapComplete.osm.be theme 'Bicycle infrastructure')"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows cycleway:traffic_sign=BE:D7 with a fixed text, namely 'Compulsory cycleway <img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='height: 3em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "BE:D7"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows cycleway:traffic_sign~^BE:D7;.*$ with a fixed text, namely 'Compulsory cycleway (with supplementary sign)<img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='height: 3em'> ' (in the MapComplete.osm.be theme 'Bicycle infrastructure')"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows cycleway:traffic_sign=BE:D9 with a fixed text, namely 'Segregated foot/cycleway <img src='./assets/themes/cycle_infra/Belgian_road_sign_D09.svg' style='height: 3em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "BE:D9"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows cycleway:traffic_sign=BE:D10 with a fixed text, namely 'Unsegregated foot/cycleway <img src='./assets/themes/cycle_infra/Belgian_road_sign_D10.svg' style='height: 3em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "BE:D10"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows cycleway:traffic_sign=none with a fixed text, namely 'No traffic sign present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "none"
|
||||
},
|
||||
{
|
||||
"key": "traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows traffic_sign=BE:D7 with a fixed text, namely 'Compulsory cycleway <img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='height: 3em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "BE:D7"
|
||||
},
|
||||
{
|
||||
"key": "traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows traffic_sign~^BE:D7;.*$ with a fixed text, namely 'Compulsory cycleway (with supplementary sign)<img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='height: 3em'> ' (in the MapComplete.osm.be theme 'Bicycle infrastructure')"
|
||||
},
|
||||
{
|
||||
"key": "traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows traffic_sign=BE:D9 with a fixed text, namely 'Segregated foot/cycleway <img src='./assets/themes/cycle_infra/Belgian_road_sign_D09.svg' style='height: 3em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "BE:D9"
|
||||
},
|
||||
{
|
||||
"key": "traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows traffic_sign=BE:D10 with a fixed text, namely 'Unsegregated foot/cycleway <img src='./assets/themes/cycle_infra/Belgian_road_sign_D10.svg' style='height: 3em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "BE:D10"
|
||||
},
|
||||
{
|
||||
"key": "traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows traffic_sign=none with a fixed text, namely 'No traffic sign present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "none"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows cycleway:traffic_sign=BE:D7;BE:M6 with a fixed text, namely '<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M6.svg' style='height: 3em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "BE:D7;BE:M6"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows cycleway:traffic_sign=BE:D7;BE:M13 with a fixed text, namely '<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M13.svg' style='height: 3em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "BE:D7;BE:M13"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows cycleway:traffic_sign=BE:D7;BE:M14 with a fixed text, namely '<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M14.svg' style='height: 3em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "BE:D7;BE:M14"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows cycleway:traffic_sign=BE:D7;BE:M7 with a fixed text, namely '<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M7.svg' style='height: 3em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "BE:D7;BE:M7"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows cycleway:traffic_sign=BE:D7;BE:M15 with a fixed text, namely '<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M15.svg' style='height: 3em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "BE:D7;BE:M15"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows cycleway:traffic_sign=BE:D7;BE:M16 with a fixed text, namely '<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M16.svg' style='height: 3em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "BE:D7;BE:M16"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:traffic_sign:supplementary",
|
||||
"description": "Layer 'Cycleways' shows cycleway:traffic_sign:supplementary=none with a fixed text, namely 'No supplementary traffic sign present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "none"
|
||||
},
|
||||
{
|
||||
"key": "traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows traffic_sign=BE:D7;BE:M6 with a fixed text, namely '<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M6.svg' style='height: 3em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "BE:D7;BE:M6"
|
||||
},
|
||||
{
|
||||
"key": "traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows traffic_sign=BE:D7;BE:M13 with a fixed text, namely '<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M13.svg' style='height: 3em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "BE:D7;BE:M13"
|
||||
},
|
||||
{
|
||||
"key": "traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows traffic_sign=BE:D7;BE:M14 with a fixed text, namely '<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M14.svg' style='height: 3em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "BE:D7;BE:M14"
|
||||
},
|
||||
{
|
||||
"key": "traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows traffic_sign=BE:D7;BE:M7 with a fixed text, namely '<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M7.svg' style='height: 3em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "BE:D7;BE:M7"
|
||||
},
|
||||
{
|
||||
"key": ":traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows :traffic_sign=BE:D7;BE:M15 with a fixed text, namely '<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M15.svg' style='height: 3em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "BE:D7;BE:M15"
|
||||
},
|
||||
{
|
||||
"key": "traffic_sign",
|
||||
"description": "Layer 'Cycleways' shows traffic_sign=BE:D7;BE:M16 with a fixed text, namely '<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M16.svg' style='height: 3em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "BE:D7;BE:M16"
|
||||
},
|
||||
{
|
||||
"key": "traffic_sign:supplementary",
|
||||
"description": "Layer 'Cycleways' shows traffic_sign:supplementary=none with a fixed text, namely 'No supplementary traffic sign present' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "none"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:buffer",
|
||||
"description": "Layer 'Cycleways' shows and asks freeform values for key 'cycleway:buffer' (in the MapComplete.osm.be theme 'Bicycle infrastructure')"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:seperation",
|
||||
"description": "Layer 'Cycleways' shows cycleway:seperation=dashed_line with a fixed text, namely 'This cycleway is seperated by a dashed line' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "dashed_line"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:seperation",
|
||||
"description": "Layer 'Cycleways' shows cycleway:seperation=solid_line with a fixed text, namely 'This cycleway is seperated by a solid line' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "solid_line"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:seperation",
|
||||
"description": "Layer 'Cycleways' shows cycleway:seperation=parking_lane with a fixed text, namely 'This cycleway is seperated by a parking lane' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "parking_lane"
|
||||
},
|
||||
{
|
||||
"key": "cycleway:seperation",
|
||||
"description": "Layer 'Cycleways' shows cycleway:seperation=kerb with a fixed text, namely 'This cycleway is seperated by a kerb' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "kerb"
|
||||
},
|
||||
{
|
||||
"key": "seperation",
|
||||
"description": "Layer 'Cycleways' shows seperation=dashed_line with a fixed text, namely 'This cycleway is seperated by a dashed line' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "dashed_line"
|
||||
},
|
||||
{
|
||||
"key": "seperation",
|
||||
"description": "Layer 'Cycleways' shows seperation=solid_line with a fixed text, namely 'This cycleway is seperated by a solid line' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "solid_line"
|
||||
},
|
||||
{
|
||||
"key": "seperation",
|
||||
"description": "Layer 'Cycleways' shows seperation=parking_lane with a fixed text, namely 'This cycleway is seperated by a parking lane' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "parking_lane"
|
||||
},
|
||||
{
|
||||
"key": "seperation",
|
||||
"description": "Layer 'Cycleways' shows seperation=kerb with a fixed text, namely 'This cycleway is seperated by a kerb' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "kerb"
|
||||
},
|
||||
{
|
||||
"key": "highway",
|
||||
"description": "The MapComplete theme Bicycle infrastructure has a layer All streets showing features with this tag",
|
||||
"value": "residential"
|
||||
},
|
||||
{
|
||||
"key": "highway",
|
||||
"description": "The MapComplete theme Bicycle infrastructure has a layer All streets showing features with this tag",
|
||||
"value": "tertiary"
|
||||
},
|
||||
{
|
||||
"key": "highway",
|
||||
"description": "The MapComplete theme Bicycle infrastructure has a layer All streets showing features with this tag",
|
||||
"value": "unclassified"
|
||||
},
|
||||
{
|
||||
"key": "highway",
|
||||
"description": "The MapComplete theme Bicycle infrastructure has a layer All streets showing features with this tag",
|
||||
"value": "primary"
|
||||
},
|
||||
{
|
||||
"key": "highway",
|
||||
"description": "The MapComplete theme Bicycle infrastructure has a layer All streets showing features with this tag",
|
||||
"value": "secondary"
|
||||
},
|
||||
{
|
||||
"key": "cycleway",
|
||||
"description": "Layer 'All streets' shows and asks freeform values for key 'cycleway' (in the MapComplete.osm.be theme 'Bicycle infrastructure')"
|
||||
},
|
||||
{
|
||||
"key": "cycleway",
|
||||
"description": "Layer 'All streets' shows cycleway=shared_lane with a fixed text, namely 'There is a shared lane' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "shared_lane"
|
||||
},
|
||||
{
|
||||
"key": "cycleway",
|
||||
"description": "Layer 'All streets' shows cycleway=lane with a fixed text, namely 'There is a lane next to the road (seperated with paint)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "lane"
|
||||
},
|
||||
{
|
||||
"key": "cycleway",
|
||||
"description": "Layer 'All streets' shows cycleway=track with a fixed text, namely 'There is a track, but no cycleway drawn seperately from this road on the map.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "track"
|
||||
},
|
||||
{
|
||||
"key": "cycleway",
|
||||
"description": "Layer 'All streets' shows cycleway=seperate with a fixed text, namely 'There is a seperately drawn cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "seperate"
|
||||
},
|
||||
{
|
||||
"key": "cycleway",
|
||||
"description": "Layer 'All streets' shows cycleway= with a fixed text, namely 'There is no cycleway known here' (in the MapComplete.osm.be theme 'Bicycle infrastructure') Picking this answer will delete the key cycleway.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "cycleway",
|
||||
"description": "Layer 'All streets' shows cycleway=no with a fixed text, namely 'There is no cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "no"
|
||||
},
|
||||
{
|
||||
"key": "cycleway",
|
||||
"description": "Layer 'All streets' shows cycleway=no with a fixed text, namely 'There is no cycleway' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "no"
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet",
|
||||
"description": "Layer 'All streets' shows cyclestreet=yes with a fixed text, namely 'This is a cyclestreet, and a 30km/h zone.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet",
|
||||
"description": "Layer 'All streets' shows cyclestreet=yes with a fixed text, namely 'This is a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet",
|
||||
"description": "Layer 'All streets' shows cyclestreet= with a fixed text, namely 'This is not a cyclestreet.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure') Picking this answer will delete the key cyclestreet.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "barrier",
|
||||
"description": "The MapComplete theme Bicycle infrastructure has a layer Barriers showing features with this tag",
|
||||
"value": "bollard"
|
||||
},
|
||||
{
|
||||
"key": "barrier",
|
||||
"description": "The MapComplete theme Bicycle infrastructure has a layer Barriers showing features with this tag",
|
||||
"value": "cycle_barrier"
|
||||
},
|
||||
{
|
||||
"key": "bicycle",
|
||||
"description": "Layer 'Barriers' shows bicycle=yes with a fixed text, namely 'A cyclist can go past this.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "bicycle",
|
||||
"description": "Layer 'Barriers' shows bicycle=no with a fixed text, namely 'A cyclist can not go past this.' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "no"
|
||||
},
|
||||
{
|
||||
"key": "bollard",
|
||||
"description": "Layer 'Barriers' shows bollard=removable with a fixed text, namely 'Removable bollard' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "removable"
|
||||
},
|
||||
{
|
||||
"key": "bollard",
|
||||
"description": "Layer 'Barriers' shows bollard=fixed with a fixed text, namely 'Fixed bollard' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "fixed"
|
||||
},
|
||||
{
|
||||
"key": "bollard",
|
||||
"description": "Layer 'Barriers' shows bollard=foldable with a fixed text, namely 'Bollard that can be folded down' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "foldable"
|
||||
},
|
||||
{
|
||||
"key": "bollard",
|
||||
"description": "Layer 'Barriers' shows bollard=flexible with a fixed text, namely 'Flexible bollard, usually plastic' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "flexible"
|
||||
},
|
||||
{
|
||||
"key": "bollard",
|
||||
"description": "Layer 'Barriers' shows bollard=rising with a fixed text, namely 'Rising bollard' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "rising"
|
||||
},
|
||||
{
|
||||
"key": "cycle_barrier:type",
|
||||
"description": "Layer 'Barriers' shows cycle_barrier:type=single with a fixed text, namely 'Single, just two barriers with a space inbetween <img src='./assets/themes/cycle_infra/Cycle_barrier_single.png' style='width:8em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "single"
|
||||
},
|
||||
{
|
||||
"key": "cycle_barrier:type",
|
||||
"description": "Layer 'Barriers' shows cycle_barrier:type=double with a fixed text, namely 'Double, two barriers behind each other <img src='./assets/themes/cycle_infra/Cycle_barrier_double.png' style='width:8em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "double"
|
||||
},
|
||||
{
|
||||
"key": "cycle_barrier:type",
|
||||
"description": "Layer 'Barriers' shows cycle_barrier:type=triple with a fixed text, namely 'Triple, three barriers behind each other <img src='./assets/themes/cycle_infra/Cycle_barrier_triple.png' style='width:8em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "triple"
|
||||
},
|
||||
{
|
||||
"key": "cycle_barrier:type",
|
||||
"description": "Layer 'Barriers' shows cycle_barrier:type=squeeze with a fixed text, namely 'Squeeze gate, gap is smaller at top, than at the bottom <img src='./assets/themes/cycle_infra/Cycle_barrier_squeeze.png' style='width:8em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "squeeze"
|
||||
},
|
||||
{
|
||||
"key": "maxwidth:physical",
|
||||
"description": "Layer 'Barriers' shows and asks freeform values for key 'maxwidth:physical' (in the MapComplete.osm.be theme 'Bicycle infrastructure')"
|
||||
},
|
||||
{
|
||||
"key": "width:seperation",
|
||||
"description": "Layer 'Barriers' shows and asks freeform values for key 'width:seperation' (in the MapComplete.osm.be theme 'Bicycle infrastructure')"
|
||||
},
|
||||
{
|
||||
"key": "width:opening",
|
||||
"description": "Layer 'Barriers' shows and asks freeform values for key 'width:opening' (in the MapComplete.osm.be theme 'Bicycle infrastructure')"
|
||||
},
|
||||
{
|
||||
"key": "overlap",
|
||||
"description": "Layer 'Barriers' shows and asks freeform values for key 'overlap' (in the MapComplete.osm.be theme 'Bicycle infrastructure')"
|
||||
},
|
||||
{
|
||||
"key": "highway",
|
||||
"description": "The MapComplete theme Bicycle infrastructure has a layer Crossings showing features with this tag",
|
||||
"value": "traffic_signals"
|
||||
},
|
||||
{
|
||||
"key": "highway",
|
||||
"description": "The MapComplete theme Bicycle infrastructure has a layer Crossings showing features with this tag",
|
||||
"value": "crossing"
|
||||
},
|
||||
{
|
||||
"key": "crossing",
|
||||
"description": "Layer 'Crossings' shows crossing=uncontrolled with a fixed text, namely 'Crossing, without traffic lights' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "uncontrolled"
|
||||
},
|
||||
{
|
||||
"key": "crossing",
|
||||
"description": "Layer 'Crossings' shows crossing=traffic_signals with a fixed text, namely 'Crossing with traffic signals' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "traffic_signals"
|
||||
},
|
||||
{
|
||||
"key": "crossing",
|
||||
"description": "Layer 'Crossings' shows crossing=zebra with a fixed text, namely 'Zebra crossing' (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "zebra"
|
||||
},
|
||||
{
|
||||
"key": "bicycle",
|
||||
"description": "Layer 'Crossings' shows bicycle=yes with a fixed text, namely 'A cyclist can use this crossing' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "bicycle",
|
||||
"description": "Layer 'Crossings' shows bicycle=no with a fixed text, namely 'A cyclist can not use this crossing' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "no"
|
||||
},
|
||||
{
|
||||
"key": "crossing:island",
|
||||
"description": "Layer 'Crossings' shows crossing:island=yes with a fixed text, namely 'This crossing has an island in the middle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "crossing:island",
|
||||
"description": "Layer 'Crossings' shows crossing:island=no with a fixed text, namely 'This crossing does not have an island in the middle' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "no"
|
||||
},
|
||||
{
|
||||
"key": "tactile_paving",
|
||||
"description": "Layer 'Crossings' shows tactile_paving=yes with a fixed text, namely 'This crossing has tactile paving' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "tactile_paving",
|
||||
"description": "Layer 'Crossings' shows tactile_paving=no with a fixed text, namely 'This crossing does not have tactile paving' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "no"
|
||||
},
|
||||
{
|
||||
"key": "tactile_paving",
|
||||
"description": "Layer 'Crossings' shows tactile_paving=incorrect with a fixed text, namely 'This crossing has tactile paving, but is not correct' (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "incorrect"
|
||||
},
|
||||
{
|
||||
"key": "button_operated",
|
||||
"description": "Layer 'Crossings' shows button_operated=yes with a fixed text, namely 'This traffic light has a button to request green light' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "button_operated",
|
||||
"description": "Layer 'Crossings' shows button_operated=no with a fixed text, namely 'This traffic light does not have a button to request green light' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "no"
|
||||
},
|
||||
{
|
||||
"key": "red_turn:right:bicycle",
|
||||
"description": "Layer 'Crossings' shows red_turn:right:bicycle=yes with a fixed text, namely 'A cyclist can turn right if the light is red <img src='./assets/layers/crossings/Belgian_road_sign_B22.svg' style='height: 3em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "red_turn:right:bicycle",
|
||||
"description": "Layer 'Crossings' shows red_turn:right:bicycle=yes with a fixed text, namely 'A cyclist can turn right if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "red_turn:right:bicycle",
|
||||
"description": "Layer 'Crossings' shows red_turn:right:bicycle=no with a fixed text, namely 'A cyclist can not turn right if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "no"
|
||||
},
|
||||
{
|
||||
"key": "red_turn:straight:bicycle",
|
||||
"description": "Layer 'Crossings' shows red_turn:straight:bicycle=yes with a fixed text, namely 'A cyclist can go straight on if the light is red <img src='./assets/layers/crossings/Belgian_road_sign_B23.svg' style='height: 3em'>' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "red_turn:straight:bicycle",
|
||||
"description": "Layer 'Crossings' shows red_turn:straight:bicycle=yes with a fixed text, namely 'A cyclist can go straight on if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "red_turn:straight:bicycle",
|
||||
"description": "Layer 'Crossings' shows red_turn:straight:bicycle=no with a fixed text, namely 'A cyclist can not go straight on if the light is red' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Bicycle infrastructure')",
|
||||
"value": "no"
|
||||
}
|
||||
]
|
||||
}
|
264
Docs/TagInfo/mapcomplete_cyclestreets.json
Normal file
|
@ -0,0 +1,264 @@
|
|||
{
|
||||
"data_format": 1,
|
||||
"project": {
|
||||
"name": "MapComplete Cyclestreets",
|
||||
"description": "A map of cyclestreets",
|
||||
"project_url": "https://mapcomplete.osm.be/cyclestreets",
|
||||
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
|
||||
"icon_url": "https://mapcomplete.osm.be/assets/themes/cyclestreets/F111.svg",
|
||||
"contact_name": "Pieter Vander Vennet, MapComplete",
|
||||
"contact_email": "pietervdvn@posteo.net"
|
||||
},
|
||||
"tags": [
|
||||
{
|
||||
"key": "cyclestreet",
|
||||
"description": "The MapComplete theme Cyclestreets has a layer Cyclestreets showing features with this tag",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "image",
|
||||
"description": "The layer 'Cyclestreets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
|
||||
},
|
||||
{
|
||||
"key": "mapillary",
|
||||
"description": "The layer 'Cyclestreets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
|
||||
},
|
||||
{
|
||||
"key": "wikidata",
|
||||
"description": "The layer 'Cyclestreets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
|
||||
},
|
||||
{
|
||||
"key": "wikipedia",
|
||||
"description": "The layer 'Cyclestreets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet",
|
||||
"description": "Layer 'Cyclestreets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "maxspeed",
|
||||
"description": "Layer 'Cyclestreets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
|
||||
"value": "30"
|
||||
},
|
||||
{
|
||||
"key": "overtaking:motor_vehicle",
|
||||
"description": "Layer 'Cyclestreets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
|
||||
"value": "no"
|
||||
},
|
||||
{
|
||||
"key": "proposed:cyclestreet",
|
||||
"description": "Layer 'Cyclestreets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet",
|
||||
"description": "Layer 'Cyclestreets' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "proposed:cyclestreet",
|
||||
"description": "Layer 'Cyclestreets' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet",
|
||||
"description": "Layer 'Cyclestreets' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "proposed:cyclestreet",
|
||||
"description": "Layer 'Cyclestreets' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet",
|
||||
"description": "Layer 'Cyclestreets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "proposed:cyclestreet",
|
||||
"description": "Layer 'Cyclestreets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "overtaking:motor_vehicle",
|
||||
"description": "Layer 'Cyclestreets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key overtaking:motor_vehicle.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet:start_date",
|
||||
"description": "Layer 'Cyclestreets' shows and asks freeform values for key 'cyclestreet:start_date' (in the MapComplete.osm.be theme 'Cyclestreets')"
|
||||
},
|
||||
{
|
||||
"key": "proposed:cyclestreet",
|
||||
"description": "The MapComplete theme Cyclestreets has a layer Future cyclestreet showing features with this tag",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "image",
|
||||
"description": "The layer 'Future cyclestreet allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
|
||||
},
|
||||
{
|
||||
"key": "mapillary",
|
||||
"description": "The layer 'Future cyclestreet allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
|
||||
},
|
||||
{
|
||||
"key": "wikidata",
|
||||
"description": "The layer 'Future cyclestreet allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
|
||||
},
|
||||
{
|
||||
"key": "wikipedia",
|
||||
"description": "The layer 'Future cyclestreet allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet",
|
||||
"description": "Layer 'Future cyclestreet' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "maxspeed",
|
||||
"description": "Layer 'Future cyclestreet' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
|
||||
"value": "30"
|
||||
},
|
||||
{
|
||||
"key": "overtaking:motor_vehicle",
|
||||
"description": "Layer 'Future cyclestreet' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
|
||||
"value": "no"
|
||||
},
|
||||
{
|
||||
"key": "proposed:cyclestreet",
|
||||
"description": "Layer 'Future cyclestreet' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet",
|
||||
"description": "Layer 'Future cyclestreet' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "proposed:cyclestreet",
|
||||
"description": "Layer 'Future cyclestreet' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet",
|
||||
"description": "Layer 'Future cyclestreet' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "proposed:cyclestreet",
|
||||
"description": "Layer 'Future cyclestreet' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet",
|
||||
"description": "Layer 'Future cyclestreet' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "proposed:cyclestreet",
|
||||
"description": "Layer 'Future cyclestreet' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "overtaking:motor_vehicle",
|
||||
"description": "Layer 'Future cyclestreet' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key overtaking:motor_vehicle.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet:start_date",
|
||||
"description": "Layer 'Future cyclestreet' shows and asks freeform values for key 'cyclestreet:start_date' (in the MapComplete.osm.be theme 'Cyclestreets')"
|
||||
},
|
||||
{
|
||||
"key": "highway",
|
||||
"description": "The MapComplete theme Cyclestreets has a layer All streets showing features with this tag",
|
||||
"value": "residential"
|
||||
},
|
||||
{
|
||||
"key": "highway",
|
||||
"description": "The MapComplete theme Cyclestreets has a layer All streets showing features with this tag",
|
||||
"value": "tertiary"
|
||||
},
|
||||
{
|
||||
"key": "highway",
|
||||
"description": "The MapComplete theme Cyclestreets has a layer All streets showing features with this tag",
|
||||
"value": "unclassified"
|
||||
},
|
||||
{
|
||||
"key": "image",
|
||||
"description": "The layer 'All streets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
|
||||
},
|
||||
{
|
||||
"key": "mapillary",
|
||||
"description": "The layer 'All streets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
|
||||
},
|
||||
{
|
||||
"key": "wikidata",
|
||||
"description": "The layer 'All streets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
|
||||
},
|
||||
{
|
||||
"key": "wikipedia",
|
||||
"description": "The layer 'All streets allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet",
|
||||
"description": "Layer 'All streets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "maxspeed",
|
||||
"description": "Layer 'All streets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
|
||||
"value": "30"
|
||||
},
|
||||
{
|
||||
"key": "overtaking:motor_vehicle",
|
||||
"description": "Layer 'All streets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
|
||||
"value": "no"
|
||||
},
|
||||
{
|
||||
"key": "proposed:cyclestreet",
|
||||
"description": "Layer 'All streets' shows cyclestreet=yes&maxspeed=30&overtaking:motor_vehicle=no&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet (and has a speed limit of 30 km/h)' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet",
|
||||
"description": "Layer 'All streets' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "proposed:cyclestreet",
|
||||
"description": "Layer 'All streets' shows cyclestreet=yes&proposed:cyclestreet= with a fixed text, namely 'This street is a cyclestreet' (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet",
|
||||
"description": "Layer 'All streets' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "proposed:cyclestreet",
|
||||
"description": "Layer 'All streets' shows cyclestreet=&proposed:cyclestreet=yes with a fixed text, namely 'This street will become a cyclstreet soon' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets')",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet",
|
||||
"description": "Layer 'All streets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key cyclestreet.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "proposed:cyclestreet",
|
||||
"description": "Layer 'All streets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key proposed:cyclestreet.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "overtaking:motor_vehicle",
|
||||
"description": "Layer 'All streets' shows cyclestreet=&proposed:cyclestreet=&overtaking:motor_vehicle= with a fixed text, namely 'This street is not a cyclestreet' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclestreets') Picking this answer will delete the key overtaking:motor_vehicle.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"key": "cyclestreet:start_date",
|
||||
"description": "Layer 'All streets' shows and asks freeform values for key 'cyclestreet:start_date' (in the MapComplete.osm.be theme 'Cyclestreets')"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -588,6 +588,25 @@
|
|||
"description": "Layer 'Bike stations (repair, pump or both)' shows manometer=broken with a fixed text, namely 'There is manometer but it is broken' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')",
|
||||
"value": "broken"
|
||||
},
|
||||
{
|
||||
"key": "level",
|
||||
"description": "Layer 'Bike stations (repair, pump or both)' shows and asks freeform values for key 'level' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')"
|
||||
},
|
||||
{
|
||||
"key": "location",
|
||||
"description": "Layer 'Bike stations (repair, pump or both)' shows location=underground with a fixed text, namely 'Located underground' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')",
|
||||
"value": "underground"
|
||||
},
|
||||
{
|
||||
"key": "level",
|
||||
"description": "Layer 'Bike stations (repair, pump or both)' shows level=0 with a fixed text, namely 'Located on the ground floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')",
|
||||
"value": "0"
|
||||
},
|
||||
{
|
||||
"key": "level",
|
||||
"description": "Layer 'Bike stations (repair, pump or both)' shows level=1 with a fixed text, namely 'Located on the first floor' and allows to pick this as a default answer (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"key": "service:bicycle:cleaning:charge",
|
||||
"description": "Layer 'Bike stations (repair, pump or both)' shows and asks freeform values for key 'service:bicycle:cleaning:charge' (in the MapComplete.osm.be theme 'Cyclofix - an open map for cyclists')"
|
||||
|
|
55
Docs/TagInfo/mapcomplete_openwindpowermap.json
Normal file
|
@ -0,0 +1,55 @@
|
|||
{
|
||||
"data_format": 1,
|
||||
"project": {
|
||||
"name": "MapComplete OpenWindPowerMap",
|
||||
"description": "A map for showing and editing wind turbines",
|
||||
"project_url": "https://mapcomplete.osm.be/openwindpowermap",
|
||||
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
|
||||
"icon_url": "https://mapcomplete.osm.be/assets/themes/openwindpowermap/wind_turbine.svg",
|
||||
"contact_name": "Pieter Vander Vennet, Seppe Santens",
|
||||
"contact_email": "pietervdvn@posteo.net"
|
||||
},
|
||||
"tags": [
|
||||
{
|
||||
"key": "generator:source",
|
||||
"description": "The MapComplete theme OpenWindPowerMap has a layer wind turbine showing features with this tag",
|
||||
"value": "wind"
|
||||
},
|
||||
{
|
||||
"key": "generator:output:electricity",
|
||||
"description": "Layer 'wind turbine' shows and asks freeform values for key 'generator:output:electricity' (in the MapComplete.osm.be theme 'OpenWindPowerMap')"
|
||||
},
|
||||
{
|
||||
"key": "operator",
|
||||
"description": "Layer 'wind turbine' shows and asks freeform values for key 'operator' (in the MapComplete.osm.be theme 'OpenWindPowerMap')"
|
||||
},
|
||||
{
|
||||
"key": "height",
|
||||
"description": "Layer 'wind turbine' shows and asks freeform values for key 'height' (in the MapComplete.osm.be theme 'OpenWindPowerMap')"
|
||||
},
|
||||
{
|
||||
"key": "rotor:diameter",
|
||||
"description": "Layer 'wind turbine' shows and asks freeform values for key 'rotor:diameter' (in the MapComplete.osm.be theme 'OpenWindPowerMap')"
|
||||
},
|
||||
{
|
||||
"key": "start_date",
|
||||
"description": "Layer 'wind turbine' shows and asks freeform values for key 'start_date' (in the MapComplete.osm.be theme 'OpenWindPowerMap')"
|
||||
},
|
||||
{
|
||||
"key": "image",
|
||||
"description": "The layer 'wind turbine allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
|
||||
},
|
||||
{
|
||||
"key": "mapillary",
|
||||
"description": "The layer 'wind turbine allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
|
||||
},
|
||||
{
|
||||
"key": "wikidata",
|
||||
"description": "The layer 'wind turbine allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
|
||||
},
|
||||
{
|
||||
"key": "wikipedia",
|
||||
"description": "The layer 'wind turbine allows to upload images and adds them under the 'image'-tag (and image:0, image:1, ... for multiple images). Furhtermore, this layer shows images based on the keys image, wikidata, wikipedia, wikimedia_commons and mapillary"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -5,7 +5,7 @@
|
|||
"description": "Surveillance cameras and other means of surveillance",
|
||||
"project_url": "https://mapcomplete.osm.be/surveillance",
|
||||
"doc_url": "https://github.com/pietervdvn/MapComplete/tree/master/assets/themes/",
|
||||
"icon_url": "https://mapcomplete.osm.be/assets/themes/surveillance_cameras/logo.svg",
|
||||
"icon_url": "https://mapcomplete.osm.be/assets/themes/surveillance/logo.svg",
|
||||
"contact_name": "Pieter Vander Vennet, ",
|
||||
"contact_email": "pietervdvn@posteo.net"
|
||||
},
|
||||
|
|
|
@ -29,6 +29,16 @@ To check if a key does _not_ equal a certain value, use `key!=value`. This is co
|
|||
|
||||
This implies that, to check if a key is present, `key!=` can be used. This will only match if the key is present and not empty.
|
||||
|
||||
Number comparison
|
||||
-----------------
|
||||
|
||||
If the value of a tag is a number (e.g. `key=42`), one can use a filter `key<=42`, `key>=35`, `key>40` or `key<50` to match this, e.g. in conditions for renderings.
|
||||
These tags cannot be used to generate an answer nor can they be used to request data upstream from overpass.
|
||||
|
||||
Note that the value coming from OSM will first be stripped by removing all non-numeric characters. For example, `length=42 meter` will be interpreted as `length=42` and will thus match `length<=42` and `length>=42`.
|
||||
In special circumstances (e.g. `surface_area=42 m2` or `length=100 feet`), this will result in erronous values (`surface=422` or if a length in meters is compared to).
|
||||
However, this can be partially alleviated by using 'Units' to rewrite to a default format.
|
||||
|
||||
Regex equals
|
||||
------------
|
||||
|
||||
|
|
|
@ -20,158 +20,138 @@ the URL-parameters are stated in the part between the `?` and the `#`. There are
|
|||
Finally, the URL-hash is the part after the `#`. It is `node/1234` in this case.
|
||||
|
||||
|
||||
backend
|
||||
---------
|
||||
|
||||
The OSM backend to use - can be used to redirect mapcomplete to the testing backend when using 'osm-test' The default value is _osm_
|
||||
|
||||
|
||||
test
|
||||
------
|
||||
|
||||
If true, 'dryrun' mode is activated. The app will behave as normal, except that changes to OSM will be printed onto the console instead of actually uploaded to osm.org The default value is _false_
|
||||
|
||||
|
||||
layout
|
||||
--------
|
||||
|
||||
The layout to load into MapComplete The default value is __
|
||||
|
||||
|
||||
userlayout
|
||||
------------
|
||||
|
||||
If not 'false', a custom (non-official) theme is loaded. This custom layout can be done in multiple ways:
|
||||
|
||||
- The hash of the URL contains a base64-encoded .json-file containing the theme definition
|
||||
- The hash of the URL contains a lz-compressed .json-file, as generated by the custom theme generator
|
||||
- The parameter itself is an URL, in which case that URL will be downloaded. It should point to a .json of a theme The default value is _false_
|
||||
|
||||
|
||||
layer-control-toggle
|
||||
layer-control-toggle
|
||||
----------------------
|
||||
|
||||
Whether or not the layer control is shown The default value is _false_
|
||||
Whether or not the layer control is shown The default value is _false_
|
||||
|
||||
|
||||
tab
|
||||
tab
|
||||
-----
|
||||
|
||||
The tab that is shown in the welcome-message. 0 = the explanation of the theme,1 = OSM-credits, 2 = sharescreen, 3 = more themes, 4 = about mapcomplete (user must be logged in and have >50 changesets) The default value is _0_
|
||||
The tab that is shown in the welcome-message. 0 = the explanation of the theme,1 = OSM-credits, 2 = sharescreen, 3 = more themes, 4 = about mapcomplete (user must be logged in and have >50 changesets) The default value is _0_
|
||||
|
||||
|
||||
z
|
||||
z
|
||||
---
|
||||
|
||||
The initial/current zoom level The default value is _14_
|
||||
The initial/current zoom level The default value is _0_
|
||||
|
||||
|
||||
lat
|
||||
lat
|
||||
-----
|
||||
|
||||
The initial/current latitude The default value is _51.2095_
|
||||
The initial/current latitude The default value is _0_
|
||||
|
||||
|
||||
lon
|
||||
lon
|
||||
-----
|
||||
|
||||
The initial/current longitude of the app The default value is _3.2228_
|
||||
The initial/current longitude of the app The default value is _0_
|
||||
|
||||
|
||||
fs-userbadge
|
||||
fs-userbadge
|
||||
--------------
|
||||
|
||||
Disables/Enables the user information pill (userbadge) at the top left. Disabling this disables logging in and thus disables editing all together, effectively putting MapComplete into read-only mode. The default value is _true_
|
||||
Disables/Enables the user information pill (userbadge) at the top left. Disabling this disables logging in and thus disables editing all together, effectively putting MapComplete into read-only mode. The default value is _true_
|
||||
|
||||
|
||||
fs-search
|
||||
fs-search
|
||||
-----------
|
||||
|
||||
Disables/Enables the search bar The default value is _true_
|
||||
Disables/Enables the search bar The default value is _true_
|
||||
|
||||
|
||||
fs-layers
|
||||
fs-layers
|
||||
-----------
|
||||
|
||||
Disables/Enables the layer control The default value is _true_
|
||||
Disables/Enables the layer control The default value is _true_
|
||||
|
||||
|
||||
fs-add-new
|
||||
fs-add-new
|
||||
------------
|
||||
|
||||
Disables/Enables the 'add new feature'-popup. (A theme without presets might not have it in the first place) The default value is _true_
|
||||
Disables/Enables the 'add new feature'-popup. (A theme without presets might not have it in the first place) The default value is _true_
|
||||
|
||||
|
||||
fs-welcome-message
|
||||
fs-welcome-message
|
||||
--------------------
|
||||
|
||||
Disables/enables the help menu or welcome message The default value is _true_
|
||||
Disables/enables the help menu or welcome message The default value is _true_
|
||||
|
||||
|
||||
fs-iframe
|
||||
fs-iframe
|
||||
-----------
|
||||
|
||||
Disables/Enables the iframe-popup The default value is _false_
|
||||
Disables/Enables the iframe-popup The default value is _false_
|
||||
|
||||
|
||||
fs-more-quests
|
||||
fs-more-quests
|
||||
----------------
|
||||
|
||||
Disables/Enables the 'More Quests'-tab in the welcome message The default value is _true_
|
||||
Disables/Enables the 'More Quests'-tab in the welcome message The default value is _true_
|
||||
|
||||
|
||||
fs-share-screen
|
||||
fs-share-screen
|
||||
-----------------
|
||||
|
||||
Disables/Enables the 'Share-screen'-tab in the welcome message The default value is _true_
|
||||
Disables/Enables the 'Share-screen'-tab in the welcome message The default value is _true_
|
||||
|
||||
|
||||
fs-geolocation
|
||||
fs-geolocation
|
||||
----------------
|
||||
|
||||
Disables/Enables the geolocation button The default value is _true_
|
||||
Disables/Enables the geolocation button The default value is _true_
|
||||
|
||||
|
||||
fs-all-questions
|
||||
fs-all-questions
|
||||
------------------
|
||||
|
||||
Always show all questions The default value is _false_
|
||||
Always show all questions The default value is _false_
|
||||
|
||||
|
||||
fs-export
|
||||
fs-export
|
||||
-----------
|
||||
|
||||
If set, enables the 'download'-button to download everything as geojson The default value is _false_
|
||||
If set, enables the 'download'-button to download everything as geojson The default value is _false_
|
||||
|
||||
|
||||
fake-user
|
||||
test
|
||||
------
|
||||
|
||||
If true, 'dryrun' mode is activated. The app will behave as normal, except that changes to OSM will be printed onto the console instead of actually uploaded to osm.org The default value is _false_
|
||||
|
||||
|
||||
fake-user
|
||||
-----------
|
||||
|
||||
If true, 'dryrun' mode is activated and a fake user account is loaded The default value is _false_
|
||||
If true, 'dryrun' mode is activated and a fake user account is loaded The default value is _false_
|
||||
|
||||
|
||||
debug
|
||||
debug
|
||||
-------
|
||||
|
||||
If true, shows some extra debugging help such as all the available tags on every object The default value is _false_
|
||||
If true, shows some extra debugging help such as all the available tags on every object The default value is _false_
|
||||
|
||||
|
||||
custom-css
|
||||
backend
|
||||
---------
|
||||
|
||||
The OSM backend to use - can be used to redirect mapcomplete to the testing backend when using 'osm-test' The default value is _osm_
|
||||
|
||||
|
||||
custom-css
|
||||
------------
|
||||
|
||||
If specified, the custom css from the given link will be loaded additionaly The default value is __
|
||||
If specified, the custom css from the given link will be loaded additionaly The default value is __
|
||||
|
||||
|
||||
background
|
||||
background
|
||||
------------
|
||||
|
||||
The id of the background layer to start with The default value is _osm_
|
||||
The id of the background layer to start with The default value is _osm_
|
||||
|
||||
|
||||
oauth_token
|
||||
-------------
|
||||
|
||||
Used to complete the login No default value set
|
||||
layer-<layer-id>
|
||||
------------------
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ import {LocalStorageSource} from "./Logic/Web/LocalStorageSource";
|
|||
import {Utils} from "./Utils";
|
||||
import Svg from "./Svg";
|
||||
import Link from "./UI/Base/Link";
|
||||
import * as personal from "./assets/themes/personalLayout/personalLayout.json";
|
||||
import * as personal from "./assets/themes/personal/personal.json"
|
||||
import LayoutConfig from "./Customizations/JSON/LayoutConfig";
|
||||
import * as L from "leaflet";
|
||||
import Img from "./UI/Base/Img";
|
||||
|
@ -41,8 +41,6 @@ import FeatureSource from "./Logic/FeatureSource/FeatureSource";
|
|||
import AllKnownLayers from "./Customizations/AllKnownLayers";
|
||||
import LayerConfig from "./Customizations/JSON/LayerConfig";
|
||||
import AvailableBaseLayers from "./Logic/Actors/AvailableBaseLayers";
|
||||
import {SimpleMapScreenshoter} from "leaflet-simple-map-screenshoter";
|
||||
import jsPDF from "jspdf";
|
||||
import {TagsFilter} from "./Logic/Tags/TagsFilter";
|
||||
|
||||
export class InitUiElements {
|
||||
|
@ -221,33 +219,9 @@ export class InitUiElements {
|
|||
State.state.locationControl.ping();
|
||||
});
|
||||
|
||||
// To download pdf of leaflet you need to turn it into and image first
|
||||
// Then export that image as a pdf
|
||||
// leaflet-simple-map-screenshoter: to make image
|
||||
// jsPDF: to make pdf
|
||||
|
||||
const screenshot = new MapControlButton(
|
||||
new CenterFlexedElement(
|
||||
Img.AsImageElement(Svg.bug, "", "width:1.25rem;height:1.25rem")
|
||||
)
|
||||
).onClick(() => {
|
||||
const screenshotter = new SimpleMapScreenshoter();
|
||||
console.log("Debug - Screenshot");
|
||||
screenshotter.addTo(State.state.leafletMap.data);
|
||||
let doc = new jsPDF();
|
||||
screenshotter.takeScreen("image").then((image) => {
|
||||
// TO DO: scale image on pdf to its original size
|
||||
doc.addImage(image, "PNG", 0, 0, screen.width / 10, screen.height / 10);
|
||||
doc.setDisplayMode("fullheight");
|
||||
doc.save("Screenshot");
|
||||
});
|
||||
//screenshotter.remove();
|
||||
// The line below is for downloading the png
|
||||
//screenshotter.takeScreen().then(blob => Utils.offerContentsAsDownloadableFile(blob, "Screenshot.png"));
|
||||
});
|
||||
|
||||
new Combine(
|
||||
[plus, min, geolocationButton, screenshot].map((el) =>
|
||||
[plus, min, geolocationButton].map((el) =>
|
||||
el.SetClass("m-0.5 md:m-1")
|
||||
)
|
||||
)
|
||||
|
|
|
@ -26,7 +26,6 @@ export default class GeoLocationHandler extends VariableUiElement {
|
|||
* @private
|
||||
*/
|
||||
private readonly _permission: UIEventSource<string>;
|
||||
|
||||
/***
|
||||
* The marker on the map, in order to update it
|
||||
* @private
|
||||
|
@ -46,15 +45,11 @@ export default class GeoLocationHandler extends VariableUiElement {
|
|||
* @private
|
||||
*/
|
||||
private readonly _leafletMap: UIEventSource<L.Map>;
|
||||
|
||||
|
||||
/**
|
||||
* The date when the user requested the geolocation. If we have a location, it'll autozoom to it the first 30 secs
|
||||
* @private
|
||||
*/
|
||||
private _lastUserRequest: Date;
|
||||
|
||||
|
||||
/**
|
||||
* A small flag on localstorage. If the user previously granted the geolocation, it will be set.
|
||||
* On firefox, the permissions api is broken (probably fingerprint resistiance) and "granted + don't ask again" doesn't stick between sessions.
|
||||
|
@ -79,6 +74,7 @@ export default class GeoLocationHandler extends VariableUiElement {
|
|||
);
|
||||
const isActive = new UIEventSource<boolean>(false);
|
||||
const isLocked = new UIEventSource<boolean>(false);
|
||||
|
||||
super(
|
||||
hasLocation.map(
|
||||
(hasLocationData) => {
|
||||
|
@ -97,7 +93,6 @@ export default class GeoLocationHandler extends VariableUiElement {
|
|||
return new CenterFlexedElement(
|
||||
Img.AsImageElement(icon, "", "width:1.25rem;height:1.25rem")
|
||||
);
|
||||
|
||||
},
|
||||
[isActive, isLocked]
|
||||
)
|
||||
|
@ -133,7 +128,6 @@ export default class GeoLocationHandler extends VariableUiElement {
|
|||
});
|
||||
this.init(false);
|
||||
|
||||
|
||||
this._currentGPSLocation.addCallback((location) => {
|
||||
self._previousLocationGrant.setData("granted");
|
||||
|
||||
|
@ -173,10 +167,12 @@ export default class GeoLocationHandler extends VariableUiElement {
|
|||
|
||||
private init(askPermission: boolean) {
|
||||
const self = this;
|
||||
|
||||
if (self._isActive.data) {
|
||||
self.MoveToCurrentLoction(16);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
navigator?.permissions
|
||||
?.query({name: "geolocation"})
|
||||
|
@ -193,6 +189,7 @@ export default class GeoLocationHandler extends VariableUiElement {
|
|||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
|
||||
if (askPermission) {
|
||||
self.StartGeolocating(true);
|
||||
} else if (this._previousLocationGrant.data === "granted") {
|
||||
|
@ -201,7 +198,7 @@ export default class GeoLocationHandler extends VariableUiElement {
|
|||
}
|
||||
}
|
||||
|
||||
private MoveToCurrentLoction(targetZoom = 16) {
|
||||
private MoveToCurrentLoction(targetZoom?: number) {
|
||||
const location = this._currentGPSLocation.data;
|
||||
this._lastUserRequest = undefined;
|
||||
|
||||
|
@ -256,6 +253,7 @@ export default class GeoLocationHandler extends VariableUiElement {
|
|||
return;
|
||||
}
|
||||
self._isActive.setData(true);
|
||||
|
||||
navigator.geolocation.watchPosition(
|
||||
function (position) {
|
||||
self._currentGPSLocation.setData({
|
||||
|
@ -265,6 +263,9 @@ export default class GeoLocationHandler extends VariableUiElement {
|
|||
},
|
||||
function () {
|
||||
console.warn("Could not get location with navigator.geolocation");
|
||||
},
|
||||
{
|
||||
enableHighAccuracy: true
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
|
@ -6,6 +6,8 @@ import {Utils} from "../Utils";
|
|||
import BaseUIElement from "../UI/BaseUIElement";
|
||||
import List from "../UI/Base/List";
|
||||
import Title from "../UI/Base/Title";
|
||||
import {UIEventSourceTools} from "./UIEventSource";
|
||||
import AspectedRouting from "./Osm/aspectedRouting";
|
||||
|
||||
export class ExtraFunction {
|
||||
|
||||
|
@ -38,12 +40,14 @@ export class ExtraFunction {
|
|||
]),
|
||||
"Some advanced functions are available on **feat** as well:"
|
||||
]).SetClass("flex-col").AsMarkdown();
|
||||
|
||||
|
||||
|
||||
|
||||
private static readonly OverlapFunc = new ExtraFunction(
|
||||
"overlapWith",
|
||||
"Gives a list of features from the specified layer which this feature (partly) overlaps with. If the current feature is a point, all features that embed the point are given. The returned value is `{ feat: GeoJSONFeature, overlap: number}[]` where `overlap` is the overlapping surface are (in m²) for areas, the overlapping length (in meter) if the current feature is a line or `undefined` if the current feature is a point",
|
||||
["...layerIds - one or more layer ids of the layer from which every feature is checked for overlap)"],
|
||||
{
|
||||
name: "overlapWith",
|
||||
doc: "Gives a list of features from the specified layer which this feature (partly) overlaps with. If the current feature is a point, all features that embed the point are given. The returned value is `{ feat: GeoJSONFeature, overlap: number}[]` where `overlap` is the overlapping surface are (in m²) for areas, the overlapping length (in meter) if the current feature is a line or `undefined` if the current feature is a point",
|
||||
args: ["...layerIds - one or more layer ids of the layer from which every feature is checked for overlap)"]
|
||||
},
|
||||
(params, feat) => {
|
||||
return (...layerIds: string[]) => {
|
||||
const result = []
|
||||
|
@ -62,9 +66,11 @@ export class ExtraFunction {
|
|||
}
|
||||
)
|
||||
private static readonly DistanceToFunc = new ExtraFunction(
|
||||
"distanceTo",
|
||||
"Calculates the distance between the feature and a specified point in kilometer. The input should either be a pair of coordinates, a geojson feature or the ID of an object",
|
||||
["longitude", "latitude"],
|
||||
{
|
||||
name: "distanceTo",
|
||||
doc: "Calculates the distance between the feature and a specified point in kilometer. The input should either be a pair of coordinates, a geojson feature or the ID of an object",
|
||||
args: ["longitude", "latitude"]
|
||||
},
|
||||
(featuresPerLayer, feature) => {
|
||||
return (arg0, lat) => {
|
||||
if (typeof arg0 === "number") {
|
||||
|
@ -88,9 +94,11 @@ export class ExtraFunction {
|
|||
)
|
||||
|
||||
private static readonly ClosestObjectFunc = new ExtraFunction(
|
||||
"closest",
|
||||
"Given either a list of geojson features or a single layer name, gives the single object which is nearest to the feature. In the case of ways/polygons, only the centerpoint is considered.",
|
||||
["list of features"],
|
||||
{
|
||||
name: "closest",
|
||||
doc: "Given either a list of geojson features or a single layer name, gives the single object which is nearest to the feature. In the case of ways/polygons, only the centerpoint is considered.",
|
||||
args: ["list of features"]
|
||||
},
|
||||
(params, feature) => {
|
||||
return (features) => {
|
||||
if (typeof features === "string") {
|
||||
|
@ -139,28 +147,56 @@ export class ExtraFunction {
|
|||
|
||||
|
||||
private static readonly Memberships = new ExtraFunction(
|
||||
"memberships",
|
||||
"Gives a list of `{role: string, relation: Relation}`-objects, containing all the relations that this feature is part of. " +
|
||||
"\n\n" +
|
||||
"For example: `_part_of_walking_routes=feat.memberships().map(r => r.relation.tags.name).join(';')`",
|
||||
[],
|
||||
{
|
||||
name: "memberships",
|
||||
doc: "Gives a list of `{role: string, relation: Relation}`-objects, containing all the relations that this feature is part of. " +
|
||||
"\n\n" +
|
||||
"For example: `_part_of_walking_routes=feat.memberships().map(r => r.relation.tags.name).join(';')`",
|
||||
args: []
|
||||
},
|
||||
(params, _) => {
|
||||
return () => params.relations ?? [];
|
||||
}
|
||||
)
|
||||
|
||||
private static readonly allFuncs: ExtraFunction[] = [ExtraFunction.DistanceToFunc, ExtraFunction.OverlapFunc, ExtraFunction.ClosestObjectFunc, ExtraFunction.Memberships];
|
||||
private static readonly AspectedRouting = new ExtraFunction(
|
||||
{
|
||||
name: "score",
|
||||
doc: "Given the path of an aspected routing json file, will calculate the score. This score is wrapped in a UIEventSource, so for further calculations, use `.map(score => ...)`" +
|
||||
"\n\n" +
|
||||
"For example: `_comfort_score=feat.score('https://raw.githubusercontent.com/pietervdvn/AspectedRouting/master/Examples/bicycle/aspects/bicycle.comfort.json')`",
|
||||
args: ["path"]
|
||||
},
|
||||
(_, feature) => {
|
||||
return (path) => {
|
||||
return UIEventSourceTools.downloadJsonCached(path).map(config => {
|
||||
if (config === undefined) {
|
||||
return
|
||||
}
|
||||
return new AspectedRouting(config).evaluate(feature.properties)
|
||||
})
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
private static readonly allFuncs: ExtraFunction[] = [
|
||||
ExtraFunction.DistanceToFunc,
|
||||
ExtraFunction.OverlapFunc,
|
||||
ExtraFunction.ClosestObjectFunc,
|
||||
ExtraFunction.Memberships,
|
||||
ExtraFunction.AspectedRouting
|
||||
];
|
||||
private readonly _name: string;
|
||||
private readonly _args: string[];
|
||||
private readonly _doc: string;
|
||||
private readonly _f: (params: { featuresPerLayer: Map<string, any[]>, relations: { role: string, relation: Relation }[] }, feat: any) => any;
|
||||
|
||||
constructor(name: string, doc: string, args: string[], f: ((params: { featuresPerLayer: Map<string, any[]>, relations: { role: string, relation: Relation }[] }, feat: any) => any)) {
|
||||
this._name = name;
|
||||
this._doc = doc;
|
||||
this._args = args;
|
||||
constructor(options: { name: string, doc: string, args: string[] },
|
||||
f: ((params: { featuresPerLayer: Map<string, any[]>, relations: { role: string, relation: Relation }[] }, feat: any) => any)) {
|
||||
this._name = options.name;
|
||||
this._doc = options.doc;
|
||||
this._args = options.args;
|
||||
this._f = f;
|
||||
|
||||
}
|
||||
|
||||
public static FullPatchFeature(featuresPerLayer: Map<string, any[]>, relations: { role: string, relation: Relation }[], feature) {
|
||||
|
@ -186,7 +222,6 @@ export class ExtraFunction {
|
|||
}
|
||||
|
||||
public PatchFeature(featuresPerLayer: Map<string, any[]>, relations: { role: string, relation: Relation }[], feature: any) {
|
||||
|
||||
feature[this._name] = this._f({featuresPerLayer: featuresPerLayer, relations: relations}, feature);
|
||||
feature[this._name] = this._f({featuresPerLayer: featuresPerLayer, relations: relations}, feature)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -276,14 +276,61 @@ export class GeoOperations {
|
|||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates the closest point on a way from a given point
|
||||
* @param way The road on which you want to find a point
|
||||
* @param point Point defined as [lon, lat]
|
||||
*/
|
||||
public static nearestPoint(way, point: [number, number]){
|
||||
public static nearestPoint(way, point: [number, number]) {
|
||||
return turf.nearestPointOnLine(way, point, {units: "kilometers"});
|
||||
}
|
||||
|
||||
public static toCSV(features: any[]): string {
|
||||
|
||||
const headerValuesSeen = new Set<string>();
|
||||
const headerValuesOrdered: string[] = []
|
||||
|
||||
function addH(key) {
|
||||
if (!headerValuesSeen.has(key)) {
|
||||
headerValuesSeen.add(key)
|
||||
headerValuesOrdered.push(key)
|
||||
}
|
||||
}
|
||||
|
||||
addH("_lat")
|
||||
addH("_lon")
|
||||
|
||||
const lines: string[] = []
|
||||
|
||||
for (const feature of features) {
|
||||
const properties = feature.properties;
|
||||
for (const key in properties) {
|
||||
if (!properties.hasOwnProperty(key)) {
|
||||
continue;
|
||||
}
|
||||
addH(key)
|
||||
|
||||
}
|
||||
}
|
||||
headerValuesOrdered.sort()
|
||||
for (const feature of features) {
|
||||
const properties = feature.properties;
|
||||
let line = ""
|
||||
for (const key of headerValuesOrdered) {
|
||||
const value = properties[key]
|
||||
if (value === undefined) {
|
||||
line += ","
|
||||
} else {
|
||||
line += JSON.stringify(value)+","
|
||||
}
|
||||
}
|
||||
lines.push(line)
|
||||
}
|
||||
|
||||
return headerValuesOrdered.map(v => JSON.stringify(v)).join(",") + "\n" + lines.join("\n")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -27,8 +27,8 @@ export default class MetaTagging {
|
|||
relations: Map<string, { role: string, relation: Relation }[]>,
|
||||
layers: LayerConfig[],
|
||||
includeDates = true) {
|
||||
|
||||
if(features === undefined || features.length === 0){
|
||||
|
||||
if (features === undefined || features.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -79,14 +79,10 @@ export default class MetaTagging {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
@ -115,6 +111,17 @@ export default class MetaTagging {
|
|||
const f = (featuresPerLayer, feature: any) => {
|
||||
try {
|
||||
let result = func(feature);
|
||||
if(result instanceof UIEventSource){
|
||||
result.addCallbackAndRunD(d => {
|
||||
if (typeof d !== "string") {
|
||||
// Make sure it is a string!
|
||||
d = JSON.stringify(d);
|
||||
}
|
||||
feature.properties[key] = d;
|
||||
})
|
||||
result = result.data
|
||||
}
|
||||
|
||||
if (result === undefined || result === "") {
|
||||
return;
|
||||
}
|
||||
|
@ -124,11 +131,11 @@ export default class MetaTagging {
|
|||
}
|
||||
feature.properties[key] = result;
|
||||
} catch (e) {
|
||||
if(MetaTagging. errorPrintCount < MetaTagging.stopErrorOutputAt){
|
||||
if (MetaTagging.errorPrintCount < MetaTagging.stopErrorOutputAt) {
|
||||
console.warn("Could not calculate a calculated tag defined by " + code + " due to " + e + ". This is code defined in the theme. Are you the theme creator? Doublecheck your code. Note that the metatags might not be stable on new features", e)
|
||||
MetaTagging. errorPrintCount ++;
|
||||
if(MetaTagging. errorPrintCount == MetaTagging.stopErrorOutputAt){
|
||||
console.error("Got ",MetaTagging.stopErrorOutputAt," errors calculating this metatagging - stopping output now")
|
||||
MetaTagging.errorPrintCount++;
|
||||
if (MetaTagging.errorPrintCount == MetaTagging.stopErrorOutputAt) {
|
||||
console.error("Got ", MetaTagging.stopErrorOutputAt, " errors calculating this metatagging - stopping output now")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
194
Logic/Osm/aspectedRouting.ts
Normal file
|
@ -0,0 +1,194 @@
|
|||
export default class AspectedRouting {
|
||||
|
||||
public readonly name: string
|
||||
public readonly description: string
|
||||
public readonly units: string
|
||||
public readonly program: any
|
||||
|
||||
public constructor(program) {
|
||||
this.name = program.name;
|
||||
this.description = program.description;
|
||||
this.units = program.unit
|
||||
this.program = JSON.parse(JSON.stringify(program))
|
||||
delete this.program.name
|
||||
delete this.program.description
|
||||
delete this.program.unit
|
||||
}
|
||||
|
||||
public evaluate(properties){
|
||||
return AspectedRouting.interpret(this.program, properties)
|
||||
}
|
||||
/**
|
||||
* Interprets the given Aspected-routing program for the given properties
|
||||
*/
|
||||
public static interpret(program: any, properties: any) {
|
||||
if (typeof program !== "object") {
|
||||
return program;
|
||||
}
|
||||
|
||||
let functionName /*: string*/ = undefined;
|
||||
let functionArguments /*: any */ = undefined
|
||||
let otherValues = {}
|
||||
// @ts-ignore
|
||||
Object.entries(program).forEach(tag => {
|
||||
const [key, value] = tag;
|
||||
if (key.startsWith("$")) {
|
||||
functionName = key
|
||||
functionArguments = value
|
||||
} else {
|
||||
otherValues[key] = value
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
if (functionName === undefined) {
|
||||
return AspectedRouting.interpretAsDictionary(program, properties)
|
||||
}
|
||||
|
||||
if (functionName === '$multiply') {
|
||||
return AspectedRouting.multiplyScore(properties, functionArguments);
|
||||
} else if (functionName === '$firstMatchOf') {
|
||||
return AspectedRouting.getFirstMatchScore(properties, functionArguments);
|
||||
} else if (functionName === '$min') {
|
||||
return AspectedRouting.getMinValue(properties, functionArguments);
|
||||
} else if (functionName === '$max') {
|
||||
return AspectedRouting.getMaxValue(properties, functionArguments);
|
||||
} else if (functionName === '$default') {
|
||||
return AspectedRouting.defaultV(functionArguments, otherValues, properties)
|
||||
} else {
|
||||
console.error(`Error: Program ${functionName} is not implemented yet. ${JSON.stringify(program)}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a 'program' without function invocation, interprets it as a dictionary
|
||||
*
|
||||
* E.g., given the program
|
||||
*
|
||||
* {
|
||||
* highway: {
|
||||
* residential: 30,
|
||||
* living_street: 20
|
||||
* },
|
||||
* surface: {
|
||||
* sett : 0.9
|
||||
* }
|
||||
*
|
||||
* }
|
||||
*
|
||||
* in combination with the tags {highway: residential},
|
||||
*
|
||||
* the result should be [30, undefined];
|
||||
*
|
||||
* For the tags {highway: residential, surface: sett} we should get [30, 0.9]
|
||||
*
|
||||
*
|
||||
* @param program
|
||||
* @param tags
|
||||
* @return {(undefined|*)[]}
|
||||
*/
|
||||
private static interpretAsDictionary(program, tags) {
|
||||
// @ts-ignore
|
||||
return Object.entries(tags).map(tag => {
|
||||
const [key, value] = tag;
|
||||
const propertyValue = program[key]
|
||||
if (propertyValue === undefined) {
|
||||
return undefined
|
||||
}
|
||||
if (typeof propertyValue !== "object") {
|
||||
return propertyValue
|
||||
}
|
||||
// @ts-ignore
|
||||
return propertyValue[value]
|
||||
});
|
||||
}
|
||||
|
||||
private static defaultV(subProgram, otherArgs, tags) {
|
||||
// @ts-ignore
|
||||
const normalProgram = Object.entries(otherArgs)[0][1]
|
||||
const value = AspectedRouting.interpret(normalProgram, tags)
|
||||
if (value !== undefined) {
|
||||
return value;
|
||||
}
|
||||
return AspectedRouting.interpret(subProgram, tags)
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiplies the default score with the proper values
|
||||
* @param tags {object} the active tags to check against
|
||||
* @param subprograms which should generate a list of values
|
||||
* @returns score after multiplication
|
||||
*/
|
||||
private static multiplyScore(tags, subprograms) {
|
||||
let number = 1
|
||||
|
||||
let subResults: any[]
|
||||
if (subprograms.length !== undefined) {
|
||||
subResults = AspectedRouting.concatMap(subprograms, subprogram => AspectedRouting.interpret(subprogram, tags))
|
||||
} else {
|
||||
subResults = AspectedRouting.interpret(subprograms, tags)
|
||||
}
|
||||
|
||||
subResults.filter(r => r !== undefined).forEach(r => number *= parseFloat(r))
|
||||
return number.toFixed(2);
|
||||
}
|
||||
|
||||
private static getFirstMatchScore(tags, order: any) {
|
||||
/*Order should be a list of arguments after evaluation*/
|
||||
order = <string[]>AspectedRouting.interpret(order, tags)
|
||||
for (let key of order) {
|
||||
// @ts-ignore
|
||||
for (let entry of Object.entries(JSON.parse(tags))) {
|
||||
const [tagKey, value] = entry;
|
||||
if (key === tagKey) {
|
||||
// We have a match... let's evaluate the subprogram
|
||||
const evaluated = AspectedRouting.interpret(value, tags)
|
||||
if (evaluated !== undefined) {
|
||||
return evaluated;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Not a single match found...
|
||||
return undefined
|
||||
}
|
||||
|
||||
private static getMinValue(tags, subprogram) {
|
||||
const minArr = subprogram.map(part => {
|
||||
if (typeof (part) === 'object') {
|
||||
const calculatedValue = this.interpret(part, tags)
|
||||
return parseFloat(calculatedValue)
|
||||
} else {
|
||||
return parseFloat(part);
|
||||
}
|
||||
}).filter(v => !isNaN(v));
|
||||
return Math.min(...minArr);
|
||||
}
|
||||
|
||||
private static getMaxValue(tags, subprogram) {
|
||||
const maxArr = subprogram.map(part => {
|
||||
if (typeof (part) === 'object') {
|
||||
return parseFloat(AspectedRouting.interpret(part, tags))
|
||||
} else {
|
||||
return parseFloat(part);
|
||||
}
|
||||
}).filter(v => !isNaN(v));
|
||||
return Math.max(...maxArr);
|
||||
}
|
||||
|
||||
private static concatMap(list, f): any[] {
|
||||
const result = []
|
||||
list = list.map(f)
|
||||
for (const elem of list) {
|
||||
if (elem.length !== undefined) {
|
||||
// This is a list
|
||||
result.push(...elem)
|
||||
} else {
|
||||
result.push(elem)
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
42
Logic/Tags/ComparingTag.ts
Normal file
|
@ -0,0 +1,42 @@
|
|||
import {TagsFilter} from "./TagsFilter";
|
||||
|
||||
export default class ComparingTag implements TagsFilter {
|
||||
private readonly _key: string;
|
||||
private readonly _predicate: (value: string) => boolean;
|
||||
private readonly _representation: string;
|
||||
|
||||
constructor(key: string, predicate : (value:string | undefined) => boolean, representation: string = "") {
|
||||
this._key = key;
|
||||
this._predicate = predicate;
|
||||
this._representation = representation;
|
||||
}
|
||||
|
||||
asChange(properties: any): { k: string; v: string }[] {
|
||||
throw "A comparable tag can not be used to be uploaded to OSM"
|
||||
}
|
||||
|
||||
asHumanString(linkToWiki: boolean, shorten: boolean, properties: any) {
|
||||
return this._key+this._representation
|
||||
}
|
||||
|
||||
asOverpass(): string[] {
|
||||
throw "A comparable tag can not be used as overpass filter"
|
||||
}
|
||||
|
||||
isEquivalent(other: TagsFilter): boolean {
|
||||
return other === this;
|
||||
}
|
||||
|
||||
isUsableAsAnswer(): boolean {
|
||||
return false;
|
||||
}
|
||||
|
||||
matchesProperties(properties: any): boolean {
|
||||
return this._predicate(properties[this._key]);
|
||||
}
|
||||
|
||||
usedKeys(): string[] {
|
||||
return [this._key];
|
||||
}
|
||||
|
||||
}
|
|
@ -1,7 +1,6 @@
|
|||
import {Utils} from "../../Utils";
|
||||
import {RegexTag} from "./RegexTag";
|
||||
import {TagsFilter} from "./TagsFilter";
|
||||
import {TagUtils} from "./TagUtils";
|
||||
|
||||
export class Tag extends TagsFilter {
|
||||
public key: string
|
||||
|
@ -46,11 +45,6 @@ export class Tag extends TagsFilter {
|
|||
}
|
||||
return [`["${this.key}"="${this.value}"]`];
|
||||
}
|
||||
|
||||
substituteValues(tags: any) {
|
||||
return new Tag(this.key, TagUtils.ApplyTemplate(this.value as string, tags));
|
||||
}
|
||||
|
||||
asHumanString(linkToWiki?: boolean, shorten?: boolean) {
|
||||
let v = this.value;
|
||||
if (shorten) {
|
||||
|
|
|
@ -166,4 +166,21 @@ export class UIEventSource<T> {
|
|||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export class UIEventSourceTools {
|
||||
|
||||
private static readonly _download_cache = new Map<string, UIEventSource<any>>()
|
||||
|
||||
public static downloadJsonCached(url: string): UIEventSource<any>{
|
||||
const cached = UIEventSourceTools._download_cache.get(url)
|
||||
if(cached !== undefined){
|
||||
return cached;
|
||||
}
|
||||
const src = new UIEventSource<any>(undefined)
|
||||
UIEventSourceTools._download_cache.set(url, src)
|
||||
Utils.downloadJson(url).then(r => src.setData(r))
|
||||
return src;
|
||||
}
|
||||
|
||||
}
|
|
@ -2,7 +2,7 @@ import { Utils } from "../Utils";
|
|||
|
||||
export default class Constants {
|
||||
|
||||
public static vNumber = "0.8.4-rc3";
|
||||
public static vNumber = "0.8.4a";
|
||||
|
||||
// The user journey states thresholds when a new feature gets unlocked
|
||||
public static userJourney = {
|
||||
|
|
7
Svg.ts
|
@ -44,6 +44,11 @@ export default class Svg {
|
|||
public static back_svg() { return new Img(Svg.back, true);}
|
||||
public static back_ui() { return new FixedUiElement(Svg.back_img);}
|
||||
|
||||
public static barrier = " <svg version=\"1.1\" viewBox=\"0 0 128 128\" xmlns=\"http://www.w3.org/2000/svg\"> <path class=\"st0\" d=\"m128 64a64 64 0 0 1-64 64 64 64 0 0 1-64-64 64 64 0 0 1 64-64 64 64 0 0 1 64 64\" fill=\"#529add\"/> <path d=\"m31.992 32.08v87.273a64 64 0 0 0 16 6.5293v-93.803z\" fill=\"#666\"/> <path d=\"m79.992 32.08v93.84a64 64 0 0 0 16-6.582v-87.258z\" fill=\"#666\"/> <path d=\"m23.992 44.08c-4.456 0-8.0429 3.587-8.0429 8.043v31.914c0 4.456 3.5869 8.043 8.0429 8.043h79.914c4.456 0 8.043-3.587 8.043-8.043v-31.914c0-4.456-3.587-8.043-8.043-8.043z\" fill-opacity=\".2\"/> <path d=\"m24.036 40.08h79.913c4.456 0 8.0433 3.5873 8.0433 8.0433v31.913c0 4.456-3.5873 8.0433-8.0433 8.0433h-79.913c-4.456 0-8.0433-3.5873-8.0433-8.0433v-31.913c0-4.456 3.5873-8.0433 8.0433-8.0433z\" fill=\"#fff\" style=\"paint-order:normal\"/> <path d=\"m23.992 40.08c-3.8167 0-6.9867 2.6476-7.7949 6.2129l28.746 41.787h14.143l-32.332-48zm16.619 0 32.332 48h14.143l-32.332-48zm28 0 32.332 48h3.0488c3.6926 0 6.7759-2.4795 7.7051-5.8691l-28.943-42.131zm28 0 15.381 22v-14c0-4.432-3.568-8-8-8zm-80.619 26v14c0 4.432 3.568 8 8 8h7.0938z\" fill=\"#dd2e44\" style=\"paint-order:normal\"/> <path d=\"m24.03 40.08h79.924c4.4531 0 8.038 3.5849 8.038 8.038v31.924c0 4.453-3.5849 8.038-8.038 8.038h-79.924c-4.4531 0-8.038-3.5849-8.038-8.038v-31.924c0-4.453 3.5849-8.038 8.038-8.038z\" fill=\"none\" stroke=\"#555\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" style=\"paint-order:stroke markers fill\"/> </svg> "
|
||||
public static barrier_img = Img.AsImageElement(Svg.barrier)
|
||||
public static barrier_svg() { return new Img(Svg.barrier, true);}
|
||||
public static barrier_ui() { return new FixedUiElement(Svg.barrier_img);}
|
||||
|
||||
public static bug = "<svg height=\"1024\" width=\"733.886\" xmlns=\"http://www.w3.org/2000/svg\"> <path d=\"M243.621 156.53099999999995C190.747 213.312 205.34 304 205.34 304s53.968 64 160 64c106.031 0 160.031-64 160.031-64s14.375-89.469-37.375-146.312c32.375-18.031 51.438-44.094 43.562-61.812-8.938-19.969-48.375-21.75-88.25-3.969-14.812 6.594-27.438 14.969-37.25 23.875-12.438-2.25-25.625-3.781-40.72-3.781-14.061 0-26.561 1.344-38.344 3.25-9.656-8.75-22.062-16.875-36.531-23.344-39.875-17.719-79.375-15.938-88.25 3.969C194.465 113.21900000000005 212.497 138.562 243.621 156.53099999999995zM644.746 569.75c-8.25-1.75-16.125-2.75-23.75-3.5 0-2.125 0.375-4.125 0.375-6.312 0-33.594-4.75-65.654-12.438-96.125 16.438 1.406 37.375-2.375 58.562-11.779 39.875-17.781 65-48.375 56.125-68.219-8.875-19.969-48.375-21.75-88.25-3.969-18.625 8.312-33.812 19.469-44 30.906-7.75-18.25-16.5-35.781-26.812-51.719-30.188 25.156-87.312 62.719-167.062 71.062v321.781c0 0-0.25 32-32.031 32-31.75 0-32-32-32-32V430.219c-79.811-8.344-136.968-45.969-167.093-71.062-9.875 15.312-18.375 32-25.938 49.344-10.281-10.625-24.625-20.844-41.969-28.594-39.875-17.719-79.375-15.938-88.25 3.969-8.906 19.906 16.25 50.438 56.125 68.219 19.844 8.846 39.531 12.812 55.469 12.096-7.656 30.404-12.469 62.344-12.469 95.812 0 2.188 0.375 4.25 0.438 6.5-6.719 0.75-13.688 1.75-20.781 3.25-51.969 10.75-91.781 37.625-88.844 59.812 2.938 22.312 47.5 31.5 99.594 20.688 6.781-1.375 13.438-3.125 19.781-5.062C128.684 686 143.34 723.875 163.622 756.5c-12.031 6.062-24.531 15-36.031 26.625C95.715 815 82.779 853.75 98.715 869.688c15.938 15.937 54.656 3 86.531-28.812 9.344-9.375 16.844-19.25 22.656-29C251.434 854.5 305.965 880 365.465 880c60.343 0 115.781-26.25 159.531-69.938 5.875 10.312 13.75 20.812 23.625 30.688 31.812 31.875 70.625 44.812 86.562 28.875s3-54.625-28.875-86.5c-12.312-12.375-25.688-21.75-38.438-27.938 20.125-32.5 34.625-70.375 43.688-111.062 7.188 2.25 14.688 4.375 22.562 6.062 52.061 10.812 96.625 1.562 99.625-20.688C736.558 607.375 696.746 580.5 644.746 569.75z\"/> </svg>"
|
||||
public static bug_img = Img.AsImageElement(Svg.bug)
|
||||
public static bug_svg() { return new Img(Svg.bug, true);}
|
||||
|
@ -389,4 +394,4 @@ export default class Svg {
|
|||
public static wikipedia_svg() { return new Img(Svg.wikipedia, true);}
|
||||
public static wikipedia_ui() { return new FixedUiElement(Svg.wikipedia_img);}
|
||||
|
||||
public static All = {"SocialImageForeground.svg": Svg.SocialImageForeground,"add.svg": Svg.add,"addSmall.svg": Svg.addSmall,"ampersand.svg": Svg.ampersand,"arrow-left-smooth.svg": Svg.arrow_left_smooth,"arrow-left-thin.svg": Svg.arrow_left_thin,"arrow-right-smooth.svg": Svg.arrow_right_smooth,"back.svg": Svg.back,"bug.svg": Svg.bug,"camera-plus.svg": Svg.camera_plus,"checkbox-empty.svg": Svg.checkbox_empty,"checkbox-filled.svg": Svg.checkbox_filled,"checkmark.svg": Svg.checkmark,"circle.svg": Svg.circle,"clock.svg": Svg.clock,"close.svg": Svg.close,"compass.svg": Svg.compass,"cross_bottom_right.svg": Svg.cross_bottom_right,"crosshair-blue-center.svg": Svg.crosshair_blue_center,"crosshair-blue.svg": Svg.crosshair_blue,"crosshair-empty.svg": Svg.crosshair_empty,"crosshair-locked.svg": Svg.crosshair_locked,"crosshair.svg": Svg.crosshair,"delete_icon.svg": Svg.delete_icon,"direction.svg": Svg.direction,"direction_gradient.svg": Svg.direction_gradient,"direction_masked.svg": Svg.direction_masked,"direction_outline.svg": Svg.direction_outline,"direction_stroke.svg": Svg.direction_stroke,"down.svg": Svg.down,"download.svg": Svg.download,"envelope.svg": Svg.envelope,"filter.svg": Svg.filter,"floppy.svg": Svg.floppy,"gear.svg": Svg.gear,"help.svg": Svg.help,"home.svg": Svg.home,"home_white_bg.svg": Svg.home_white_bg,"josm_logo.svg": Svg.josm_logo,"layers.svg": Svg.layers,"layersAdd.svg": Svg.layersAdd,"length-crosshair.svg": Svg.length_crosshair,"location.svg": Svg.location,"logo.svg": Svg.logo,"logout.svg": Svg.logout,"mapcomplete_logo.svg": Svg.mapcomplete_logo,"mapillary.svg": Svg.mapillary,"mapillary_black.svg": Svg.mapillary_black,"min-zoom.svg": Svg.min_zoom,"min.svg": Svg.min,"no_checkmark.svg": Svg.no_checkmark,"or.svg": Svg.or,"osm-copyright.svg": Svg.osm_copyright,"osm-logo-us.svg": Svg.osm_logo_us,"osm-logo.svg": Svg.osm_logo,"pencil.svg": Svg.pencil,"phone.svg": Svg.phone,"pin.svg": Svg.pin,"plus-zoom.svg": Svg.plus_zoom,"plus.svg": Svg.plus,"pop-out.svg": Svg.pop_out,"reload.svg": Svg.reload,"ring.svg": Svg.ring,"search.svg": Svg.search,"send_email.svg": Svg.send_email,"share.svg": Svg.share,"square.svg": Svg.square,"star.svg": Svg.star,"star_half.svg": Svg.star_half,"star_outline.svg": Svg.star_outline,"star_outline_half.svg": Svg.star_outline_half,"statistics.svg": Svg.statistics,"translate.svg": Svg.translate,"up.svg": Svg.up,"wikidata.svg": Svg.wikidata,"wikimedia-commons-white.svg": Svg.wikimedia_commons_white,"wikipedia.svg": Svg.wikipedia};}
|
||||
public static All = {"SocialImageForeground.svg": Svg.SocialImageForeground,"add.svg": Svg.add,"addSmall.svg": Svg.addSmall,"ampersand.svg": Svg.ampersand,"arrow-left-smooth.svg": Svg.arrow_left_smooth,"arrow-left-thin.svg": Svg.arrow_left_thin,"arrow-right-smooth.svg": Svg.arrow_right_smooth,"back.svg": Svg.back,"barrier.svg": Svg.barrier,"bug.svg": Svg.bug,"camera-plus.svg": Svg.camera_plus,"checkbox-empty.svg": Svg.checkbox_empty,"checkbox-filled.svg": Svg.checkbox_filled,"checkmark.svg": Svg.checkmark,"circle.svg": Svg.circle,"clock.svg": Svg.clock,"close.svg": Svg.close,"compass.svg": Svg.compass,"cross_bottom_right.svg": Svg.cross_bottom_right,"crosshair-blue-center.svg": Svg.crosshair_blue_center,"crosshair-blue.svg": Svg.crosshair_blue,"crosshair-empty.svg": Svg.crosshair_empty,"crosshair-locked.svg": Svg.crosshair_locked,"crosshair.svg": Svg.crosshair,"delete_icon.svg": Svg.delete_icon,"direction.svg": Svg.direction,"direction_gradient.svg": Svg.direction_gradient,"direction_masked.svg": Svg.direction_masked,"direction_outline.svg": Svg.direction_outline,"direction_stroke.svg": Svg.direction_stroke,"down.svg": Svg.down,"download.svg": Svg.download,"envelope.svg": Svg.envelope,"filter.svg": Svg.filter,"floppy.svg": Svg.floppy,"gear.svg": Svg.gear,"help.svg": Svg.help,"home.svg": Svg.home,"home_white_bg.svg": Svg.home_white_bg,"josm_logo.svg": Svg.josm_logo,"layers.svg": Svg.layers,"layersAdd.svg": Svg.layersAdd,"length-crosshair.svg": Svg.length_crosshair,"location.svg": Svg.location,"logo.svg": Svg.logo,"logout.svg": Svg.logout,"mapcomplete_logo.svg": Svg.mapcomplete_logo,"mapillary.svg": Svg.mapillary,"mapillary_black.svg": Svg.mapillary_black,"min-zoom.svg": Svg.min_zoom,"min.svg": Svg.min,"no_checkmark.svg": Svg.no_checkmark,"or.svg": Svg.or,"osm-copyright.svg": Svg.osm_copyright,"osm-logo-us.svg": Svg.osm_logo_us,"osm-logo.svg": Svg.osm_logo,"pencil.svg": Svg.pencil,"phone.svg": Svg.phone,"pin.svg": Svg.pin,"plus-zoom.svg": Svg.plus_zoom,"plus.svg": Svg.plus,"pop-out.svg": Svg.pop_out,"reload.svg": Svg.reload,"ring.svg": Svg.ring,"search.svg": Svg.search,"send_email.svg": Svg.send_email,"share.svg": Svg.share,"square.svg": Svg.square,"star.svg": Svg.star,"star_half.svg": Svg.star_half,"star_outline.svg": Svg.star_outline,"star_outline_half.svg": Svg.star_outline_half,"statistics.svg": Svg.statistics,"translate.svg": Svg.translate,"up.svg": Svg.up,"wikidata.svg": Svg.wikidata,"wikimedia-commons-white.svg": Svg.wikimedia_commons_white,"wikipedia.svg": Svg.wikipedia};}
|
||||
|
|
55
UI/BigComponents/DownloadPanel.ts
Normal file
|
@ -0,0 +1,55 @@
|
|||
import {SubtleButton} from "../Base/SubtleButton";
|
||||
import Svg from "../../Svg";
|
||||
import Translations from "../i18n/Translations";
|
||||
import State from "../../State";
|
||||
import {FeatureSourceUtils} from "../../Logic/FeatureSource/FeatureSource";
|
||||
import {Utils} from "../../Utils";
|
||||
import Combine from "../Base/Combine";
|
||||
import CheckBoxes from "../Input/Checkboxes";
|
||||
import {GeoOperations} from "../../Logic/GeoOperations";
|
||||
import Toggle from "../Input/Toggle";
|
||||
import Title from "../Base/Title";
|
||||
|
||||
export class DownloadPanel extends Toggle {
|
||||
constructor() {
|
||||
const t = Translations.t.general.download
|
||||
const somethingLoaded = State.state.featurePipeline.features.map(features => features.length > 0);
|
||||
const includeMetaToggle = new CheckBoxes([t.includeMetaData.Clone()])
|
||||
const metaisIncluded = includeMetaToggle.GetValue().map(selected => selected.length > 0)
|
||||
const buttonGeoJson = new SubtleButton(Svg.floppy_ui(),
|
||||
new Combine([t.downloadGeojson.Clone().SetClass("font-bold"),
|
||||
t.downloadGeoJsonHelper.Clone()]).SetClass("flex flex-col"))
|
||||
.onClick(() => {
|
||||
const geojson = FeatureSourceUtils.extractGeoJson(State.state.featurePipeline, {metadata: metaisIncluded.data})
|
||||
const name = State.state.layoutToUse.data.id;
|
||||
Utils.offerContentsAsDownloadableFile(JSON.stringify(geojson),
|
||||
`MapComplete_${name}_export_${new Date().toISOString().substr(0, 19)}.geojson`, {
|
||||
mimetype: "application/vnd.geo+json"
|
||||
});
|
||||
})
|
||||
|
||||
const buttonCSV = new SubtleButton(Svg.floppy_ui(), new Combine(
|
||||
[t.downloadCSV.Clone().SetClass("font-bold"),
|
||||
t.downloadCSVHelper.Clone()]).SetClass("flex flex-col"))
|
||||
.onClick(() => {
|
||||
const geojson = FeatureSourceUtils.extractGeoJson(State.state.featurePipeline, {metadata: metaisIncluded.data})
|
||||
const csv = GeoOperations.toCSV(geojson.features)
|
||||
|
||||
|
||||
Utils.offerContentsAsDownloadableFile(csv,
|
||||
`MapComplete_${name}_export_${new Date().toISOString().substr(0, 19)}.csv`, {
|
||||
mimetype: "text/csv"
|
||||
});
|
||||
|
||||
|
||||
})
|
||||
const downloadButtons = new Combine(
|
||||
[new Title(t.title), buttonGeoJson, buttonCSV, includeMetaToggle, t.licenseInfo.Clone().SetClass("link-underline")])
|
||||
.SetClass("w-full flex flex-col border-4 border-gray-300 rounded-3xl p-4")
|
||||
|
||||
super(
|
||||
downloadButtons,
|
||||
t.noDataLoaded.Clone(),
|
||||
somethingLoaded)
|
||||
}
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
import {SubtleButton} from "../Base/SubtleButton";
|
||||
import Svg from "../../Svg";
|
||||
import Translations from "../i18n/Translations";
|
||||
import State from "../../State";
|
||||
import {FeatureSourceUtils} from "../../Logic/FeatureSource/FeatureSource";
|
||||
import {Utils} from "../../Utils";
|
||||
import Combine from "../Base/Combine";
|
||||
|
||||
export class ExportDataButton extends Combine {
|
||||
constructor() {
|
||||
const t = Translations.t.general.download
|
||||
const button = new SubtleButton(Svg.floppy_ui(), t.downloadGeojson.Clone().SetClass("font-bold"))
|
||||
.onClick(() => {
|
||||
const geojson = FeatureSourceUtils.extractGeoJson(State.state.featurePipeline)
|
||||
const name = State.state.layoutToUse.data.id;
|
||||
Utils.offerContentsAsDownloadableFile(JSON.stringify(geojson), `MapComplete_${name}_export_${new Date().toISOString().substr(0,19)}.geojson`);
|
||||
})
|
||||
|
||||
super([button, t.licenseInfo.Clone().SetClass("link-underline")])
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
import State from "../../State";
|
||||
import ThemeIntroductionPanel from "./ThemeIntroductionPanel";
|
||||
import * as personal from "../../assets/themes/personalLayout/personalLayout.json";
|
||||
import * as personal from "../../assets/themes/personal/personal.json";
|
||||
import PersonalLayersPanel from "./PersonalLayersPanel";
|
||||
import Svg from "../../Svg";
|
||||
import Translations from "../i18n/Translations";
|
||||
|
|
|
@ -3,51 +3,55 @@ import BackgroundSelector from "./BackgroundSelector";
|
|||
import Combine from "../Base/Combine";
|
||||
import ScrollableFullScreen from "../Base/ScrollableFullScreen";
|
||||
import Translations from "../i18n/Translations";
|
||||
import { UIEventSource } from "../../Logic/UIEventSource";
|
||||
import {UIEventSource} from "../../Logic/UIEventSource";
|
||||
import BaseUIElement from "../BaseUIElement";
|
||||
import Toggle from "../Input/Toggle";
|
||||
import { ExportDataButton } from "./ExportDataButton";
|
||||
import FilterView from "./FilterView";
|
||||
import {DownloadPanel} from "./DownloadPanel";
|
||||
|
||||
export default class LayerControlPanel extends ScrollableFullScreen {
|
||||
constructor(isShown: UIEventSource<boolean>) {
|
||||
super(
|
||||
LayerControlPanel.GenTitle,
|
||||
LayerControlPanel.GeneratePanel,
|
||||
"layers",
|
||||
isShown
|
||||
);
|
||||
}
|
||||
|
||||
private static GenTitle(): BaseUIElement {
|
||||
return Translations.t.general.layerSelection.title
|
||||
.Clone()
|
||||
.SetClass("text-2xl break-words font-bold p-2");
|
||||
}
|
||||
|
||||
private static GeneratePanel(): BaseUIElement {
|
||||
const elements: BaseUIElement[] = [];
|
||||
|
||||
if (State.state.layoutToUse.data.enableBackgroundLayerSelection) {
|
||||
const backgroundSelector = new BackgroundSelector();
|
||||
backgroundSelector.SetStyle("margin:1em");
|
||||
backgroundSelector.onClick(() => {});
|
||||
elements.push(backgroundSelector);
|
||||
constructor(isShown: UIEventSource<boolean>) {
|
||||
super(LayerControlPanel.GenTitle, LayerControlPanel.GeneratePanel, "layers", isShown);
|
||||
}
|
||||
|
||||
elements.push(
|
||||
new Toggle(
|
||||
new FilterView(State.state.filteredLayers),
|
||||
undefined,
|
||||
State.state.filteredLayers.map(
|
||||
(layers) => layers.length > 1 || layers[0].layerDef.filters.length > 0
|
||||
)
|
||||
)
|
||||
);
|
||||
private static GenTitle(): BaseUIElement {
|
||||
return Translations.t.general.layerSelection.title
|
||||
.Clone()
|
||||
.SetClass("text-2xl break-words font-bold p-2");
|
||||
}
|
||||
|
||||
private static GeneratePanel(): BaseUIElement {
|
||||
const elements: BaseUIElement[] = [];
|
||||
|
||||
if (State.state.layoutToUse.data.enableBackgroundLayerSelection) {
|
||||
const backgroundSelector = new BackgroundSelector();
|
||||
backgroundSelector.SetStyle("margin:1em");
|
||||
backgroundSelector.onClick(() => {
|
||||
});
|
||||
elements.push(backgroundSelector)
|
||||
}
|
||||
elements.push(
|
||||
new Toggle(
|
||||
new FilterView(State.state.filteredLayers),
|
||||
undefined,
|
||||
State.state.filteredLayers.map(
|
||||
(layers) => layers.length > 1 || layers[0].layerDef.filters.length > 0
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
elements.push(new Toggle(
|
||||
new DownloadPanel(),
|
||||
undefined,
|
||||
State.state.featureSwitchEnableExport
|
||||
))
|
||||
|
||||
|
||||
|
||||
elements.push(
|
||||
new Toggle(
|
||||
new ExportDataButton(),
|
||||
new DownloadPanel(),
|
||||
undefined,
|
||||
State.state.featureSwitchEnableExport
|
||||
)
|
||||
|
|
|
@ -6,7 +6,7 @@ import State from "../../State";
|
|||
import Combine from "../Base/Combine";
|
||||
import {SubtleButton} from "../Base/SubtleButton";
|
||||
import Translations from "../i18n/Translations";
|
||||
import * as personal from "../../assets/themes/personalLayout/personalLayout.json"
|
||||
import * as personal from "../../assets/themes/personal/personal.json"
|
||||
import Constants from "../../Models/Constants";
|
||||
import LanguagePicker from "../LanguagePicker";
|
||||
import IndexText from "./IndexText";
|
||||
|
|
7
Utils.ts
|
@ -358,14 +358,13 @@ export class Utils {
|
|||
|
||||
/**
|
||||
* Triggers a 'download file' popup which will download the contents
|
||||
* @param contents
|
||||
* @param fileName
|
||||
*/
|
||||
public static offerContentsAsDownloadableFile(contents: string | Blob, fileName: string = "download.txt") {
|
||||
public static offerContentsAsDownloadableFile(contents: string | Blob, fileName: string = "download.txt",
|
||||
options?: { mimetype: string }) {
|
||||
const element = document.createElement("a");
|
||||
let file;
|
||||
if (typeof (contents) === "string") {
|
||||
file = new Blob([contents], {type: 'text/plain'});
|
||||
file = new Blob([contents], {type: options?.mimetype ?? 'text/plain'});
|
||||
} else {
|
||||
file = contents;
|
||||
}
|
||||
|
|
|
@ -518,7 +518,6 @@
|
|||
]
|
||||
}
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "circle:#FE6F32;./assets/layers/bench/bench.svg"
|
||||
},
|
||||
|
|
|
@ -126,7 +126,6 @@
|
|||
}
|
||||
}
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "./assets/themes/benches/bench_public_transport.svg"
|
||||
},
|
||||
|
|
|
@ -210,7 +210,6 @@
|
|||
},
|
||||
"description"
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 1,
|
||||
"presets": [
|
||||
{
|
||||
"title": {
|
||||
|
|
|
@ -293,7 +293,6 @@
|
|||
}
|
||||
}
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "./assets/layers/bike_cafe/bike_cafe.svg"
|
||||
},
|
||||
|
|
|
@ -63,7 +63,6 @@
|
|||
}
|
||||
}
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "./assets/layers/bike_monitoring_station/monitoring_station.svg"
|
||||
},
|
||||
|
|
|
@ -601,7 +601,6 @@
|
|||
]
|
||||
}
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 1,
|
||||
"presets": [
|
||||
{
|
||||
"title": {
|
||||
|
|
|
@ -56,7 +56,6 @@
|
|||
"phone",
|
||||
"opening_hours"
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "./assets/layers/bike_themed_object/other_services.svg"
|
||||
},
|
||||
|
|
123
assets/layers/crossings/Belgian_road_sign_B22.svg
Normal file
|
@ -0,0 +1,123 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg2816"
|
||||
version="1.1"
|
||||
inkscape:version="0.47 r22583"
|
||||
width="95.81649"
|
||||
height="83.729599"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="Belgian road sign B22.svg"><metadata
|
||||
id="metadata2822"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs2820"><inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
id="perspective2824" /><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath2844"><path
|
||||
d="m 2562,672.668 3,0 0,-108 -3,0 0,108 z"
|
||||
id="path2846" /></clipPath><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath2854"><path
|
||||
d="m 731,6133.67 780,0 0,-679 -780,0 0,679 z"
|
||||
id="path2856" /></clipPath><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath2892"><path
|
||||
d="m 731,4841.67 780,0 0,-680 -780,0 0,680 z"
|
||||
id="path2894" /></clipPath><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath3090"><path
|
||||
d="m 731,2387.67 779,0 0,-684 -779,0"
|
||||
id="path3092" /></clipPath><inkscape:perspective
|
||||
id="perspective3129"
|
||||
inkscape:persp3d-origin="47.908001 : 27.909665 : 1"
|
||||
inkscape:vp_z="95.816002 : 41.864498 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 41.864498 : 1"
|
||||
sodipodi:type="inkscape:persp3d" /><inkscape:perspective
|
||||
id="perspective4211"
|
||||
inkscape:persp3d-origin="39.790001 : 26.495 : 1"
|
||||
inkscape:vp_z="79.580002 : 39.7425 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 39.7425 : 1"
|
||||
sodipodi:type="inkscape:persp3d" /></defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="838"
|
||||
id="namedview2818"
|
||||
showgrid="false"
|
||||
inkscape:zoom="2.140677"
|
||||
inkscape:cx="47.742493"
|
||||
inkscape:cy="42.339324"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g2826" /><g
|
||||
id="g2826"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Belgio"
|
||||
transform="matrix(1.25,0,0,-1.25,346.87909,480.97823)"><g
|
||||
id="g2840"
|
||||
transform="matrix(0.09762902,0,0,0.09762902,-202.75728,115.54083)"><g
|
||||
clip-path="url(#clipPath2844)"
|
||||
id="g2842"><g
|
||||
transform="scale(8.33333,8.33333)"
|
||||
id="g2848" /></g></g>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<path
|
||||
id="path3115"
|
||||
d="m -242.61678,319.6165 c 0.704,-1.1168 1.9512,-1.8176 3.3904,-1.8176 1.3752,0 1.984,0.6704 2.7192,1.6896 l 34.8976,58.5576 c 1.216,1.5944 0.9264,4.1144 -0.544,5.5816 -0.832,0.8288 -1.792,1.212 -2.8792,1.148 l -69.1224,-0.032 c -0.7992,-0.1272 -1.5672,-0.5104 -2.1752,-1.116 -1.1832,-1.212 -1.4712,-2.9656 -0.864,-4.4656 l 34.5776,-59.5456 z"
|
||||
style="fill:#ed1c24" /><path
|
||||
id="path3117"
|
||||
d="m -242.61678,319.6165 c 0.704,-1.1168 1.9512,-1.8176 3.3904,-1.8176 1.3752,0 1.984,0.6704 2.7192,1.6896 l 34.8976,58.5576 c 1.216,1.5944 0.9264,4.1144 -0.544,5.5816 -0.832,0.8296 -1.792,1.212 -2.8792,1.148 l -69.1224,-0.032 c -0.7992,-0.1272 -1.5672,-0.5104 -2.1752,-1.116 -1.1832,-1.212 -1.4712,-2.9656 -0.864,-4.4656 l 34.5776,-59.5456 z"
|
||||
stroke-miterlimit="3.863"
|
||||
style="fill:none;stroke:#ed1c24;stroke-width:0;stroke-miterlimit:3.86299992" /><polygon
|
||||
id="polygon3119"
|
||||
points="47.926,68.261 81.192,10.892 14.66,10.892 "
|
||||
clip-rule="evenodd"
|
||||
transform="matrix(0.8,0,0,-0.8,-277.50318,384.7821)"
|
||||
style="fill:#ffffff;fill-rule:evenodd" /><polygon
|
||||
id="polygon3121"
|
||||
points="47.926,68.261 81.192,10.892 14.66,10.892 "
|
||||
stroke-miterlimit="3.863"
|
||||
transform="matrix(0.8,0,0,-0.8,-277.50318,384.7821)"
|
||||
style="fill:none;stroke:#ed1c24;stroke-width:0;stroke-miterlimit:3.86299992" /><path
|
||||
style="fill:#ffed45;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.31999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
d="m -231.26354,357.69838 c -1.34367,0.12281 -2.52121,0.69462 -3.46633,1.68322 -0.998,1.04394 -1.53671,2.27606 -1.60888,3.67984 -0.0339,0.65964 0.11226,1.24682 0.51395,2.0645 0.57894,1.1785 1.43752,2.19077 2.29437,2.70506 0.10668,0.0641 0.31479,0.15627 0.46244,0.20495 0.52155,0.17194 0.62599,0.26164 0.62055,0.53293 -0.006,0.26596 -0.33704,0.82354 -0.7403,1.2444 -0.12913,0.13476 -0.16161,0.15184 -0.28886,0.15184 -0.16967,0 -0.31579,-0.0771 -0.958,-0.5056 -2.04063,-1.36152 -6.41288,-4.73175 -6.60552,-5.09169 -0.0559,-0.10455 -0.0285,-0.42985 0.0492,-0.58259 0.0315,-0.062 0.12797,-0.20932 0.21429,-0.32741 0.31765,-0.43453 0.41348,-0.73823 0.38564,-1.22219 -0.032,-0.55638 -0.20725,-0.9062 -0.6338,-1.26523 -0.51867,-0.43658 -0.64949,-0.45651 -1.37516,-0.20944 -0.27308,0.093 -0.50906,0.1534 -0.59909,0.1534 -0.24478,0 -0.41506,-0.14213 -0.83113,-0.69367 -0.82327,-1.09133 -1.74662,-1.78358 -2.92939,-2.19619 -0.60899,-0.21244 -0.95078,-0.26471 -1.73015,-0.26455 -0.73272,1.3e-4 -0.93055,0.0262 -1.49924,0.19736 -1.92475,0.57934 -3.4522,2.40105 -3.72021,4.43692 -0.30411,2.3101 1.01272,4.62854 3.15722,5.55867 0.64918,0.28156 1.19823,0.39229 2.06223,0.41592 0.76732,0.021 1.32941,-0.0495 1.88997,-0.23708 0.70208,-0.2349 1.19254,-0.54828 1.99128,-1.27237 0.52363,-0.4747 0.92806,-0.76798 1.03743,-0.75235 0.0574,0.008 0.0679,0.0305 0.0622,0.13141 -0.0225,0.38996 -0.5451,1.79029 -1.27378,3.41288 -0.39655,0.88303 -0.45502,0.99838 -0.67399,1.32971 -0.24305,0.36776 -0.39642,0.48005 -0.778,0.56964 -0.35042,0.0823 -0.51951,0.16055 -0.61842,0.28628 -0.16426,0.20883 -0.006,0.37121 0.43469,0.4444 0.39259,0.0653 3.63288,0.0655 3.99004,3.1e-4 0.30374,-0.0554 0.42221,-0.11317 0.46536,-0.22667 0.0531,-0.1398 -0.0206,-0.27007 -0.19734,-0.34823 -0.12228,-0.0541 -0.28608,-0.0742 -0.89427,-0.10965 -0.40952,-0.0239 -0.80194,-0.0602 -0.87206,-0.0805 -0.11725,-0.0341 -0.12596,-0.0447 -0.10851,-0.13201 0.10648,-0.53243 2.27576,-5.44935 2.40417,-5.44935 0.15339,0 0.83299,0.39345 1.84192,1.06636 0.91635,0.61116 1.72519,1.19134 4.07094,2.92004 l 1.83714,1.35389 1.84918,0.0223 c 2.38508,0.0288 2.55796,0.0498 2.81579,0.34273 0.15082,0.17134 0.32526,0.57007 0.37407,0.855 0.0282,0.16441 0.0242,0.24368 -0.0211,0.42763 -0.073,0.29561 -0.28752,0.73526 -0.42498,0.87079 -0.25047,0.24694 -0.44151,0.28458 -1.85986,0.36645 -1.21249,0.07 -1.53162,0.10049 -1.92144,0.18373 -0.23089,0.0493 -0.33407,0.1108 -0.29417,0.17536 0.0366,0.0592 0.46162,0.1317 1.0045,0.17138 0.69842,0.051 2.40993,0.0222 2.70529,-0.0456 0.34217,-0.0786 0.55789,-0.20879 0.78273,-0.47256 0.50948,-0.59769 0.72258,-1.2471 0.60028,-1.8293 -0.0842,-0.40068 -0.25149,-0.70122 -0.56153,-1.00855 -0.30557,-0.3029 -0.57152,-0.46469 -0.99823,-0.60726 -0.3324,-0.11107 -0.62458,-0.15262 -1.38578,-0.19709 -0.72069,-0.0421 -0.90676,-0.12032 -0.90536,-0.38058 8e-4,-0.18061 0.0813,-0.34664 0.32122,-0.66377 0.52666,-0.69617 0.97508,-0.97276 1.87468,-1.15631 0.72541,-0.14801 1.1711,-0.32548 1.78453,-0.71059 1.7548,-1.10164 2.62477,-2.72806 2.55011,-4.76748 -0.03,-0.81857 -0.19121,-1.47945 -0.53315,-2.18515 -0.29617,-0.61127 -0.67699,-1.08214 -1.25031,-1.54601 -1.20112,-0.97181 -2.72396,-1.52872 -3.88898,-1.42224 z"
|
||||
id="path4186" /><path
|
||||
style="fill:#ffed45;fill-opacity:1;stroke:#000000;stroke-width:0.31999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -236.21364,351.37729 0.0849,2.17946 2.34342,-4.05028 -2.48076,-4.20684 0.0189,2.18003 -8.2238,0.17008 0.0334,3.86459 8.22401,-0.13708 0,-1e-5 0,5e-5 z"
|
||||
id="path4222"
|
||||
sodipodi:nodetypes="cccccccccc" /></g></svg>
|
After Width: | Height: | Size: 8.3 KiB |
124
assets/layers/crossings/Belgian_road_sign_B23.svg
Normal file
|
@ -0,0 +1,124 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg2816"
|
||||
version="1.1"
|
||||
inkscape:version="0.47 r22583"
|
||||
width="95.81649"
|
||||
height="83.729599"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="Belgio.pdf"><metadata
|
||||
id="metadata2822"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs2820"><inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
id="perspective2824" /><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath2844"><path
|
||||
d="m 2562,672.668 3,0 0,-108 -3,0 0,108 z"
|
||||
id="path2846" /></clipPath><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath2854"><path
|
||||
d="m 731,6133.67 780,0 0,-679 -780,0 0,679 z"
|
||||
id="path2856" /></clipPath><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath2892"><path
|
||||
d="m 731,4841.67 780,0 0,-680 -780,0 0,680 z"
|
||||
id="path2894" /></clipPath><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath3090"><path
|
||||
d="m 731,2387.67 779,0 0,-684 -779,0"
|
||||
id="path3092" /></clipPath><inkscape:perspective
|
||||
id="perspective3129"
|
||||
inkscape:persp3d-origin="47.908001 : 27.909665 : 1"
|
||||
inkscape:vp_z="95.816002 : 41.864498 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 41.864498 : 1"
|
||||
sodipodi:type="inkscape:persp3d" /><inkscape:perspective
|
||||
id="perspective4211"
|
||||
inkscape:persp3d-origin="39.790001 : 26.495 : 1"
|
||||
inkscape:vp_z="79.580002 : 39.7425 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 39.7425 : 1"
|
||||
sodipodi:type="inkscape:persp3d" /></defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="838"
|
||||
id="namedview2818"
|
||||
showgrid="false"
|
||||
inkscape:zoom="2.140677"
|
||||
inkscape:cx="47.742493"
|
||||
inkscape:cy="42.339324"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g2826" /><g
|
||||
id="g2826"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Belgio"
|
||||
transform="matrix(1.25,0,0,-1.25,346.87909,480.97823)"><g
|
||||
id="g2840"
|
||||
transform="matrix(0.09762902,0,0,0.09762902,-202.75728,115.54083)"><g
|
||||
clip-path="url(#clipPath2844)"
|
||||
id="g2842"><g
|
||||
transform="scale(8.33333,8.33333)"
|
||||
id="g2848" /></g></g>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<g
|
||||
id="g4226"><path
|
||||
style="fill:#ed1c24"
|
||||
d="m -242.61678,319.6165 c 0.704,-1.1168 1.9512,-1.8176 3.3904,-1.8176 1.3752,0 1.984,0.6704 2.7192,1.6896 l 34.8976,58.5576 c 1.216,1.5944 0.9264,4.1144 -0.544,5.5816 -0.832,0.8288 -1.792,1.212 -2.8792,1.148 l -69.1224,-0.032 c -0.7992,-0.1272 -1.5672,-0.5104 -2.1752,-1.116 -1.1832,-1.212 -1.4712,-2.9656 -0.864,-4.4656 l 34.5776,-59.5456 z"
|
||||
id="path3115" /><path
|
||||
style="fill:none;stroke:#ed1c24;stroke-width:0;stroke-miterlimit:3.86299992"
|
||||
stroke-miterlimit="3.863"
|
||||
d="m -242.61678,319.6165 c 0.704,-1.1168 1.9512,-1.8176 3.3904,-1.8176 1.3752,0 1.984,0.6704 2.7192,1.6896 l 34.8976,58.5576 c 1.216,1.5944 0.9264,4.1144 -0.544,5.5816 -0.832,0.8296 -1.792,1.212 -2.8792,1.148 l -69.1224,-0.032 c -0.7992,-0.1272 -1.5672,-0.5104 -2.1752,-1.116 -1.1832,-1.212 -1.4712,-2.9656 -0.864,-4.4656 l 34.5776,-59.5456 z"
|
||||
id="path3117" /><polygon
|
||||
style="fill:#ffffff;fill-rule:evenodd"
|
||||
transform="matrix(0.8,0,0,-0.8,-277.50318,384.7821)"
|
||||
clip-rule="evenodd"
|
||||
points="81.192,10.892 14.66,10.892 47.926,68.261 "
|
||||
id="polygon3119" /><polygon
|
||||
style="fill:none;stroke:#ed1c24;stroke-width:0;stroke-miterlimit:3.86299992"
|
||||
transform="matrix(0.8,0,0,-0.8,-277.50318,384.7821)"
|
||||
stroke-miterlimit="3.863"
|
||||
points="81.192,10.892 14.66,10.892 47.926,68.261 "
|
||||
id="polygon3121" /><path
|
||||
id="path4186"
|
||||
d="m -231.26354,357.69838 c -1.34367,0.12281 -2.52121,0.69462 -3.46633,1.68322 -0.998,1.04394 -1.53671,2.27606 -1.60888,3.67984 -0.0339,0.65964 0.11226,1.24682 0.51395,2.0645 0.57894,1.1785 1.43752,2.19077 2.29437,2.70506 0.10668,0.0641 0.31479,0.15627 0.46244,0.20495 0.52155,0.17194 0.62599,0.26164 0.62055,0.53293 -0.006,0.26596 -0.33704,0.82354 -0.7403,1.2444 -0.12913,0.13476 -0.16161,0.15184 -0.28886,0.15184 -0.16967,0 -0.31579,-0.0771 -0.958,-0.5056 -2.04063,-1.36152 -6.41288,-4.73175 -6.60552,-5.09169 -0.0559,-0.10455 -0.0285,-0.42985 0.0492,-0.58259 0.0315,-0.062 0.12797,-0.20932 0.21429,-0.32741 0.31765,-0.43453 0.41348,-0.73823 0.38564,-1.22219 -0.032,-0.55638 -0.20725,-0.9062 -0.6338,-1.26523 -0.51867,-0.43658 -0.64949,-0.45651 -1.37516,-0.20944 -0.27308,0.093 -0.50906,0.1534 -0.59909,0.1534 -0.24478,0 -0.41506,-0.14213 -0.83113,-0.69367 -0.82327,-1.09133 -1.74662,-1.78358 -2.92939,-2.19619 -0.60899,-0.21244 -0.95078,-0.26471 -1.73015,-0.26455 -0.73272,1.3e-4 -0.93055,0.0262 -1.49924,0.19736 -1.92475,0.57934 -3.4522,2.40105 -3.72021,4.43692 -0.30411,2.3101 1.01272,4.62854 3.15722,5.55867 0.64918,0.28156 1.19823,0.39229 2.06223,0.41592 0.76732,0.021 1.32941,-0.0495 1.88997,-0.23708 0.70208,-0.2349 1.19254,-0.54828 1.99128,-1.27237 0.52363,-0.4747 0.92806,-0.76798 1.03743,-0.75235 0.0574,0.008 0.0679,0.0305 0.0622,0.13141 -0.0225,0.38996 -0.5451,1.79029 -1.27378,3.41288 -0.39655,0.88303 -0.45502,0.99838 -0.67399,1.32971 -0.24305,0.36776 -0.39642,0.48005 -0.778,0.56964 -0.35042,0.0823 -0.51951,0.16055 -0.61842,0.28628 -0.16426,0.20883 -0.006,0.37121 0.43469,0.4444 0.39259,0.0653 3.63288,0.0655 3.99004,3.1e-4 0.30374,-0.0554 0.42221,-0.11317 0.46536,-0.22667 0.0531,-0.1398 -0.0206,-0.27007 -0.19734,-0.34823 -0.12228,-0.0541 -0.28608,-0.0742 -0.89427,-0.10965 -0.40952,-0.0239 -0.80194,-0.0602 -0.87206,-0.0805 -0.11725,-0.0341 -0.12596,-0.0447 -0.10851,-0.13201 0.10648,-0.53243 2.27576,-5.44935 2.40417,-5.44935 0.15339,0 0.83299,0.39345 1.84192,1.06636 0.91635,0.61116 1.72519,1.19134 4.07094,2.92004 l 1.83714,1.35389 1.84918,0.0223 c 2.38508,0.0288 2.55796,0.0498 2.81579,0.34273 0.15082,0.17134 0.32526,0.57007 0.37407,0.855 0.0282,0.16441 0.0242,0.24368 -0.0211,0.42763 -0.073,0.29561 -0.28752,0.73526 -0.42498,0.87079 -0.25047,0.24694 -0.44151,0.28458 -1.85986,0.36645 -1.21249,0.07 -1.53162,0.10049 -1.92144,0.18373 -0.23089,0.0493 -0.33407,0.1108 -0.29417,0.17536 0.0366,0.0592 0.46162,0.1317 1.0045,0.17138 0.69842,0.051 2.40993,0.0222 2.70529,-0.0456 0.34217,-0.0786 0.55789,-0.20879 0.78273,-0.47256 0.50948,-0.59769 0.72258,-1.2471 0.60028,-1.8293 -0.0842,-0.40068 -0.25149,-0.70122 -0.56153,-1.00855 -0.30557,-0.3029 -0.57152,-0.46469 -0.99823,-0.60726 -0.3324,-0.11107 -0.62458,-0.15262 -1.38578,-0.19709 -0.72069,-0.0421 -0.90676,-0.12032 -0.90536,-0.38058 8e-4,-0.18061 0.0813,-0.34664 0.32122,-0.66377 0.52666,-0.69617 0.97508,-0.97276 1.87468,-1.15631 0.72541,-0.14801 1.1711,-0.32548 1.78453,-0.71059 1.7548,-1.10164 2.62477,-2.72806 2.55011,-4.76748 -0.03,-0.81857 -0.19121,-1.47945 -0.53315,-2.18515 -0.29617,-0.61127 -0.67699,-1.08214 -1.25031,-1.54601 -1.20112,-0.97181 -2.72396,-1.52872 -3.88898,-1.42224 z"
|
||||
style="fill:#ffed45;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.31999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /><path
|
||||
sodipodi:nodetypes="cccccccccc"
|
||||
id="path4222"
|
||||
d="m -241.06949,349.14367 -2.18011,0.0661 4.0299,2.37829 4.22809,-2.44436 -2.18011,4e-5 -0.0991,-8.22496 -3.86473,10e-6 0.0661,8.22488 1e-5,0 -5e-5,0 z"
|
||||
style="fill:#ffed45;fill-opacity:1;stroke:#000000;stroke-width:0.31999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g></g></svg>
|
After Width: | Height: | Size: 8.3 KiB |
287
assets/layers/crossings/crossings.json
Normal file
|
@ -0,0 +1,287 @@
|
|||
{
|
||||
"id": "crossings",
|
||||
"name": {
|
||||
"en": "Crossings",
|
||||
"nl": "Oversteekplaatsen"
|
||||
},
|
||||
"description": {
|
||||
"en": "Crossings for pedestrians and cyclists",
|
||||
"nl": "Oversteekplaatsen voor voetgangers en fietsers"
|
||||
},
|
||||
"source": {
|
||||
"osmTags": {
|
||||
"or": [
|
||||
"highway=traffic_signals",
|
||||
"highway=crossing"
|
||||
]
|
||||
}
|
||||
},
|
||||
"minzoom": 17,
|
||||
"title": {
|
||||
"render": {
|
||||
"en": "Crossing",
|
||||
"nl": "Oversteekplaats"
|
||||
},
|
||||
"mappings": [
|
||||
{
|
||||
"if": "highway=traffic_signals",
|
||||
"then": {
|
||||
"en": "Traffic signal",
|
||||
"nl": "Verkeerslicht"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "crossing=traffic_signals",
|
||||
"then": {
|
||||
"en": "Crossing with traffic signals",
|
||||
"nl": "Oversteektplaats met verkeerslichten"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"icon": {
|
||||
"render": "./assets/layers/crossings/pedestrian_crossing.svg",
|
||||
"mappings": [
|
||||
{
|
||||
"if": {
|
||||
"or": [
|
||||
"highway=traffic_signals",
|
||||
"crossing=traffic_signals"
|
||||
]
|
||||
},
|
||||
"then": "./assets/layers/crossings/traffic_lights.svg"
|
||||
}
|
||||
]
|
||||
},
|
||||
"width": "5",
|
||||
"presets": [
|
||||
{
|
||||
"title": {
|
||||
"en": "Crossing",
|
||||
"nl": "Oversteekplaats"
|
||||
},
|
||||
"tags": [
|
||||
"highway=crossing"
|
||||
],
|
||||
"description": {
|
||||
"en": "Crossing for pedestrians and/or cyclists",
|
||||
"nl": "Oversteekplaats voor voetgangers en/of fietsers"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": {
|
||||
"en": "Traffic signal",
|
||||
"nl": "Verkeerslicht"
|
||||
},
|
||||
"tags": [
|
||||
"highway=traffic_signals"
|
||||
],
|
||||
"description": {
|
||||
"en": "Traffic signal on a road",
|
||||
"nl": "Verkeerslicht op een weg"
|
||||
}
|
||||
}
|
||||
],
|
||||
"tagRenderings": [
|
||||
{
|
||||
"question": {
|
||||
"en": "What kind of crossing is this?",
|
||||
"nl": "Wat voor oversteekplaats is dit?"
|
||||
},
|
||||
"condition": "highway=crossing",
|
||||
"mappings": [
|
||||
{
|
||||
"if": "crossing=uncontrolled",
|
||||
"then": {
|
||||
"en": "Crossing, without traffic lights",
|
||||
"nl": "Oversteekplaats, zonder verkeerslichten"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "crossing=traffic_signals",
|
||||
"then": {
|
||||
"en": "Crossing with traffic signals",
|
||||
"nl": "Oversteekplaats met verkeerslichten"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "crossing=zebra",
|
||||
"then": {
|
||||
"en": "Zebra crossing",
|
||||
"nl": "Zebrapad"
|
||||
},
|
||||
"hideInAnswer": true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"question": {
|
||||
"en": "Is this crossing also for bicycles?",
|
||||
"nl": "Is deze oversteekplaats ook voor fietsers"
|
||||
},
|
||||
"condition": "highway=crossing",
|
||||
"mappings": [
|
||||
{
|
||||
"if": "bicycle=yes",
|
||||
"then": {
|
||||
"en": "A cyclist can use this crossing",
|
||||
"nl": "Een fietser kan deze oversteekplaats gebruiken"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "bicycle=no",
|
||||
"then": {
|
||||
"en": "A cyclist can not use this crossing",
|
||||
"nl": "Een fietser kan niet deze oversteekplaats gebruiken"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"question": {
|
||||
"en": "Does this crossing have an island in the middle?",
|
||||
"nl": "Heeft deze oversteekplaats een verkeerseiland in het midden?"
|
||||
},
|
||||
"condition": "highway=crossing",
|
||||
"mappings": [
|
||||
{
|
||||
"if": "crossing:island=yes",
|
||||
"then": {
|
||||
"en": "This crossing has an island in the middle",
|
||||
"nl": "Deze oversteekplaats heeft een verkeerseiland in het midden"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "crossing:island=no",
|
||||
"then": {
|
||||
"en": "This crossing does not have an island in the middle",
|
||||
"nl": "Deze oversteekplaats heeft niet een verkeerseiland in het midden"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"question": {
|
||||
"en": "Does this crossing have tactile paving?",
|
||||
"nl": "Heeft deze oversteekplaats een geleidelijn?"
|
||||
},
|
||||
"condition": "highway=crossing",
|
||||
"mappings": [
|
||||
{
|
||||
"if": "tactile_paving=yes",
|
||||
"then": {
|
||||
"en": "This crossing has tactile paving",
|
||||
"nl": "Deze oversteekplaats heeft een geleidelijn"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "tactile_paving=no",
|
||||
"then": {
|
||||
"en": "This crossing does not have tactile paving",
|
||||
"nl": "Deze oversteekplaats heeft niet een geleidelijn"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "tactile_paving=incorrect",
|
||||
"then": {
|
||||
"en": "This crossing has tactile paving, but is not correct",
|
||||
"nl": "Deze oversteekplaats heeft een geleidelijn, die incorrect is."
|
||||
},
|
||||
"hideInAnswer": true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"question": {
|
||||
"en": "Does this traffic light have a button to request green light?",
|
||||
"nl": "Heeft dit verkeerslicht een knop voor groen licht?"
|
||||
},
|
||||
"condition": {
|
||||
"or": [
|
||||
"highway=traffic_signals",
|
||||
"crossing=traffic_signals"
|
||||
]
|
||||
},
|
||||
"mappings": [
|
||||
{
|
||||
"if": "button_operated=yes",
|
||||
"then": {
|
||||
"en": "This traffic light has a button to request green light",
|
||||
"nl": "Dit verkeerslicht heeft een knop voor groen licht"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "button_operated=no",
|
||||
"then": {
|
||||
"en": "This traffic light does not have a button to request green light",
|
||||
"nl": "Dit verkeerlicht heeft niet een knop voor groen licht"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"question": {
|
||||
"en": "Can a cyclist turn right when the light is red?",
|
||||
"nl": "Mag een fietser rechtsaf slaan als het licht rood is?"
|
||||
},
|
||||
"condition": "highway=traffic_signals",
|
||||
"mappings": [
|
||||
{
|
||||
"if": "red_turn:right:bicycle=yes",
|
||||
"then": {
|
||||
"en": "A cyclist can turn right if the light is red <img src='./assets/layers/crossings/Belgian_road_sign_B22.svg' style='height: 3em'>",
|
||||
"nl": "Een fietser mag wel rechtsaf slaan als het licht rood is <img src='./assets/layers/crossings/Belgian_road_sign_B22.svg' style='height: 3em'>"
|
||||
},
|
||||
"hideInAnswer": "_country!=be"
|
||||
},
|
||||
{
|
||||
"if": "red_turn:right:bicycle=yes",
|
||||
"then": {
|
||||
"en": "A cyclist can turn right if the light is red",
|
||||
"nl": "Een fietser mag wel rechtsaf slaan als het licht rood is"
|
||||
},
|
||||
"hideInAnswer": "_country=be"
|
||||
},
|
||||
{
|
||||
"if": "red_turn:right:bicycle=no",
|
||||
"then": {
|
||||
"en": "A cyclist can not turn right if the light is red",
|
||||
"nl": "Een fietser mag niet rechtsaf slaan als het licht rood is"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"question": {
|
||||
"en": "Can a cyclist go straight on when the light is red?",
|
||||
"nl": "Mag een fietser rechtdoor gaan als het licht rood is?"
|
||||
},
|
||||
"condition": "highway=traffic_signals",
|
||||
"mappings": [
|
||||
{
|
||||
"if": "red_turn:straight:bicycle=yes",
|
||||
"then": {
|
||||
"en": "A cyclist can go straight on if the light is red <img src='./assets/layers/crossings/Belgian_road_sign_B23.svg' style='height: 3em'>",
|
||||
"nl": "Een fietser mag wel rechtdoor gaan als het licht rood is <img src='./assets/layers/crossings/Belgian_road_sign_B23.svg' style='height: 3em'>"
|
||||
},
|
||||
"hideInAnswer": "_country!=be"
|
||||
},
|
||||
{
|
||||
"if": "red_turn:straight:bicycle=yes",
|
||||
"then": {
|
||||
"en": "A cyclist can go straight on if the light is red",
|
||||
"nl": "Een fietser mag wel rechtdoor gaan als het licht rood is"
|
||||
},
|
||||
"hideInAnswer": "_country=be"
|
||||
},
|
||||
{
|
||||
"if": "red_turn:straight:bicycle=no",
|
||||
"then": {
|
||||
"en": "A cyclist can not go straight on if the light is red",
|
||||
"nl": "Een fietser mag niet rechtdoor gaan als het licht rood is"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
42
assets/layers/crossings/license_info.json
Normal file
|
@ -0,0 +1,42 @@
|
|||
[
|
||||
{
|
||||
"authors": [
|
||||
"Belgische Wetgever"
|
||||
],
|
||||
"path": "Belgian_road_sign_B22.svg",
|
||||
"license": "CC0",
|
||||
"sources": [
|
||||
"https://commons.wikimedia.org/wiki/File:Belgian_road_sign_B22.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Belgische Wetgever"
|
||||
],
|
||||
"path": "Belgian_road_sign_B23.svg",
|
||||
"license": "CC0",
|
||||
"sources": [
|
||||
"https://commons.wikimedia.org/wiki/File:Belgian_road_sign_B23.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Tobias Zwick"
|
||||
],
|
||||
"path": "pedestrian_crossing.svg",
|
||||
"license": "CC-BY-SA 4.0",
|
||||
"sources": [
|
||||
"https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/quest%20icons/pedestrian_crossing.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Tobias Zwick"
|
||||
],
|
||||
"path": "traffic_lights.svg",
|
||||
"license": "CC-BY-SA 4.0",
|
||||
"sources": [
|
||||
"https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/quest%20icons/traffic_lights.svg"
|
||||
]
|
||||
}
|
||||
]
|
11
assets/layers/crossings/pedestrian_crossing.svg
Normal file
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m128 64c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64 35.346 0 64 28.654 64 64" fill="#529add" stroke-width=".2"/>
|
||||
<path d="m92.422 79.992 16.697 29.377c3.0226-3.0054 5.7459-6.3104 8.123-9.8672l-14.854-19.51zm-66.023 0.007812-15.354 19.957c2.4026 3.5304 5.1551 6.8008 8.1973 9.7773l17.156-29.734zm17.029 0-16.107 36.416c1.8389 1.2898 3.7449 2.4898 5.7188 3.584h8.9609l11-40zm15.572 0-4.0176 40.004h18l-3.9824-40.004zm16.504 0 10.5 40h8.9961c2.327-1.29 4.5634-2.7231 6.7012-4.2832l-16.02-35.717z" fill-opacity=".2" style="paint-order:stroke fill markers"/>
|
||||
<path d="m59.018 75.996-4.0176 40.004h18l-3.9824-40.004zm-32.59 0.003906-16.77 21.799c2.3519 3.7733 5.0886 7.2789 8.1504 10.473l18.619-32.271zm17 0-17.459 39.471 1.0312 0.5293h15l11-40zm32.072 0 10.5 40h15l2.0352-1.2988-17.357-38.701zm16.941 0 18.121 31.881c3.0397-3.2242 5.7588-6.7537 8.082-10.555l-16.236-21.326z" fill="#fff" style="paint-order:stroke fill markers"/>
|
||||
<g shape-rendering="auto">
|
||||
<path d="m71.299 17.922c-6.887 0-12.545 5.655-12.545 12.543 0 3.3248 1.3636 6.3273 3.502 8.5801-0.80144 0.22851-1.5812 0.5488-2.3047 0.99414l0.58984-0.28906c-4.9491 1.851-9.5049 4.3883-12.953 8.041-3.4482 3.6527-5.6738 8.5251-5.7207 14.236v0.02734c0 4.3407 3.5924 7.9316 7.9316 7.9316 1.4032 0 2.6595-0.47614 3.8105-1.1309-1.0607 2.5391-2.982 4.8594-5.3965 6.9102-3.1794 2.7004-7.0921 4.8263-10.18 6.2305-3.9679 1.7629-5.7943 6.5041-4.0312 10.473v2e-3c1.7636 3.9663 6.504 5.7926 10.473 4.0293l0.09766-0.04297 0.09375-0.04883c7.8911-4.1097 17.996-10.303 22.869-19.449 5.0514 3.4579 9.5237 9.0918 10.295 13.514l-0.017581-0.10356c0.61316 4.3 4.6807 7.343 8.9766 6.7305 4.2955-0.61376 7.3465-4.6749 6.7324-8.9727l-0.0118-0.08204c-2.0863-12.414-10.688-21.564-21.055-26.787-0.01225-0.01706-0.06233-0.07308-0.15039-0.24805-0.11944-0.2373-0.23873-0.7591-0.36133-1.2051 7.4762 3.0887 15.486 4.0441 23.312 0.20312l0.01172-0.0059 0.01172-0.0039c3.8853-1.9415 5.4873-6.7625 3.5469-10.645v-2e-3c-1.9409-3.8803-6.759-5.4882-10.641-3.5468-4.163 2.0536-6.7656 1.5075-9.6387 0.13281-1.6546-0.79165-3.2845-1.954-4.957-3.1621 5.8039-1.0901 10.252-6.207 10.252-12.311 0-6.8876-5.6554-12.543-12.543-12.543z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill-opacity=".18824" image-rendering="auto" solid-color="#000000" stop-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-variation-settings:normal;inline-size:0;isolation:auto;mix-blend-mode:normal;paint-order:stroke fill markers;shape-margin:0;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/>
|
||||
<path d="m71.781 14.625c-6.671 0-12.143 5.4725-12.143 12.145 0 3.4881 1.5174 6.6223 3.8984 8.8438-0.88458 0.17673-1.746 0.4518-2.5488 0.88477-4.8413 1.8308-9.2786 4.3242-12.627 7.8711-3.3897 3.5907-5.5652 8.35-5.6113 13.965v0.0254c0 4.1249 3.4097 7.5312 7.5332 7.5312 1.7136 0 3.2302-0.68653 4.5039-1.6699-0.9587 3.044-3.0545 5.7932-5.832 8.1523-3.2238 2.7381-7.168 4.8773-10.277 6.291-3.7706 1.6752-5.5034 6.1761-3.8281 9.9473h0.0016c1.6759 3.7691 6.1742 5.5037 9.9453 3.8281l0.08397-0.03909 0.08397-0.043c7.9725-4.1521 18.147-10.47 22.873-19.682 5.3039 3.4687 10.048 9.3267 10.869 14.033l-0.01563-0.09375c0.58265 4.086 4.4431 6.9747 8.5254 6.3926 4.082-0.58325 6.9761-4.4374 6.3926-8.5215l-0.0042-0.03711-0.0077-0.03711c-2.063-12.275-10.566-21.323-20.852-26.502l-0.08201-0.04102-0.08397-0.03711c0.19424 0.08344 0.06977 0.09376-0.14844-0.33984-0.21824-0.4336-0.46052-1.1958-0.61914-2.0508-0.0042-0.02286 0.0026-0.03949-0.0016-0.0625 7.6188 3.3262 15.77 4.489 23.752 0.57227l0.01173-2e-3 0.0098-0.0059c3.6919-1.8449 5.2131-6.4203 3.3691-10.109l-0.0016-0.0021c-1.8445-3.6875-6.4149-5.2102-10.104-3.3652-4.2669 2.1057-7.0441 1.5444-9.9902 0.13476-1.9932-0.95368-3.9283-2.3906-5.918-3.8086 6.1272-0.59675 10.986-5.7478 10.986-12.023 0-6.6716-5.4729-12.145-12.145-12.145z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#529add" image-rendering="auto" solid-color="#000000" stop-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-variation-settings:normal;inline-size:0;isolation:auto;mix-blend-mode:normal;paint-order:stroke fill markers;shape-margin:0;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/>
|
||||
<path d="m71.782 17.624c-5.0493 0-9.1445 4.0943-9.1445 9.1445 0 5.0502 4.0952 9.1428 9.1445 9.1428 5.0502 0 9.1445-4.0926 9.1445-9.1428 0-5.0502-4.0943-9.1445-9.1445-9.1445zm-9.5661 21.614c-9.2519 3.4603-16.386 9.3397-16.466 19.121 0 2.5039 2.0294 4.5316 4.5332 4.5316 2.5044 0 4.5343-2.0279 4.5349-4.5316 0.07516-2.4998 1.135-4.6219 2.6841-6.3176 0.04866 2.2271 0.40401 4.7273 1.1702 7.5012-0.47188 0.78559-0.66893 1.9679-0.48304 3.6966-1.5998 9.2061-11.749 15.196-18.292 18.168-2.2886 1.0168-3.3206 3.6972-2.304 5.9857 1.0175 2.2884 3.6972 3.3208 5.9857 2.304 8.6826-4.522 19.726-11.816 22.905-21.393 7.2127 3.3625 13.962 10.917 15.178 17.889 0.3535 2.479 2.6518 4.1995 5.1308 3.846 2.479-0.35422 4.2019-2.6484 3.8477-5.1275-1.8805-11.189-9.6066-19.469-19.243-24.321-2.7914-1.1991-3.0124-7.7148-2.8551-10.064 8.4551 4.7998 17.123 6.9431 25.701 2.7339 2.2402-1.1194 3.1462-3.844 2.0268-6.0836-1.1202-2.2394-3.8407-3.1469-6.0803-2.0268-10.082 4.9845-16.362-2.6485-21.667-5.7383-1.8977-1.3294-4.4203-1.3334-6.306-0.17263z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fff" image-rendering="auto" solid-color="#000000" stop-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-variation-settings:normal;inline-size:0;isolation:auto;mix-blend-mode:normal;paint-order:stroke fill markers;shape-margin:0;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.4 KiB |
22
assets/layers/crossings/traffic_lights.svg
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m119.42 95.995c-17.67 30.605-56.806 41.092-87.411 23.422-30.605-17.67-41.092-56.806-23.422-87.411 17.67-30.605 56.806-41.092 87.411-23.422 30.605 17.67 41.092 56.806 23.422 87.411" fill="#529add" stroke-width=".19997"/>
|
||||
<g>
|
||||
<path d="m43.429 20.007v7.9987h-15.997c-1.0546 12.363 6.0163 12.511 15.997 19.997v7.9987h-15.997c-1.0546 12.363 6.0163 12.511 15.997 19.997v7.9987h-15.997c-1.0546 12.363 6.0163 12.511 15.997 19.997v11.998h39.993v-11.998c9.9811-7.4858 17.052-7.6337 15.997-19.997h-15.997v-7.9987c9.9811-7.4858 17.052-7.6337 15.997-19.997h-15.997v-7.9987c9.9811-7.4858 17.052-7.6337 15.997-19.997h-15.997v-7.9987z" fill-opacity=".2" style="paint-order:stroke fill markers"/>
|
||||
<path d="m43.429 16.008h39.993v95.984h-39.993z" fill="#888" style="paint-order:stroke fill markers"/>
|
||||
<path d="m75.536 37.46a11.996 11.996 0 0 1-11.996 11.996 11.996 11.996 0 0 1-11.996-11.996 11.996 11.996 0 0 1 11.996-11.996 11.996 11.996 0 0 1 11.996 11.996" fill="#ff6969" stroke="#555" stroke-width="2.9995" style="paint-order:normal"/>
|
||||
<path d="m75.54 65.483a11.998 11.998 0 0 1-11.998 11.998 11.998 11.998 0 0 1-11.998-11.998 11.998 11.998 0 0 1 11.998-11.998 11.998 11.998 0 0 1 11.998 11.998" fill="#ffff69" stroke="#555" stroke-width="2.9995" style="paint-order:normal"/>
|
||||
<path d="m75.522 93.509a11.998 11.998 0 0 1-11.998 11.998 11.998 11.998 0 0 1-11.998-11.998 11.998 11.998 0 0 1 11.998-11.998 11.998 11.998 0 0 1 11.998 11.998" fill="#69ff69" stroke="#555" stroke-width="2.9995" style="paint-order:normal"/>
|
||||
<path d="m43.429 24.007h-15.997c-1.0546 12.363 6.0163 12.511 15.997 19.997z" fill="#555" fill-rule="evenodd"/>
|
||||
<path d="m43.429 52.002h-15.997c-1.0546 12.363 6.0163 12.511 15.997 19.997z" fill="#555" fill-rule="evenodd"/>
|
||||
<path d="m43.429 79.997h-15.997c-1.0546 12.363 6.0163 12.511 15.997 19.997z" fill="#555" fill-rule="evenodd"/>
|
||||
<path d="m83.422 24.007h15.997c1.0546 12.363-6.0163 12.511-15.997 19.997z" fill="#555" fill-rule="evenodd"/>
|
||||
<path d="m83.422 52.002h15.997c1.0546 12.363-6.0163 12.511-15.997 19.997z" fill="#555" fill-rule="evenodd"/>
|
||||
<path d="m83.422 79.997h15.997c1.0546 12.363-6.0163 12.511-15.997 19.997z" fill="#555" fill-rule="evenodd"/>
|
||||
<path d="m75.529 93.475s-5.3717 7.9483-11.998 7.9483c-6.6263 0-11.987-7.906-11.987-7.906 0 6.6263 5.3606 11.987 11.987 11.987 6.6263 0 11.998-5.4029 11.998-12.029z" fill="#fff" fill-opacity=".37647" style="paint-order:stroke fill markers"/>
|
||||
<path d="m57.427 111.99h12.063v15.997h-12.063z" fill="#555" style="paint-order:stroke fill markers"/>
|
||||
<path d="m75.517 65.437s-5.3717 7.9483-11.998 7.9483-11.987-7.906-11.987-7.906c0 6.6263 5.3606 11.987 11.987 11.987s11.998-5.4029 11.998-12.029z" fill="#fff" fill-opacity=".37647" style="paint-order:stroke fill markers"/>
|
||||
<path d="m75.517 37.442s-5.3717 7.9483-11.998 7.9483-11.987-7.906-11.987-7.906c0 6.6263 5.3606 11.987 11.987 11.987s11.998-5.4029 11.998-12.029z" fill="#fff" fill-opacity=".37647" style="paint-order:stroke fill markers"/>
|
||||
<path d="m90.532 64.479a27.66 27.66 0 0 1-27.66 27.66 27.66 27.66 0 0 1-27.66-27.66 27.66 27.66 0 0 1 27.66-27.66 27.66 27.66 0 0 1 27.66 27.66" fill="#ffff69" fill-opacity=".26667" style="paint-order:normal"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.3 KiB |
|
@ -29,7 +29,6 @@
|
|||
"tagRenderings": [
|
||||
"images"
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "./assets/layers/information_board/board.svg"
|
||||
},
|
||||
|
|
|
@ -159,7 +159,6 @@
|
|||
}
|
||||
}
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "./assets/layers/map/map.svg",
|
||||
"mappings": [
|
||||
|
|
|
@ -392,7 +392,6 @@
|
|||
]
|
||||
}
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 10,
|
||||
"wayHandling": 2,
|
||||
"icon": {
|
||||
"render": "./assets/themes/buurtnatuur/nature_reserve.svg"
|
||||
|
|
|
@ -87,7 +87,6 @@
|
|||
"render": "{reviews(name, play_forest)}"
|
||||
}
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"hideFromOverview": false,
|
||||
"icon": {
|
||||
"render": "./assets/layers/play_forest/icon.svg"
|
||||
|
|
|
@ -437,7 +437,6 @@
|
|||
"render": "{reviews(name, playground)}"
|
||||
}
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "./assets/themes/playgrounds/playground.svg"
|
||||
},
|
||||
|
|
|
@ -215,7 +215,6 @@
|
|||
]
|
||||
}
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"width": {
|
||||
"render": "7"
|
||||
},
|
||||
|
|
|
@ -383,7 +383,6 @@
|
|||
"render": "{reviews(name, sportpitch)}"
|
||||
}
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "circle:white;./assets/layers/sport_pitch/sport_pitch.svg",
|
||||
"mappings": [
|
||||
|
|
|
@ -421,21 +421,20 @@
|
|||
]
|
||||
}
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "./assets/themes/surveillance_cameras/logo.svg",
|
||||
"render": "./assets/themes/surveillance/logo.svg",
|
||||
"mappings": [
|
||||
{
|
||||
"if": "camera:type=dome",
|
||||
"then": "./assets/themes/surveillance_cameras/dome.svg"
|
||||
"then": "./assets/themes/surveillance/dome.svg"
|
||||
},
|
||||
{
|
||||
"if": "_direction:leftright=right",
|
||||
"then": "./assets/themes/surveillance_cameras/cam_right.svg"
|
||||
"then": "./assets/themes/surveillance/cam_right.svg"
|
||||
},
|
||||
{
|
||||
"if": "_direction:leftright=left",
|
||||
"then": "./assets/themes/surveillance_cameras/cam_left.svg"
|
||||
"then": "./assets/themes/surveillance/cam_left.svg"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
|
@ -449,7 +449,6 @@
|
|||
}
|
||||
}
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "circle:#ffffff;./assets/themes/trees/unknown.svg",
|
||||
"mappings": [
|
||||
|
|
10
assets/svg/barrier.svg
Normal file
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg">
|
||||
<path class="st0" d="m128 64a64 64 0 0 1-64 64 64 64 0 0 1-64-64 64 64 0 0 1 64-64 64 64 0 0 1 64 64" fill="#529add"/>
|
||||
<path d="m31.992 32.08v87.273a64 64 0 0 0 16 6.5293v-93.803z" fill="#666"/>
|
||||
<path d="m79.992 32.08v93.84a64 64 0 0 0 16-6.582v-87.258z" fill="#666"/>
|
||||
<path d="m23.992 44.08c-4.456 0-8.0429 3.587-8.0429 8.043v31.914c0 4.456 3.5869 8.043 8.0429 8.043h79.914c4.456 0 8.043-3.587 8.043-8.043v-31.914c0-4.456-3.587-8.043-8.043-8.043z" fill-opacity=".2"/>
|
||||
<path d="m24.036 40.08h79.913c4.456 0 8.0433 3.5873 8.0433 8.0433v31.913c0 4.456-3.5873 8.0433-8.0433 8.0433h-79.913c-4.456 0-8.0433-3.5873-8.0433-8.0433v-31.913c0-4.456 3.5873-8.0433 8.0433-8.0433z" fill="#fff" style="paint-order:normal"/>
|
||||
<path d="m23.992 40.08c-3.8167 0-6.9867 2.6476-7.7949 6.2129l28.746 41.787h14.143l-32.332-48zm16.619 0 32.332 48h14.143l-32.332-48zm28 0 32.332 48h3.0488c3.6926 0 6.7759-2.4795 7.7051-5.8691l-28.943-42.131zm28 0 15.381 22v-14c0-4.432-3.568-8-8-8zm-80.619 26v14c0 4.432 3.568 8 8 8h7.0938z" fill="#dd2e44" style="paint-order:normal"/>
|
||||
<path d="m24.03 40.08h79.924c4.4531 0 8.038 3.5849 8.038 8.038v31.924c0 4.453-3.5849 8.038-8.038 8.038h-79.924c-4.4531 0-8.038-3.5849-8.038-8.038v-31.924c0-4.453 3.5849-8.038 8.038-8.038z" fill="none" stroke="#555" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" style="paint-order:stroke markers fill"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
|
@ -1,4 +1,12 @@
|
|||
[
|
||||
{
|
||||
"authors": [
|
||||
"Pieter Vander Vennet"
|
||||
],
|
||||
"path": "length-crosshair.svg",
|
||||
"license": "CC0",
|
||||
"sources": []
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Pieter Vander Vennet"
|
||||
|
@ -727,6 +735,16 @@
|
|||
"license": "CC0",
|
||||
"sources": []
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Tobias Zwick"
|
||||
],
|
||||
"path": "barrier.svg",
|
||||
"license": "CC-BY-SA 4.0",
|
||||
"sources": [
|
||||
"https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/quest%20icons/barrier.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Github"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"id": "artworks",
|
||||
"id": "artwork",
|
||||
"version": "2020-08-30",
|
||||
"title": {
|
||||
"en": "Open Artwork Map",
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
"fr": "Une vélothèque est un endroit où on peut emprunter des vélos, souvent moyennant une petite somme annuelle. Un cas d'utilisation notable est celui des vélothèques pour les enfants, qui leur permettent de passer à un vélo plus grand quand ils sont trop grands pour leur vélo actuel",
|
||||
"zh_Hant": "單車圖書館是指每年支付小額費用,然後可以租用單車的地方。最有名的單車圖書館案例是給小孩的,能夠讓長大的小孩用目前的單車換成比較大的單車"
|
||||
},
|
||||
"icon": "./assets/themes/bicycle_library/logo.svg",
|
||||
"icon": "./assets/themes/bicyclelib/logo.svg",
|
||||
"socialImage": null,
|
||||
"startLat": 0,
|
||||
"startLon": 0,
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 593 KiB After Width: | Height: | Size: 593 KiB |
|
@ -38,13 +38,13 @@
|
|||
"nb_NO"
|
||||
],
|
||||
"maintainer": "joost schouppe",
|
||||
"icon": "./assets/themes/campersites/caravan.svg",
|
||||
"icon": "./assets/themes/campersite/caravan.svg",
|
||||
"version": "0",
|
||||
"startLat": 43.14,
|
||||
"startLon": 3.14,
|
||||
"startZoom": 14,
|
||||
"widenFactor": 0.05,
|
||||
"socialImage": "./assets/themes/campersites/Bar%C3%9Fel_Wohnmobilstellplatz.jpg",
|
||||
"socialImage": "./assets/themes/campersite/Bar%C3%9Fel_Wohnmobilstellplatz.jpg",
|
||||
"layers": [
|
||||
{
|
||||
"id": "caravansites",
|
||||
|
@ -521,9 +521,8 @@
|
|||
"questions",
|
||||
"reviews"
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "circle:white;./assets/themes/campersites/caravan.svg",
|
||||
"render": "circle:white;./assets/themes/campersite/caravan.svg",
|
||||
"mappings": [
|
||||
{
|
||||
"if": {
|
||||
|
@ -531,7 +530,7 @@
|
|||
"fee=no"
|
||||
]
|
||||
},
|
||||
"then": "circle:white;./assets/themes/campersites/caravan_green.svg"
|
||||
"then": "circle:white;./assets/themes/campersite/caravan_green.svg"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -862,9 +861,8 @@
|
|||
}
|
||||
}
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "circle:white;./assets/themes/campersites/sanitary_dump_station.svg"
|
||||
"render": "circle:white;./assets/themes/campersite/sanitary_dump_station.svg"
|
||||
},
|
||||
"width": {
|
||||
"render": "8"
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
@ -307,7 +307,6 @@
|
|||
]
|
||||
}
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "pin:#fff;./assets/themes/charging_stations/plug.svg",
|
||||
"mappings": [
|
||||
|
|
|
@ -140,7 +140,6 @@
|
|||
"phone",
|
||||
"opening_hours"
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "./assets/themes/climbing/club.svg"
|
||||
},
|
||||
|
@ -280,7 +279,6 @@
|
|||
"opening_hours",
|
||||
"reviews"
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "./assets/themes/climbing/climbing_gym.svg"
|
||||
},
|
||||
|
@ -471,7 +469,6 @@
|
|||
},
|
||||
"reviews"
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "circle:white;./assets/themes/climbing/climbing_route.svg"
|
||||
},
|
||||
|
@ -695,7 +692,6 @@
|
|||
},
|
||||
"reviews"
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "./assets/themes/climbing/climbing_no_rope.svg"
|
||||
},
|
||||
|
@ -850,7 +846,6 @@
|
|||
}
|
||||
],
|
||||
"icon": "./assets/themes/climbing/climbing_unknown.svg",
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"width": {
|
||||
"render": "2"
|
||||
},
|
||||
|
|
84
assets/themes/cycle_infra/Belgian_road_sign_D07.svg
Normal file
|
@ -0,0 +1,84 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="79.52px" height="79.392px" viewBox="0 0 79.52 79.392" enable-background="new 0 0 79.52 79.392" xml:space="preserve">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#0071B3" d="M39.742,79.218c-30.412,0-49.432-32.921-34.209-59.292
|
||||
c15.224-26.336,53.23-26.336,68.453,0C89.211,46.297,70.189,79.218,39.742,79.218z"/>
|
||||
<path fill="none" stroke="#0071B3" stroke-width="0.348" stroke-miterlimit="3.863" d="M39.742,79.218
|
||||
c-30.412,0-49.432-32.921-34.209-59.292c15.224-26.336,53.23-26.336,68.453,0C89.211,46.297,70.189,79.218,39.742,79.218z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M39.742,77.231c-28.914,0-46.994-31.283-32.537-56.33
|
||||
c14.457-25.048,50.617-25.048,65.039,0C86.702,45.948,68.656,77.231,39.742,77.231z"/>
|
||||
<path fill="none" stroke="#FFFFFF" stroke-width="0.348" stroke-miterlimit="3.863" d="M39.742,77.231
|
||||
c-28.914,0-46.994-31.283-32.537-56.33c14.457-25.048,50.617-25.048,65.039,0C86.702,45.948,68.656,77.231,39.742,77.231z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#0071B3" d="M39.742,74.827c-27.033,0-43.928-29.262-30.412-52.707
|
||||
c13.517-23.41,47.343-23.41,60.859,0C83.707,45.565,66.811,74.827,39.742,74.827z"/>
|
||||
<path fill="none" stroke="#0071B3" stroke-width="0.348" stroke-miterlimit="3.863" d="M39.742,74.827
|
||||
c-27.033,0-43.928-29.262-30.412-52.707c13.517-23.41,47.343-23.41,60.859,0C83.707,45.565,66.811,74.827,39.742,74.827z"/>
|
||||
<path fill="#FFFFFF" d="M29.396,32.433l9.998,8.883c-0.383,0.453-0.627,1.01-0.627,1.637c0,1.289,1.08,2.404,2.299,2.508v2.962
|
||||
h-0.383v0.558h1.289v-0.558H41.59V45.53c1.219-0.07,2.125-1.045,2.299-2.125h1.428c0.174,4.842,4.146,8.709,9.023,8.709
|
||||
c5.016,0,9.092-4.076,9.092-9.057c0-5.018-4.076-9.093-9.092-9.093c-1.498,0-2.928,0.383-4.182,1.079l-2.543-4.702l0.627-1.22
|
||||
c0.176-0.383,0.697-0.278,1.012-0.592c0.033-0.209,0.033-0.349,0.033-0.558c-0.174-0.104-0.209-0.278-0.451-0.278H45.49
|
||||
c-0.035,0.104-0.174,0.069-0.277,0.069c-0.035,0.035-0.07,0.069-0.105,0.069c-0.07,0.175-0.07,0.418,0,0.593
|
||||
c0.035,0.034,0.105,0.069,0.174,0.069h1.707c0.174-0.035,0.35,0.035,0.523,0.105c0.068,0.034,0.068,0.034,0.139,0.068
|
||||
c-0.035,0.141,0.105,0.314,0.035,0.419l-0.348,0.801h-17.35l0.488-2.056c0.383-0.139,0.697,0.14,1.498-0.209
|
||||
c0.313,0,1.045-0.418,1.951-0.104c0.174-0.07-0.07-0.14,0.034-0.244c-0.104-0.07,0.14-0.244,0.105-0.313
|
||||
c-0.557-0.175-1.707-0.278-2.23,0.069c-0.557,0.313-1.323,0.104-1.811,0.14l-1.707,7.386c-0.975-0.384-2.09-0.628-3.24-0.628
|
||||
c-4.981,0-9.057,4.076-9.057,9.058c0,5.017,4.076,9.057,9.057,9.057c4.982,0,9.058-4.04,9.058-9.057
|
||||
c0-3.658-2.195-6.758-5.295-8.221L29.396,32.433z"/>
|
||||
<path fill="none" stroke="#FFFFFF" stroke-width="0.348" stroke-miterlimit="3.863" d="M29.396,32.433l9.998,8.883
|
||||
c-0.383,0.453-0.627,1.01-0.627,1.637c0,1.289,1.08,2.404,2.299,2.508v2.962h-0.383v0.558h1.289v-0.558H41.59V45.53
|
||||
c1.219-0.07,2.125-1.045,2.299-2.125h1.428c0.174,4.842,4.146,8.709,9.023,8.709c5.016,0,9.092-4.076,9.092-9.057
|
||||
c0-5.018-4.076-9.093-9.092-9.093c-1.498,0-2.928,0.383-4.182,1.079l-2.543-4.702l0.627-1.22c0.176-0.383,0.697-0.278,1.012-0.592
|
||||
c0.033-0.209,0.033-0.349,0.033-0.558c-0.174-0.104-0.209-0.278-0.451-0.278H45.49c-0.035,0.104-0.174,0.069-0.277,0.069
|
||||
c-0.035,0.035-0.07,0.069-0.105,0.069c-0.07,0.175-0.07,0.418,0,0.593c0.035,0.034,0.105,0.069,0.174,0.069h1.707
|
||||
c0.174-0.035,0.35,0.035,0.523,0.105c0.068,0.034,0.068,0.034,0.139,0.068c-0.035,0.141,0.105,0.314,0.035,0.419l-0.348,0.801
|
||||
h-17.35l0.488-2.056c0.383-0.139,0.697,0.14,1.498-0.209c0.313,0,1.045-0.418,1.951-0.104c0.174-0.07-0.07-0.14,0.034-0.244
|
||||
c-0.104-0.07,0.14-0.244,0.105-0.313c-0.557-0.175-1.707-0.278-2.23,0.069c-0.557,0.313-1.323,0.104-1.811,0.14l-1.707,7.386
|
||||
c-0.975-0.384-2.09-0.628-3.24-0.628c-4.981,0-9.057,4.076-9.057,9.058c0,5.017,4.076,9.057,9.057,9.057
|
||||
c4.982,0,9.058-4.04,9.058-9.057c0-3.658-2.195-6.758-5.295-8.221L29.396,32.433z"/>
|
||||
<path fill="none" stroke="#FFFFFF" stroke-width="0.418" stroke-miterlimit="3.863" d="M23.613,33.372
|
||||
c0.523-0.104,1.01-0.174,1.463-0.174c5.4,0,9.754,4.424,9.754,9.859c0,0.277,0,0.557-0.034,0.87"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M17.168,52.532 M62.213,52.532H17.169V51.87h45.043V52.532z"/>
|
||||
<path fill="none" stroke="#FFFFFF" stroke-width="0.348" stroke-miterlimit="3.863" d="M17.168,52.532 M62.213,52.532H17.169V51.87
|
||||
h45.043V52.532z"/>
|
||||
<path fill="#0071B3" d="M25.843,41.907c-0.244-0.139-0.488-0.104-0.767-0.104c-0.766,0-1.358,0.593-1.358,1.289
|
||||
c0,0.731,0.592,1.323,1.358,1.323c0.592,0,1.15-0.418,1.289-0.939h6.828c-0.244,4.284-3.797,7.664-8.117,7.664
|
||||
c-4.598,0-8.256-3.693-8.256-8.188c0-4.563,3.658-8.221,8.256-8.221c1.045,0,2.09,0.209,3.066,0.627l-0.558,2.194
|
||||
C27.271,38.842,26.854,40.34,25.843,41.907z"/>
|
||||
<path fill="none" stroke="#0071B3" stroke-width="0" stroke-miterlimit="3.863" d="M25.843,41.907
|
||||
c-0.244-0.139-0.488-0.104-0.767-0.104c-0.766,0-1.358,0.593-1.358,1.289c0,0.731,0.592,1.323,1.358,1.323
|
||||
c0.592,0,1.15-0.418,1.289-0.939h6.828c-0.244,4.284-3.797,7.664-8.117,7.664c-4.598,0-8.256-3.693-8.256-8.188
|
||||
c0-4.563,3.658-8.221,8.256-8.221c1.045,0,2.09,0.209,3.066,0.627l-0.558,2.194C27.271,38.842,26.854,40.34,25.843,41.907z"/>
|
||||
<path fill="#0071B3" d="M29.048,35.776l-0.732,2.473c-0.348,1.15-1.184,3.658-1.916,4.564c0.07,0.174-0.035-0.174,0,0h6.863
|
||||
C33.158,39.608,31.695,37.101,29.048,35.776z"/>
|
||||
<path fill="none" stroke="#0071B3" stroke-width="0" stroke-miterlimit="3.863" d="M29.048,35.776l-0.732,2.473
|
||||
c-0.348,1.15-1.184,3.658-1.916,4.564c0.07,0.174-0.035-0.174,0,0h6.863C33.158,39.608,31.695,37.101,29.048,35.776z"/>
|
||||
<path fill="#0071B3" d="M29.535,31.874l0.279-1.428h17.209L42.32,40.653c-0.209-0.07-0.348-0.349-0.662-0.279v-2.646h0.559v-0.802
|
||||
h-2.195v0.802h0.592v2.717c-0.487,0.104-0.557,0.035-0.906,0.348L29.535,31.874z"/>
|
||||
<path fill="none" stroke="#0071B3" stroke-width="0" stroke-miterlimit="3.863" d="M29.535,31.874l0.279-1.428h17.209L42.32,40.653
|
||||
c-0.209-0.07-0.348-0.349-0.662-0.279v-2.646h0.559v-0.802h-2.195v0.802h0.592v2.717c-0.487,0.104-0.557,0.035-0.906,0.348
|
||||
L29.535,31.874z"/>
|
||||
<path fill="#0071B3" d="M61.828,39.469c0.662,1.149,0.768,2.16,0.768,3.589c0,4.493-3.658,8.15-8.221,8.15
|
||||
c-4.426,0-7.979-3.273-8.152-7.629h6.479c0.141,0.836,0.871,1.498,1.742,1.498c1.01,0,1.848-1.08,1.848-2.02
|
||||
c0-0.384-0.314-0.384-0.279-0.384C57.963,41.594,59.879,40.549,61.828,39.469z"/>
|
||||
<path fill="none" stroke="#0071B3" stroke-width="0.348" stroke-miterlimit="3.863" d="M61.828,39.469
|
||||
c0.662,1.149,0.768,2.16,0.768,3.589c0,4.493-3.658,8.15-8.221,8.15c-4.426,0-7.979-3.273-8.152-7.629h6.479
|
||||
c0.141,0.836,0.871,1.498,1.742,1.498c1.01,0,1.848-1.08,1.848-2.02c0-0.384-0.314-0.384-0.279-0.384
|
||||
C57.963,41.594,59.879,40.549,61.828,39.469z"/>
|
||||
<path fill="#0071B3" d="M55.838,41.803l5.504-3.065c-1.43-2.334-4.006-3.902-7.002-3.902c-1.289,0-2.578,0.279-3.693,0.871
|
||||
l3.1,5.609c0.176-0.07,0.453-0.14,0.662-0.14C54.932,41.176,55.42,41.454,55.838,41.803z"/>
|
||||
<path fill="none" stroke="#0071B3" stroke-width="0" stroke-miterlimit="3.863" d="M55.838,41.803l5.504-3.065
|
||||
c-1.43-2.334-4.006-3.902-7.002-3.902c-1.289,0-2.578,0.279-3.693,0.871l3.1,5.609c0.176-0.07,0.453-0.14,0.662-0.14
|
||||
C54.932,41.176,55.42,41.454,55.838,41.803z"/>
|
||||
<path fill="#0071B3" d="M49.984,36.09l3.205,5.782c-0.313,0.279-0.453,0.453-0.521,0.906h-6.516
|
||||
C46.258,39.887,47.686,37.483,49.984,36.09z"/>
|
||||
<path fill="none" stroke="#0071B3" stroke-width="0" stroke-miterlimit="3.863" d="M49.984,36.09l3.205,5.782
|
||||
c-0.313,0.279-0.453,0.453-0.521,0.906h-6.516C46.258,39.887,47.686,37.483,49.984,36.09z"/>
|
||||
<path fill="#0071B3" d="M47.547,31.353l-4.6,9.754c0.559,0.209,1.08,0.871,1.115,1.707l1.01-0.035c0.105-3.17,1.707-6.027,4.25-7.56
|
||||
L47.547,31.353z"/>
|
||||
<path fill="none" stroke="#0071B3" stroke-width="0" stroke-miterlimit="3.863" d="M47.547,31.353l-4.6,9.754
|
||||
c0.559,0.209,1.08,0.871,1.115,1.707l1.01-0.035c0.105-3.17,1.707-6.027,4.25-7.56L47.547,31.353z"/>
|
||||
<path fill="none" stroke="#FFFFFF" stroke-width="0.418" stroke-miterlimit="3.863" d="M44.795,44.485
|
||||
c-0.105-0.488-0.141-0.976-0.141-1.428c0-5.436,4.424-9.859,9.824-9.859c4.006,0,7.42,2.404,8.953,5.853"/>
|
||||
</svg>
|
After Width: | Height: | Size: 8.2 KiB |
81
assets/themes/cycle_infra/Belgian_road_sign_D09.svg
Normal file
|
@ -0,0 +1,81 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="80.077px" height="79.982px" viewBox="0 0 80.077 79.982" enable-background="new 0 0 80.077 79.982" xml:space="preserve">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#0071B3" d="M40.031,79.904c-30.716,0-49.905-33.266-34.547-59.868
|
||||
c15.358-26.603,53.753-26.619,69.111,0C89.953,46.638,70.748,79.904,40.031,79.904z"/>
|
||||
<path fill="none" stroke="#0071B3" stroke-width="0.156" stroke-miterlimit="3.863" d="M40.031,79.904
|
||||
c-30.716,0-49.905-33.266-34.547-59.868c15.358-26.603,53.753-26.619,69.111,0C89.953,46.638,70.748,79.904,40.031,79.904z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M40.031,77.902c-29.183,0-47.419-31.607-32.827-56.881
|
||||
c14.576-25.274,51.063-25.274,65.655,0C87.45,46.294,69.215,77.902,40.031,77.902z"/>
|
||||
<path fill="none" stroke="#FFFFFF" stroke-width="0.156" stroke-miterlimit="3.863" d="M40.031,77.902
|
||||
c-29.183,0-47.419-31.607-32.827-56.881c14.576-25.274,51.063-25.274,65.655,0C87.45,46.294,69.215,77.902,40.031,77.902z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#0071B3" d="M40.031,75.462c-27.306,0-44.369-29.574-30.716-53.221
|
||||
c13.654-23.647,47.778-23.647,61.433,0C84.401,45.888,67.338,75.462,40.031,75.462z"/>
|
||||
<path fill="none" stroke="#0071B3" stroke-width="0.156" stroke-miterlimit="3.863" d="M40.031,75.462
|
||||
c-27.306,0-44.369-29.574-30.716-53.221c13.654-23.647,47.778-23.647,61.433,0C84.401,45.888,67.338,75.462,40.031,75.462z"/>
|
||||
<path fill="#FFFFFF" d="M60.598,38.787l-4.566-7.1c-0.656-0.813-2.033-1.752-3.128-1.626v-1.22c0.782-0.376,1.313-1.126,1.313-2.096
|
||||
c0-1.22-0.969-2.283-2.283-2.283c-1.221,0-2.252,1.063-2.252,2.283c0,1.032,0.656,1.845,1.595,2.158v1.064
|
||||
c-1.282,0-4.379,0.844-4.379,4.003v6.663c0,0.532,0.438,0.97,0.97,0.97c0.563,0,0.969-0.438,0.969-0.97v-6.162
|
||||
c0-0.25,0.188-0.375,0.438-0.375s0.376,0.125,0.376,0.375v17.735c0,0.563,0.469,1.031,1.063,1.031c0.533,0,0.938-0.469,0.938-1.031
|
||||
v-9.571c0-0.376,0.282-0.626,0.657-0.626c0.376,0,0.595,0.25,0.595,0.626v11.792c0,0.531,0.47,1.063,1.063,1.063
|
||||
c0.531,0,0.97-0.531,0.97-1.063V33.845l3.784,5.943c0.313,0.531,0.75,0.47,1.127,0.344c0.312,1.22,0.531,1.939,1.376,1.971
|
||||
l2.627,0.156l-1.876,6.068h1.438v4.441c0,0.282,0.313,0.563,0.657,0.563c0.376,0,0.657-0.28,0.657-0.563v-4.504h0.845v3.628
|
||||
c0,0.313,0.281,0.626,0.656,0.626c0.376,0,0.688-0.313,0.688-0.626v-3.565h1.377l-1.314-5.004l1.689,1.877
|
||||
c0.219,0.125,0.438,0.125,0.563,0c0.188-0.157,0.251-0.313,0.094-0.627l-2.283-2.596c-0.469-0.501-0.75-0.813-1.377-0.939
|
||||
c-0.156-0.155-0.093-0.344-0.062-0.53c0.563-0.25,0.876-0.845,0.876-1.47c0-0.907-0.657-1.627-1.533-1.627
|
||||
c-0.97,0-1.689,0.72-1.689,1.627c0,0.719,0.47,1.313,1.189,1.531c0.031,0.219,0.063,0.563-0.219,0.688h-2.189
|
||||
c-0.375,0-0.563-0.062-0.813-0.345c-0.22-0.405-0.501-0.969-0.501-1.25c0-0.219-0.063-0.188-0.156-0.281
|
||||
C60.66,39.225,60.723,39.1,60.598,38.787z"/>
|
||||
<path fill="none" stroke="#FFFFFF" stroke-width="0" stroke-miterlimit="3.863" d="M60.598,38.787l-4.566-7.1
|
||||
c-0.656-0.813-2.033-1.752-3.128-1.626v-1.22c0.782-0.376,1.313-1.126,1.313-2.096c0-1.22-0.969-2.283-2.283-2.283
|
||||
c-1.221,0-2.252,1.063-2.252,2.283c0,1.032,0.656,1.845,1.595,2.158v1.064c-1.282,0-4.379,0.844-4.379,4.003v6.663
|
||||
c0,0.532,0.438,0.97,0.97,0.97c0.563,0,0.969-0.438,0.969-0.97v-6.162c0-0.25,0.188-0.375,0.438-0.375s0.376,0.125,0.376,0.375
|
||||
v17.735c0,0.563,0.469,1.031,1.063,1.031c0.533,0,0.938-0.469,0.938-1.031v-9.571c0-0.376,0.282-0.626,0.657-0.626
|
||||
c0.376,0,0.595,0.25,0.595,0.626v11.792c0,0.531,0.47,1.063,1.063,1.063c0.531,0,0.97-0.531,0.97-1.063V33.845l3.784,5.943
|
||||
c0.313,0.531,0.75,0.47,1.127,0.344c0.312,1.22,0.531,1.939,1.376,1.971l2.627,0.156l-1.876,6.068h1.438v4.441
|
||||
c0,0.282,0.313,0.563,0.657,0.563c0.376,0,0.657-0.28,0.657-0.563v-4.504h0.845v3.628c0,0.313,0.281,0.626,0.656,0.626
|
||||
c0.376,0,0.688-0.313,0.688-0.626v-3.565h1.377l-1.314-5.004l1.689,1.877c0.219,0.125,0.438,0.125,0.563,0
|
||||
c0.188-0.157,0.251-0.313,0.094-0.627l-2.283-2.596c-0.469-0.501-0.75-0.813-1.377-0.939c-0.156-0.155-0.093-0.344-0.062-0.53
|
||||
c0.563-0.25,0.876-0.845,0.876-1.47c0-0.907-0.657-1.627-1.533-1.627c-0.97,0-1.689,0.72-1.689,1.627
|
||||
c0,0.719,0.47,1.313,1.189,1.531c0.031,0.219,0.063,0.563-0.219,0.688h-2.189c-0.375,0-0.563-0.062-0.813-0.345
|
||||
c-0.22-0.405-0.501-0.969-0.501-1.25c0-0.219-0.063-0.188-0.156-0.281C60.66,39.225,60.723,39.1,60.598,38.787z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M39.234,77.152 M40.846,77.152h-1.611V2.816h1.611V77.152z"/>
|
||||
<path fill="none" stroke="#FFFFFF" stroke-width="0.156" stroke-miterlimit="3.863" d="M39.234,77.152 M40.846,77.152h-1.611V2.816
|
||||
h1.611V77.152z"/>
|
||||
<path fill="#FFFFFF" d="M15.258,35.347l6.538,5.88c-0.251,0.282-0.407,0.688-0.407,1.063c0,0.845,0.719,1.564,1.501,1.658v1.939
|
||||
h-0.25v0.344h0.813v-0.344h-0.219V43.98c0.782-0.031,1.408-0.656,1.502-1.408h0.938c0.125,3.223,2.721,5.693,5.881,5.693
|
||||
c3.315,0,5.974-2.659,5.974-5.943c0-3.252-2.659-5.912-5.974-5.912c-0.97,0-1.877,0.219-2.69,0.688l-1.689-3.065l0.406-0.844
|
||||
c0.125-0.219,0.438-0.126,0.657-0.345c0.031-0.156,0.031-0.25,0.031-0.375c-0.093-0.094-0.125-0.188-0.281-0.188h-2.19
|
||||
c-0.031,0.032-0.125,0-0.187,0c0,0.032-0.063,0.063-0.094,0.063c-0.031,0.156-0.031,0.281,0,0.407
|
||||
c0.031,0.031,0.094,0.062,0.125,0.062h1.126c0.125-0.031,0.219,0.031,0.375,0.031c0,0.032,0,0.032,0.063,0.063
|
||||
c-0.031,0.125,0.062,0.219,0,0.25l-0.219,0.532H15.634l0.312-1.345c0.282-0.063,0.47,0.125,1.001-0.094
|
||||
c0.188,0,0.688-0.25,1.251-0.062c0.126-0.094-0.031-0.126,0.032-0.157c-0.063-0.031,0.094-0.219,0.062-0.25
|
||||
c-0.312-0.094-1.094-0.156-1.439,0.031c-0.375,0.219-0.844,0.094-1.188,0.125l-1.126,4.849c-0.626-0.251-1.376-0.407-2.096-0.407
|
||||
c-3.284,0-5.943,2.659-5.943,5.942c0,3.284,2.659,5.943,5.943,5.943c3.222,0,5.912-2.659,5.912-5.943
|
||||
c0-2.408-1.47-4.441-3.503-5.379L15.258,35.347"/>
|
||||
<path fill="none" stroke="#FFFFFF" stroke-width="0.156" stroke-miterlimit="3.863" d="M11.474,36.004
|
||||
c0.345-0.032,0.626-0.126,0.97-0.126c3.503,0,6.381,2.908,6.381,6.443c0,0.219,0,0.438-0.031,0.627"/>
|
||||
<path fill="#0071B3" d="M12.913,41.603c-0.156-0.094-0.312-0.063-0.469-0.063c-0.5,0-0.907,0.406-0.907,0.845
|
||||
c0,0.5,0.407,0.844,0.907,0.844c0.344,0,0.72-0.219,0.813-0.594h4.505c-0.188,2.846-2.503,5.036-5.318,5.036
|
||||
c-3.003,0-5.411-2.409-5.411-5.381c0-3.002,2.408-5.411,5.411-5.411c0.688,0,1.314,0.188,2.002,0.407l-0.375,1.47
|
||||
C13.852,39.601,13.601,40.57,12.913,41.603"/>
|
||||
<path fill="#0071B3" d="M14.79,37.474l-0.375,1.532c-0.188,0.688-0.782,2.221-1.251,2.815c0,0.125,0.093,0.281,0.125,0.406h4.473
|
||||
C17.729,40.101,16.542,38.318,14.79,37.474z"/>
|
||||
<path fill="none" stroke="#0071B3" stroke-width="0" stroke-miterlimit="3.863" d="M14.79,37.474l-0.375,1.532
|
||||
c-0.188,0.688-0.782,2.221-1.251,2.815c0,0.125,0.093,0.281,0.125,0.406h4.473C17.729,40.101,16.542,38.318,14.79,37.474z"/>
|
||||
<path fill="#0071B3" d="M15.353,35.034l0.188-0.938H26.8l-3.128,6.599c-0.156-0.062-0.25-0.125-0.469-0.125v-1.875h0.25V38.35
|
||||
h-0.813v0.345h0.25v1.907c-0.484,0.047-0.563,0.187-0.782,0.406L15.353,35.034"/>
|
||||
<path fill="#0071B3" d="M32.775,41.728l3.565-1.971c0.407,0.813,0.657,1.689,0.657,2.564c0,2.972-2.408,5.411-5.411,5.411
|
||||
c-2.878,0-5.224-2.252-5.318-5.161h4.161c0.062,0.563,0.594,1.002,1.157,1.002c0.688,0,1.251-0.563,1.251-1.252
|
||||
c0-0.219-0.031-0.375-0.094-0.531"/>
|
||||
<path fill="#0071B3" d="M32.557,41.541l3.597-2.002c-0.97-1.533-2.597-2.565-4.598-2.565c-0.814,0-1.658,0.188-2.378,0.532
|
||||
l2.034,3.722c0.093-0.062,0.281-0.094,0.375-0.094C31.961,41.133,32.305,41.291,32.557,41.541"/>
|
||||
<path fill="#0071B3" d="M28.865,37.755l2.033,3.691c-0.188,0.219-0.407,0.469-0.438,0.75h-4.223
|
||||
c0.031-1.877,1.064-3.535,2.565-4.473"/>
|
||||
<path fill="#0071B3" d="M26.988,34.408l-2.909,6.444c0.375,0.313,0.719,0.813,0.751,1.376h0.907
|
||||
c0.062-2.096,1.157-3.941,2.846-4.973L26.988,34.408"/>
|
||||
<path fill="none" stroke="#FFFFFF" stroke-width="0.156" stroke-miterlimit="3.863" d="M25.331,43.324
|
||||
c-0.062-0.313-0.094-0.658-0.094-1.002c0-3.535,2.909-6.443,6.412-6.443c2.659,0,4.88,1.627,5.881,3.816"/>
|
||||
</svg>
|
After Width: | Height: | Size: 8.1 KiB |
77
assets/themes/cycle_infra/Belgian_road_sign_D10.svg
Normal file
|
@ -0,0 +1,77 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="79.58px" height="79.485px" viewBox="0 0 79.58 79.485" enable-background="new 0 0 79.58 79.485" xml:space="preserve">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#0071B3" d="M39.783,79.408c-30.525,0-49.595-33.06-34.333-59.497
|
||||
c15.263-26.438,53.419-26.453,68.683,0C89.395,46.349,70.309,79.408,39.783,79.408z"/>
|
||||
<path fill="none" stroke="#0071B3" stroke-width="0.155" stroke-miterlimit="3.863" d="M39.783,79.408
|
||||
c-30.525,0-49.595-33.06-34.333-59.497c15.263-26.438,53.419-26.453,68.683,0C89.395,46.349,70.309,79.408,39.783,79.408z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M39.783,77.418c-29.002,0-47.124-31.411-32.623-56.527
|
||||
c14.485-25.117,50.746-25.117,65.247,0C86.908,46.007,68.785,77.418,39.783,77.418z"/>
|
||||
<path fill="none" stroke="#FFFFFF" stroke-width="0.155" stroke-miterlimit="3.863" d="M39.783,77.418
|
||||
c-29.002,0-47.124-31.411-32.623-56.527c14.485-25.117,50.746-25.117,65.247,0C86.908,46.007,68.785,77.418,39.783,77.418z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#0071B3" d="M39.783,74.994c-27.137,0-44.093-29.392-30.525-52.892
|
||||
c13.569-23.5,47.482-23.5,61.05,0S66.92,74.994,39.783,74.994z"/>
|
||||
<path fill="none" stroke="#0071B3" stroke-width="0.155" stroke-miterlimit="3.863" d="M39.783,74.994
|
||||
c-27.137,0-44.093-29.392-30.525-52.892c13.569-23.5,47.482-23.5,61.05,0S66.92,74.994,39.783,74.994z"/>
|
||||
<path fill="#FFFFFF" d="M42.208,25.973l-4.538-7.056c-0.653-0.808-2.021-1.741-3.109-1.616v-1.213
|
||||
c0.777-0.373,1.306-1.119,1.306-2.082c0-1.213-0.964-2.27-2.27-2.27c-1.212,0-2.238,1.057-2.238,2.27
|
||||
c0,1.025,0.653,1.834,1.586,2.144v1.057c-1.275,0-4.352,0.84-4.352,3.979v6.621c0,0.529,0.435,0.964,0.963,0.964
|
||||
c0.56,0,0.964-0.435,0.964-0.964v-6.123c0-0.249,0.187-0.374,0.435-0.374c0.249,0,0.373,0.125,0.373,0.374v17.624
|
||||
c0,0.56,0.467,1.026,1.057,1.026c0.529,0,0.933-0.467,0.933-1.026v-9.511c0-0.373,0.279-0.622,0.652-0.622s0.591,0.249,0.591,0.622
|
||||
v11.718c0,0.529,0.466,1.058,1.057,1.058c0.528,0,0.964-0.528,0.964-1.058V21.062l3.761,5.906c0.311,0.528,0.747,0.466,1.12,0.342
|
||||
c0.311,1.212,0.527,1.927,1.367,1.958l2.611,0.156l-1.865,6.03h1.43v4.414c0,0.281,0.311,0.561,0.652,0.561
|
||||
c0.373,0,0.652-0.279,0.652-0.561v-4.476h0.84v3.606c0,0.31,0.279,0.621,0.652,0.621s0.685-0.312,0.685-0.621v-3.544h1.368
|
||||
l-1.307-4.974l1.68,1.866c0.217,0.124,0.435,0.124,0.559,0c0.188-0.156,0.249-0.311,0.094-0.622l-2.27-2.58
|
||||
c-0.467-0.498-0.746-0.808-1.367-0.933c-0.156-0.155-0.094-0.342-0.063-0.528c0.56-0.249,0.871-0.839,0.871-1.461
|
||||
c0-0.902-0.653-1.617-1.523-1.617c-0.964,0-1.68,0.715-1.68,1.617c0,0.715,0.467,1.305,1.182,1.523
|
||||
c0.031,0.218,0.063,0.56-0.217,0.684h-2.176c-0.373,0-0.561-0.062-0.809-0.342c-0.218-0.404-0.498-0.964-0.498-1.243
|
||||
c0-0.218-0.063-0.187-0.154-0.28C42.27,26.408,42.332,26.284,42.208,25.973z"/>
|
||||
<path fill="none" stroke="#FFFFFF" stroke-width="0" stroke-miterlimit="3.863" d="M42.208,25.973l-4.538-7.056
|
||||
c-0.653-0.808-2.021-1.741-3.109-1.616v-1.213c0.777-0.373,1.306-1.119,1.306-2.082c0-1.213-0.964-2.27-2.27-2.27
|
||||
c-1.212,0-2.238,1.057-2.238,2.27c0,1.025,0.653,1.834,1.586,2.144v1.057c-1.275,0-4.352,0.84-4.352,3.979v6.621
|
||||
c0,0.529,0.435,0.964,0.963,0.964c0.56,0,0.964-0.435,0.964-0.964v-6.123c0-0.249,0.187-0.374,0.435-0.374
|
||||
c0.249,0,0.373,0.125,0.373,0.374v17.624c0,0.56,0.467,1.026,1.057,1.026c0.529,0,0.933-0.467,0.933-1.026v-9.511
|
||||
c0-0.373,0.279-0.622,0.652-0.622s0.591,0.249,0.591,0.622v11.718c0,0.529,0.466,1.058,1.057,1.058c0.528,0,0.964-0.528,0.964-1.058
|
||||
V21.062l3.761,5.906c0.311,0.528,0.747,0.466,1.12,0.342c0.311,1.212,0.527,1.927,1.367,1.958l2.611,0.156l-1.865,6.03h1.43v4.414
|
||||
c0,0.281,0.311,0.561,0.652,0.561c0.373,0,0.652-0.279,0.652-0.561v-4.476h0.84v3.606c0,0.31,0.279,0.621,0.652,0.621
|
||||
s0.685-0.312,0.685-0.621v-3.544h1.368l-1.307-4.974l1.68,1.866c0.217,0.124,0.435,0.124,0.559,0
|
||||
c0.188-0.156,0.249-0.311,0.094-0.622l-2.27-2.58c-0.467-0.498-0.746-0.808-1.367-0.933c-0.156-0.155-0.094-0.342-0.063-0.528
|
||||
c0.56-0.249,0.871-0.839,0.871-1.461c0-0.902-0.653-1.617-1.523-1.617c-0.964,0-1.68,0.715-1.68,1.617
|
||||
c0,0.715,0.467,1.305,1.182,1.523c0.031,0.218,0.063,0.56-0.217,0.684h-2.176c-0.373,0-0.561-0.062-0.809-0.342
|
||||
c-0.218-0.404-0.498-0.964-0.498-1.243c0-0.218-0.063-0.187-0.154-0.28C42.27,26.408,42.332,26.284,42.208,25.973z"/>
|
||||
<path fill="#FFFFFF" d="M33.069,53.031l6.497,5.845c-0.249,0.28-0.404,0.684-0.404,1.057c0,0.839,0.715,1.554,1.492,1.647v1.928
|
||||
h-0.249v0.342h0.808v-0.342h-0.217v-1.896c0.777-0.031,1.398-0.652,1.492-1.398h0.932c0.125,3.201,2.705,5.656,5.844,5.656
|
||||
c3.295,0,5.938-2.642,5.938-5.905c0-3.233-2.643-5.875-5.938-5.875c-0.963,0-1.864,0.218-2.672,0.685l-1.68-3.047l0.404-0.84
|
||||
c0.125-0.217,0.436-0.124,0.652-0.341C46,50.39,46,50.297,46,50.173c-0.093-0.095-0.124-0.187-0.279-0.187h-2.176
|
||||
c-0.031,0.03-0.125,0-0.187,0c0,0.03-0.062,0.062-0.093,0.062c-0.031,0.155-0.031,0.28,0,0.403c0.031,0.031,0.093,0.063,0.123,0.063
|
||||
h1.119c0.125-0.031,0.219,0.032,0.373,0.032c0,0.03,0,0.03,0.063,0.062c-0.031,0.125,0.063,0.217,0,0.248l-0.217,0.529H33.442
|
||||
l0.311-1.337c0.28-0.062,0.466,0.125,0.995-0.093c0.186,0,0.683-0.25,1.243-0.063c0.124-0.093-0.031-0.125,0.031-0.156
|
||||
c-0.062-0.031,0.093-0.217,0.062-0.248c-0.311-0.094-1.088-0.156-1.43,0.031c-0.373,0.217-0.839,0.094-1.181,0.124l-1.119,4.818
|
||||
c-0.622-0.248-1.368-0.404-2.083-0.404c-3.263,0-5.906,2.642-5.906,5.906c0,3.264,2.643,5.905,5.906,5.905
|
||||
c3.202,0,5.875-2.642,5.875-5.905c0-2.394-1.461-4.414-3.481-5.347L33.069,53.031"/>
|
||||
<path fill="none" stroke="#FFFFFF" stroke-width="0.155" stroke-miterlimit="3.863" d="M29.308,53.685
|
||||
c0.342-0.03,0.621-0.124,0.963-0.124c3.482,0,6.342,2.891,6.342,6.403c0,0.218,0,0.435-0.031,0.622"/>
|
||||
<path fill="#0071B3" d="M30.738,59.248c-0.156-0.092-0.311-0.062-0.467-0.062c-0.497,0-0.901,0.404-0.901,0.839
|
||||
c0,0.498,0.404,0.84,0.901,0.84c0.342,0,0.715-0.217,0.809-0.59h4.476c-0.187,2.828-2.487,5.004-5.285,5.004
|
||||
c-2.984,0-5.377-2.394-5.377-5.347c0-2.983,2.393-5.378,5.377-5.378c0.684,0,1.306,0.188,1.99,0.405l-0.373,1.461
|
||||
C31.67,57.26,31.422,58.223,30.738,59.248"/>
|
||||
<path fill="#0071B3" d="M32.603,55.146l-0.373,1.523c-0.187,0.684-0.777,2.207-1.244,2.798c0,0.124,0.094,0.279,0.125,0.404h4.445
|
||||
C35.525,57.757,34.343,55.984,32.603,55.146z"/>
|
||||
<path fill="none" stroke="#0071B3" stroke-width="0" stroke-miterlimit="3.863" d="M32.603,55.146l-0.373,1.523
|
||||
c-0.187,0.684-0.777,2.207-1.244,2.798c0,0.124,0.094,0.279,0.125,0.404h4.445C35.525,57.757,34.343,55.984,32.603,55.146z"/>
|
||||
<path fill="#0071B3" d="M33.162,52.722l0.187-0.933h11.19l-3.107,6.559c-0.156-0.063-0.25-0.125-0.467-0.125v-1.865h0.248v-0.342
|
||||
h-0.808v0.342h0.249v1.897c-0.482,0.046-0.56,0.187-0.777,0.403L33.162,52.722"/>
|
||||
<path fill="#0071B3" d="M50.477,59.373l3.543-1.959c0.404,0.809,0.654,1.68,0.654,2.55c0,2.952-2.395,5.378-5.379,5.378
|
||||
c-2.859,0-5.191-2.238-5.283-5.129h4.133c0.063,0.559,0.592,0.994,1.15,0.994c0.684,0,1.244-0.559,1.244-1.243
|
||||
c0-0.218-0.031-0.373-0.094-0.528"/>
|
||||
<path fill="#0071B3" d="M50.26,59.187l3.574-1.989c-0.964-1.522-2.581-2.549-4.57-2.549c-0.808,0-1.646,0.187-2.361,0.528
|
||||
l2.02,3.699c0.094-0.063,0.28-0.093,0.373-0.093C49.668,58.783,50.01,58.938,50.26,59.187"/>
|
||||
<path fill="#0071B3" d="M46.592,55.426l2.02,3.668c-0.186,0.217-0.404,0.466-0.436,0.746H43.98c0.031-1.865,1.057-3.514,2.549-4.445
|
||||
"/>
|
||||
<path fill="#0071B3" d="M44.727,52.1l-2.892,6.403c0.373,0.311,0.716,0.808,0.746,1.368h0.901c0.063-2.084,1.15-3.918,2.828-4.942
|
||||
L44.727,52.1"/>
|
||||
<path fill="none" stroke="#FFFFFF" stroke-width="0.155" stroke-miterlimit="3.863" d="M43.078,60.959
|
||||
c-0.063-0.311-0.093-0.653-0.093-0.995c0-3.513,2.891-6.403,6.372-6.403c2.643,0,4.85,1.616,5.844,3.792"/>
|
||||
</svg>
|
After Width: | Height: | Size: 7.8 KiB |
136
assets/themes/cycle_infra/Belgian_traffic_sign_M13.svg
Normal file
After Width: | Height: | Size: 108 KiB |
158
assets/themes/cycle_infra/Belgian_traffic_sign_M14.svg
Normal file
After Width: | Height: | Size: 116 KiB |
132
assets/themes/cycle_infra/Belgian_traffic_sign_M15.svg
Normal file
After Width: | Height: | Size: 115 KiB |
159
assets/themes/cycle_infra/Belgian_traffic_sign_M16.svg
Normal file
After Width: | Height: | Size: 124 KiB |
146
assets/themes/cycle_infra/Belgian_traffic_sign_M6.svg
Normal file
After Width: | Height: | Size: 29 KiB |
142
assets/themes/cycle_infra/Belgian_traffic_sign_M7.svg
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
assets/themes/cycle_infra/Cycle_barrier_double.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
assets/themes/cycle_infra/Cycle_barrier_single.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
assets/themes/cycle_infra/Cycle_barrier_squeeze.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
assets/themes/cycle_infra/Cycle_barrier_triple.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
11
assets/themes/cycle_infra/bicycleway.svg
Normal file
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" viewBox="0 0 128.02 128.07" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m119.44 96.041c-17.673 30.611-56.815 41.099-87.426 23.426-30.611-17.673-41.099-56.815-23.426-87.426 17.673-30.611 56.815-41.099 87.426-23.426 30.611 17.673 41.099 56.815 23.426 87.426" fill="#ca72e2" stroke-width=".2"/>
|
||||
<g stroke-width=".2">
|
||||
<path d="m68.002 128.04c3.3659-0.17764 6.7162-0.69606 10-1.395l47.121-81.461c-1.0366-3.1937-1.7042-5.7055-4.1211-9 0 0-53 92-53 91.856z" fill-opacity=".2"/>
|
||||
<path d="m96.003 8.6514c-10.102-5.8323-21.132-8.5793-32.014-8.5666l-55.412 95.977c5.4299 9.4304 13.324 17.609 23.426 23.441 10.084 5.8218 21.092 8.5693 31.955 8.5666l55.441-96.027c-5.4291-9.4089-13.313-17.569-23.396-23.39z" fill="#999"/>
|
||||
<path d="m119.46 32-55.416 95.983c3.2446-3e-3 6.4749-0.24979 9.6645-0.73946l49.943-86.504c-1.1707-3.0071-2.5725-5.9278-4.1919-8.7395z" fill="#fff"/>
|
||||
<path d="m64.034-1.9691e-6c-3.2446 0.0033555-6.4749 0.24979-9.6645 0.73946l-49.943 86.504c1.1707 3.0071 2.5725 5.9278 4.1919 8.7395z" fill="#fff"/>
|
||||
</g>
|
||||
<path d="m53.154 68.99a10.139 10.139 0 0 1-13.85 3.7111 10.139 10.139 0 0 1-3.7111-13.85 10.139 10.139 0 0 1 13.85-3.7111 10.139 10.139 0 0 1 3.7111 13.85m28.615 16.519a10.139 10.139 0 0 1-13.85 3.7111 10.139 10.139 0 0 1-3.7111-13.85 10.139 10.139 0 0 1 13.85-3.7111 10.139 10.139 0 0 1 3.7111 13.85m-24.705-32.295 3.3174 19.883 12.683 7.3225-0.93937-18.51-15.061-8.6955m16.892 5.5248 3.8679 2.2226m-17.442 12.136 13.574-14.358m-29.428 5.205 17.964-15.856 6.3415 3.6613" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" style="paint-order:normal"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
1
assets/themes/cycle_infra/cycle-infra.svg
Normal file
After Width: | Height: | Size: 5.9 KiB |
1478
assets/themes/cycle_infra/cycle_infra.json
Normal file
173
assets/themes/cycle_infra/license_info.json
Normal file
|
@ -0,0 +1,173 @@
|
|||
[
|
||||
{
|
||||
"authors": [
|
||||
"Dávid Gladiš",
|
||||
"Hannah Declerck"
|
||||
],
|
||||
"path": "cycle-infra.svg",
|
||||
"license": "CC-BY",
|
||||
"sources": [
|
||||
"https://thenounproject.com/davidgladis/collection/bicycles/?i=808040"
|
||||
]
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Belgische Wetgever"
|
||||
],
|
||||
"path": "Belgian_road_sign_D07.svg",
|
||||
"license": "CC0",
|
||||
"sources": [
|
||||
"https://commons.wikimedia.org/wiki/File:Belgian_road_sign_D07.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Belgische Wetgever"
|
||||
],
|
||||
"path": "Belgian_road_sign_D09.svg",
|
||||
"license": "CC0",
|
||||
"sources": [
|
||||
"https://commons.wikimedia.org/wiki/File:Belgian_road_sign_D09.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Belgische Wetgever"
|
||||
],
|
||||
"path": "Belgian_road_sign_D10.svg",
|
||||
"license": "CC0",
|
||||
"sources": [
|
||||
"https://commons.wikimedia.org/wiki/File:Belgian_road_sign_D10.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Belgische Wetgever"
|
||||
],
|
||||
"path": "Belgian_traffic_sign_M6.svg",
|
||||
"license": "CC0",
|
||||
"sources": [
|
||||
"https://commons.wikimedia.org/wiki/File:Belgian_traffic_sign_M6.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Belgische Wetgever"
|
||||
],
|
||||
"path": "Belgian_traffic_sign_M7.svg",
|
||||
"license": "CC0",
|
||||
"sources": [
|
||||
"https://commons.wikimedia.org/wiki/File:Belgian_traffic_sign_M7.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Belgische Wetgever"
|
||||
],
|
||||
"path": "Belgian_traffic_sign_M13.svg",
|
||||
"license": "CC0",
|
||||
"sources": [
|
||||
"https://commons.wikimedia.org/wiki/File:Belgian_traffic_sign_M13.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Belgische Wetgever"
|
||||
],
|
||||
"path": "Belgian_traffic_sign_M14.svg",
|
||||
"license": "CC0",
|
||||
"sources": [
|
||||
"https://commons.wikimedia.org/wiki/File:Belgian_traffic_sign_M14.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Belgische Wetgever"
|
||||
],
|
||||
"path": "Belgian_traffic_sign_M15.svg",
|
||||
"license": "CC0",
|
||||
"sources": [
|
||||
"https://commons.wikimedia.org/wiki/File:Belgian_traffic_sign_M15.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Belgische Wetgever"
|
||||
],
|
||||
"path": "Belgian_traffic_sign_M16.svg",
|
||||
"license": "CC0",
|
||||
"sources": [
|
||||
"https://commons.wikimedia.org/wiki/File:Belgian_traffic_sign_M16.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Supaplex030"
|
||||
],
|
||||
"path": "Cycle_barrier_single.png",
|
||||
"license": "CC-BY-SA 4.0",
|
||||
"sources": [
|
||||
"https://wiki.openstreetmap.org/wiki/File:Cycle_barrier_single.png"
|
||||
]
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Supaplex030"
|
||||
],
|
||||
"path": "Cycle_barrier_double.png",
|
||||
"license": "CC-BY-SA 4.0",
|
||||
"sources": [
|
||||
"https://wiki.openstreetmap.org/wiki/File:Cycle_barrier_double.png"
|
||||
]
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Supaplex030"
|
||||
],
|
||||
"path": "Cycle_barrier_triple.png",
|
||||
"license": "CC-BY-SA 4.0",
|
||||
"sources": [
|
||||
"https://wiki.openstreetmap.org/wiki/File:Cycle_barrier_triple.png"
|
||||
]
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Supaplex030"
|
||||
],
|
||||
"path": "Cycle_barrier_angular.png",
|
||||
"license": "CC-BY-SA 4.0",
|
||||
"sources": [
|
||||
"https://wiki.openstreetmap.org/wiki/File:Cycle_barrier_angular.png"
|
||||
]
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Supaplex030"
|
||||
],
|
||||
"path": "Cycle_barrier_squeeze.png",
|
||||
"license": "CC-BY-SA 4.0",
|
||||
"sources": [
|
||||
"https://wiki.openstreetmap.org/wiki/File:Cycle_barrier_squeeze.png"
|
||||
]
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Tobias Zwick"
|
||||
],
|
||||
"path": "street.svg",
|
||||
"license": "CC-BY-SA 4.0",
|
||||
"sources": [
|
||||
"https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/quest%20icons/street.svg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"authors": [
|
||||
"Tobias Zwick"
|
||||
],
|
||||
"path": "bicycleway.svg",
|
||||
"license": "CC-BY-SA 4.0",
|
||||
"sources": [
|
||||
"https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/quest%20icons/bicycleway.svg"
|
||||
]
|
||||
}
|
||||
]
|
14
assets/themes/cycle_infra/street.svg
Normal file
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" viewBox="0 0 128.02 128.07" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m119.44 96.041c-17.673 30.611-56.815 41.099-87.426 23.426-30.611-17.673-41.099-56.815-23.426-87.426 17.673-30.611 56.815-41.099 87.426-23.426 30.611 17.673 41.099 56.815 23.426 87.426" fill="#fd5" stroke-width=".2"/>
|
||||
<g>
|
||||
<path d="m96.003 8.6514c-10.102-5.8323-21.132-8.5793-32.014-8.5666l-55.412 95.977c5.4299 9.4304 13.324 17.609 23.426 23.441 10.084 5.8218 21.092 8.5693 31.955 8.5666l55.441-96.027c-5.4291-9.4089-13.313-17.569-23.396-23.39z" fill="#999" stroke-width=".2"/>
|
||||
<path d="m34.547 107.07 6.9282 4-6 10.392-6.9282-4z" fill="#fff" style="paint-order:stroke fill markers"/>
|
||||
<path d="m52.547 75.897 6.9282 4-10 17.321-6.9282-4z" fill="#fff" style="paint-order:stroke fill markers"/>
|
||||
<path d="m68.003 128.04c3.3659-0.17764 6.7162-0.69607 10-1.395l47.121-81.461c-1.0366-3.1937-1.7042-5.7055-4.1211-9 0 0-53 92-53 91.856z" fill-opacity=".2" stroke-width=".2"/>
|
||||
<path d="m70.547 44.72 6.9282 4-10 17.321-6.9282-4z" fill="#fff" style="paint-order:stroke fill markers"/>
|
||||
<path d="m88.547 13.543 6.9282 4-10 17.321-6.9282-4z" fill="#fff" style="paint-order:stroke fill markers"/>
|
||||
<path d="m119.46 32-55.416 95.983c3.2446-3e-3 6.4749-0.24979 9.6645-0.73946l49.943-86.504c-1.1707-3.0071-2.5725-5.9278-4.1919-8.7395z" fill="#fff" stroke-width=".2"/>
|
||||
<path d="m64.034-1.9691e-6c-3.2446 0.0033555-6.4749 0.24979-9.6645 0.73946l-49.943 86.504c1.1707 3.0071 2.5725 5.9278 4.1919 8.7395z" fill="#fff" stroke-width=".2"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"id": "fietsstraten",
|
||||
"id": "cyclestreets",
|
||||
"version": "2020-08-30",
|
||||
"title": {
|
||||
"nl": "Fietsstraten",
|
||||
|
@ -68,7 +68,7 @@
|
|||
]
|
||||
},
|
||||
"then": {
|
||||
"nl": "Deze straat is een fietsstraat",
|
||||
"nl": "Deze straat i een fietsstraat",
|
||||
"en": "This street is a cyclestreet",
|
||||
"ja": "この通りはcyclestreetだ",
|
||||
"nb_NO": "Denne gaten er en sykkelvei"
|
||||
|
|
|
@ -330,7 +330,6 @@
|
|||
}
|
||||
}
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "circle:white;./assets/themes/facadegardens/geveltuin.svg",
|
||||
"mappings": [
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"id": "boomgaarden",
|
||||
"id": "fruit_trees",
|
||||
"title": {
|
||||
"nl": "Open Boomgaardenkaart"
|
||||
},
|
||||
|
@ -43,7 +43,6 @@
|
|||
"tagRenderings": [
|
||||
"images"
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "./assets/themes/buurtnatuur/forest.svg"
|
||||
},
|
||||
|
@ -143,7 +142,6 @@
|
|||
}
|
||||
}
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "./assets/themes/fruit_trees/fruit_tree.svg"
|
||||
},
|
||||
|
|
|
@ -173,7 +173,6 @@
|
|||
}
|
||||
}
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"label": {
|
||||
"mappings": [
|
||||
{
|
||||
|
|
|
@ -258,7 +258,6 @@
|
|||
},
|
||||
"images"
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "./assets/themes/hailhydrant/hydrant.svg"
|
||||
},
|
||||
|
@ -365,7 +364,6 @@
|
|||
},
|
||||
"images"
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "./assets/themes/hailhydrant/Twemoji12_1f9ef.svg"
|
||||
},
|
||||
|
@ -568,7 +566,6 @@
|
|||
},
|
||||
"images"
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "./assets/themes/hailhydrant/Twemoji12_1f692.svg"
|
||||
},
|
||||
|
@ -744,7 +741,6 @@
|
|||
},
|
||||
"images"
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "./assets/themes/hailhydrant/Twemoji_1f691.svg"
|
||||
},
|
||||
|
|
|
@ -305,7 +305,6 @@
|
|||
"questions",
|
||||
"reviews"
|
||||
],
|
||||
"hideUnderlayingFeaturesMinPercentage": 0,
|
||||
"icon": {
|
||||
"render": "./assets/themes/shops/shop.svg"
|
||||
},
|
||||
|
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |