Merge branch 'master' of github.com:pietervdvn/MapComplete
This commit is contained in:
commit
ba26bf3e63
6 changed files with 2305 additions and 2340 deletions
|
@ -83,6 +83,7 @@ export interface TagRenderingConfigJson {
|
|||
* Allows fixed-tag inputs, shown either as radiobuttons or as checkboxes
|
||||
*/
|
||||
mappings?: {
|
||||
|
||||
/**
|
||||
* If this condition is met, then the text under `then` will be shown.
|
||||
* If no value matches, and the user selects this mapping as an option, then these tags will be uploaded to OSM.
|
||||
|
@ -168,6 +169,13 @@ export interface TagRenderingConfigJson {
|
|||
*/
|
||||
ifnot?: AndOrTagConfigJson | string
|
||||
|
||||
|
||||
/**
|
||||
* If chosen as answer, these tags will be applied as well onto the object.
|
||||
* Not compatible with multiAnswer
|
||||
*/
|
||||
addExtraTags: string[]
|
||||
|
||||
}[]
|
||||
|
||||
/**
|
||||
|
|
|
@ -6,6 +6,7 @@ import {TagUtils} from "../../Logic/Tags/TagUtils";
|
|||
import {And} from "../../Logic/Tags/And";
|
||||
import ValidatedTextField from "../../UI/Input/ValidatedTextField";
|
||||
import {Utils} from "../../Utils";
|
||||
import {Tag} from "../../Logic/Tags/Tag";
|
||||
|
||||
/***
|
||||
* The parsed version of TagRenderingConfigJSON
|
||||
|
@ -36,6 +37,7 @@ export default class TagRenderingConfig {
|
|||
readonly ifnot?: TagsFilter,
|
||||
readonly then: Translation
|
||||
readonly hideInAnswer: boolean | TagsFilter
|
||||
readonly addExtraTags: Tag[]
|
||||
}[]
|
||||
readonly roaming: boolean;
|
||||
|
||||
|
@ -119,21 +121,24 @@ export default class TagRenderingConfig {
|
|||
|
||||
this.mappings = json.mappings.map((mapping, i) => {
|
||||
|
||||
|
||||
const ctx = `${context}.mapping[${i}]`
|
||||
if (mapping.then === undefined) {
|
||||
throw `${context}.mapping[${i}]: Invalid mapping: if without body`
|
||||
throw `${ctx}: Invalid mapping: if without body`
|
||||
}
|
||||
if (mapping.ifnot !== undefined && !this.multiAnswer) {
|
||||
throw `${context}.mapping[${i}]: Invalid mapping: ifnot defined, but the tagrendering is not a multianswer`
|
||||
throw `${ctx}: Invalid mapping: ifnot defined, but the tagrendering is not a multianswer`
|
||||
}
|
||||
|
||||
if (mapping.if === undefined) {
|
||||
throw `${context}.mapping[${i}]: Invalid mapping: "if" is not defined, but the tagrendering is not a multianswer`
|
||||
throw `${ctx}: Invalid mapping: "if" is not defined, but the tagrendering is not a multianswer`
|
||||
}
|
||||
if (typeof mapping.if !== "string" && mapping.if["length"] !== undefined) {
|
||||
throw `${context}.mapping[${i}]: Invalid mapping: "if" is defined as an array. Use {"and": <your conditions>} or {"or": <your conditions>} instead`
|
||||
throw `${ctx}: Invalid mapping: "if" is defined as an array. Use {"and": <your conditions>} or {"or": <your conditions>} instead`
|
||||
}
|
||||
|
||||
if(mapping.addExtraTags !== undefined && this.multiAnswer){
|
||||
throw `${ctx}: Invalid mapping: got a multi-Answer with addExtraTags; this is not allowed`
|
||||
}
|
||||
|
||||
let hideInAnswer: boolean | TagsFilter = false;
|
||||
if (typeof mapping.hideInAnswer === "boolean") {
|
||||
|
@ -141,12 +146,12 @@ export default class TagRenderingConfig {
|
|||
} else if (mapping.hideInAnswer !== undefined) {
|
||||
hideInAnswer = TagUtils.Tag(mapping.hideInAnswer, `${context}.mapping[${i}].hideInAnswer`);
|
||||
}
|
||||
const mappingContext = `${context}.mapping[${i}]`
|
||||
const mp = {
|
||||
if: TagUtils.Tag(mapping.if, `${mappingContext}.if`),
|
||||
ifnot: (mapping.ifnot !== undefined ? TagUtils.Tag(mapping.ifnot, `${mappingContext}.ifnot`) : undefined),
|
||||
if: TagUtils.Tag(mapping.if, `${ctx}.if`),
|
||||
ifnot: (mapping.ifnot !== undefined ? TagUtils.Tag(mapping.ifnot, `${ctx}.ifnot`) : undefined),
|
||||
then: Translations.T(mapping.then, `{mappingContext}.then`),
|
||||
hideInAnswer: hideInAnswer
|
||||
hideInAnswer: hideInAnswer,
|
||||
addExtraTags: (mapping.addExtraTags??[]).map((str, j) => TagUtils.SimpleTag(str, `${ctx}.addExtraTags[${j}]`))
|
||||
};
|
||||
if (this.question) {
|
||||
if (hideInAnswer !== true && mp.if !== undefined && !mp.if.isUsableAsAnswer()) {
|
||||
|
|
|
@ -49,7 +49,7 @@ export default class TagRenderingQuestion extends Combine {
|
|||
|
||||
const applicableMappingsSrc =
|
||||
UIEventSource.ListStabilized(tags.map(tags => {
|
||||
const applicableMappings: { if: TagsFilter, then: any, ifnot?: TagsFilter }[] = []
|
||||
const applicableMappings: { if: TagsFilter, then: any, ifnot?: TagsFilter, addExtraTags: Tag[] }[] = []
|
||||
for (const mapping of configuration.mappings ?? []) {
|
||||
if (mapping.hideInAnswer === true) {
|
||||
continue
|
||||
|
@ -108,7 +108,7 @@ export default class TagRenderingQuestion extends Combine {
|
|||
|
||||
const saveButton = new Combine([
|
||||
options.saveButtonConstr(inputElement.GetValue()),
|
||||
new Toggle(Translations.t.general.testing, undefined, State.state.featureSwitchIsTesting).SetClass("alert")
|
||||
new Toggle(Translations.t.general.testing.SetClass("alert"), undefined, State.state.featureSwitchIsTesting)
|
||||
])
|
||||
|
||||
let bottomTags: BaseUIElement;
|
||||
|
@ -147,7 +147,7 @@ export default class TagRenderingQuestion extends Combine {
|
|||
|
||||
|
||||
private static GenerateInputElement(configuration: TagRenderingConfig,
|
||||
applicableMappings: { if: TagsFilter, then: any, ifnot?: TagsFilter }[],
|
||||
applicableMappings: { if: TagsFilter, then: any, ifnot?: TagsFilter, addExtraTags: Tag[] }[],
|
||||
applicableUnit: Unit,
|
||||
tagsSource: UIEventSource<any>)
|
||||
: InputElement<TagsFilter> {
|
||||
|
@ -341,12 +341,16 @@ export default class TagRenderingQuestion extends Combine {
|
|||
mapping: {
|
||||
if: TagsFilter,
|
||||
then: Translation,
|
||||
addExtraTags: Tag[]
|
||||
}, ifNot?: TagsFilter[]): InputElement<TagsFilter> {
|
||||
|
||||
let tagging: TagsFilter = mapping.if;
|
||||
if (ifNot !== undefined) {
|
||||
tagging = new And([mapping.if, ...ifNot])
|
||||
}
|
||||
if (mapping.addExtraTags) {
|
||||
tagging = new And([tagging, ...mapping.addExtraTags])
|
||||
}
|
||||
|
||||
return new FixedInputElement(
|
||||
new SubstitutedTranslation(mapping.then, tagsSource),
|
||||
|
|
|
@ -2,13 +2,7 @@
|
|||
"id": "charging_station",
|
||||
"name": {
|
||||
"en": "Charging stations",
|
||||
"nl": "Oplaadpunten",
|
||||
"de": "Ladestationen",
|
||||
"it": "Stazioni di ricarica",
|
||||
"ja": "充電ステーション",
|
||||
"nb_NO": "Ladestasjoner",
|
||||
"ru": "Зарядные станции",
|
||||
"zh_Hant": "充電站"
|
||||
"nl": "Oplaadpunten"
|
||||
},
|
||||
"minzoom": 10,
|
||||
"source": {
|
||||
|
@ -24,24 +18,12 @@
|
|||
"title": {
|
||||
"render": {
|
||||
"en": "Charging station",
|
||||
"nl": "Oplaadpunten",
|
||||
"de": "Ladestation",
|
||||
"it": "Stazione di ricarica",
|
||||
"ja": "充電ステーション",
|
||||
"nb_NO": "Ladestasjon",
|
||||
"ru": "Зарядная станция",
|
||||
"zh_Hant": "充電站"
|
||||
"nl": "Oplaadpunten"
|
||||
}
|
||||
},
|
||||
"description": {
|
||||
"en": "A charging station",
|
||||
"nl": "Oplaadpunten",
|
||||
"de": "Eine Ladestation",
|
||||
"it": "Una stazione di ricarica",
|
||||
"ja": "充電ステーション",
|
||||
"nb_NO": "En ladestasjon",
|
||||
"ru": "Зарядная станция",
|
||||
"zh_Hant": "充電站"
|
||||
"nl": "Oplaadpunten"
|
||||
},
|
||||
"tagRenderings": [
|
||||
"images",
|
||||
|
@ -50,8 +32,7 @@
|
|||
"#": "Allowed vehicle types",
|
||||
"question": {
|
||||
"en": "Which vehicles are allowed to charge here?",
|
||||
"nl": "Welke voertuigen kunnen hier opgeladen worden?",
|
||||
"de": "Welche Fahrzeuge dürfen hier geladen werden?"
|
||||
"nl": "Welke voertuigen kunnen hier opgeladen worden?"
|
||||
},
|
||||
"multiAnswer": true,
|
||||
"mappings": [
|
||||
|
@ -59,9 +40,8 @@
|
|||
"if": "bicycle=yes",
|
||||
"ifnot": "bicycle=no",
|
||||
"then": {
|
||||
"en": "<b>bicycles</b> can be charged here",
|
||||
"nl": "<b>Fietsen</b> kunnen hier opgeladen worden",
|
||||
"de": "<b>Fahrräder</b> können hier geladen werden"
|
||||
"en": "<b>Bcycles</b> can be charged here",
|
||||
"nl": "<b>Fietsen</b> kunnen hier opgeladen worden"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -69,8 +49,7 @@
|
|||
"ifnot": "motorcar=no",
|
||||
"then": {
|
||||
"en": "<b>Cars</b> can be charged here",
|
||||
"nl": "<b>Elektrische auto's</b> kunnen hier opgeladen worden",
|
||||
"de": "<b>Autos</b> können hier geladen werden"
|
||||
"nl": "<b>Elektrische auto's</b> kunnen hier opgeladen worden"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -78,8 +57,7 @@
|
|||
"ifnot": "scooter=no",
|
||||
"then": {
|
||||
"en": "<b>Scooters</b> can be charged here",
|
||||
"nl": "<b>Electrische scooters</b> (snorfiets of bromfiets) kunnen hier opgeladen worden",
|
||||
"de": "<b> Roller</b> können hier geladen werden"
|
||||
"nl": "<b>Electrische scooters</b> (snorfiets of bromfiets) kunnen hier opgeladen worden"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -87,8 +65,7 @@
|
|||
"ifnot": "hgv=no",
|
||||
"then": {
|
||||
"en": "<b>Heavy good vehicles</b> (such as trucks) can be charged here",
|
||||
"nl": "<b>Vrachtwagens</b> kunnen hier opgeladen worden",
|
||||
"de": "<b>Lastkraftwagen</b> (LKW) können hier geladen werden"
|
||||
"nl": "<b>Vrachtwagens</b> kunnen hier opgeladen worden"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -96,8 +73,7 @@
|
|||
"ifnot": "bus=no",
|
||||
"then": {
|
||||
"en": "<b>Buses</b> can be charged here",
|
||||
"nl": "<b>Bussen</b> kunnen hier opgeladen worden",
|
||||
"de": "<b>Busse</b> können hier geladen werden"
|
||||
"nl": "<b>Bussen</b> kunnen hier opgeladen worden"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -106,13 +82,11 @@
|
|||
"id": "access",
|
||||
"question": {
|
||||
"en": "Who is allowed to use this charging station?",
|
||||
"nl": "Wie mag er dit oplaadpunt gebruiken?",
|
||||
"de": "Wer darf diese Ladestation benutzen?"
|
||||
"nl": "Wie mag er dit oplaadpunt gebruiken?"
|
||||
},
|
||||
"render": {
|
||||
"en": "Access is {access}",
|
||||
"nl": "Toegang voor {access}",
|
||||
"de": "Zugang ist {access}"
|
||||
"nl": "Toegang voor {access}"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "access",
|
||||
|
@ -145,14 +119,14 @@
|
|||
"if": "access=customers",
|
||||
"then": {
|
||||
"en": "Only customers of the place this station belongs to can use this charging station<br/><span class='subtle'>E.g. a charging station operated by hotel which is only usable by their guests</span>",
|
||||
"nl": "Enkel <b>klanten van de bijhorende plaats</b> mogen dit oplaadpunt gebruiken<br/><span class='subtle'>Bijvoorbeeld een oplaadpunt op de parking van een restaurant dat enkel door klanten van het restaurant gebruikt mag worden</span>"
|
||||
"nl": "Enkel <b>klanten van de bijhorende plaats</b> mogen dit oplaadpunt gebruiken<br/><span class='subtle'>Bv. op de parking van een hotel en enkel toegankelijk voor klanten van dit hotel</span>"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "access=private",
|
||||
"then": {
|
||||
"en": "Not accessible to the general public (e.g. only accessible to the owners, employees, ...)",
|
||||
"nl": "Niet toegankelijk voor het publiek <span class='subtle'>Enkel toegankelijk voor de eigenaar, medewerkers ,...</span> "
|
||||
"nl": "Niet toegankelijk voor het publiek <br/><span class='subtle'>Bv. enkel toegankelijk voor de eigenaar, medewerkers ,...</span> "
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -161,13 +135,11 @@
|
|||
"id": "capacity",
|
||||
"render": {
|
||||
"en": "{capacity} vehicles can be charged here at the same time",
|
||||
"nl": "{capacity} voertuigen kunnen hier op hetzelfde moment opgeladen worden",
|
||||
"de": "{capacity} Fahrzeuge können hier gleichzeitig geladen werden"
|
||||
"nl": "{capacity} voertuigen kunnen hier op hetzelfde moment opgeladen worden"
|
||||
},
|
||||
"question": {
|
||||
"en": "How much vehicles can be charged here at the same time?",
|
||||
"nl": "Hoeveel voertuigen kunnen hier opgeladen worden?",
|
||||
"de": "Wie viele Fahrzeuge können hier gleichzeitig geladen werden?"
|
||||
"nl": "Hoeveel voertuigen kunnen hier opgeladen worden?"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "capacity",
|
||||
|
@ -177,9 +149,8 @@
|
|||
{
|
||||
"id": "Available_charging_stations (generated)",
|
||||
"question": {
|
||||
"en": "Which charging stations are available here?",
|
||||
"nl": "Welke aansluitingen zijn hier beschikbaar?",
|
||||
"de": "Welche Ladestationen gibt es hier?"
|
||||
"en": "Which charging connections are available here?",
|
||||
"nl": "Welke aansluitingen zijn hier beschikbaar?"
|
||||
},
|
||||
"multiAnswer": true,
|
||||
"mappings": [
|
||||
|
@ -280,8 +251,7 @@
|
|||
},
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Chademo_type4.svg'/> <span><b>Chademo</b></span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Chademo_type4.svg'/> <span><b>Chademo</b></span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Chademo_type4.svg'/> <span><b>Chademo</b></span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Chademo_type4.svg'/> <span><b>Chademo</b></span></div>"
|
||||
},
|
||||
"hideInAnswer": true
|
||||
},
|
||||
|
@ -290,8 +260,7 @@
|
|||
"ifnot": "socket:type1_cable=",
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 with cable</b> (J1772)</span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 met kabel</b> (J1772)</span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Typ 1 mit Kabel</b> (J1772)</span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 met kabel</b> (J1772)</span></div>"
|
||||
},
|
||||
"hideInAnswer": {
|
||||
"or": [
|
||||
|
@ -329,8 +298,7 @@
|
|||
},
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 with cable</b> (J1772)</span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 met kabel</b> (J1772)</span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Typ 1 mit Kabel</b> (J1772)</span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 met kabel</b> (J1772)</span></div>"
|
||||
},
|
||||
"hideInAnswer": true
|
||||
},
|
||||
|
@ -339,8 +307,7 @@
|
|||
"ifnot": "socket:type1=",
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 <i>without</i> cable</b> (J1772)</span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 <i>zonder</i> kabel</b> (J1772)</span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Typ 1 <i>ohne</i> Kabel</b> (J1772)</span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 <i>zonder</i> kabel</b> (J1772)</span></div>"
|
||||
},
|
||||
"hideInAnswer": {
|
||||
"or": [
|
||||
|
@ -378,8 +345,7 @@
|
|||
},
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 <i>without</i> cable</b> (J1772)</span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 <i>zonder</i> kabel</b> (J1772)</span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Typ 1 <i>ohne</i> Kabel</b> (J1772)</span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 <i>zonder</i> kabel</b> (J1772)</span></div>"
|
||||
},
|
||||
"hideInAnswer": true
|
||||
},
|
||||
|
@ -388,8 +354,7 @@
|
|||
"ifnot": "socket:type1_combo=",
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Type 1 CCS</b> (aka Type 1 Combo)</span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Typ 1 CCS</b> (auch bekannt als Typ 1 Combo)</span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</span></div>"
|
||||
},
|
||||
"hideInAnswer": {
|
||||
"or": [
|
||||
|
@ -427,8 +392,7 @@
|
|||
},
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Type 1 CCS</b> (aka Type 1 Combo)</span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Typ 1 CCS</b> (auch bekannt als Typ 1 Combo)</span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</span></div>"
|
||||
},
|
||||
"hideInAnswer": true
|
||||
},
|
||||
|
@ -437,8 +401,7 @@
|
|||
"ifnot": "socket:tesla_supercharger=",
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>"
|
||||
},
|
||||
"hideInAnswer": {
|
||||
"or": [
|
||||
|
@ -476,8 +439,7 @@
|
|||
},
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>"
|
||||
},
|
||||
"hideInAnswer": true
|
||||
},
|
||||
|
@ -486,8 +448,7 @@
|
|||
"ifnot": "socket:type2=",
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Type 2</b> (mennekes)</span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Type 2</b> (mennekes)</span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Typ 2</b> (Mennekes)</span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Type 2</b> (mennekes)</span></div>"
|
||||
},
|
||||
"hideInAnswer": {
|
||||
"or": [
|
||||
|
@ -525,8 +486,7 @@
|
|||
},
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Type 2</b> (mennekes)</span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Type 2</b> (mennekes)</span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Typ 2</b> (Mennekes)</span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Type 2</b> (mennekes)</span></div>"
|
||||
},
|
||||
"hideInAnswer": true
|
||||
},
|
||||
|
@ -535,8 +495,7 @@
|
|||
"ifnot": "socket:type2_combo=",
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Type 2 CCS</b> (mennekes)</span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Type 2 CCS</b> (mennekes)</span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Typ 2 CCS</b> (Mennekes)</span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Type 2 CCS</b> (mennekes)</span></div>"
|
||||
},
|
||||
"hideInAnswer": {
|
||||
"or": [
|
||||
|
@ -574,8 +533,7 @@
|
|||
},
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Type 2 CCS</b> (mennekes)</span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Type 2 CCS</b> (mennekes)</span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Typ 2 CCS</b> (Mennekes)</span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Type 2 CCS</b> (mennekes)</span></div>"
|
||||
},
|
||||
"hideInAnswer": true
|
||||
},
|
||||
|
@ -584,8 +542,7 @@
|
|||
"ifnot": "socket:type2_cable=",
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Type 2 with cable</b> (mennekes)</span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Type 2 met kabel</b> (J1772)</span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Typ 2 mit Kabel</b> (Mennekes)</span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Type 2 met kabel</b> (J1772)</span></div>"
|
||||
},
|
||||
"hideInAnswer": {
|
||||
"or": [
|
||||
|
@ -623,8 +580,7 @@
|
|||
},
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Type 2 with cable</b> (mennekes)</span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Type 2 met kabel</b> (J1772)</span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Typ 2 mit Kabel</b> (Mennekes)</span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Type 2 met kabel</b> (J1772)</span></div>"
|
||||
},
|
||||
"hideInAnswer": true
|
||||
},
|
||||
|
@ -633,8 +589,7 @@
|
|||
"ifnot": "socket:tesla_supercharger_ccs=",
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (a branded type2_css)</span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (Typ 2 CSS)</span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</span></div>"
|
||||
},
|
||||
"hideInAnswer": {
|
||||
"or": [
|
||||
|
@ -672,8 +627,7 @@
|
|||
},
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (a branded type2_css)</span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (Typ 2 CSS)</span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</span></div>"
|
||||
},
|
||||
"hideInAnswer": true
|
||||
},
|
||||
|
@ -786,8 +740,7 @@
|
|||
"ifnot": "socket:USB-A=",
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> to charge phones and small electronics</span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> om GSMs en kleine electronica op te laden</span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> zum Laden von Smartphones oder Elektrokleingeräten</span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> om GSMs en kleine electronica op te laden</span></div>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -799,8 +752,7 @@
|
|||
},
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> to charge phones and small electronics</span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> om GSMs en kleine electronica op te laden</span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> zum Laden von Smartphones und Elektrokleingeräten</span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> om GSMs en kleine electronica op te laden</span></div>"
|
||||
},
|
||||
"hideInAnswer": true
|
||||
},
|
||||
|
@ -852,8 +804,7 @@
|
|||
"ifnot": "socket:bosch_5pin=",
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect with 5 pins</b> and cable</span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect met 5 pinnen</b> aan een kabel</span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect mit 5 Pins</b> und Kabel</span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect met 5 pinnen</b> aan een kabel</span></div>"
|
||||
},
|
||||
"hideInAnswer": {
|
||||
"or": [
|
||||
|
@ -887,8 +838,7 @@
|
|||
},
|
||||
"then": {
|
||||
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect with 5 pins</b> and cable</span></div>",
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect met 5 pinnen</b> aan een kabel</span></div>",
|
||||
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect mit 5 Pins</b> und Kabel</span></div>"
|
||||
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect met 5 pinnen</b> aan een kabel</span></div>"
|
||||
},
|
||||
"hideInAnswer": true
|
||||
}
|
||||
|
@ -1239,21 +1189,14 @@
|
|||
},
|
||||
"question": {
|
||||
"en": "When is this charging station opened?",
|
||||
"nl": "Wanneer is dit oplaadpunt beschikbaar??",
|
||||
"de": "Wann ist diese Ladestation geöffnet?",
|
||||
"it": "Quali sono gli orari di apertura di questa stazione di ricarica?",
|
||||
"ja": "この充電ステーションはいつオープンしますか?",
|
||||
"nb_NO": "Når åpnet denne ladestasjonen?",
|
||||
"ru": "В какое время работает эта зарядная станция?",
|
||||
"zh_Hant": "何時是充電站開放使用的時間?"
|
||||
"nl": "Wanneer is dit oplaadpunt beschikbaar??"
|
||||
},
|
||||
"mappings": [
|
||||
{
|
||||
"if": "opening_hours=24/7",
|
||||
"then": {
|
||||
"en": "24/7 opened (including holidays)",
|
||||
"nl": "24/7 open - ook tijdens vakanties",
|
||||
"de": "durchgehend geöffnet (auch an Feiertagen)"
|
||||
"nl": "24/7 open - ook tijdens vakanties"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -1362,8 +1305,7 @@
|
|||
"ifnot": "payment:app=no",
|
||||
"then": {
|
||||
"en": "Payment is done using a dedicated app",
|
||||
"nl": "Betalen via een app van het netwerk",
|
||||
"de": "Bezahlung mit einer speziellen App"
|
||||
"nl": "Betalen via een app van het netwerk"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -1371,8 +1313,7 @@
|
|||
"ifnot": "payment:membership_card=no",
|
||||
"then": {
|
||||
"en": "Payment is done using a membership card",
|
||||
"nl": "Betalen via een lidkaart van het netwerk",
|
||||
"de": "Bezahlung mit einer Mitgliedskarte"
|
||||
"nl": "Betalen via een lidkaart van het netwerk"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -1383,8 +1324,7 @@
|
|||
"#": "In some cases, charging is free but one has to be authenticated. We only ask for authentication if fee is no (or unset). By default one sees the questions for either the payment options or the authentication options, but normally not both",
|
||||
"question": {
|
||||
"en": "What kind of authentication is available at the charging station?",
|
||||
"nl": "Hoe kan men zich aanmelden aan dit oplaadstation?",
|
||||
"de": "Welche Authentifizierung ist an der Ladestation möglich?"
|
||||
"nl": "Hoe kan men zich aanmelden aan dit oplaadstation?"
|
||||
},
|
||||
"multiAnswer": true,
|
||||
"mappings": [
|
||||
|
@ -1393,8 +1333,7 @@
|
|||
"ifnot": "authentication:membership_card=no",
|
||||
"then": {
|
||||
"en": "Authentication by a membership card",
|
||||
"nl": "Aanmelden met een lidkaart is mogelijk",
|
||||
"de": "Authentifizierung durch eine Mitgliedskarte"
|
||||
"nl": "Aanmelden met een lidkaart is mogelijk"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -1402,8 +1341,7 @@
|
|||
"ifnot": "authentication:app=no",
|
||||
"then": {
|
||||
"en": "Authentication by an app",
|
||||
"nl": "Aanmelden via een applicatie is mogelijk",
|
||||
"de": "Authentifizierung durch eine App"
|
||||
"nl": "Aanmelden via een applicatie is mogelijk"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -1411,17 +1349,15 @@
|
|||
"ifnot": "authentication:phone_call=no",
|
||||
"then": {
|
||||
"en": "Authentication via phone call is available",
|
||||
"nl": "Aanmelden door te bellen naar een telefoonnummer is mogelijk",
|
||||
"de": "Authentifizierung per Anruf ist möglich"
|
||||
"nl": "Aanmelden door te bellen naar een telefoonnummer is mogelijk"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "authentication:short_message=yes",
|
||||
"ifnot": "authentication:short_message=no",
|
||||
"then": {
|
||||
"en": "Authentication via phone call is available",
|
||||
"nl": "Aanmelden via SMS is mogelijk",
|
||||
"de": "Authentifizierung per Anruf ist möglich"
|
||||
"en": "Authentication via SMS is available",
|
||||
"nl": "Aanmelden via SMS is mogelijk"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -1429,8 +1365,7 @@
|
|||
"ifnot": "authentication:nfc=no",
|
||||
"then": {
|
||||
"en": "Authentication via NFC is available",
|
||||
"nl": "Aanmelden via NFC is mogelijk",
|
||||
"de": "Authentifizierung über NFC ist möglich"
|
||||
"nl": "Aanmelden via NFC is mogelijk"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -1438,8 +1373,7 @@
|
|||
"ifnot": "authentication:money_card=no",
|
||||
"then": {
|
||||
"en": "Authentication via Money Card is available",
|
||||
"nl": "Aanmelden met Money Card is mogelijk",
|
||||
"de": "Authentifizierung über Geldkarte ist möglich"
|
||||
"nl": "Aanmelden met Money Card is mogelijk"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -1447,8 +1381,7 @@
|
|||
"ifnot": "authentication:debit_card=no",
|
||||
"then": {
|
||||
"en": "Authentication via debit card is available",
|
||||
"nl": "Aanmelden met een betaalkaart is mogelijk",
|
||||
"de": "Authentifizierung per Debitkarte ist möglich"
|
||||
"nl": "Aanmelden met een betaalkaart is mogelijk"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -1456,8 +1389,7 @@
|
|||
"ifnot": "authentication:none=no",
|
||||
"then": {
|
||||
"en": "Charging here is (also) possible without authentication",
|
||||
"nl": "Hier opladen is (ook) mogelijk zonder aan te melden",
|
||||
"de": "Das Aufladen ist hier (auch) ohne Authentifizierung möglich"
|
||||
"nl": "Hier opladen is (ook) mogelijk zonder aan te melden"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
@ -1472,13 +1404,11 @@
|
|||
"id": "Auth phone",
|
||||
"render": {
|
||||
"en": "Authenticate by calling or SMS'ing to <a href='tel:{authentication:phone_call:number}'>{authentication:phone_call:number}</a>",
|
||||
"nl": "Aanmelden door te bellen of te SMS'en naar <a href='tel:{authentication:phone_call:number}'>{authentication:phone_call:number}</a>",
|
||||
"de": "Authentifizierung durch Anruf oder SMS an <a href='tel:{authentication:phone_call:number}'>{authentication:phone_call:number}</a>"
|
||||
"nl": "Aanmelden door te bellen of te SMS'en naar <a href='tel:{authentication:phone_call:number}'>{authentication:phone_call:number}</a>"
|
||||
},
|
||||
"question": {
|
||||
"en": "What's the phone number for authentication call or SMS?",
|
||||
"nl": "Wat is het telefoonnummer dat men moet bellen of SMS'en om zich aan te melden?",
|
||||
"de": "Wie lautet die Telefonnummer für den Authentifizierungsanruf oder die SMS?"
|
||||
"nl": "Wat is het telefoonnummer dat men moet bellen of SMS'en om zich aan te melden?"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "authentication:phone_call:number",
|
||||
|
@ -1495,24 +1425,21 @@
|
|||
"id": "maxstay",
|
||||
"question": {
|
||||
"en": "What is the maximum amount of time one is allowed to stay here?",
|
||||
"nl": "Hoelang mag een voertuig hier blijven staan?",
|
||||
"de": "Was ist die Höchstdauer des Aufenthalts hier?"
|
||||
"nl": "Hoelang mag een voertuig hier blijven staan?"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "maxstay"
|
||||
},
|
||||
"render": {
|
||||
"en": "One can stay at most <b>{canonical(maxstay)}</b>",
|
||||
"nl": "De maximale parkeertijd hier is <b>{canonical(maxstay)}</b>",
|
||||
"de": "Die maximale Parkzeit beträgt <b>{canonical(maxstay)}</b>"
|
||||
"nl": "De maximale parkeertijd hier is <b>{canonical(maxstay)}</b>"
|
||||
},
|
||||
"mappings": [
|
||||
{
|
||||
"if": "maxstay=unlimited",
|
||||
"then": {
|
||||
"en": "No timelimit on leaving your vehicle here",
|
||||
"nl": "Geen maximum parkeertijd",
|
||||
"de": "Keine Höchstparkdauer"
|
||||
"nl": "Geen maximum parkeertijd"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
@ -1529,22 +1456,11 @@
|
|||
"id": "Network",
|
||||
"render": {
|
||||
"en": "Part of the network <b>{network}</b>",
|
||||
"nl": "Maakt deel uit van het <b>{network}</b>-netwerk",
|
||||
"de": "Teil des Netzwerks <b>{network}</b>",
|
||||
"it": "{network}",
|
||||
"ja": "{network}",
|
||||
"nb_NO": "{network}",
|
||||
"ru": "{network}",
|
||||
"zh_Hant": "{network}"
|
||||
"nl": "Maakt deel uit van het <b>{network}</b>-netwerk"
|
||||
},
|
||||
"question": {
|
||||
"en": "Is this charging station part of a network?",
|
||||
"nl": "Is dit oplaadpunt deel van een groter netwerk?",
|
||||
"de": "Ist diese Ladestation Teil eines Netzwerks?",
|
||||
"it": "A quale rete appartiene questa stazione di ricarica?",
|
||||
"ja": "この充電ステーションの運営チェーンはどこですか?",
|
||||
"ru": "К какой сети относится эта станция?",
|
||||
"zh_Hant": "充電站所屬的網路是?"
|
||||
"nl": "Is dit oplaadpunt deel van een groter netwerk?"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "network"
|
||||
|
@ -1554,16 +1470,14 @@
|
|||
"if": "no:network=yes",
|
||||
"then": {
|
||||
"en": "Not part of a bigger network",
|
||||
"nl": "Maakt geen deel uit van een groter netwerk",
|
||||
"de": "Nicht Teil eines größeren Netzwerks"
|
||||
"nl": "Maakt geen deel uit van een groter netwerk"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "network=none",
|
||||
"then": {
|
||||
"en": "Not part of a bigger network",
|
||||
"nl": "Maakt geen deel uit van een groter netwerk",
|
||||
"de": "Nicht Teil eines größeren Netzwerks"
|
||||
"nl": "Maakt geen deel uit van een groter netwerk"
|
||||
},
|
||||
"hideInAnswer": true
|
||||
},
|
||||
|
@ -1585,13 +1499,11 @@
|
|||
"id": "Operator",
|
||||
"question": {
|
||||
"en": "Who is the operator of this charging station?",
|
||||
"nl": "Wie beheert dit oplaadpunt?",
|
||||
"de": "Wer ist der Betreiber dieser Ladestation?"
|
||||
"nl": "Wie beheert dit oplaadpunt?"
|
||||
},
|
||||
"render": {
|
||||
"en": "This charging station is operated by {operator}",
|
||||
"nl": "Wordt beheerd door {operator}",
|
||||
"de": "Diese Ladestation wird betrieben von {operator}"
|
||||
"nl": "Wordt beheerd door {operator}"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "operator"
|
||||
|
@ -1605,12 +1517,8 @@
|
|||
},
|
||||
"then": {
|
||||
"en": "Actually, {operator} is the network",
|
||||
"nl": "Eigenlijk is {operator} het netwerk waarvan het deel uitmaakt",
|
||||
"de": "Eigentlich ist {operator} das Netzwerk"
|
||||
"nl": "Eigenlijk is {operator} het netwerk waarvan het deel uitmaakt"
|
||||
},
|
||||
"addExtraTags": [
|
||||
"operator="
|
||||
],
|
||||
"hideInAnswer": "operator="
|
||||
}
|
||||
]
|
||||
|
@ -1619,13 +1527,11 @@
|
|||
"id": "phone",
|
||||
"question": {
|
||||
"en": "What number can one call if there is a problem with this charging station?",
|
||||
"nl": "Wat is het telefoonnummer van de beheerder van dit oplaadpunt?",
|
||||
"de": "Welche Nummer kann man anrufen, wenn es ein Problem mit dieser Ladestation gibt?"
|
||||
"nl": "Wat is het telefoonnummer van de beheerder van dit oplaadpunt?"
|
||||
},
|
||||
"render": {
|
||||
"en": "In case of problems, call <a href='tel:{phone}'>{phone}</a>",
|
||||
"nl": "Bij problemen, bel naar <a href='tel:{phone}'>{phone}</a>",
|
||||
"de": "Bei Problemen, anrufen unter <a href='tel:{phone}'>{phone}</a>"
|
||||
"nl": "Bij problemen, bel naar <a href='tel:{phone}'>{phone}</a>"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "phone",
|
||||
|
@ -1636,13 +1542,11 @@
|
|||
"id": "email",
|
||||
"question": {
|
||||
"en": "What is the email address of the operator?",
|
||||
"nl": "Wat is het email-adres van de operator?",
|
||||
"de": "Wie ist die Email-Adresse des Betreibers?"
|
||||
"nl": "Wat is het email-adres van de operator?"
|
||||
},
|
||||
"render": {
|
||||
"en": "In case of problems, send an email to <a href='mailto:{email}'>{email}</a>",
|
||||
"nl": "Bij problemen, email naar <a href='mailto:{email}'>{email}</a>",
|
||||
"de": "Bei Problemen senden Sie eine E-Mail an <a href='mailto:{email}'>{email}</a>"
|
||||
"nl": "Bij problemen, email naar <a href='mailto:{email}'>{email}</a>"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "email",
|
||||
|
@ -1652,14 +1556,12 @@
|
|||
{
|
||||
"id": "website",
|
||||
"question": {
|
||||
"en": "What is the website of the operator?",
|
||||
"nl": "Wat is de website waar men meer info kan vinden over dit oplaadpunt?",
|
||||
"de": "Wie ist die Webseite des Betreibers?"
|
||||
"en": "What is the website where one can find more information about this charging station?",
|
||||
"nl": "Wat is de website waar men meer info kan vinden over dit oplaadpunt?"
|
||||
},
|
||||
"render": {
|
||||
"en": "More info on <a href='{website}'>{website}</a>",
|
||||
"nl": "Meer informatie op <a href='{website}'>{website}</a>",
|
||||
"de": "Weitere Informationen auf <a href='{website}'>{website}</a>"
|
||||
"nl": "Meer informatie op <a href='{website}'>{website}</a>"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "website",
|
||||
|
@ -1671,13 +1573,11 @@
|
|||
"id": "ref",
|
||||
"question": {
|
||||
"en": "What is the reference number of this charging station?",
|
||||
"nl": "Wat is het referentienummer van dit oplaadstation?",
|
||||
"de": "Wie lautet die Kennung dieser Ladestation?"
|
||||
"nl": "Wat is het referentienummer van dit oplaadstation?"
|
||||
},
|
||||
"render": {
|
||||
"en": "Reference number is <b>{ref}</b>",
|
||||
"nl": "Het referentienummer van dit oplaadpunt is <b>{ref}</b>",
|
||||
"de": "Die Kennziffer ist <b>{ref}</b>"
|
||||
"nl": "Het referentienummer van dit oplaadpunt is <b>{ref}</b>"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "ref"
|
||||
|
@ -1689,8 +1589,7 @@
|
|||
"id": "Operational status",
|
||||
"question": {
|
||||
"en": "Is this charging point in use?",
|
||||
"nl": "Is dit oplaadpunt operationeel?",
|
||||
"de": "Ist dieser Ladepunkt in Betrieb?"
|
||||
"nl": "Is dit oplaadpunt operationeel?"
|
||||
},
|
||||
"mappings": [
|
||||
{
|
||||
|
@ -1705,8 +1604,7 @@
|
|||
},
|
||||
"then": {
|
||||
"en": "This charging station works",
|
||||
"nl": "Dit oplaadpunt werkt",
|
||||
"de": "Diese Ladestation funktioniert"
|
||||
"nl": "Dit oplaadpunt werkt"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -1721,8 +1619,7 @@
|
|||
},
|
||||
"then": {
|
||||
"en": "This charging station is broken",
|
||||
"nl": "Dit oplaadpunt is kapot",
|
||||
"de": "Diese Ladestation ist kaputt"
|
||||
"nl": "Dit oplaadpunt is kapot"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -1737,8 +1634,7 @@
|
|||
},
|
||||
"then": {
|
||||
"en": "A charging station is planned here",
|
||||
"nl": "Hier zal binnenkort een oplaadpunt gebouwd worden",
|
||||
"de": "Hier ist eine Ladestation geplant"
|
||||
"nl": "Hier zal binnenkort een oplaadpunt gebouwd worden"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -1753,8 +1649,7 @@
|
|||
},
|
||||
"then": {
|
||||
"en": "A charging station is constructed here",
|
||||
"nl": "Hier wordt op dit moment een oplaadpunt gebouwd",
|
||||
"de": "Hier wird eine Ladestation gebaut"
|
||||
"nl": "Hier wordt op dit moment een oplaadpunt gebouwd"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -1769,8 +1664,7 @@
|
|||
},
|
||||
"then": {
|
||||
"en": "This charging station has beed permanently disabled and is not in use anymore but is still visible",
|
||||
"nl": "Dit oplaadpunt is niet meer in gebruik maar is wel nog aanwezig",
|
||||
"de": "Diese Ladestation wurde dauerhaft deaktiviert und wird nicht mehr benutzt, ist aber noch sichtbar"
|
||||
"nl": "Dit oplaadpunt is niet meer in gebruik maar is wel nog aanwezig"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -1779,24 +1673,21 @@
|
|||
"id": "Parking:fee",
|
||||
"question": {
|
||||
"en": "Does one have to pay a parking fee while charging?",
|
||||
"nl": "Moet men parkeergeld betalen tijdens het opladen?",
|
||||
"de": "Muss man beim Laden eine Parkgebühr bezahlen?"
|
||||
"nl": "Moet men parkeergeld betalen tijdens het opladen?"
|
||||
},
|
||||
"mappings": [
|
||||
{
|
||||
"if": "parking:fee=no",
|
||||
"then": {
|
||||
"en": "No additional parking cost while charging",
|
||||
"nl": "Geen extra parkeerkost tijdens het opladen",
|
||||
"de": "Keine zusätzlichen Parkgebühren beim Laden"
|
||||
"nl": "Geen extra parkeerkost tijdens het opladen"
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": "parking:fee=yes",
|
||||
"then": {
|
||||
"en": "An additional parking fee should be paid while charging",
|
||||
"nl": "Tijdens het opladen moet er parkeergeld betaald worden",
|
||||
"de": "Beim Laden ist eine zusätzliche Parkgebühr zu entrichten"
|
||||
"nl": "Tijdens het opladen moet er parkeergeld betaald worden"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
@ -1883,10 +1774,8 @@
|
|||
"socket:typee=1"
|
||||
],
|
||||
"title": {
|
||||
"en": "Charging station",
|
||||
"nl": "gewone stekker <img src='./assets/layers/charging_station/TypeE.svg' style='width: 2rem; height: 2rem; float: left; background: white; border-radius: 1rem; margin-right: 0.5rem'/> (bedoeld om electrische fietsen op te laden)",
|
||||
"de": "Ladestation",
|
||||
"ru": "Зарядная станция"
|
||||
"en": "electrical outlet to charge e-bikes",
|
||||
"nl": "laadpunt met gewone stekker(s) <img src='./assets/layers/charging_station/TypeE.svg' style='width: 2rem; height: 2rem; float: left; background: white; border-radius: 1rem; margin-right: 0.5rem'/> (bedoeld om electrische fietsen op te laden)"
|
||||
},
|
||||
"preciseInput": {
|
||||
"preferredBackground": "map"
|
||||
|
@ -1941,23 +1830,20 @@
|
|||
{
|
||||
"question": {
|
||||
"en": "All vehicle types",
|
||||
"nl": "Alle voertuigen",
|
||||
"de": "Alle Fahrzeugtypen"
|
||||
"nl": "Alle voertuigen"
|
||||
}
|
||||
},
|
||||
{
|
||||
"question": {
|
||||
"en": "Charging station for bicycles",
|
||||
"nl": "Oplaadpunten voor fietsen",
|
||||
"de": "Ladestation für Fahrräder"
|
||||
"nl": "Oplaadpunten voor fietsen"
|
||||
},
|
||||
"osmTags": "bicycle=yes"
|
||||
},
|
||||
{
|
||||
"question": {
|
||||
"en": "Charging station for cars",
|
||||
"nl": "Oplaadpunten voor auto's",
|
||||
"de": "Ladestation für Autos"
|
||||
"nl": "Oplaadpunten voor auto's"
|
||||
},
|
||||
"osmTags": {
|
||||
"or": [
|
||||
|
@ -1974,8 +1860,7 @@
|
|||
{
|
||||
"question": {
|
||||
"en": "Only working charging stations",
|
||||
"nl": "Enkel werkende oplaadpunten",
|
||||
"de": "Nur funktionierende Ladestationen"
|
||||
"nl": "Enkel werkende oplaadpunten"
|
||||
},
|
||||
"osmTags": {
|
||||
"and": [
|
||||
|
@ -1992,8 +1877,7 @@
|
|||
{
|
||||
"question": {
|
||||
"en": "All connectors",
|
||||
"nl": "Alle types",
|
||||
"de": "Alle Anschlüsse"
|
||||
"nl": "Alle types"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -2013,8 +1897,7 @@
|
|||
{
|
||||
"question": {
|
||||
"en": "Has a <div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div> connector",
|
||||
"nl": "Heeft een <div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div>",
|
||||
"de": "Hat einen <div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div> Stecker"
|
||||
"nl": "Heeft een <div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div>"
|
||||
},
|
||||
"osmTags": "socket:chademo~*"
|
||||
},
|
||||
|
@ -2042,8 +1925,7 @@
|
|||
{
|
||||
"question": {
|
||||
"en": "Has a <div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> connector",
|
||||
"nl": "Heeft een <div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>",
|
||||
"de": "Hat einen <div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> Stecker"
|
||||
"nl": "Heeft een <div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>"
|
||||
},
|
||||
"osmTags": "socket:tesla_supercharger~*"
|
||||
},
|
||||
|
@ -2131,15 +2013,11 @@
|
|||
],
|
||||
"human": {
|
||||
"en": " minutes",
|
||||
"nl": " minuten",
|
||||
"de": " Minuten",
|
||||
"ru": " минут"
|
||||
"nl": " minuten"
|
||||
},
|
||||
"humanSingular": {
|
||||
"en": " minute",
|
||||
"nl": " minuut",
|
||||
"de": " Minute",
|
||||
"ru": " минута"
|
||||
"nl": " minuut"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -2155,15 +2033,11 @@
|
|||
],
|
||||
"human": {
|
||||
"en": " hours",
|
||||
"nl": " uren",
|
||||
"de": " Stunden",
|
||||
"ru": " часов"
|
||||
"nl": " uren"
|
||||
},
|
||||
"humanSingular": {
|
||||
"en": " hour",
|
||||
"nl": " uur",
|
||||
"de": " Stunde",
|
||||
"ru": " час"
|
||||
"nl": " uur"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -2176,15 +2050,11 @@
|
|||
],
|
||||
"human": {
|
||||
"en": " days",
|
||||
"nl": " day",
|
||||
"de": " Tage",
|
||||
"ru": " дней"
|
||||
"nl": " day"
|
||||
},
|
||||
"humanSingular": {
|
||||
"en": " day",
|
||||
"nl": " dag",
|
||||
"de": " Tag",
|
||||
"ru": " день"
|
||||
"nl": " dag"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -2220,9 +2090,7 @@
|
|||
],
|
||||
"human": {
|
||||
"en": "Volts",
|
||||
"nl": "volt",
|
||||
"de": "Volt",
|
||||
"ru": "Вольт"
|
||||
"nl": "volt"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
@ -2291,9 +2159,7 @@
|
|||
],
|
||||
"human": {
|
||||
"en": "kilowatt",
|
||||
"nl": "kilowatt",
|
||||
"de": "Kilowatt",
|
||||
"ru": "киловатт"
|
||||
"nl": "kilowatt"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -2303,9 +2169,7 @@
|
|||
],
|
||||
"human": {
|
||||
"en": "megawatt",
|
||||
"nl": "megawatt",
|
||||
"de": "Megawatt",
|
||||
"ru": "мегаватт"
|
||||
"nl": "megawatt"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
|
|
@ -83,7 +83,6 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
"description": {},
|
||||
"tagRenderings": [
|
||||
{
|
||||
"question": {
|
||||
|
|
85
scripts/slice.ts
Normal file
85
scripts/slice.ts
Normal file
|
@ -0,0 +1,85 @@
|
|||
import * as fs from "fs";
|
||||
import TiledFeatureSource from "../Logic/FeatureSource/TiledFeatureSource/TiledFeatureSource";
|
||||
import StaticFeatureSource from "../Logic/FeatureSource/Sources/StaticFeatureSource";
|
||||
import * as readline from "readline";
|
||||
import ScriptUtils from "./ScriptUtils";
|
||||
|
||||
async function main(args: string[]) {
|
||||
|
||||
console.log("GeoJSON slicer")
|
||||
if (args.length < 3) {
|
||||
console.log("USAGE: <input-file.line-delimited-geojson> <target-zoom-level> <output-directory>")
|
||||
return
|
||||
}
|
||||
|
||||
const inputFile = args[0]
|
||||
const zoomlevel = Number(args[1])
|
||||
const outputDirectory = args[2]
|
||||
|
||||
if (!fs.existsSync(outputDirectory)) {
|
||||
fs.mkdirSync(outputDirectory)
|
||||
console.log("Directory created")
|
||||
}
|
||||
console.log("Using directory ", outputDirectory)
|
||||
|
||||
|
||||
const fileStream = fs.createReadStream(inputFile);
|
||||
|
||||
const rl = readline.createInterface({
|
||||
input: fileStream,
|
||||
crlfDelay: Infinity
|
||||
});
|
||||
// Note: we use the crlfDelay option to recognize all instances of CR LF
|
||||
// ('\r\n') in input.txt as a single line break.
|
||||
|
||||
const allFeatures = []
|
||||
// @ts-ignore
|
||||
for await (const line of rl) {
|
||||
// Each line in input.txt will be successively available here as `line`.
|
||||
try{
|
||||
allFeatures.push(JSON.parse(line))
|
||||
}catch (e) {
|
||||
console.error("Could not parse", line)
|
||||
break
|
||||
}
|
||||
if(allFeatures.length % 10000 === 0){
|
||||
ScriptUtils.erasableLog("Loaded ", allFeatures.length, "features up till now")
|
||||
}
|
||||
}
|
||||
|
||||
console.log("Loaded all", allFeatures.length, "points")
|
||||
|
||||
const keysToRemove = ["ID","STRAATNMID","NISCODE","GEMEENTE","POSTCODE","HERKOMST","APPTNR"]
|
||||
for (const f of allFeatures) {
|
||||
for (const keyToRm of keysToRemove) {
|
||||
delete f.properties[keyToRm]
|
||||
}
|
||||
}
|
||||
|
||||
//const knownKeys = Utils.Dedup([].concat(...allFeatures.map(f => Object.keys(f.properties))))
|
||||
//console.log("Kept keys: ", knownKeys)
|
||||
|
||||
TiledFeatureSource.createHierarchy(
|
||||
new StaticFeatureSource(allFeatures, false),
|
||||
{
|
||||
minZoomLevel: zoomlevel,
|
||||
maxZoomLevel: zoomlevel,
|
||||
maxFeatureCount: Number.MAX_VALUE,
|
||||
registerTile: tile => {
|
||||
const path = `${outputDirectory}/tile_${tile.z}_${tile.x}_${tile.y}.geojson`
|
||||
fs.writeFileSync(path, JSON.stringify({
|
||||
"type": "FeatureCollection",
|
||||
"features": tile.features.data.map(ff => ff.feature)
|
||||
}, null, " "))
|
||||
console.log("Written ", path, "which has ", tile.features.data.length, "features")
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
let args = [...process.argv]
|
||||
args.splice(0, 2)
|
||||
main(args).then(_ => {
|
||||
console.log("All done!")
|
||||
});
|
Loading…
Reference in a new issue